<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">