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

    <tr>
        <th>Summary</th>
        <td>
            [libc] thread.cpp fails to build with GCC on x86_64
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          michaelrj-google
      </td>
    </tr>
</table>

<pre>
    It seems like there's an issue with clean fullbuilds with GCC. My guess is something to do with register exhaustion, since the syscall is wrapped in two layers of `always_inline` functions, but I'm not sure.

CMake command:
`cmake ../runtimes -G Ninja -DLLVM_ENABLE_RUNTIMES="libc;compiler-rt" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DLLVM_LIBC_FULL_BUILD=ON -DLLVM_LIBC_INCLUDE_SCUDO=ON -DCOMPILER_RT_BUILD_SCUDO_STANDALONE_WITH_LLVM_LIBC=ON -DCOMPILER_RT_BUILD_GWP_ASAN=OFF -DCOMPILER_RT_SCUDO_STANDALONE_BUILD_SHARED=OFF`

Tested on the latest commit (6342095bce61f18baf7c305716be3239a274fb6d)

Build failure:
```
~/llvm-project/build-gcc$ ninja libc
[297/373] Building CXX object libc/src/__support/threads/l...s/libc.src.__support.threads.linux.thread.dir/thread.cpp.o
FAILED: libc/src/__support/threads/linux/CMakeFiles/libc.src.__support.threads.linux.thread.dir/thread.cpp.o 
/usr/bin/g++ -DLIBC_NAMESPACE=__llvm_libc_21_0_0_git -D_DEBUG -I~/llvm-project/libc -isystem ~/llvm-project/build-gcc/libc/include -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -Wimplicit-fallthrough -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -g -std=gnu++17 -DLIBC_QSORT_IMPL=LIBC_QSORT_QUICK_SORT -DLIBC_ADD_NULL_CHECKS -fpie -ffreestanding -DLIBC_FULL_BUILD -isystem/usr/lib/gcc/x86_64-linux-gnu/14//include -nostdinc -idirafter/usr/include -fno-builtin -fno-exceptions -fno-lax-vector-conversions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wall -Wextra -Werror -Wconversion -Wno-sign-conversion -Wdeprecated -fext-numeric-literals -Wno-pedantic -Wimplicit-fallthrough -Wwrite-strings -Wextra-semi -O3 -Wno-frame-address -MD -MT libc/src/__support/threads/linux/CMakeFiles/libc.src.__support.threads.linux.thread.dir/thread.cpp.o -MF libc/src/__support/threads/linux/CMakeFiles/libc.src.__support.threads.linux.thread.dir/thread.cpp.o.d -o libc/src/__support/threads/linux/CMakeFiles/libc.src.__support.threads.linux.thread.dir/thread.cpp.o -c ~/llvm-project/libc/src/__support/threads/linux/thread.cpp
In file included from ~/llvm-project/libc/src/__support/CPP/type_traits/integral_constant.h:11,
                 from ~/llvm-project/libc/src/__support/CPP/type_traits/has_unique_object_representations.h:11,
                 from ~/llvm-project/libc/src/__support/CPP/atomic.h:12,
                 from ~/llvm-project/libc/src/__support/threads/thread.h:12,
                 from ~/llvm-project/libc/src/__support/threads/linux/thread.cpp:9:
In function ‘long int __llvm_libc_21_0_0_git::syscall_impl(long int, long int, long int)’,
    inlined from ‘R __llvm_libc_21_0_0_git::syscall_impl(long int, Ts ...) [with R = long int; Ts = {void*, long unsigned int}]’ at ~/llvm-project/libc/src/__support/OSUtil/linux/syscall.h:34:49,
    inlined from ‘void __llvm_libc_21_0_0_git::free_stack(void*, size_t, size_t)’ at ~/llvm-project/libc/src/__support/threads/linux/thread.cpp:128:37,
    inlined from ‘void __llvm_libc_21_0_0_git::cleanup_thread_resources(ThreadAttributes*)’ at ~/llvm-project/libc/src/__support/threads/linux/thread.cpp:153:15,
    inlined from ‘int __llvm_libc_21_0_0_git::Thread::run(__llvm_libc_21_0_0_git::ThreadStyle, __llvm_libc_21_0_0_git::ThreadRunner, void*, void*, size_t, size_t, bool)’ at ~/llvm-project/libc/src/__support/threads/linux/thread.cpp:335:29:
~/llvm-project/libc/src/__support/macros/attributes.h:28:25: error: ‘asm’ operand has impossible constraints or there are not enough registers
   28 | #define LIBC_INLINE_ASM __asm__ __volatile__
      |                         ^~~~~~~
~/llvm-project/libc/src/__support/OSUtil/linux/x86_64/syscall.h:39:3: note: in expansion of macro ‘LIBC_INLINE_ASM’
   39 |   LIBC_INLINE_ASM("syscall"
      |   ^~~~~~~~~~~~~~~
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEWN1z2roS_2uUF40YI_P5kAeDoWUKJCcfN71PGtleQK0s-UgyCX04f_sdyQbSNG1uzzmdejLErFb7-dtFK26t2CqAS9SfoH56wWu30-ayFPmOgzSfyFbrrYSLTBeHy4XDFqC0WIrPgN0ODCA6tJgrLKytAT8Kt8O5BK7wppYyq4UsbEN9N5128OqAtzVYi4XFVpfgdkJtsdO40A2Xga2wDgyGpx2vrRNaITrFVqg8KMT2YHMupRfwaHhVQYGFwu5RY8kPYCzWG4wGEZeP_GCZUFIoQIMIb2qVe2nWi8tqhxeIDkustMO2NtBBUYKiZLrinwHnuiy5KlDsSWgQ5aWndjqIzk2tnCjBYvIOr4X6xDFJl8v_rNhsnUyWM3Zzv75brGa3KE4RpVJkOYonuS4rIcEQ4xClmKTTVfJhxib3i2XK7v57PUNxmkJWb09LUza9Wl0vlrMbFKfbPD8vfPz41RKiE0QnRyOWi8mUze-Xy0Y2itOr9Vdri_V0eZ_O2O30Pr06Lh_lsZu71qawzG7vknWaLK_WM_awuHvPTmK-v_HdwzVLbpO155jPX7B8I7VV9j65maXNDjSImkTcgXVQYK1C0iV3YF3Ii3AY0dEg7tFo3M9yGHQ33VHGN8M8jvrD7iCDmMZjToe9TTYoEB038iYeiXjDhawNnBLb_kXJX4jOpdyXpDL6E-QO0XnALtnmOaI9rEKqQzqjBPUndDxEdB4PY9RPcZDtcTz9-BHrzO9vWOncGv_JmK2rSvvsz93OAC-s19fpdMJ_keUda_LOia3TMnWkUPVT-61TCHPa38mrqqNRlMyTxdIHL_m_NHpxiM4DyudCwj9Tj30s6Ly2fiETCtH5Mzx6uK2T1ez2Opl6gDPmA8y8Oka7LGIR2wqHScrS2eT-HSaLV5LguTER9mAdlPjHWZq3ERAql3UBmGz2wopMSOEOpGkEluxEUYDC5AGM0QbFacEdEF_SmGyUJlJswH8jhQVMHnynIQ_w5AzH5EFpUqvaQkEqbngJvk-Rh0cjHBDrjFBbi8lDzq0jf9ZcNjtKYa1QW7IRIAsilHCCS_HFtyryIMpKilw4suFSup3R9XbXbFNaqVq2MnLJrSUllDzPffcMRANFrQquHCn1HhpaBdaKUnzxCs9UpeEph8oRd6g8qQAJDrwKshfG1VySwmnvi623W7CO6D0YI4p2v687UO7kjwTu8U6EKkA57tuq99vxgpT8kAGpVQslKDDZFIJvlbZO5JbkWnpFW0ysK3wDU3UDme7wCJo_bq9u7thidb1E8XPKH_eL6QfmX4-cSZqyte920_ez6YdbTDaV8HncGADruApF2fKeu-IJTyfsSpF57AYQPY0GbNAjAfokWDfv9hCdPweWd6YQyiOzEIZvHJiTrDP6lCYenU6o5kuTA_8T1EKNP5E95E4bkmu1B2PPa7V6FKogjmcSWhK3B5XvjFa6tq-tG-cEJhtnxF5wSXjtNNlzExCH4rTizoFpTdGlh5yHMKm0UAHH5ZEugW9eLr4ohFA8PuUnuxts-KME-YpYQGUg5w0Q4MkRVZdgRE6kcGC4tEfceiCL_Psl8bLKginEQikwuYobKY3RvChMKJJVisnq7nc0RrKa_wa1nQIT_VvczV9rzT9hyFkaipKFwhshAbeVVOCN0a_2_u8qmF5fe6GHCpgzXDgb6tLB1nDJcq18b3CdHYqTbhfRKYoS_PL5V3TuuGW1En_WwJpjATO-HOyxadpfYgN3uhR5I5r-W6LPOWtz9avEvwKJOBk3JzaPjPYYj9GMolGExiOp1RYL5fDrBwy_M07aqYH55oLoaY-fBV5_Hx_lj88uNmeIFo8n_Td_V_GdxR0_U4wx6k_C8HODUZyejYgnnseT0HCy16JANDlZWaswtxWBc5iifnqyGHP3U8G_ur13Qj6LfWt0yHHcQ3HSezMK3rwfBsL_JjPreP4Z0dEzZ6z4Asw9fxv_bUfeQFGXjrxDw3_sSxhw64o10pkBq2uT-y46ugukxDkjstp5UvIrPerH4fMtj94qj8bq5t3UCtHR29y37iDB5-1t1ptaKX9EmuJnif8hBqY401r-wsjFcR_FCW0by88ILnlutA199pjkUCgBXNRLxe1skZwTwG159kRXYLgq8I5bLMpKWysyCTj8MBkulLNYm-Z2BXMD4Y4CVDgHHa9HbJNuOsJoOMWIxgVshALcDvnLxXrGktsVZozbkjHM2F5L7oQExk4N22_93oP6s7_C85PR-aaXNOfpl03Fx91D1_vmx3EsFIaniqtwbNQbHKJ8jt8Lv87NOfgSj1tfXrLREaK0VYwofeH5ycfj8_xS4KK4jItxPOYXcNkd9qIo6o2H3YvdZdbtR_lgNODdXrfbj4rhaDCg3Tgb8KgYR4PhhbikEe1HtDumtEf73U7BIR6MugWM4i7Pc4p6EZRcyI4Pakeb7UW4PLvs0uG4O7iQPANpw31ce4NEKeqnF-YyJCGrtxb1Iimss2cJTjgZ7vDChn6Kz2gPtx4WO43DsHy6jcNa4SY7F7WRlzvnKuvLIcw6W-F2ddbJddkm_1sMBKN9IbR27y_p_wIAAP__p_KfYQ">