static void expect_frame(const char **bt, unsigned int bt_len, CSSymbolRef symbol, unsigned long addr, unsigned int bt_idx, unsigned int max_frames) { const char *name; unsigned int frame_idx = max_frames - bt_idx - 1; if (bt[frame_idx] == NULL) { T_LOG("frame %2u: skipping system frame", frame_idx); return; } if (CSIsNull(symbol)) { T_FAIL("invalid symbol for address %#lx at frame %d", addr, frame_idx); return; } if (frame_idx >= bt_len) { T_FAIL("unexpected frame '%s' (%#lx) at index %u", CSSymbolGetName(symbol), addr, frame_idx); return; } name = CSSymbolGetName(symbol); T_QUIET; T_ASSERT_NOTNULL(name, NULL); T_EXPECT_EQ_STR(name, bt[frame_idx], "frame %2u: saw '%s', expected '%s'", frame_idx, name, bt[frame_idx]); }
static void _sysctl_enable_typefilter(uint8_t* type_filter_bitmap) { int mib[] = { CTL_KERN, KERN_KDEBUG, KERN_KDSET_TYPEFILTER }; size_t needed = KDBG_TYPEFILTER_BITMAP_SIZE; if(sysctl(mib, 3, type_filter_bitmap, &needed, NULL, 0)) { T_FAIL("KERN_KDSET_TYPEFILTER sysctl failed"); } }
static void _sysctl_enable(int value) { int mib[] = { CTL_KERN, KERN_KDEBUG, KERN_KDENABLE, value }; if (sysctl(mib, 4, NULL, NULL, NULL, 0) < 0) { T_FAIL("KERN_KDENABLE sysctl failed"); } }
static void _sysctl_nowrap(bool is_nowrap) { int mib[] = { CTL_KERN, KERN_KDEBUG, is_nowrap ? KERN_KDEFLAGS : KERN_KDDFLAGS, KDBG_NOWRAP }; if (sysctl(mib, 4, NULL, NULL, NULL, 0)) { T_FAIL("KDBG_NOWRAP sysctl failed"); } }
static void _sysctl_setup() { int mib[] = { CTL_KERN, KERN_KDEBUG, KERN_KDSETUP }; if (sysctl(mib, 3, NULL, NULL, NULL, 0)) { T_FAIL("KERN_KDSETUP sysctl failed"); } }
static void _sysctl_setbuf(uint32_t capacity) { int mib[] = { CTL_KERN, KERN_KDEBUG, KERN_KDSETBUF, (int)capacity }; if (sysctl(mib, 4, NULL, NULL, NULL, 0)) { T_FAIL("KERN_KDSETBUF sysctl failed"); } }
static void _sysctl_reset() { int mib[] = { CTL_KERN, KERN_KDEBUG, KERN_KDREMOVE }; if(sysctl(mib, 3, NULL, NULL, NULL, 0)) { T_FAIL("KERN_KDREMOVE sysctl failed"); } }