[lld] [lld][WebAssembly] Add missing relocation types to the --compress-relocations path (PR #144578)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 18 10:57:00 PDT 2025
================
@@ -0,0 +1,93 @@
+# RUN: llvm-mc -filetype=obj -triple=wasm64-unknown-unknown %s -o %t.o
+# RUN: wasm-ld -mwasm64 --export-dynamic -o %t.wasm %t.o
+# RUN: llvm-objdump -d %t.wasm | FileCheck %s
+# RUN: wasm-ld -mwasm64 --export-dynamic -O2 -o %t-opt.wasm %t.o
+# RUN: llvm-objdump -d %t-opt.wasm | FileCheck %s
+# RUN: wasm-ld -mwasm64 --export-dynamic --strip-debug --compress-relocations -o %t-compressed.wasm %t.o
+# RUN: llvm-objdump -d %t-compressed.wasm | FileCheck %s -check-prefix=COMPRESS
+
+ .globl _start
+_start:
+ .functype _start () -> ()
+ end_function
+
+ .globl func_ret_i64
+func_ret_i64:
+ .functype func_ret_i64 () -> (i64)
+ i64.const 1
+ end_function
+
+ .globl func_ret_i32
+func_ret_i32:
+ .functype func_ret_i32 () -> (i32)
+ i32.const 2
+ end_function
+
+ .globl test_memory_and_indirect_call_relocs
+test_memory_and_indirect_call_relocs:
+ .functype test_memory_and_indirect_call_relocs () -> ()
+ i64.const indirect_func_ret_i64 # R_WASM_MEMORY_ADDR_SLEB64
+ drop
+ i64.const 0
+ i64.load indirect_func_ret_i32 # R_WASM_MEMORY_ADDR_LEB64
+ drop
+ i64.const func_ret_i64 # R_WASM_TABLE_INDEX_SLEB64
+ drop
+ end_function
+
+# CHECK: test_memory_and_indirect_call_relocs
+# CHECK: 42 90 88 80 80 80 80 80 80 80 00 i64.const 1040
+# CHECK: 29 03 98 88 80 80 80 80 80 80 80 00 i64.load 1048
+# CHECK: 42 81 80 80 80 80 80 80 80 80 00 i64.const 1
+# COMPRESS: test_memory_and_indirect_call_relocs
+# COMPRESS: 42 90 08 i64.const 1040
+# COMPRESS: 29 03 98 08 i64.load 1048
+# COMPRESS: 42 01 i64.const 1
+
+ .globl test_special_relocs
+test_special_relocs:
+ .functype test_special_relocs () -> ()
+ i64.const indirect_func_ret_i64 at MBREL # R_WASM_MEMORY_ADDR_REL_SLEB64
+ drop
+ i64.const func_ret_i32 at TBREL # R_WASM_TABLE_INDEX_REL_SLEB64
+ drop
+ i64.const i32_tls_data at TLSREL # R_WASM_MEMORY_ADDR_TLS_SLEB64
+ drop
+ end_function
+
+# CHECK: test_special_relocs
+# CHECK: 42 90 88 80 80 80 80 80 80 80 00 i64.const 1040
+# CHECK: 42 81 80 80 80 80 80 80 80 80 00 i64.const 1
+# CHECK: 42 83 80 80 80 80 80 80 80 80 00 i64.const 3
+# COMPRESS: test_special_relocs
+# COMPRESS: 42 90 08 i64.const 1040
+# COMPRESS: 42 01 i64.const 1
+# COMPRESS: 42 03 i64.const 3
+
+ .section .tdata,"T",@
+ .int8 0
+ .int8 0
+ .int8 0
+i32_tls_data:
+ .int32 65
+ .size i32_tls_data, 4
+
+ .section .data,"",@
+ .p2align 4
+indirect_func_ret_i64:
+ .int64 func_ret_i64
+ .size indirect_func_ret_i64, 8
+
+indirect_func_ret_i32:
+ .int64 func_ret_i32
+ .size indirect_func_ret_i32, 8
+
+.section .custom_section.target_features,"",@
+ .int8 2
+ .int8 43
+ .int8 7
+ .ascii "atomics"
+ .int8 43
+ .int8 11
+ .ascii "bulk-memory"
+
----------------
SingleAccretion wrote:
Done.
https://github.com/llvm/llvm-project/pull/144578
More information about the llvm-commits
mailing list