diff options
author | Wouter van Oortmerssen <aardappel@gmail.com> | 2020-11-12 15:05:05 -0800 |
---|---|---|
committer | Wouter van Oortmerssen <aardappel@gmail.com> | 2020-11-13 09:32:31 -0800 |
commit | 16f02431dc53af2b8acbc60d7cc1aafdad59a9f9 (patch) | |
tree | aa528f185e1de7ce3f6a5033c05f31108213266c /llvm/lib/Object/WasmObjectFile.cpp | |
parent | e11195d0a93239b4bb2d0df6fe0b4f1d573af9ba (diff) | |
download | llvm-16f02431dc53af2b8acbc60d7cc1aafdad59a9f9.zip llvm-16f02431dc53af2b8acbc60d7cc1aafdad59a9f9.tar.gz llvm-16f02431dc53af2b8acbc60d7cc1aafdad59a9f9.tar.bz2 |
[WebAssembly] Added R_WASM_FUNCTION_OFFSET_I64 for use with DWARF DW_AT_low_pc
Needed for wasm64, see discussion in https://reviews.llvm.org/D91203
Differential Revision: https://reviews.llvm.org/D91395
Diffstat (limited to 'llvm/lib/Object/WasmObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/WasmObjectFile.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp index 63f2742..82aa1f5 100644 --- a/llvm/lib/Object/WasmObjectFile.cpp +++ b/llvm/lib/Object/WasmObjectFile.cpp @@ -876,6 +876,12 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, ReadContext &Ctx) { object_error::parse_failed); Reloc.Addend = readVarint32(Ctx); break; + case wasm::R_WASM_FUNCTION_OFFSET_I64: + if (!isValidFunctionSymbol(Reloc.Index)) + return make_error<GenericBinaryError>("Bad relocation function index", + object_error::parse_failed); + Reloc.Addend = readVarint64(Ctx); + break; case wasm::R_WASM_SECTION_OFFSET_I32: if (!isValidSectionSymbol(Reloc.Index)) return make_error<GenericBinaryError>("Bad relocation section index", @@ -903,7 +909,8 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, ReadContext &Ctx) { Reloc.Type == wasm::R_WASM_GLOBAL_INDEX_I32) Size = 4; if (Reloc.Type == wasm::R_WASM_TABLE_INDEX_I64 || - Reloc.Type == wasm::R_WASM_MEMORY_ADDR_I64) + Reloc.Type == wasm::R_WASM_MEMORY_ADDR_I64 || + Reloc.Type == wasm::R_WASM_FUNCTION_OFFSET_I64) Size = 8; if (Reloc.Offset + Size > EndOffset) return make_error<GenericBinaryError>("Bad relocation offset", |