<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/65001>65001</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Common symbols cause undefined symbol error in wasm-ld
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
TerrorJack
</td>
</tr>
</table>
<pre>
It seems common symbols still have issues in wasm as of trunk today. For the following c source:
```c
char foo[4];
```
`clang -fcommon` emits:
```
.hidden foo # @foo
.type foo,@object
.comm foo,4,0
```
Which translates to the following linking section:
```
Custom:
- name: "linking"
- symbol table [count=1]
- 0: D <foo> [ undefined binding=global vis=hidden ]
```
When attempting to link with the following c source:
```c
#include <stdio.h>
extern char foo[4];
int main() {
foo[0] = '\0';
puts(foo);
}
```
`wasm-ld` reports `wasm-ld: error: foo.o: undefined symbol: foo`. However, the same compilation/linking flags work for x86_64-linux.
AFAIK the current linking convention does not allow attaching a required buffer length to an undefined data symbol that's supposed to be a common symbol, so they can't be implemented correctly by `wasm-ld` anyway. But still, the link-time error is not quite informative of the status quo, and it would be nice to drop incorrect `.comm` directive support for the wasm assembler, or make the `clang` driver panic loudly for `-fcommon` on wasm targets.
Possibly related: #55270
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVU2T8jYM_jXmooExzgdw4LDAy_RtLz10pseOYyvEXcfO2jIs_77jBNiPzu7hZZgkxNKD9Eh6JGM0J4e4ZdWOVYeZTNT5sP0LQ_Dhd6meZ43X1-1PgojYR1C-772DeO0bbyNEMtZCJ88IJsaEEYyDi4w9yAi-BQrJPQN5La8LOPoA1CG03lp_Me4ECqJPQSErnhg_MH6_1nz6qum36mSA1ntW7UpWHVix-2T3yVlZ6U4wb6dgWc0Be0Pxq3-5v9wsOqM1OsY3rffw3YeJAljJc0wPZ7oOOLkysWcl982_qOjtPEfzOC-Z2PNvsvi7M6oDCtJFKwkjkP_EnTXuOd8jKjLefZ_cPkXy_cMG5uBkn2kHJsQNiQlxO4X5rcBAsrEIrNopnxyx4rDM_N-sYA48QxyAFfucVvEjm0JyGlvjUENjnM7IxeFkfSMtnE1kxWGiGR5QXzCADiQR9gPlPMmPKcPFUPdrbcREYZyySWMOOJI2ftGx4sd7H3wlDA6-7LjxahxBL41jYs3EBthqd6dkcuGsypwcgIkVq_Y83-4IMCSKTKzHNti8Aa--44LVPA_V3OrczAEHHyjCu7fFE4wTmx9a7xc-P7zVYarm7ZDVfAG_-QueMTCxH7mMssc824Oxcuwmcbz3V2vlKcLFh2dofYDXdf1PXc6tcel18T7Gp-PTzz9GMJVCQEePDlXendFlWNAeIzhPIHPtcnml6rKNhIAvyYTcNKltMYBFd8qV9iDdu1S0JPnozk4SE6sIMQ2Dj6izdYMgP8pUTjKO43MFJR0TK8pWph8s9ugINSgfAiqyV2iu8JFt6a6XrF67RJPc3TnL6c3J9DhRD2bK7CUZQjCu9aGXZM446mDmmCSlCC8pzz9Ip8EQXHyyOkfjjMIcvg5-AONuAeVYJuGoOWiTX2XEMd9AY0Ey9E1xI_aNnYrqA_TyGcfTuyKOGMGcMcAgnVFgfdL2OqKwmr_XS39TcZLhhBQ_FPpPH6Np7BUCZmnSk4oUVSVWfKa3hd4UGznD7bLeFFzwZVnMum2xlli1Vbks9bqslq0oVFVrXfH1arVRm2ZmtoKLgq9FzQshRLHQq3XN1-u64mvZFsuSlRx7aezC2nO_8OE0GzfOtq44X86sbNDG-xYL22w0b9IpspJbEym-uZEhi9v9x0WmZIr4v4m5V3ZiY271LAW77YiGcZmIIxPHk6EuNblIeWjs-X6bD8GPC0Acp9XIxHGM9b8AAAD__xOxSoM">