zig/lib
Matthew Lugg 65922a2d43
std: make stack unwinding faster on macOS
https://github.com/ziglang/zig/issues/26027#issuecomment-3571227050
tracked some bad performance in `DebugAllocator` on macOS down to a
function in dyld which `std.debug.SelfInfo` was calling into. It turns
out `dladdr`'s symbol lookup logic is horrendously slow (looking at its
source code, it appears to be doing a *linear scan* over all symbols in
the image?!). However, we don't actually need the symbol, so we want to
try and avoid this logic.

Luckily, dyld has more precise APIs for what we need! Unluckily, Apple,
in their infinite wisdom, decided they should be deprecated in favour of
`dladdr`, despite the latter being several times slower (and by "several
times", I have measured a 50x slowdown on repeated calls to `dladdr`
compared to the other API). But luckily again, the deprecated APIs are
still exposed.

So, after a careful analysis of the situation (reading dyld code and
cursing Apple engineers), I think it makes sense to just use these
deprecated APIs for now. If they ever go away, we can write our own
cache for this data to bypass Apple's awfully slow code, but I suspect
these functions will stick around for the foreseeable future.

Uh, and if `_dyld_get_image_header_containing_address` goes away,
there's also `dyld_image_header_containing_address`, which is a
seemingly identical function, exported by dyld just the same, but with a
separate (functionally identical) implementation, and not documented in
the public header file. Apple work in mysterious ways, I guess.
2025-12-06 10:41:42 +00:00
..
build-web all: replace all @Type usages 2025-11-22 22:42:38 +00:00
c compiler-rt: move strlen from libzigc to here 2025-08-30 06:36:41 +02:00
compiler std: Remove a handful of things deprecated during the 0.15 release cycle 2025-11-27 20:17:04 +00:00
compiler_rt all: replace all @Type usages 2025-11-22 22:42:38 +00:00
docs std: Remove a handful of things deprecated during the 0.15 release cycle 2025-11-27 20:17:04 +00:00
include remove all IBM AIX and z/OS support 2025-10-29 14:25:51 +01:00
init fix: fix typo in comment by removing repeated 'business' word 2025-08-24 23:00:17 +02:00
libc Change github links to codeberg 2025-12-05 14:12:39 +01:00
libcxx libcxx: use compiler's _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION when set 2025-11-14 02:02:59 +01:00
libcxxabi remove all IBM AIX and z/OS support 2025-10-29 14:25:51 +01:00
libtsan remove all IBM AIX and z/OS support 2025-10-29 14:25:51 +01:00
libunwind remove all IBM AIX and z/OS support 2025-10-29 14:25:51 +01:00
std std: make stack unwinding faster on macOS 2025-12-06 10:41:42 +00:00
c.zig libc: use zig isnan and derivates for mingw 2025-08-27 03:58:32 +02:00
compiler_rt.zig compiler-rt: remove dead code 2025-11-12 16:00:16 +00:00
fuzzer.zig all: replace all @Type usages 2025-11-22 22:42:38 +00:00
ubsan_rt.zig Coff: implement threadlocal variables 2025-10-10 22:47:47 -07:00
zig.h zig.h: drop dependency on deleted compiler_rt functions 2025-11-12 16:00:16 +00:00