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