1 #include <darwintest.h> 2 #include <darwintest_utils.h> 3 4 #define STATIC_IF_TEST 5 #define MARK_AS_FIXUP_TEXT 6 7 #include "../osfmk/kern/static_if_common.c" 8 9 T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true), T_META_TAG_VM_PREFERRED); 10 11 T_DECL(static_if_boot_arg, "Check the static if boot-arg parser") 12 { 13 uint64_t v; 14 15 v = static_if_boot_arg_uint64("key=2", "key", 0); 16 T_EXPECT_EQ(v, 2ull, "parsing key correctly"); 17 18 v = static_if_boot_arg_uint64("key=2 key=1", "key", 0); 19 T_EXPECT_EQ(v, 1ull, "parsing overrides"); 20 21 v = static_if_boot_arg_uint64("-key", "key", 0); 22 T_EXPECT_EQ(v, 1ull, "parsing -key"); 23 24 v = static_if_boot_arg_uint64("key", "key", 0); 25 T_EXPECT_EQ(v, 1ull, "parsing arg-less key"); 26 27 v = static_if_boot_arg_uint64("key=2 k", "key", 0); 28 T_EXPECT_EQ(v, 2ull, "parsing ignoring prefixes at the end"); 29 30 v = static_if_boot_arg_uint64("key=0", "key", 1); 31 T_EXPECT_EQ(v, 0ull, "parsing key=0 correctly"); 32 /* this should be rejected but PE_parse_boot_argn accepts it */ 33 v = static_if_boot_arg_uint64("key=0b", "key", 1); 34 T_EXPECT_EQ(v, 0ull, "be bug to bug compatible with PE_parse_boot_argn"); 35 36 v = static_if_boot_arg_uint64("key=0x", "key", 1); 37 T_EXPECT_EQ(v, 0ull, "be bug to bug compatible with PE_parse_boot_argn"); 38 39 v = static_if_boot_arg_uint64("key=0b1010", "key", 1); 40 T_EXPECT_EQ(v, 10, "parsing binary correctly"); 41 42 v = static_if_boot_arg_uint64("key=-0b1010", "key", 1); 43 T_EXPECT_EQ(v, -10, "parsing binary correctly"); 44 45 v = static_if_boot_arg_uint64("key=012", "key", 1); 46 T_EXPECT_EQ(v, 10, "parsing fake octal correctly"); 47 48 v = static_if_boot_arg_uint64("key=-012", "key", 1); 49 T_EXPECT_EQ(v, -10, "parsing hex correctly"); 50 51 v = static_if_boot_arg_uint64("key=0xa", "key", 1); 52 T_EXPECT_EQ(v, 10, "parsing hex correctly"); 53 54 v = static_if_boot_arg_uint64("key=-0xa", "key", 1); 55 T_EXPECT_EQ(v, -10, "parsing hex correctly"); 56 57 v = static_if_boot_arg_uint64("key=0xA", "key", 1); 58 T_EXPECT_EQ(v, 10, "parsing hex correctly"); 59 60 v = static_if_boot_arg_uint64("key=-0xA", "key", 1); 61 T_EXPECT_EQ(v, -10, "parsing hex correctly"); 62 63 /* invalid values */ 64 v = static_if_boot_arg_uint64("key=09", "key", 1); 65 T_EXPECT_EQ(v, 1ull, "rejecting 09"); 66 67 v = static_if_boot_arg_uint64("key=8a9", "key", 1); 68 T_EXPECT_EQ(v, 1ull, "rejecting 8a9"); 69 70 v = static_if_boot_arg_uint64("key=a", "key", 1); 71 T_EXPECT_EQ(v, 1ull, "rejecting a"); 72 } 73