[lld] [lld][WebAssembly] Add missing relocation types to the --compress-relocs path (PR #144578)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 17 11:50:52 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lld
Author: None (SingleAccretion)
<details>
<summary>Changes</summary>
Fixes https://github.com/llvm/llvm-project/issues/110045.
Reloc list reference:
```
+ Already handled
A Added in this change
= Not applicable / expected (though technically legal, e. g. you can relocate v128.const...)
+ R_WASM_FUNCTION_INDEX_LEB, 0
+ R_WASM_TABLE_INDEX_SLEB, 1
= R_WASM_TABLE_INDEX_I32, 2
+ R_WASM_MEMORY_ADDR_LEB, 3
+ R_WASM_MEMORY_ADDR_SLEB, 4
= R_WASM_MEMORY_ADDR_I32, 5
+ R_WASM_TYPE_INDEX_LEB, 6
+ R_WASM_GLOBAL_INDEX_LEB, 7
= R_WASM_FUNCTION_OFFSET_I32, 8
= R_WASM_SECTION_OFFSET_I32, 9
+ R_WASM_TAG_INDEX_LEB, 10
A R_WASM_MEMORY_ADDR_REL_SLEB, 11
A R_WASM_TABLE_INDEX_REL_SLEB, 12
= R_WASM_GLOBAL_INDEX_I32, 13
+ R_WASM_MEMORY_ADDR_LEB64, 14
+ R_WASM_MEMORY_ADDR_SLEB64, 15
= R_WASM_MEMORY_ADDR_I64, 16
A R_WASM_MEMORY_ADDR_REL_SLEB64, 17
+ R_WASM_TABLE_INDEX_SLEB64, 18
= R_WASM_TABLE_INDEX_I64, 19
+ R_WASM_TABLE_NUMBER_LEB, 20
A R_WASM_MEMORY_ADDR_TLS_SLEB, 21
= R_WASM_FUNCTION_OFFSET_I64, 22
= R_WASM_MEMORY_ADDR_LOCREL_I32, 23
A R_WASM_TABLE_INDEX_REL_SLEB64, 24
A R_WASM_MEMORY_ADDR_TLS_SLEB64, 25
= R_WASM_FUNCTION_INDEX_I32, 26
```
---
Full diff: https://github.com/llvm/llvm-project/pull/144578.diff
1 Files Affected:
- (modified) lld/wasm/InputChunks.cpp (+12)
``````````diff
diff --git a/lld/wasm/InputChunks.cpp b/lld/wasm/InputChunks.cpp
index 9383dcaeb4f55..af35c83e35c9b 100644
--- a/lld/wasm/InputChunks.cpp
+++ b/lld/wasm/InputChunks.cpp
@@ -225,8 +225,14 @@ static unsigned writeCompressedReloc(uint8_t *buf, const WasmRelocation &rel,
return encodeULEB128(value, buf);
case R_WASM_TABLE_INDEX_SLEB:
case R_WASM_TABLE_INDEX_SLEB64:
+ case R_WASM_TABLE_INDEX_REL_SLEB64:
case R_WASM_MEMORY_ADDR_SLEB:
case R_WASM_MEMORY_ADDR_SLEB64:
+ case R_WASM_MEMORY_ADDR_REL_SLEB:
+ case R_WASM_MEMORY_ADDR_REL_SLEB64:
+ case R_WASM_MEMORY_ADDR_TLS_SLEB:
+ case R_WASM_MEMORY_ADDR_TLS_SLEB64:
+ case R_WASM_TABLE_INDEX_REL_SLEB:
return encodeSLEB128(static_cast<int64_t>(value), buf);
default:
llvm_unreachable("unexpected relocation type");
@@ -242,11 +248,17 @@ static unsigned getRelocWidthPadded(const WasmRelocation &rel) {
case R_WASM_MEMORY_ADDR_LEB:
case R_WASM_TABLE_NUMBER_LEB:
case R_WASM_TABLE_INDEX_SLEB:
+ case R_WASM_TABLE_INDEX_REL_SLEB:
case R_WASM_MEMORY_ADDR_SLEB:
+ case R_WASM_MEMORY_ADDR_REL_SLEB:
+ case R_WASM_MEMORY_ADDR_TLS_SLEB:
return 5;
case R_WASM_TABLE_INDEX_SLEB64:
+ case R_WASM_TABLE_INDEX_REL_SLEB64:
case R_WASM_MEMORY_ADDR_LEB64:
case R_WASM_MEMORY_ADDR_SLEB64:
+ case R_WASM_MEMORY_ADDR_REL_SLEB64:
+ case R_WASM_MEMORY_ADDR_TLS_SLEB64:
return 10;
default:
llvm_unreachable("unexpected relocation type");
``````````
</details>
https://github.com/llvm/llvm-project/pull/144578
More information about the llvm-commits
mailing list