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

    <tr>
        <th>Summary</th>
        <td>
            [unittests][ExecutionEngine][Orc] The JITLinkRedirectionManagerTest test case segfaults on older linux distributions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          pawosm-arm
      </td>
    </tr>
</table>

<pre>
    Not sure how to raise this issue properly. The RHEL8 distro is quite old nowadays (yet has all the gcc, cmake, python things in sufficient versions to build LLVM), it is still widely used, and there is a need for building LLVM for it to the point all of the `check-all` tests are passing. And most of them do. One of the failing ones is ExecutionEngine/Orc/./OrcJITTests/80/82. It fails as such:

```
Note: This is test shard 81 of 82.
[==========] Running 2 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 1 test from ObjectLinkingLayerTest
[ RUN      ] ObjectLinkingLayerTest.ClaimLateDefinedWeakSymbols
[       OK ] ObjectLinkingLayerTest.ClaimLateDefinedWeakSymbols (0 ms)
[----------] 1 test from ObjectLinkingLayerTest (0 ms total)

[----------] 1 test from JITLinkRedirectionManagerTest
[ RUN      ] JITLinkRedirectionManagerTest.BasicRedirectionOperation
 #0 0x0000000000e0e990 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0xe0e990)
 #1 0x0000000000e0c8a0 llvm::sys::RunSignalHandlers() (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0xe0c8a0)
 #2 0x0000000000e0c9ec SignalHandler(int) Signals.cpp:0:0
 #3 0x0000ffff95af07a0 (linux-vdso.so.1+0x7a0)
 #4 0x0000000000cbaf3c llvm::orc::InProcessMemoryAccess::writePointersAsync(llvm::ArrayRef<llvm::orc::tpctypes::PointerWrite>, llvm::unique_function<void (llvm::Error)>) (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0xcbaf3c)
 #5 0x0000000000cbff38 llvm::orc::JITLinkRedirectableSymbolManager::redirect(llvm::orc::JITDylib&, llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef>> const&) (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0xcbff38)
 #6 0x0000000000802d48 JITLinkRedirectionManagerTest_BasicRedirectionOperation_Test::TestBody() (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0x802d48)
 #7 0x00000000011b7dfc testing::Test::Run() (.part.1161) gtest-all.cc:0:0
 #8 0x00000000011c7ca4 testing::TestInfo::Run() (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0x11c7ca4)
 #9 0x00000000011cce34 testing::TestSuite::Run() (.part.1163) gtest-all.cc:0:0
#10 0x00000000011cd5ec testing::internal::UnitTestImpl::RunAllTests() (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0x11cd5ec)
#11 0x00000000011cdc84 testing::UnitTest::Run() (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0x11cdc84)
#12 0x000000000070e998 main (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0x70e998)
#13 0x0000ffff955f0d64 __libc_start_main (/lib64/libc.so.6+0x20d64)
#14 0x0000000000757770 _start (toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests+0x757770)

--
exit: -11
--
shard JSON output does not exist: toolchain/build/stage/bootstrap_compiler/unittests/ExecutionEngine/Orc/./OrcJITTests-LLVM-Unit-2503282-80-82.json
********************
Testing: 0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..

1 warning(s) in tests
********************
Failed Tests (1):
  LLVM-Unit :: ExecutionEngine/Orc/./OrcJITTests/80/82


Testing Time: 230.30s

Total Discovered Tests: 111932
  Skipped          :   209 (0.19%)
  Unsupported : 40103 (35.83%)
  Passed           : 71547 (63.92%)
  Expectedly Failed:    72 (0.06%)
  Failed           :     1 (0.00%)
FAILED: CMakeFiles/check-all
```

I've started `OrcJITTests` in gdb:

```
[----------] 1 test from JITLinkRedirectionManagerTest
[ RUN ] JITLinkRedirectionManagerTest.BasicRedirectionOperation

Thread 1 "OrcJITTests" received signal SIGSEGV, Segmentation fault.
0x0000aaaad29ad650 in llvm::orc::InProcessMemoryAccess::writePointersAsync(llvm::ArrayRef<llvm::orc::tpctypes::PointerWrite>, llvm::unique_function<void (llvm::Error)>) ()
Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-251.el8_10.5.aarch64
(gdb) bt
#0 0x0000aaaad29ad650 in llvm::orc::InProcessMemoryAccess::writePointersAsync(llvm::ArrayRef<llvm::orc::tpctypes::PointerWrite>, llvm::unique_function<void (llvm::Error)>) ()
#1  0x0000aaaad247042c in llvm::orc::ExecutorProcessControl::MemoryAccess::writePointers(llvm::ArrayRef<llvm::orc::tpctypes::PointerWrite>) ()
#2  0x0000aaaad29b0d00 in llvm::orc::JITLinkRedirectableSymbolManager::redirect(llvm::orc::JITDylib&, llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > const&) ()
#3  0x0000aaaad24c3ff4 in JITLinkRedirectionManagerTest_BasicRedirectionOperation_Test::TestBody() ()
#4  0x0000aaaad2e31fa0 in testing::Test::Run() ()
#5  0x0000aaaad2e333f4 in testing::TestInfo::Run() ()
#6  0x0000aaaad2e340b8 in testing::TestSuite::Run() ()
#7  0x0000aaaad2e43f20 in testing::internal::UnitTestImpl::RunAllTests() ()
#8  0x0000aaaad2e438c4 in testing::UnitTest::Run() ()
#9  0x0000aaaad2e18ccc in main ()
(gdb)
```

The `llvm::orc::InProcessMemoryAccess::writePointersAsync` isn't very long:

```
void InProcessMemoryAccess::writePointersAsync(
 ArrayRef<tpctypes::PointerWrite> Ws, WriteResultFn OnWriteComplete) {
  if (IsArch64Bit) {
    for (auto &W : Ws)
      *W.Addr.toPtr<uint64_t *>() = W.Value.getValue();
  } else {
    for (auto &W : Ws)
 *W.Addr.toPtr<uint32_t *>() = static_cast<uint32_t>(W.Value.getValue());
 }

  OnWriteComplete(Error::success());
}
```

The failing instruction on AArch64 is marked with `=>`:

```
Dump of assembler code for function _ZN4llvm3orc21InProcessMemoryAccess18writePointersAsyncENS_8ArrayRefINS0_8tpctypes12PointerWriteEEENS_15unique_functionIFvNS_5ErrorEEEE:
 0x0000aaaad29ad620 <+0>:     sub     sp, sp, #0x20
   0x0000aaaad29ad624 <+4>:     stp     x29, x30, [sp, #16]
   0x0000aaaad29ad628 <+8>:     add x29, sp, #0x10
   0x0000aaaad29ad62c <+12>:    ldrb    w8, [x0, #8]
 0x0000aaaad29ad630 <+16>:    cmp     w8, #0x1
   0x0000aaaad29ad634 <+20>: b.ne    0xaaaad29ad65c <_ZN4llvm3orc21InProcessMemoryAccess18writePointersAsyncENS_8ArrayRefINS0_8tpctypes12PointerWriteEEENS_15unique_functionIFvNS_5ErrorEEEE+60> // b.any
   0x0000aaaad29ad638 <+24>:    cbz     x2, 0xaaaad29ad6c4 <_ZN4llvm3orc21InProcessMemoryAccess18writePointersAsyncENS_8ArrayRefINS0_8tpctypes12PointerWriteEEENS_15unique_functionIFvNS_5ErrorEEEE+164>
 0x0000aaaad29ad63c <+28>:    lsl     x8, x2, #4
   0x0000aaaad29ad640 <+32>:    add     x9, x1, #0x8
   0x0000aaaad29ad644 <+36>:    ldp     x11, x10, [x9, #-8]
   0x0000aaaad29ad648 <+40>:    subs    x8, x8, #0x10
 0x0000aaaad29ad64c <+44>:    add     x9, x9, #0x10
=> 0x0000aaaad29ad650 <+48>:    str     x10, [x11]
```
Where `x11` holds non-null value `0xffffba960000`.

I've tried two different RHEL8 machines and an RHEL8 docker container installed in one bigger modern Linux host on which this test case passes.

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWt9T67az_2vMy048svwjzgMPgSQtvRw4A7TM3JeMLMuJiiK5kgzk_vV3JDk_CfS0p1_a6XwzwTG29Nndj1brXVnEGL6QjJ1H-UWUT85IZ5dKn7fkRZnVgOjVWaXq9fmNsmA6zWCpXsAq0IQbBnbJDXBjOgatVi3TYh3Dw5LB3Y_T6xJqbqxWwA381nHLQIkapHohNVkbiHC5ZhaWxAARAuySwYLSCF8CXZEn5k7atV0q6aTIhQEuwXRNwyln0sIz04YraZwyVcdFDdfXv3yJ8Mh15NYJNZYLAS-8ZmINnWG1u0Vk7WRp5loQkIzV0CgdMLhceBh_hVuH7fRqFZfWa6kafyEqEF0y-jQgQkQFAsuMNUA0g9bxKRcxjGUNK2Vs32UFtYrhVrINREO4cOKUZI5CmL4y2lmu5FQuuGQRnt1qGuFZHM5-unp4cEIiPCuRO-AYrqxHMUAMmI4uo3QcIf8tUP9F4xtlWZSO4SEMlVcVzJLoGsrEKVPi2HXJL6J08tE3n8BdJ6XTGfcGN1qt-n_AuBE2PdRg-3HdfhCqIiI0Y_KZayVXbggNs4OuPdklCa29gNvqV0btNZdPXC6uyZppx0ToBXc_34D_uF6nW8aXgvDVNbFswhouWf3IyNP9elUpYXqU8Ln9nz-J4nwZwco47_tTxmwAwCpLRA_zO0g_XT04mDtWc82o85wvRJLF--x82CG-IIbTvXu3LdPEnURoDBFOEaBXtP0wxEYjBEI8r5zXpWOzNuHkq-bS3ltCnx40oSzC5a6RJi9zZaxmZBXhwk9UaSM8cuZbpQRdEi4jPPNzMcIzY8nCzYRKKWusJu2cqlXLBdMRnnWSW9tPiW-ePBfoNageOHaGJUeG0ZKcNOyuk_d8IYn4kchaMG0iXH6-7k67ne74WPcRo3CgZYTLnuNw2cS0baN0jPxfQEl7lKZpmlFOGjQkyJkluOxeB8-1UbFRceI1GO6Lzw7E04o0Kd2jTmkaTq7kV60oM-YLWym9HlN3Hm69aG7ZVxdfmTZjs5b0wGPGWpP1HWui9PIErm2pXbds43kB5dEhRunUudeuTyf5bx2bN5303h2ll8-K13AgbKq10s461_lzBzZwt2M2P2K2adLyFLNHc5pUgoWY1E_tft71tw-s3ceYrAWv-im5azFh0rAvpD1NfpBzbzWXi69WH3bdtgokKB1aT1hzWsSVbNQ3i3Ej92aAa2YJF4eoXwnXf63y6TRKp0CVNNbT9dle4vxg5yXFgZeUCNdZ-XGYn78b5uf-seHNdmcXql7_DQEu2LCzcLhvYZJUw7qh_hnI5WKn7DZA7zSOW6JtnCRF4i4sXBeXrMWUHgW_8lACHVKSvZUQ_PONlE_jpVdsR8zoSG3K0hNq33c-Fr7PTvoBO-7ZiI7E1Dk74t_HXEn6mfez5NbztWrFVu5YiN6Sv4M3p3KfUeE0SY4NouURbxsT_ubhdort1D580A9dClPCinD5qWoFuTutDhOHvEF1kcF8LnhF58YSbecbFSM8E7wqsvBLXT5ReEjs-uwQDzOKYT4cDhEErM-11EveJuKDQYTG7JU7p4BBkmwuhTrqp_vbG1CdbTsLtWIGpLLAXrn3IfgMnQeuaB04zx3gHKW4xIMSDUoc_2p8Ah_h7_giH0rC_AAUx5C4A3aH1B0yd8jdoXCHoTuU7jBCcRz4S-CFaFc6Rrh0VZKr5YOJ363bjHDBavA0OBdJfALn7gBsWYEwmf94kd3XYVsK4IGvfDmNUxSnyPQ3XdUGE26oemZ6o41rliTJKMVemfsn3rashu3H3QfAyIcWFCejCOd9gIefpenaVmnLat8uQwlKXbs0j8t0r-FXYsw-qG89TPJs6FoXaTzCe62nry2jltViDYG3oAMMcdABFXuNe2aPFQZI-sZo23g2vrqeTtz9yy_kic24YI7E3RrJ4ZpEhMZXER4-M_Az29lYoH3-C-Q8ZFFXJ5c0_pKy-PsqYjfoS81I7cnAB76DQTPK-DOrwfiaC-6vfrif_vCLyzLv2WLFpPU40JBOWDdFQtAjhJAaj0hd5N7-f1MlFfzkC_erY2BYSzSxDGpWdQsuG2WckM74ubXuVrsbAy6NJULAwj04BjjG5QDnScxEOU9QnMeEaLosMh9JSucyeASVDc-TTfry72fWL2QcWJsNUYbpO9ZuKpve5kslrVZ9xvY7BPx1th-qjw_VH1WoRu8N1n_L3s8ue-FE3bsduvTI82jaNJkbuv9ELbqVmh1KZWnSELTJLH6vPtyi5McoaRp0_9YacItUHCNlqCpPIr1Xlm2hhkdQWdrgt6b9qdJrK6N8I6Okbw3_oBraIo2OkJKSUh94dtn_aD88v80GHsI7le8Oyy5vMDLCQ_9-aA1CBTvepBA-sP7RkO-yor2A92F0g0f_RPP_3jHTCTuTcCv9_5dq1QpmmedxeOGTLd44oq7M2D_MLrjdvwn-fVSES9JZBREuHn0u9mg2qZrPzvD4MR7XtY6tcnM7vey4tEU2d5XT2AeOMHLpBB7jX4joWLxg1p_0Y5QGcdFwAkwY9s3yT4tO8SnRxuU-dE6J86ltu9DmHbW2mkXDSRhKeEtlGZ6MYc2-C0N52L3v_dbzNq_iXKahOx-KQEkYh7EAbmBF9BOr4YXbpfNT_0Zs6k9O-NakW7WgGnCZ-aoSTANVNfMUbh7tMP_fm8x5e6o0xclJR0zKt044vbmflxsXvLq5R_Ny44UJ3vfA6dQ1TfKjlOJq9nxzP889VdPpdNoXSsdJEkYQpZeuEPYLnsHBTFeF39Y5dji6FOsVo-Akb1CyHiXbR7Gt_30NL2pfU-Rx8ostYFJE-eQdxLJHLPcQSV1v0PaUSt5TivYQCd5hiFp7217KXplX1AOVvS7HMOmGoaTYwdBVsK2H8Wqc1iLdUIM3DFexZOBb7uWqXtd_iqvgC-fvU4jwLMIzqGIi1-9YtxkmvDfytPq_fuAdOftm0uyfZWZSeLVPjfrGefCeAwojgmF-1IN5Ljs5zU22cZx0z_-cC3uIMCeSrfuU74Bs3Cct9p24n1lJElA2MyugRjgdlO_OrGwzZNnelDddZfYsK48m1xuMDTtZ9q5po0OMEEhPFWk90h7Pxurevq1hSRIM2o--j35vR1Qgd7dAsFSiNiCVHMhOCHh2zxV3G702TdNUZFQ42VGB4oOFCas5q8G-KKh50zDNpO03tawIXXLJjN9JQuRmq4uiTz7SS0u4ZBr6spXVLhFSkkHFFwumYaVqpiVcc9m9wtJvEJHwsuR0GXbT-JUMSkzYStLvqNgz8aw-T-tROiJn7DwZpmmZFcNsdLY8b3CJ8rpOaZrmZV4OcZKhIh2SnGS4pLg44-cY4SzBCUoKlGejuEirUVrRguCM5SNWRhliK8JF7OZhrPTizG_tOU-SUYayM0EqJozfJ4SxZC9h40-EcZRPzvS56zSouoWJMiS4sWYHY7kVfoPRbmkzn0T5xfFynL94q2mUT_wuog_Lhz2mDFv4pRTjuFSiZhr8u-uwAYlXXoY567Q4X1rb-ozNR7EFt8uuiqlaRXjms8_wM2i1-tVXjjNvpInwrGfh-Rz_fwAAAP__zUFAvQ">