<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107387>107387</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[WebAssembly] non-pie dynamic-linking executable seems broken (LLVM 19 regression)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
yamt
</td>
</tr>
</table>
<pre>
build the following test code to a non-pie dynamically-linked executable.
llvm 19 produces non-working binary.
llvm 18 worked fine.
you can find the full test code and compiler/linker options in https://github.com/yamt/garbage/tree/master/c/shlib_2
```c
void f(void);
void (*f_p)(void) = f;
void
_start(void)
{
f_p();
}
```
```shell
spacetanuki% toywasm --dyld main
Error: [trap] uninitialized element (8): call_indirect (null funcref) 0
current pc 0000fd
frame[ 0] funcpc 0000e2 (main:_start)
2024-09-05 20:43:42 (1725536622.157386000): [10fb06600] instance_execute_func failed with -1
2024-09-05 20:43:42 (1725536622.157883000): [10fb06600] invoke failed with -1
spacetanuki%
```
note that llvm 19's __wasm_apply_data_relocs is empty.
llvm 19.1.0-rc4
```
(module $main
(type (;0;) (func))
(import "env" "f" (func $f (type 0)))
(func $__wasm_apply_data_relocs (type 0))
(func $_start (type 0)
global.get $GOT.data.internal.__memory_base
i32.const 1024
i32.add
i32.load
call_indirect (type 0))
(table (;0;) 1 funcref)
(memory (;0;) 2)
(global $__stack_pointer (mut i32) (i32.const 66576))
(global $GOT.data.internal.__memory_base i32 (i32.const 0))
(global (;2;) i32 (i32.const 66576))
(global (;3;) i32 (i32.const 131072))
(export "memory" (memory 0))
(export "__stack_pointer" (global $__stack_pointer))
(export "__wasm_apply_data_relocs" (func $__wasm_apply_data_relocs))
(export "_start" (func $_start))
(export "__indirect_function_table" (table 0))
(export "__heap_base" (global 2))
(export "__heap_end" (global 3))
(data $.data (i32.const 1024) "\00\00\00\00"))
```
llvm 18.1.2
```
(module $main
(type (;0;) (func))
(import "env" "f" (func $f (type 0)))
(import "GOT.func" "f" (global $f (mut i32)))
(func $__wasm_apply_data_relocs (type 0)
i32.const 1024
global.get $f
i32.store)
(func $_start (type 0)
global.get $GOT.data.internal.__memory_base
i32.const 1024
i32.add
i32.load
call_indirect (type 0))
(table (;0;) 1 funcref)
(memory (;0;) 2)
(global $__stack_pointer (mut i32) (i32.const 66576))
(global $GOT.data.internal.__memory_base i32 (i32.const 0))
(global (;3;) i32 (i32.const 66576))
(global (;4;) i32 (i32.const 131072))
(export "memory" (memory 0))
(export "__stack_pointer" (global $__stack_pointer))
(export "__wasm_apply_data_relocs" (func $__wasm_apply_data_relocs))
(export "_start" (func $_start))
(export "__indirect_function_table" (table 0))
(export "__heap_base" (global 3))
(export "__heap_end" (global 4))
(data $.data (i32.const 1024) "\00\00\00\00"))
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsV0Fv4zYT_TX0ZWCBoixZOvjgfPncyxa9FO1RoKSRzYYiBZJKVv31BSUmtuzEu9tFFyhQIJAUcubxzXDmmeTWiqNC3JH0gaSPKz64kza7kXduVelm3FWDkA24E0KrpdQvQh3BoXVQ6wbBaeCgtFr3AqEZFe9EzaUc11KoJ2wAP2M9OF5JjAh9JHQv5XMHcQG90c1Qo52cX7R58riVUNyMC8sc_CQ20Ar1ijHqAWqu_FBgNkh5QYqrBmrd9UKiIewwUTGgeye0siAUnJzrLUn2hB0IOxyFOw1VVOuOsIMP3I9xU_EjEnZwBv2r49ZNaDVhB3uSoirZzCY8Mzr_1fP_z1o00BKW-w_CCpI8XEwQlhO2b8vez7zZAEkeoX2zPNvPX6V13LgLyNlqG8xhgssv1yLbxyt271K2J5RyHrM9r9FxNTwJwlJwenzhtoP1uhllAx0Xarb7vzHakGQPJH1whvckfYRBCSWc4FL86XdeYofK-VBnTnvwlVEK1QiD9TSh_L61g6oNtj7-QK8ejPGufQ2UUtqG-FvDOyTpAwD1y3m_YIHMo03skrc0hfwwyjZrWqxpCoySZL9J_GNyiLcsTZMsYyyK022SZ5TSQJWkDzFtK5pldFpMKOu4qrGcCxpLvzq0XEhs4EW4E6zjb1wvz5N76z3rJ3x3gasturPBSjsEd-IOQtcRtrVQln5LS973ciwb7nhpUOragrCAXe9e-2_Rr1Ec0bWpN--vxvJON4NEIGxzrhHwMbuxx6nckwfq69JXOct99qbSLy5MRddr4-uCoXomzKeMtfN7cvDo7RsmDf4LiFezD2O89n7HdSqfpeFsdZS64jI6op_d_PTLr5FHjoRyaBSXUVl22GkzlhW3-IoMIBIW1VpZBzFlIYHTIG-apZXU_GLkpls-ID6p61WK44uuujCd-V3ZsqXNHOWcROt4_VT2egpxAhicZxp28RxZlqXb7IbZGeoLyfKYS8DbMN_APHcWuN_4fYGI900-8o2TmG7ZjTN-fi3LmXGoyJDLW6Jn-6sEBscPE3wX6f16vuqOj80-Rg5qyW574C6f18KchND_sJZTHQaguSbv5-aEvJ9bZZGXexsQnFA1S5_kxscH7yOJwkd-1YVTATOS_s_L7fLBFgzeFdZwNIniiH2TIP5QPVwg-AacF1nAnGuxXbb3dyrrffEDuNLSdulgnTb4rep8A_p9Ah3Gzxr9jwv0v1ifv1piv0KeN__J89-Q5x-lzrdK-2V13vwAdV41u6QpkoKvcBeO2VuWrU472rC8qTZtVWwzLLJ8gyyjcdvWNG6boopXYudP7LSgaRxvUpZFRdI2bVzkVcFp0aQZ2VDsuJCRV_1Im-NKWDvgLqbbJN-uJK9Q2un6zJjCF5hmJ_qPK7PzTutqOFqyoVJYZ88wTjg53bt_x2pvLXaVHP3Z_-o6PV2l_e34fJcGi9hZqIx-QuXz9-nTbz_7W7XBo0FrhVaEFavByN2dq64nEl7r3ug_sPY334m-JewQ4nvesb8CAAD__4jAlWw">