Index: include/llvm/ObjectYAML/WasmYAML.h =================================================================== --- include/llvm/ObjectYAML/WasmYAML.h +++ include/llvm/ObjectYAML/WasmYAML.h @@ -88,7 +88,7 @@ RelocType Type; uint32_t Index; yaml::Hex32 Offset; - yaml::Hex32 Addend; + int32_t Addend; }; struct DataSegment { Index: lib/Object/WasmObjectFile.cpp =================================================================== --- lib/Object/WasmObjectFile.cpp +++ lib/Object/WasmObjectFile.cpp @@ -316,14 +316,15 @@ case wasm::R_WEBASSEMBLY_FUNCTION_INDEX_LEB: case wasm::R_WEBASSEMBLY_TABLE_INDEX_SLEB: case wasm::R_WEBASSEMBLY_TABLE_INDEX_I32: + case wasm::R_WEBASSEMBLY_TYPE_INDEX_LEB: break; case wasm::R_WEBASSEMBLY_GLOBAL_ADDR_LEB: case wasm::R_WEBASSEMBLY_GLOBAL_ADDR_SLEB: case wasm::R_WEBASSEMBLY_GLOBAL_ADDR_I32: - Reloc.Addend = readVaruint32(Ptr); + Reloc.Addend = readVarint32(Ptr); break; default: - return make_error("Bad relocation type", + return make_error("Bad relocation type: " + Twine(Reloc.Type), object_error::parse_failed); } Section->Relocations.push_back(Reloc); Index: lib/ObjectYAML/WasmYAML.cpp =================================================================== --- lib/ObjectYAML/WasmYAML.cpp +++ lib/ObjectYAML/WasmYAML.cpp @@ -223,7 +223,7 @@ IO.mapRequired("Type", Relocation.Type); IO.mapRequired("Index", Relocation.Index); IO.mapRequired("Offset", Relocation.Offset); - IO.mapRequired("Addend", Relocation.Addend); + IO.mapOptional("Addend", Relocation.Addend, 0); } void MappingTraits::mapping( Index: test/ObjectYAML/wasm/code_section.yaml =================================================================== --- test/ObjectYAML/wasm/code_section.yaml +++ test/ObjectYAML/wasm/code_section.yaml @@ -21,11 +21,9 @@ - Type: R_WEBASSEMBLY_TABLE_INDEX_SLEB Index: 0 Offset: 0x00000006 - Addend: 0x00000000 - Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB Index: 1 Offset: 0x00000025 - Addend: 0x00000000 Functions: - Locals: - Type: I32 @@ -56,11 +54,9 @@ # CHECK: - Type: R_WEBASSEMBLY_TABLE_INDEX_SLEB # CHECK: Index: 0 # CHECK: Offset: 0x00000006 -# CHECK: Addend: 0x00000000 # CHECK: - Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB # CHECK: Index: 1 # CHECK: Offset: 0x00000025 -# CHECK: Addend: 0x00000000 # CHECK: Functions: # CHECK: - Locals: # CHECK: - Type: I32 Index: test/ObjectYAML/wasm/data_section.yaml =================================================================== --- test/ObjectYAML/wasm/data_section.yaml +++ test/ObjectYAML/wasm/data_section.yaml @@ -13,16 +13,34 @@ Opcode: I32_CONST Value: 4 Content: '10001000' + Relocations: + - Type: R_WEBASSEMBLY_GLOBAL_ADDR_I32 + Index: 0 + Offset: 0x00000006 + Addend: 8 + - Type: R_WEBASSEMBLY_GLOBAL_ADDR_I32 + Index: 0 + Offset: 0x00000006 + Addend: -6 ... # CHECK: --- !WASM # CHECK: FileHeader: # CHECK: Version: 0x00000001 # CHECK: Sections: # CHECK: - Type: DATA -# CHECK: Segments: -# CHECK: - Index: 0 -# CHECK: Offset: -# CHECK: Opcode: I32_CONST -# CHECK: Value: 4 -# CHECK: Content: '10001000' -# CHECK: ... +# CHECK-NEXT: Relocations: +# CHECK-NEXT: - Type: R_WEBASSEMBLY_GLOBAL_ADDR_I32 +# CHECK-NEXT: Index: 0 +# CHECK-NEXT: Offset: 0x00000006 +# CHECK-NEXT: Addend: 8 +# CHECK-NEXT: - Type: R_WEBASSEMBLY_GLOBAL_ADDR_I32 +# CHECK-NEXT: Index: 0 +# CHECK-NEXT: Offset: 0x00000006 +# CHECK-NEXT: Addend: -6 +# CHECK-NEXT: Segments: +# CHECK-NEXT: - Index: 0 +# CHECK-NEXT: Offset: +# CHECK-NEXT: Opcode: I32_CONST +# CHECK-NEXT: Value: 4 +# CHECK-NEXT: Content: '10001000' +# CHECK-NEXT: ...