Summary:
Addends are used as offsets to addresses of globals
and can be both positive and negative. This change
prints libObject in line with the spec and the MC
layer.
Subscribers: jfb, dschuff
Differential Revision: https://reviews.llvm.org/D32507
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301369
91177308-0d34-0410-b5e6-
96231b3b80d8
RelocType Type;
uint32_t Index;
yaml::Hex32 Offset;
- yaml::Hex32 Addend;
+ int32_t Addend;
};
struct DataSegment {
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<GenericBinaryError>("Bad relocation type",
+ return make_error<GenericBinaryError>("Bad relocation type: " + Twine(Reloc.Type),
object_error::parse_failed);
}
Section->Relocations.push_back(Reloc);
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<WasmYAML::LocalDecl>::mapping(
- 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
# 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
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: ...