summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/ObjectYAML/WasmYAML.h2
-rw-r--r--llvm/lib/Object/WasmObjectFile.cpp5
-rw-r--r--llvm/lib/ObjectYAML/WasmYAML.cpp2
-rw-r--r--llvm/test/ObjectYAML/wasm/code_section.yaml4
-rw-r--r--llvm/test/ObjectYAML/wasm/data_section.yaml32
5 files changed, 30 insertions, 15 deletions
diff --git a/llvm/include/llvm/ObjectYAML/WasmYAML.h b/llvm/include/llvm/ObjectYAML/WasmYAML.h
index b1af8bbdfa6..dfeeb8589f8 100644
--- a/llvm/include/llvm/ObjectYAML/WasmYAML.h
+++ b/llvm/include/llvm/ObjectYAML/WasmYAML.h
@@ -88,7 +88,7 @@ struct Relocation {
RelocType Type;
uint32_t Index;
yaml::Hex32 Offset;
- yaml::Hex32 Addend;
+ int32_t Addend;
};
struct DataSegment {
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index e1b3c4e1f39..4e1f237e17c 100644
--- a/llvm/lib/Object/WasmObjectFile.cpp
+++ b/llvm/lib/Object/WasmObjectFile.cpp
@@ -316,14 +316,15 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, const uint8_t *Ptr,
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);
diff --git a/llvm/lib/ObjectYAML/WasmYAML.cpp b/llvm/lib/ObjectYAML/WasmYAML.cpp
index 1c7c07ae29e..9b1ff7e5dc1 100644
--- a/llvm/lib/ObjectYAML/WasmYAML.cpp
+++ b/llvm/lib/ObjectYAML/WasmYAML.cpp
@@ -223,7 +223,7 @@ void MappingTraits<WasmYAML::Relocation>::mapping(
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(
diff --git a/llvm/test/ObjectYAML/wasm/code_section.yaml b/llvm/test/ObjectYAML/wasm/code_section.yaml
index b75bf7e1cfd..5359d2a100c 100644
--- a/llvm/test/ObjectYAML/wasm/code_section.yaml
+++ b/llvm/test/ObjectYAML/wasm/code_section.yaml
@@ -21,11 +21,9 @@ Sections:
- 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 @@ Sections:
# 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
diff --git a/llvm/test/ObjectYAML/wasm/data_section.yaml b/llvm/test/ObjectYAML/wasm/data_section.yaml
index 542d0efe42f..b8c65abbff9 100644
--- a/llvm/test/ObjectYAML/wasm/data_section.yaml
+++ b/llvm/test/ObjectYAML/wasm/data_section.yaml
@@ -13,16 +13,34 @@ Sections:
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: ...
OpenPOWER on IntegriCloud