<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/111570>111570</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
libc++.dylib crash on MacOS when using LIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libc++
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hlewin
</td>
</tr>
</table>
<pre>
Hello!
I think I have run into this problem: https://github.com/llvm/llvm-project/issues/109782
The `libc++` generated by these settings crashes on load.
Source: llvm-19.1.0 release
```
> uname -a
Darwin BYO-MBP-hlewin 23.6.0 Darwin Kernel Version 23.6.0: Wed Jul 31 20:49:46 PDT 2024; root:xnu-10063.141.1.700.5~1/RELEASE_ARM64_T8103 arm64
```
```
cmake
-DCMAKE_INSTALL_PREFIX=$HOME/llvm-inst \
-DCMAKE_MACOSX_RPATH=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-G Ninja \
-DLLVM_ENABLE_PROJECTS=clang \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
-DLLVM_TARGETS_TO_BUILD=Native \
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
-DLIBUNWIND_ENABLE_SHARED=OFF \
-DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
-DLIBCXXABI_ENABLE_SHARED=OFF \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
<path to llvm 19.1.0>
```
```
> ninja runtimes # Compile runtimes
> lldb $HOME/load lib/libc++.dylib # try to load the resulting libc++
(lldb) target create "/Users/hlewin/load"
Current executable set to '/Users/hlewin/load' (arm64).
(lldb) settings set -- target.run-args "lib/libc++.dylib"
(lldb) run
Process 76725 launched: '/Users/hlewin/load' (arm64)
Process 76725 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x0000000000000000
error: memory read failed for 0x0
Target 0: (load) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
* frame #0: 0x0000000000000000
frame #1: 0x00000001001e3c74 libc++.1.0.dylib`std::__1::__stdinbuf<char>::imbue(std::__1::locale const&) [inlined] std::__1::codecvt<char, char, __mbstate_t>::encoding[abi:ne190100](this=<unavailable>) const at __locale:781:65 [opt]
frame #2: 0x00000001001e3c68 libc++.1.0.dylib`std::__1::__stdinbuf<char>::imbue(this=0x0000000100262a38, __loc=<unavailable>) at std_stream.h:86:29 [opt]
frame #3: 0x00000001001e36b4 libc++.1.0.dylib`std::__1::DoIOSInit::DoIOSInit() [inlined] std::__1::__stdinbuf<char>::__stdinbuf(this=0x0000000100262a38, __fp=0x00000001fc4a4318, __st=<unavailable>) at std_stream.h:74:3 [opt]
frame #4: 0x00000001001e365c libc++.1.0.dylib`std::__1::DoIOSInit::DoIOSInit() [inlined] std::__1::__stdinbuf<char>::__stdinbuf(this=0x0000000100262a38, __fp=0x00000001fc4a4318, __st=<unavailable>) at std_stream.h:73:105 [opt]
frame #5: 0x00000001001e365c libc++.1.0.dylib`std::__1::DoIOSInit::DoIOSInit(this=0x0000000100262f88) at iostream.cpp:131:57 [opt]
frame #6: 0x00000001001e4c0c libc++.1.0.dylib`_GLOBAL__I_000100 + 68
frame #7: 0x00000001942d6608 dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator()() const + 168
frame #8: 0x0000000194314d6c dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 340
frame #9: 0x0000000194308400 dyld`invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 496
frame #10: 0x00000001942b72fc dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const + 300
frame #11: 0x0000000194307394 dyld`dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 192
frame #12: 0x0000000194314880 dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 516
frame #13: 0x00000001942d253c dyld`dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 564
frame #14: 0x00000001942d8bc0 dyld`dyld4::JustInTimeLoader::runInitializers(dyld4::RuntimeState&) const + 36
frame #15: 0x00000001942d2984 dyld`dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&) const + 220
frame #16: 0x00000001942d6698 dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator()() const + 116
frame #17: 0x00000001942d2b78 dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 420
frame #18: 0x00000001942eed30 dyld`dyld4::APIs::dlopen_from(char const*, int, void*) + 1876
frame #19: 0x0000000100003ed8 load`main + 120
frame #20: 0x00000001942bb154 dyld`start + 2476
(lldb)
```
```
load.c
#include <dlfcn.h>
#include <stdio.h>
int
main(int argc, const char *argv[])
{
if (argc != 2) {
fprintf(stderr, "usage: %s dynamic-library\n", argv[0]);
return 1;
}
const char *lib = argv[1];
int failed = dlopen(lib, RTLD_LOCAL | RTLD_LAZY) == 0;
printf("dlopen %s: %s\n", lib, failed ? "failed" : "succeeded");
return failed;
}
```
Without using a static `libc++abi` the error seems to disappear.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWV9z4jj2_TTKiyqULRnbPOTB2GSaGRJSQKa7fy8u2RagaSHxk-R0Zx72s29JMgSCM53pnZ3arU2lQFi6V-ccXV39MdGabQSlN2A4BsPiirRmK9XNltOvTFxVsnm--UA5lwCFIChAkE2h2TLxBU7hljxRqFoBmTDSPtVwr2TF6Q7gDG6N2WuAM4BuAbrdMLNtq0EtdwDdcv50-LreK_kbrQ1At0zrlmqAbsNglKTI9-Y_V1sKQRxwVtUAje1_HMANFVQRQxtYPUOzpZpCTY1hYqNhrYjeUg2lgFySZnDqbClbVVML0QEIR4NwEEBFOSWanjYEcdD9-594AltBdhReE_-kIOorE3D8eX59N3649ppBhAfxIIBd5S9UCcrhr1RpJg-VtvOPtIE_txziECL7IBrZjxg-FCuIAhQBPIZKSgNw9k2012EQxHgQRuEgHCRBMBj-IwTodjGZTbLlpMwWd3FUrtIwwJCoXRz1M-h7WO_IFwp9GV4X-V32y6Sc3i9X2WxWPiwmt9NPABcARR_md5PDqDGhDYRgmHd23d_B_C7L58tP5eIhW30AuJjfv910_DidFeXq88ME4GJB-UdmtgWtpmIte4x-gvdM_EZOaq6L2ezXu3Jyn41nk_JhMf95kq-WABc1J2LzZsPF4_1qejdZOmrIBta3bwCPfYFUzJdb8ZWJBiB06WeVLX6arJblau4pAFzcE8OeaB_V2XScf_qUjafl43JSOvvH-4_T-2KyeFOe2XTs2xwgLz9ki4ntZ357e47n6P3QcpWtpvmbXfRZ_LHvV46t4Ww6XmSLz_3wAc73xGyhkW6OQT_HAJ68PyztbBNurFUrDNtR7RwjDHO52zNOj89f2nPeVPAkUiVpIGeVLR4zx6B55qzqXBn17DDahmZLoaK65TaDwJNUc4oRpbYPgEbQELWhBtaKEkMhQAig20dNlU1gPhF0CGyVM85bpagwkH6jdWtIxV2-sv0DlLxtnUCAUj-n0WhwgeOY8qyv6-sO10C14pqojbY8Ub8GR2An3lQr_LMHJWuqNUziBA0hJ62ot7Sxeev9YPs8aSP3e9ocOs6g2SpKGjsaIUA5_P-WthQCXNh-arkbkP2e08GOMHHtm7r-c-cIKkq0FK755FNejrOizPJ8slxaGLVsKMCFc0uaRlGtAS6Cb8ERmo2otbIZHSDsknLwLXj151tSpaSyDXZ0J9UzdJjXhHHawLVU1q5bqXxYBF6p1KsyOtC-HL7K_KdIYRG8T4wz2cKzlmEQhBTXSXQygezU7yIuDrSxQQRwVpbhoaBNw0TVrgHO6y1RNk24GrarWgpQemnDZU04hbUU2gAUWyHBcMwEZ4I2YFjASxMrQf1kDn2gHB6-y3JXaUMMLc2xaypq2TCxAcOxWwwyQcORZQeGBUCp3evYlQPnrSBPhHE7m60xGnlQkBhYlh4mwFmSWhTx0KKUe2OdXCqJ-pSM079SyQ73aScoRgSnXgcu67dYEWM1LbVRlOwGW4CzNAY488K_SQn3UIqrPxEchZzOl1PBzOufKH3PoL-tyEnNd2VZ788q13VEIhx2ldq8X7IkAjjDF4od5Yr65BrW_7Ny2fAJg8tZcxRs-G8UrJ_lOk07sEx2UOv93uJ0mXCY_OF8iC_xRnXwJt7yp9l8nM3Kclr65hCgMYzTHs_JuedRhJo4DlLYPPMGxAETT7Imxp5A1q2ofUEqWHFZf4FMuHaRF2EmSUOVL6-ZaDLRLFqRcW6FYYSz393Sn56YLPxWbGmzaJePfW52tQBFZeCLcm-PbFL5gOzC0mdMSy3s5Za-5obDqInrP8UN-_7vSL2dZ4Lw59-PFKWakHp7Qg6gtGBkI6Q2rNaOT_4dJ7_eZU2jcimeqDJUnaxMOXySzC7qaSvcSbuxx2W39Ft85V4yYag6Nuwss3NhcNS39o4uhAnSKAh-WJhb5larF1GW1FkBlB5IvG3StXUHt1P6lZT85TvuYX5KNBrFfZuM4CK8qwStjyHwXSI2pnO52xF7musZ3QM9u18ra9_wZCjeix73b5HCy3FK8Ch6N_q_fxjCEeojgnpmYpoGbxH5L5xow7A3_vBlekVDfBZ_f3329IAOdznngKJLQGlVBz2Afm61mYoV29FTaKoVPwgI9wo07BFolEbfEegVirE0Ru4e999BcxYjmVLkGeD8ooeXAbb7i1ckEOqdqHHfKjpKf4zFA2_14_4rUc2MiS9_esUM37di9sdrz3YAVcnfScRn836ZLxZ0RGmD-4I3e5hqX2q43FNRrpXc2QPtlqiz_Oymup_Z3Zx26qRJrzyj1_uwIMC0Sd1FEIgDe8T29r34Uc9qVIXDY7BrQ1QXZtGh_5Mj_x9del1-njdwl9n1-ZUUZqLmbUOhnQV8XQu7eZ701do9vDytdZ9WOlewtAFKmTCQqE3tzshuKJ3aAGVEbZ78a4LjvQFIxi8KsbW__tnUEKAQ4AIiR_i0jVNyr5gwa3-0p8rlZIBQq8mG-ouToYbNsyA7Vl9zViminsEwF-6WLYcdjKDDgV95V9S0SsDwrAIkJ_vxc1acVe7apHMbWrenplaP7qrHNvOBaMeTVRbNYjUrytk8z2YQJIef2f99dsztWaeAwZm_I3mAkHfmCB-InxDtejh2fmtV8r_cnbSzQLqta0ob9-y1Hp0Wnc2h5ihGb_h9ZGYrWwNbzcQGEqgNMaw-f_9CKgbiwN2ZuqsxqCndaWgkbJgm-z0lanDV3OBmhEfkit6ECUqjYBRH8dX2Jh5G6YimSV2jiCJEmiBM0zBKGpI0OBmiK3aDAhSFQZCGSZSgeIBHybpZo3WYIJISmoAooDvC-IDzp91Aqs2Ve3l0E4bhMAmuOKko1-6Nlr_b725yEQLD4krduFcYVbvRIAo400a_-DHMcHpzcV3s3idBKeAdqedL-HVLRafPuy7Ir1rFb_6FF2Ke1tMN-mcAAAD__2mc5jU">