From cadcb9eb6131e30b38e67991fbf034e22c7c0bfd Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Wed, 26 Jun 2019 00:52:42 +0000 Subject: [WebAssembly] Fix list of relocations with addends in lld Summary: The list of relocations with addend in lld was missing `R_WASM_MEMORY_ADDR_REL_SLEB`, causing `wasm-ld` to generate corrupted output. This fixes that problem and while we're at it pulls the list of such relocations into the Wasm.h header, to avoid duplicating it in multiple places. Reviewers: sbc100 Differential Revision: https://reviews.llvm.org/D63696 llvm-svn: 364367 --- llvm/lib/BinaryFormat/Wasm.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'llvm/lib/BinaryFormat/Wasm.cpp') diff --git a/llvm/lib/BinaryFormat/Wasm.cpp b/llvm/lib/BinaryFormat/Wasm.cpp index 1d36b2cb6fb..d46be481edb 100644 --- a/llvm/lib/BinaryFormat/Wasm.cpp +++ b/llvm/lib/BinaryFormat/Wasm.cpp @@ -35,3 +35,17 @@ std::string llvm::wasm::relocTypetoString(uint32_t Type) { llvm_unreachable("unknown reloc type"); } } + +bool llvm::wasm::relocTypeHasAddend(uint32_t Type) { + switch (Type) { + case R_WASM_MEMORY_ADDR_LEB: + case R_WASM_MEMORY_ADDR_SLEB: + case R_WASM_MEMORY_ADDR_REL_SLEB: + case R_WASM_MEMORY_ADDR_I32: + case R_WASM_FUNCTION_OFFSET_I32: + case R_WASM_SECTION_OFFSET_I32: + return true; + default: + return false; + } +} -- cgit v1.2.3