/* number of zone mapped pages used by all zones */
static long _Atomic zones_phys_page_mapped_count;
/* number of zone mapped pages used by all zones */
static long _Atomic zones_phys_page_mapped_count;
/*
* Turn ZSECURITY_OPTIONS_STRICT_IOKIT_FREE off on x86 so as not
* not break third party kexts that haven't yet been recompiled
/*
* Turn ZSECURITY_OPTIONS_STRICT_IOKIT_FREE off on x86 so as not
* not break third party kexts that haven't yet been recompiled
ZSECURITY_OPTIONS_SUBMAP_USER_DATA | \
ZSECURITY_OPTIONS_SEQUESTER_KEXT_KALLOC | \
ZSECURITY_OPTIONS_STRICT_IOKIT_FREE_DEFAULT | \
ZSECURITY_OPTIONS_SUBMAP_USER_DATA | \
ZSECURITY_OPTIONS_SEQUESTER_KEXT_KALLOC | \
ZSECURITY_OPTIONS_STRICT_IOKIT_FREE_DEFAULT | \
- numsaved = backtrace(zbt, MAX_ZTRACE_DEPTH, NULL);
+ numsaved = backtrace_frame(zbt, MAX_ZTRACE_DEPTH,
+ __builtin_frame_address(0), NULL);
btlog_add_entry(zone->zlog_btlog, (void *)addr,
ZOP_ALLOC, (void **)zbt, numsaved);
}
btlog_add_entry(zone->zlog_btlog, (void *)addr,
ZOP_ALLOC, (void **)zbt, numsaved);
}
if (sample_counter(&zone->zleak_capture, zleak_sample_factor)) {
/* Avoid backtracing twice if zone logging is on */
if (numsaved == 0) {
if (sample_counter(&zone->zleak_capture, zleak_sample_factor)) {
/* Avoid backtracing twice if zone logging is on */
if (numsaved == 0) {
- numsaved = backtrace(zbt, MAX_ZTRACE_DEPTH, NULL);
+ numsaved = backtrace_frame(zbt, MAX_ZTRACE_DEPTH,
+ __builtin_frame_address(1), NULL);
}
/* Sampling can fail if another sample is happening at the same time in a different zone. */
if (!zleak_log(zbt, addr, numsaved, zone_elem_size(zone))) {
}
/* Sampling can fail if another sample is happening at the same time in a different zone. */
if (!zleak_log(zbt, addr, numsaved, zone_elem_size(zone))) {
- numsaved = backtrace(zbt, MAX_ZTRACE_DEPTH, NULL);
+ numsaved = backtrace_frame(zbt, MAX_ZTRACE_DEPTH,
+ __builtin_frame_address(1), NULL);
- numsaved = backtrace(zbt, MAX_ZTRACE_DEPTH, NULL);
+ numsaved = backtrace_frame(zbt, MAX_ZTRACE_DEPTH,
+ __builtin_frame_address(1), NULL);
btlog_add_entry(zone->zlog_btlog, (void *)addr, ZOP_FREE,
(void **)zbt, numsaved);
} else {
btlog_add_entry(zone->zlog_btlog, (void *)addr, ZOP_FREE,
(void **)zbt, numsaved);
} else {