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

    <tr>
        <th>Summary</th>
        <td>
            [ASan] [AArch64] Simple program crashes on startup with `mmap` failure in ASan runtime on Clang 20
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    **Description:**

When compiling a minimal C++ "Hello, World!" program with `-fsanitize=address` on AArch64 with a recent Clang 20 development build, the resulting executable fails immediately upon execution.

The error message indicates an "out of memory" failure when the AddressSanitizer runtime attempts to `mmap` its shadow memory at `0x040000000000`. The program crashes before `main()` is called, and the stack trace is empty, suggesting a failure very early in the runtime initialization process.

**Environment:**

*   **Clang Version:**
    ```
    Debian clang version 20.1.7 (++20250613123054+9ba132be8eea-1~exp1~20250613003154.130)
    Target: aarch64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: /usr/lib/llvm-20/bin
    ```
*   **Operating System:**
    ```
> lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye

> ulimit -a
Maximum size of core files created                              (kB, -c) 0
Maximum size of a process’s data segment                        (kB, -d) unlimited
Control of maximum nice priority                                    (-e) 0
Maximum size of files created by the shell                      (kB, -f) unlimited
Maximum number of pending signals                                   (-i) 126000
Maximum size that may be locked into memory                     (kB, -l) 4033516
Maximum resident set size                                       (kB, -m) unlimited
Maximum number of open file descriptors                             (-n) 1048576
Maximum bytes in POSIX message queues                           (kB, -q) 800
Maximum realtime scheduling priority                                (-r) 0
Maximum stack size                                              (kB, -s) 8192
Maximum amount of CPU time in seconds                      (seconds, -t) unlimited
Maximum number of processes available to current user               (-u) 126000
Maximum amount of virtual memory available to each process      (kB, -v) unlimited
Maximum contiguous realtime CPU time                                (-y) unlimited
    ```
*   **Hardware:** Rockchip RK3588 development board, with 32GB RAM.

**Steps to Reproduce:**

1.  Create the following C++ file (`test.cpp`):
    ```cpp
    #include <iostream>

    int main() {
      std::cout << "Hello, World!" << std::endl;
      return 0;
    }
    ```

2.  Compile it with Clang 20 and AddressSanitizer enabled:
    ```sh
    clang++-20 ./test.cpp -fsanitize=address
    ```

3.  Run the resulting executable:
    ```sh
    ./a.out
    ```

**Actual Result:**

The program crashes immediately with the following error from the AddressSanitizer runtime:

```
==843770==ERROR: AddressSanitizer: out of memory: failed to allocate 0x2000 (8192) bytes of memory at address 0x040000000000 (error code: 12)
==843770==Process memory map follows:
        0x000ffffff000-0x001200000000
        0x001200000000-0x001400000000
        0x001400000000-0x002000000000
        0x00556ef70000-0x00556f0bf000   /tmp/a.out
        0x00556f0cf000-0x00556f0d3000   /tmp/a.out
        0x00556f0d3000-0x00556f0d6000   /tmp/a.out
        0x00556f0d6000-0x00556fa6a000
        0x007f9c200000-0x007f9c300000
        0x007f9c400000-0x007f9c500000
        0x007f9c572000-0x007f9ca00000
        0x007f9cb00000-0x007f9cc00000
        0x007f9cca3000-0x007f9ccb3000
        0x007f9ccb3000-0x007f9ce0f000   /usr/lib/aarch64-linux-gnu/libc-2.31.so
        0x007f9ce0f000-0x007f9ce1e000   /usr/lib/aarch64-linux-gnu/libc-2.31.so
        0x007f9ce1e000-0x007f9ce22000   /usr/lib/aarch64-linux-gnu/libc-2.31.so
        0x007f9ce22000-0x007f9ce24000   /usr/lib/aarch64-linux-gnu/libc-2.31.so
        0x007f9ce24000-0x007f9ce27000
        0x007f9ce27000-0x007f9ce3a000   /usr/lib/aarch64-linux-gnu/libgcc_s.so.1
        0x007f9ce3a000-0x007f9ce49000   /usr/lib/aarch64-linux-gnu/libgcc_s.so.1
        0x007f9ce49000-0x007f9ce4a000   /usr/lib/aarch64-linux-gnu/libgcc_s.so.1
        0x007f9ce4a000-0x007f9ce4b000   /usr/lib/aarch64-linux-gnu/libgcc_s.so.1
        0x007f9ce4b000-0x007f9ce5e000   /usr/lib/aarch64-linux-gnu/libresolv-2.31.so
        0x007f9ce5e000-0x007f9ce6e000   /usr/lib/aarch64-linux-gnu/libresolv-2.31.so
        0x007f9ce6e000-0x007f9ce6f000   /usr/lib/aarch64-linux-gnu/libresolv-2.31.so
        0x007f9ce6f000-0x007f9ce70000   /usr/lib/aarch64-linux-gnu/libresolv-2.31.so
        0x007f9ce70000-0x007f9ce72000
        0x007f9ce72000-0x007f9ce75000   /usr/lib/aarch64-linux-gnu/libdl-2.31.so
        0x007f9ce75000-0x007f9ce84000   /usr/lib/aarch64-linux-gnu/libdl-2.31.so
        0x007f9ce84000-0x007f9ce85000   /usr/lib/aarch64-linux-gnu/libdl-2.31.so
        0x007f9ce85000-0x007f9ce86000   /usr/lib/aarch64-linux-gnu/libdl-2.31.so
        0x007f9ce86000-0x007f9ce8d000   /usr/lib/aarch64-linux-gnu/librt-2.31.so
        0x007f9ce8d000-0x007f9ce9c000   /usr/lib/aarch64-linux-gnu/librt-2.31.so
        0x007f9ce9c000-0x007f9ce9d000   /usr/lib/aarch64-linux-gnu/librt-2.31.so
        0x007f9ce9d000-0x007f9ce9e000   /usr/lib/aarch64-linux-gnu/librt-2.31.so
        0x007f9ce9e000-0x007f9ceba000   /usr/lib/aarch64-linux-gnu/libpthread-2.31.so
        0x007f9ceba000-0x007f9cec9000   /usr/lib/aarch64-linux-gnu/libpthread-2.31.so
        0x007f9cec9000-0x007f9ceca000   /usr/lib/aarch64-linux-gnu/libpthread-2.31.so
        0x007f9ceca000-0x007f9cecb000   /usr/lib/aarch64-linux-gnu/libpthread-2.31.so
        0x007f9cecb000-0x007f9cecf000
        0x007f9cecf000-0x007f9cf68000   /usr/lib/aarch64-linux-gnu/libm-2.31.so
        0x007f9cf68000-0x007f9cf78000   /usr/lib/aarch64-linux-gnu/libm-2.31.so
        0x007f9cf78000-0x007f9cf79000   /usr/lib/aarch64-linux-gnu/libm-2.31.so
        0x007f9cf79000-0x007f9cf7a000   /usr/lib/aarch64-linux-gnu/libm-2.31.so
        0x007f9cf7a000-0x007f9d131000   /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28
        0x007f9d131000-0x007f9d141000   /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28
        0x007f9d141000-0x007f9d14c000   /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28
        0x007f9d14c000-0x007f9d14f000   /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28
        0x007f9d14f000-0x007f9d175000
        0x007f9d175000-0x007f9d196000   /usr/lib/aarch64-linux-gnu/ld-2.31.so
        0x007f9d196000-0x007f9d1a3000
        0x007f9d1a3000-0x007f9d1a5000   [vvar]
        0x007f9d1a5000-0x007f9d1a6000   [vdso]
        0x007f9d1a6000-0x007f9d1a7000   /usr/lib/aarch64-linux-gnu/ld-2.31.so
        0x007f9d1a7000-0x007f9d1a9000   /usr/lib/aarch64-linux-gnu/ld-2.31.so
        0x007fc451a000-0x007fc453b000   [stack]
==843770==End of process memory map.
AddressSanitizer: CHECK failed: sanitizer_common.cpp:61 "((0 && "unable to mmap")) != (0)" (0x0, 0x0) (tid=843770)
    <empty stack>
```

**Expected Result:**

The program should execute successfully, print "Hello, World!" to the console, and exit with status 0.

```
Hello, World!
```

**Additional Notes:**

Older Clang versions will also crash but with another (looks related) issue: https://github.com/llvm/llvm-project/issues/65144#issuecomment-1746565874

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0WluTKikS_jX0C6FBURf1oR9s7Z6ZmMuZ6J7Z2bcJClJlDwU1QNntPMxv34AqL2WrRzfcCuOcFpKPL5MkyUpkzsmlBnhE-RPK5w-s8StjH1esrjcV5GnyUBqxeUR0iuh0Do5bWXtpNEqnbRsi4fPHCjTmpqqlknqJGa6klhVTeIboE6JPGFH6PShlEJ3hP4xVAtEEUYpra5aWVfhd-hVGBRksHNPSy78BpXMmhAXnUEGw0Xg6tXxVZK0owxY4aI9niuklpgQLWIMydRUay0aGGWbYrwBbcI3ygRZ8AG88KxXgBZPKYVlVICTzoDa4qY3uJKTRw1av31aAwVpjcQXOsSVgqYXkzIPDTAetTOOxWeAKKmM3QaOA3FjA78EkYf5pq8Vbp5fFttFeVoCZ91DV3mFvgupVxeqgqvQOuxUT5r1DxcyHfvJBMrJ7UEGGONDbWpBb5lbgcAkLYyECMqkRHSM6ibAOc6YURLswLSI35xn_ir1lHIJAoLMJ_a5ZLsH5di23Gq3BbjAwqzZYtqptNZFBNabk3yzYLlDi4Fxnw9ZPnvVaWqPD8hz5DqJTjHHb0q7mv8C6Ix_DQaQg3af9PodSMo15HLNux2BKhslwhKPewfMooTkpkjShKckzRJ8mJUtSWsIYgA2Sf-CjTv7ZChGSJnk2TFISjNbO8huzSwicMWPRAQeN_qrNux4oqZuPwVI3W8mVBSZwZQSoIF8bJz-6vh-089H6c2lDH6IvjbOIvihZhn_VuhpQguhLKfUJdQ9t9KUGy-LSvG2ch-qSmVD6jJUr_7SggDnAA4bI9BeDf3p7CjwbFfzYAmZrJlXYGGHN5tJ5K8vGG4t_mAe2raVDVy8CHCzCd7_8jujLT8EiOEmC-ctGKQcbaC352hLoBoUnSRCZzowAzaqD9t2w1jfSZ9woWUnfUv-ZfciqqbCTf0PYdjy4-kIGNbgF5kHgiw-i469PwcEHHNEJJicg2dZ90TNFY4ImE4cF8ww7WMbg8k1oEaAbHWmDiFpqb42KcaKbTUsetq40VvrNZc47-AGc49y3QLlp9_YKlPoW18Ux1y20bqoSbACvQYvgbeGgYMpdyVUG4IQWIVQdEfYr5nHFNrgErAz_CgJL7c022l0mrAJuRtI0T4oDYAtOirA6Dnw7y3XPHrj6tiVMDTraGotuHxh72R7BEjpagmTjfHTIuNyEQ0Rq_OuXtx_-vTtf_mqggUuge8Z_BeBxz74WmIoR2fEViCYextd6WeBqP3lYPCBuMOgnli6yTCb0AJVVptHx3Jz9-jvujhDsgBstzuiO6Ljrj6j-Cr9tt3GIcNvoFk5a3lgbHKVxYE9YoDnpt3vCa2l9w9TuaD6EBsZX22mPzbA-R5gb7eWyMY3br97OKlcs2eYYGF84O75nVrwzC7szA78a_pWvZI1ff0zz8bifRhlmY7oQU66UfveEX6c_9471Nw91TGBeobZGNByOTvdkiPEsBqYYlBZGKfMe3HKbGcb9FI7rgnhwfsjrkAWFUyP9dKKFvq6JplJz1QjAKJ1J47wFVqH0uZ01iEgdosw2BcJo9NR1YOy8COjplIf0DaUzlM7Opqhd924MaKFQugez4BurMdm3odH81DqQKQ3GiFkyYOlbs-4S2JCTfcoVQQfnEids4VZdS8x_WmMOKMFDRF-2hsQn0-mT1NIhxq-NPpsxX2IQpmRD0_jT0K07THncN68R-8hJTuWxh7l5NFTffdqsfGFNdTHJbmmHTy8rmqN0Ps7S0Yi0fz-_vn55DUnIMU5o66f46TQmxCCC1zOlTHgbwOSDEkKCH8dQRyddfN-NC0l8twC4n8mHQa023IiYCSW0TZo-8_y1Cy4dZsXqziRuvz7hIR-EkEV8CCGD8DWhu1eHvty-o5XLzsllPTlKzsjleQGL0U4uz4sFKQONuG1ffFUfucvBwAXhi95AkV47MEoeDCyuHlgcDmQF-6zSaDHhdK96-JqeUj10ZH25_JxcPqKHcuycXNnH4-fkOEt7cmV6Rq7syQHZL83hG8n2ZWf_khN7-IAO02TozAnkFmqPnMDdkCPUHpnSuyFT2kfO7oec9ZFHp9ej7djLpewWBkvO_3RDZ4bJKeiItYfOJveDjlgH0HdknR2xLu8IXfag85s81IIzan1pyfO-mxZ3hi-O4G_auVfA97dvDOF3hB-RPjw9sx_6cRFG-S00hLpIIe9Bj2_a7Jehx_3dPr4j6_ER6-KO0EUfWty05P4itOhBT_j9oCPWAfQdWU-OWN-2gy9D93dveVPErH0sLl7CL_thk98U7K_A5_2Iz-_Nnx_xvynsX4Pfj_0x0Twp1wuDi2J8C4_qAoMWao88uh_y6Aj5prW_jDzpI9-06peRD9dbJGlyC7LzgrfvvOGsL4ZkSMefJ-lQ95Nk_5dJsqNJbgp1V0_C-5PcdPhfPcmiN0k8L0_J9Q5SkUxuOJIu7NEOaI_LTr_DdB0HctvTNn9ar5lF-fzkoD5pVuwHCWfODTpiNLqTpmzUx71hx57H5VmeHOwqnuVpuVMylnJbLU8UQLQ4qJke1BeGiExPFUVm3z_PfuwqIeH7ts5k_-SmqoyOdbx0WiQYURpLcGOCES0QLUJLo7dF03jtSWPFg04woglK5zhIxxYa__wgiM5w_C-IjL0Ue_67mzqUzuIFZlu07mqBp0pRzx81cA_i28UotzKNEl0ZDLBreDDPolEqXpPWVmp_tnDoTSxNcaOdUbC9doWPbeXPeeYbh8nwc4XqM94ZVaZCSC-NZgr_Yjy4I12-KAG2KzF2N6QOv0ulMFPOtLU2XDYdIaaNX4ENFlbGfHXYgmIe4n2WdK6JxamV93U7zQuiL0vpV0055KbqbjG3l5m1Nf8B7hF9iSMdoi9FnmQZomlsCF4C2g-SUVbkRT4eZYhMH8RjKibphD3AY4gxRZ6kefawekwEYQkpaEGzCYzEOB2NF8BpOimKCQGWPsjH9g6XpiQjNM2G4zzJE1IUnBUp5GmCMgIVk2oY2A2NXT5EGo9JltN88qBYCcrFX0FQ2lVUKcrnD_YxqlM2S4cyoqTzbg_hpVfxpxPTN6ZRPg_brPuZQvj2Jqtafa5sGh2W3vqm3v3sYXv3v71qlxoHyN0Fu9G7OvFDY9Xj_74Inb7rR_rfAAAA___dPpwx">