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

    <tr>
        <th>Summary</th>
        <td>
            calling convention mismatch on M1
        </td>
    </tr>

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

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

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

<pre>
    ```cc
Process 16698 launched: '/Users/snek/code/node/out/Debug/node' (arm64)
(node:16698) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
Process 16698 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xf9400fe0f90007e8)
    frame #0: 0x000000010040dac0 node`v8::FastApiTypedArray<unsigned char>::getStorageIfAligned(this=0xf9400fe0f90007e0, elements=0x000000016fdfe608) const at v8-fast-api-calls.h:348:37
   345   }
   346  
   347   bool getStorageIfAligned(T** elements) const {
-> 348          if (reinterpret_cast<uintptr_t>(data_) % alignof(T) != 0) {
   349       return false;
   350     }
   351     *elements = reinterpret_cast<T*>(data_);
Target 0: (node) stopped.
```

looking at the disassembly it seems to me like the caller is using registers and the callee is using the stack? 

```
node`v8::FastApiTypedArray<unsigned char>::getStorageIfAligned:
    0x10040daac <+0>:   sub    sp, sp, #0x20
    0x10040dab0 <+4>:   str    x0, [sp, #0x10]
    0x10040dab4 <+8>:   str    x1, [sp, #0x8]
    0x10040dab8 <+12>:  ldr    x8, [sp, #0x10]
    0x10040dabc <+16>:  str    x8, [sp]
->  0x10040dac0 <+20>:  ldr    x8, [x8, #0x8]
    0x10040dac4 <+24>:  mov    x10, #0x1
    0x10040dac8 <+28>:  udiv   x9, x8, x10
    ...
```

```
node`node::wasi::WASI::WasiFunction<unsigned int (*)(node::wasi::WASI&, node::wasi::WasmMemory, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned long long, unsigned long long, unsigned int, unsigned int), &(node::wasi::WASI::PathOpen(node::wasi::WASI&, node::wasi::WasmMemory, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned long long, unsigned long long, unsigned int, unsigned int)), unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned long long, unsigned long long, unsigned int, unsigned int>::FastCallback:
    ...
    0x10041a554 <+156>: stur   w0, [x29, #-0x4]
    0x10041a558 <+160>: b      0x10041a604               ; <+332> at node_wasi.cc:260:1
    0x10041a55c <+164>: str    xzr, [sp, #0x38]
    0x10041a560 <+168>: b      0x10041a564               ; <+172> at node_wasi.cc:255:3
    0x10041a564 <+172>: ldur   x8, [x29, #-0x48]
    0x10041a568 <+176>: ldr    x0, [x8, #0x10]
    0x10041a56c <+180>: add    x1, sp, #0x38
 -> 0x10041a570 <+184>: bl     0x10207acac               ; symbol stub for: v8::FastApiTypedArray<unsigned char>::getStorageIfAligned(unsigned char**) const
    0x10041a574 <+188>: tbnz   w0, #0x0, 0x10041a58c     ; <+212> at node_wasi.cc:255:3
    ...
```

repro:

i'm really sorry i don't have a minimal reproduction for this, I tried for a bit to make one and was unable to.

- clone https://github.com/nodejs/node/pull/43697 on M1
- `./configure && make -j$(sysctl -n hw.ncpu)  node`
- `./out/Debug/node --experimental-wasi-unstable-preview1 --turbo-fast-api-calls ./test/wasi/test-wasi.js wasi-child cant_dotdot`
- relevant code is in `src/node_wasi.cc`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdWMlu4zgQ_Rr5Qligdvngg-MkQB8a00Ay6LkFlERZSijRQ1KO3V8_VdRiO1GCHiBzGUPQQtbyWBtZzmRxWjsx7a88d-itQzc_lMy51sSL41VKBOvavOKFE2yI4yeOf_-n5krDU7f8BR65LDg82v4hOwP3W551u2kwAcaUqSYOHX_V64ABOxdsrBYYJ3fHPVd1w1vDxE-m2rrdoc6fm4dvpNaEtYRfUJCSM9Mp7pLHCmaHL5LLThQkr1i744QZ4DoRAyyTVgBPYK2onCyXRrGcL197bZq4rgtzxEiiK_lKXisOIk3FyUABT01yBbrAHuNSrs2ljdzvYXbQtwF2oC_AAoHn-Fvyd8c7QBDcojFz2bhsvxfcbVjdLntSa-StFUTgW8vWkt_9tX262dw-bbbbu4cHtKg1fHBrxbKiUAACPumxXIWUlpyWK0ppwtMJKYFfqVjDEQ1F49Ij7X8epSEtWE6JdUtMDynMw3XPtNns68cTLGqjFDs5wbZrdb1rubWzcoK7nnLHzYORiu34t3IjLAGANOCdOVQUUXPB0Zs9wYgkLouSx9TGRC5bbdCPh3RZApIl29fLnAmh3QpUBiGiDJJpeUEYEYeuiJPcXozFOHbxnViaTEpB5kE_guPQdxO-CYqT3PSClrBuEJVaUYTUJXpE8bo1XO0VN085wEVbwcjeqCeDdvLTghn2hOIcPyIMFcqyV4hDHjqa2vdRjwW8GrQQCAgI85aUTGjw_QVNRAeaq6VH3jjqb8bF2GiaQWoXfQVyUvDIFBiK0L4G9JkLIIdYd4dgH-vI8GnvQsoXTBxwIeZRUWumNW8ycSK1IZrzRmO6QUiK-qXPNXQvV5jynUZWxXe1BqxYAoozBT9T4Jg2LH9xgntyqf0NpC8N7WBzTip6HPKH5WDdrePf0J4X5nSXIYne26S2d8y-o09n-DM68IdnfqOQ5GgTxoluLkR41Ilu56SEg5T0nRTvvZT0AyHpIMTzRymi6IWk_wLKaBAvHqWMUC6kjKw2qc7M-WgNn34EYXj5ZB35aAx_smkjD70x6Bn_HOdoAX-yY1fUyHpcIWOvG6VMvLiBfJwM8-E47INwwe5S92-46Q1vMHYPO7CpZXsZn5C-mIq2UK3Ou-l7KX6MKGenmW6-80aqE1JcSv7SbyEhRfH2G6Ozsla9l-LPVmnffjBT_bHn7f_eHKv_FOFXIx6rKNbbLZTuzFbqzUzWnNPPY1E0Jq4XjbVDw-YHJK9jLTyOsREs6TGcyX8UM9WxeKwitiCfSWIakusfbHwDUxBg9cPtC0PmCaPFhXNysPFR2uZd2UCF55IXTrj7qvVLva-cwVzdAjExncSk87ij-GPcXvIR7ijCI9OcwvCKFxWKwtr7XG2v7P0R8MngSTzJud7DLqr27MaBUiYrpqPb4Ix73sOuLdjz2-1jkpBMBkxHP2RiMqBPE5bDdv3egPrUZHAyhFjLSCkV8n3VYfia1p4xp6PljA2SySPpGAIma3-dMwBXb98mljR_Ewi-97uB8PnepfheySlr-3sNrUqDPYqA45yWSsGhjhSwT_mJIRU7QAdGmrqtG2jXLH_R2X0MzUpsYwDQvxGjajAJjjGSwakQz4MMDoOy5fbIh01X17JMwPlQupcAliQXSFUZs9cIzr-Ha1ebqstcaK6GDvRZn_vTfScEPMIgXiWggXz3RlGwYNe2s21Z77CXtHtF3GNZPjtwfvBTfdK5EWTZkurVbfN9h_4be6Y3kt63wtBxXvawS_TGEoLC4OKWcBg_1PzVw760U5l80_EQlGm4RqF21-q_rBD3WRMrLK9q7H9Za54KaeC6gKWgAzjADMHGEU_PdYtQtcoHeFN0xHRRrINiFazYwtRG8DUiwKM2WOcA2NGJTa0bZvKqt-KiU2L9iR-EOIwPWKh85jmuo9a64-gdqD5JtKjWWegnaZmnzMtWQUmTIiuSJPGCVZSyMAnChWAZF3oNRQTqxqJe-9SHVPY8LwqpF7hJGhZ-CEN5FGQ84U5IOfTWwkXFrlS7hVpbDOAUDZMCWgt9noTmBBOUj_JZZyqp1gU_4J8dCwt3bbH-A4C16D0">