<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/90041>90041</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            pthread_cancel results in SEGFAULT with libc++
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          nolange
      </td>
    </tr>
</table>

<pre>
    
libunwind / libc++ / clang : 18.1.2-1 from debian
libgcc : 12.2.0-14 from debian

The following program will reproduce the SEGFAULT:

``` c++
// compile with: clang++ -stdlib=libc++ test_cancel.cpp

#include <pthread.h>
#include <thread>
extern "C" int main()
{
    std::thread systhr([]() { std::this_thread::sleep_for(std::chrono::seconds(10000)); });

 std::this_thread::sleep_for(std::chrono::seconds(1));
 pthread_cancel(systhr.native_handle());

    systhr.join();
 return 0;
}
```

adding `-rtlib=compiler-rt` and/or `-unwindlib=libgcc` did not affect the issue,
removing `stdlib=libc++` fixes the problem.

I tried replicating the issue with a C program and
`LD_PRELOAD="libc++.so.1:libc++abi.so.1:libunwind.so.1:libgcc_s.so.1"` but did not manage to
reproduce

Runtime dependencies are:
```
 0x0000000000000001 (NEEDED)             Shared library: [libc++.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc++abi.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libunwind.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
```

Stacktrace:

```
Thread 2 "a.out" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7b7b6c0 (LWP 102805)]
0x0000000000000000 in ?? ()
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1  0x00007ffff7e6799c in unw_get_proc_info () from /lib/x86_64-linux-gnu/libunwind.so.1
#2  0x00007ffff7e6ce82 in _Unwind_GetLanguageSpecificData () from /lib/x86_64-linux-gnu/libunwind.so.1
#3  0x00007ffff7ea5cf0 in __gxx_personality_v0 () from /lib/x86_64-linux-gnu/libc++abi.so.1
#4 0x00007ffff7d78ab6 in _Unwind_ForcedUnwind_Phase2 (exc=exc@entry=0x7ffff7b7bd30, context=context@entry=0x7ffff7b7a550, frames_p=frames_p@entry=0x7ffff7b7a458) at ../../../src/libgcc/unwind.inc:183
#5  0x00007ffff7d791b0 in _Unwind_ForcedUnwind (exc=0x7ffff7b7bd30, stop=0x7ffff7c102c0 <unwind_stop>, stop_argument=<optimized out>) at ../../../src/libgcc/unwind.inc:218
#6 0x00007ffff7c10440 in __GI___pthread_unwind (buf=<optimized out>) at ./nptl/unwind.c:130
#7  0x00007ffff7c0673b in __do_cancel () at ../sysdeps/nptl/pthreadP.h:282
#8  sigcancel_handler (sig=32, si=0x7ffff7b7a7f0, ctx=<optimized out>) at ./nptl/pthread_cancel.c:65
#9 sigcancel_handler (sig=<optimized out>, si=0x7ffff7b7a7f0, ctx=<optimized out>) at ./nptl/pthread_cancel.c:32
#10 <signal handler called>
#11 0x00007ffff7c4e485 in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=0x7ffff7b7adb8, rem=0x7ffff7b7adb8) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:48
#12 0x00007ffff7c52d93 in __GI___nanosleep (req=<optimized out>, rem=<optimized out>) at ../sysdeps/unix/sysv/linux/nanosleep.c:25
#13 0x00007ffff7f4bbab in std::__1::this_thread::sleep_for(std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > const&) () from /lib/x86_64-linux-gnu/libc++.so.1
#14 0x000055555555595e in void std::__1::this_thread::sleep_for[abi:ne180100]<long long, std::__1::ratio<1l, 1l> >(std::__1::chrono::duration<long long, std::__1::ratio<1l, 1l> > const&) ()
#15 0x0000555555555709 in main::$_0::operator()() const ()
#16 0x00005555555556b5 in decltype (((std::declval<main::$_0>)())()) std::__1::__invoke[abi:ne180100]<main::$_0>(main::$_0&&) ()
#17 0x000055555555568d in _ZNSt3__116__thread_executeB8ne180100INS_10unique_ptrINS_15__thread_structENS_14default_deleteIS2_EEEEZ4mainE3$_0JETpTnmJEEEvRNS_5tupleIJT_T0_DpT1_EEENS_15__tuple_indicesIJXspT2_EEEE
 ()
#18 0x00005555555554d2 in void* std::__1::__thread_proxy[abi:ne180100]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, main::$_0> >(void*)
    ()
#19 0x00007ffff7c08134 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#20 0x00007ffff7c887dc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0WF1zo7jS_jXKjSouIQHGF75w_DGVqdS8U-Pse07tDSWkxtYOFqwQjnN-_SmJD2PHmd3UybpmCEit7n4eutUteF2rnQaYo-gBRas73th9aea6LLjewV1Wytc5IitEFoXKGv2itMSIbnChMoHoA6IP_lE4cYzYAgfJJJjQ-wDnpjxgCZnielCwE6IVohM6IfdB-FaqvT7vAedlUZQvSu9wZcqd4Qf8oooCG6hMKRsB2O4Bb9dfNovfnp4RW4zXo5i0_3DnZTdMN97b8lCpAvCLsnvnjve-Q3NfW1moDLHVCKKF2qaCawHFRFTVhSXKlBZFIwEjtqzs3gCXkz1i61vz7fQwCScLRmNE6RJRipW2-MCVRjRBdNatn3a-Y4xxbaUDyhatHly_1nZvnLh_e-06jKYPY0lVp71ZN1AXAFWal27ZICX2ptRlJwCi1LJGNAkIIcR5QmeIPWA0XbV3Y_yfZGmw0mntiOxIdwo81InmVh0h3XMtC-h4euuTo6qV_6Mc6Bx0G7CN0ZicV01XV2Ez1saldEGIYnJvbBsaXQCZe2NdjHEtEd2Uxsu0STKE0E4IJyKVxLq0mOc5COtDV9V1A4guWysGDuWxs3MjBJ2OXJ2g9ksrU2YFHCZjNx-xNQqky49CCW6drsGMD3XM8XLIJedzj_lplX7_sX76v8UKsRWi9Gx2UpeTALHFeYRnajTYgh0N7IRI6_aZUud01tgB_IFrvgNsyx5yl8ljGD8abdUBsIQKtAQtFNSYGzgn-OU7wuRELn8BRjT5tl6v1i5c8fi33XMD0m1ehptXl_ooerhGG60-X_PA2qcqH7P_qYoPTmf8uTpHkfG5DF_6ejOFt5aLn9ZwAe_Vib7s-G2Vuh2ZT8rGul3ZgAB1BIldpeQF3j5-2a6__D-iS7yF3QG05VaVGue8KWyfktHD9kVZsfdZWOJOMTlN8zzPp9k0iwVxWJ_-9R0HhCYkcltUD-INLwQrjRHbILbBF9WBJjuZOaoyO9Qb8pbX99ezAHfirWsQT2cz4cQb_ZLuwKaVKUWqdF52K9uajejG7VF0c0riNA7vC6Wb0_1ON-3EODR7S_TakoDEFT2c_ual0y9gn7jeNXwH2wqEypVYccv_V7vsyi6PRO4JSdPd6ZRWYOpS80LZ1_RIPmLsOrl7g-GFPTlNeBaPcW5KI0B2D9_3vAYXcQmcBGIrdw0JaOuCfDWKGMmIizlRagsn66tQe3dLmkeRl84NP0CdVoithtub8mHkYXOLJxNEN-dLbUSL1lUyuukIVlogtggSNoCO8BXqWZCR91Cf4b4FWNuyGk2IgFCXK2zZmk7b-XUvmnKza1wWutrFlmVl1UH9ByR26evEPgqKBskAKr7AJAIShl3kfHlM07TvUobGOMma_Nd-ILrRlS3ORj2PjAwmp5c8ChJPWdbalGXXD_VB2gOrX2sJVX3W3Tn23TWiC5rQQXuC3TbWaum6KOO01WqH2IpRz6q6DI1p3gaePf1daJfdm4cYR4MPs1-5cFP_P-QTO_MS-AjrdvjeKcGLAuS4lQ-Cy5cTQphEo4AQRSl-pprr0je_DlY7pKRL2P52lIE-SQu-q12G-r9Xkwb-vIQus6QdP9wYvxUTjVanduDog1437vHKVU9IeI78gF4ijaicsRHSC4ytj--8utbRv0jNv_L20k96DqaAXfiZh1nGfboMJ440DT5yQBnExycV2Rhf5BFbFqXeYXdpN6DrVV4OsWVQuPlgKMAFYmvs_otS1xbR2J_UPlxrLgtN0FeaqP_NInDgj6WSH2MgcmUMsYWGICEBIa4X-SjYHuM_R-cvWDyTEl2TMiUzR4o_WnutiIYpaW_LCgy3PgT8WdK_EK_9jd74Wm-c-dyXIAr7WkG7IBmjd1NHXiC2fGN8PZgb39ygIE2VPpY_4Z1XdEtxcj3oiLrJ1fQNpkT6LP_929ayNA2COO0iJoUTiMbCQ9I78Phtmwak0erPBtLKGv8cDfK1NY2wazcYSvDtcSqhAAuPW5qu1-v176FzdM28k1_Xz9WzPnxdr9fHH9-2aWSbqoDHr8_pM0lX1XPglvQW3FSqtFQC6sev_66r51Zjd7C4hplcwwwl7fME0cVN1jsUlSlPr-9wfyPDnGM3Z8403Zy-Yu12Nlyy-Lf09Bm5fBv-fa52JAyEudPWNYGzq6YkCVjY7rLc2M6kW8TNu0X83YJsgFto6094rsiUXJpMkqn05xJRlBrY-y3Q7QLS7qpt3dPAJlvEFklwdQq8k3MmZ2zG72AeTIOQhOEsnt3t5xEXlEA8zWQ8k3kuch5BIAgVksQxjZM7NaeEhiSkURCwmMwmQRSTAPKQERLDLGeurB-4KiZFcTxMSrO78x9m5jNCwuCu4BkUtf8IO_78gihF0erOzN2i-6zx3UGhaluf1VhlC5hfdjfYQN0UtnZ09V9I209AZ913jSnme2ur2kfEBtHNTtl9k01EeXDEFcf-z31lyj_ABeXGO-1Y9n7_NwAA____fHA6">