summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2018-04-26 18:15:32 +0000
committerSam Clegg <sbc@chromium.org>2018-04-26 18:15:32 +0000
commit6bb5a41f99445a9c067a699028d0d62a89953d12 (patch)
tree59de67347939a02dae85848660ca40e08469b216
parentb31f91897966d6f14c50ac22de8f8a15bcfc0812 (diff)
downloadbcm5719-llvm-6bb5a41f99445a9c067a699028d0d62a89953d12.tar.gz
bcm5719-llvm-6bb5a41f99445a9c067a699028d0d62a89953d12.zip
[WebAssembly] Add version to object file metadata
Summary: See https://github.com/WebAssembly/tool-conventions/issues/54 Subscribers: jfb, dschuff, jgravelle-google, aheejin, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D46069 llvm-svn: 330969
-rw-r--r--llvm/include/llvm/BinaryFormat/Wasm.h3
-rw-r--r--llvm/include/llvm/ObjectYAML/WasmYAML.h1
-rw-r--r--llvm/lib/MC/WasmObjectWriter.cpp3
-rw-r--r--llvm/lib/Object/WasmObjectFile.cpp8
-rw-r--r--llvm/lib/ObjectYAML/WasmYAML.cpp1
-rw-r--r--llvm/test/MC/WebAssembly/array-fill.ll4
-rw-r--r--llvm/test/MC/WebAssembly/bss.ll5
-rw-r--r--llvm/test/MC/WebAssembly/comdat.ll1
-rw-r--r--llvm/test/MC/WebAssembly/explicit-sections.ll5
-rw-r--r--llvm/test/MC/WebAssembly/global-ctor-dtor.ll1
-rw-r--r--llvm/test/MC/WebAssembly/unnamed-data.ll1
-rw-r--r--llvm/test/MC/WebAssembly/visibility.ll4
-rw-r--r--llvm/test/MC/WebAssembly/weak-alias.ll1
-rw-r--r--llvm/test/MC/WebAssembly/weak.ll4
-rw-r--r--llvm/test/Object/Inputs/trivial-object-test.wasmbin320 -> 324 bytes
-rw-r--r--llvm/test/Object/obj2yaml.test1
-rw-r--r--llvm/test/Object/wasm-bad-metadata-version.yaml11
-rw-r--r--llvm/test/ObjectYAML/wasm/code_section.yaml1
-rw-r--r--llvm/test/ObjectYAML/wasm/data_section.yaml1
-rw-r--r--llvm/test/ObjectYAML/wasm/invalid_global_weak.yaml1
-rw-r--r--llvm/test/ObjectYAML/wasm/linking_section.yaml5
-rw-r--r--llvm/test/ObjectYAML/wasm/weak_symbols.yaml1
-rw-r--r--llvm/test/tools/llvm-nm/wasm/exports.yaml1
-rw-r--r--llvm/test/tools/llvm-nm/wasm/imports.yaml1
-rw-r--r--llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml1
-rw-r--r--llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasmbin320 -> 324 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/wasm.txt2
-rw-r--r--llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasmbin291 -> 295 bytes
-rw-r--r--llvm/test/tools/llvm-readobj/sections.test4
-rw-r--r--llvm/tools/obj2yaml/wasm2yaml.cpp6
-rw-r--r--llvm/tools/yaml2obj/yaml2wasm.cpp1
31 files changed, 57 insertions, 22 deletions
diff --git a/llvm/include/llvm/BinaryFormat/Wasm.h b/llvm/include/llvm/BinaryFormat/Wasm.h
index dc28a3ccbfb..47657ca6675 100644
--- a/llvm/include/llvm/BinaryFormat/Wasm.h
+++ b/llvm/include/llvm/BinaryFormat/Wasm.h
@@ -24,6 +24,8 @@ namespace wasm {
const char WasmMagic[] = {'\0', 'a', 's', 'm'};
// Wasm binary format version
const uint32_t WasmVersion = 0x1;
+// Wasm linking metadata version
+const uint32_t WasmMetadataVersion = 0x1;
// Wasm uses a 64k page size
const uint32_t WasmPageSize = 65536;
@@ -161,6 +163,7 @@ struct WasmFunctionName {
};
struct WasmLinkingData {
+ uint32_t Version;
std::vector<WasmInitFunc> InitFunctions;
std::vector<StringRef> Comdats;
std::vector<WasmSymbolInfo> SymbolTable;
diff --git a/llvm/include/llvm/ObjectYAML/WasmYAML.h b/llvm/include/llvm/ObjectYAML/WasmYAML.h
index 1c5e77e101b..d794e1d69aa 100644
--- a/llvm/include/llvm/ObjectYAML/WasmYAML.h
+++ b/llvm/include/llvm/ObjectYAML/WasmYAML.h
@@ -195,6 +195,7 @@ struct LinkingSection : CustomSection {
return C && C->Name == "linking";
}
+ uint32_t Version;
std::vector<SymbolInfo> SymbolTable;
std::vector<SegmentInfo> SegmentInfos;
std::vector<InitFunction> InitFunctions;
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index 0f8a42aacec..0e122708504 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -857,8 +857,9 @@ void WasmObjectWriter::writeLinkingMetaDataSection(
const std::map<StringRef, std::vector<WasmComdatEntry>> &Comdats) {
SectionBookkeeping Section;
startCustomSection(Section, "linking");
- SectionBookkeeping SubSection;
+ encodeULEB128(wasm::WasmMetadataVersion, getStream());
+ SectionBookkeeping SubSection;
if (SymbolInfos.size() != 0) {
startSection(SubSection, wasm::WASM_SYMBOL_TABLE);
encodeULEB128(SymbolInfos.size(), getStream());
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index e6b7dded4e4..61db5d2468a 100644
--- a/llvm/lib/Object/WasmObjectFile.cpp
+++ b/llvm/lib/Object/WasmObjectFile.cpp
@@ -313,6 +313,14 @@ Error WasmObjectFile::parseLinkingSection(const uint8_t *Ptr,
"Linking data must come after code section", object_error::parse_failed);
}
+ LinkingData.Version = readVaruint32(Ptr);
+ if (LinkingData.Version != wasm::WasmMetadataVersion) {
+ return make_error<GenericBinaryError>(
+ "Unexpected metadata version: " + Twine(LinkingData.Version) +
+ " (Expected: " + Twine(wasm::WasmMetadataVersion) + ")",
+ object_error::parse_failed);
+ }
+
while (Ptr < End) {
uint8_t Type = readUint8(Ptr);
uint32_t Size = readVaruint32(Ptr);
diff --git a/llvm/lib/ObjectYAML/WasmYAML.cpp b/llvm/lib/ObjectYAML/WasmYAML.cpp
index 72df93b876a..ff75bfc7676 100644
--- a/llvm/lib/ObjectYAML/WasmYAML.cpp
+++ b/llvm/lib/ObjectYAML/WasmYAML.cpp
@@ -57,6 +57,7 @@ static void sectionMapping(IO &IO, WasmYAML::NameSection &Section) {
static void sectionMapping(IO &IO, WasmYAML::LinkingSection &Section) {
commonSectionMapping(IO, Section);
IO.mapRequired("Name", Section.Name);
+ IO.mapRequired("Version", Section.Version);
IO.mapOptional("SymbolTable", Section.SymbolTable);
IO.mapOptional("SegmentInfo", Section.SegmentInfos);
IO.mapOptional("InitFunctions", Section.InitFunctions);
diff --git a/llvm/test/MC/WebAssembly/array-fill.ll b/llvm/test/MC/WebAssembly/array-fill.ll
index 928db062af5..443032783b0 100644
--- a/llvm/test/MC/WebAssembly/array-fill.ll
+++ b/llvm/test/MC/WebAssembly/array-fill.ll
@@ -12,9 +12,7 @@ target triple = "wasm32-unknown-unknown-wasm"
; CHECK: - Type: DATA
; CHECK: Content: '0102'
-; CHECK: - Type: CUSTOM
-; CHECK-NEXT: Name: linking
-; CHECK-NEXT: SymbolTable:
+; CHECK: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: DATA
; CHECK-NEXT: Name: gBd
diff --git a/llvm/test/MC/WebAssembly/bss.ll b/llvm/test/MC/WebAssembly/bss.ll
index 3147aa50552..9ffeacc3ed6 100644
--- a/llvm/test/MC/WebAssembly/bss.ll
+++ b/llvm/test/MC/WebAssembly/bss.ll
@@ -35,9 +35,8 @@ target triple = "wasm32-unknown-unknown-wasm"
; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 8
; CHECK-NEXT: Content: ''
-; CHECK-NEXT: - Type: CUSTOM
-; CHECK-NEXT: Name: linking
-; CHECK-NEXT: SymbolTable:
+
+; CHECK: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: DATA
; CHECK-NEXT: Name: g0
diff --git a/llvm/test/MC/WebAssembly/comdat.ll b/llvm/test/MC/WebAssembly/comdat.ll
index 7812e287d32..03c5d751254 100644
--- a/llvm/test/MC/WebAssembly/comdat.ll
+++ b/llvm/test/MC/WebAssembly/comdat.ll
@@ -75,6 +75,7 @@ define linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) {
; CHECK-NEXT: Content: '616263'
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
+; CHECK-NEXT: Version: 1
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/explicit-sections.ll b/llvm/test/MC/WebAssembly/explicit-sections.ll
index 9b76927c378..067f3b30ccc 100644
--- a/llvm/test/MC/WebAssembly/explicit-sections.ll
+++ b/llvm/test/MC/WebAssembly/explicit-sections.ll
@@ -30,9 +30,8 @@ target triple = "wasm32-unknown-unknown-wasm"
; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 24
; CHECK-NEXT: Content: '08000000'
-; CHECK-NEXT: - Type: CUSTOM
-; CHECK-NEXT: Name: linking
-; CHECK-NEXT: SymbolTable:
+
+; CHECK: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: DATA
; CHECK-NEXT: Name: global0
diff --git a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll
index c81e9ad8e98..1f1358fa832 100644
--- a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll
+++ b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll
@@ -110,6 +110,7 @@ declare void @func3()
; CHECK-NEXT: Content: '01040000'
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
+; CHECK-NEXT: Version: 1
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/unnamed-data.ll b/llvm/test/MC/WebAssembly/unnamed-data.ll
index 424209edcf1..ee5abed7b52 100644
--- a/llvm/test/MC/WebAssembly/unnamed-data.ll
+++ b/llvm/test/MC/WebAssembly/unnamed-data.ll
@@ -44,6 +44,7 @@ target triple = "wasm32-unknown-unknown-wasm"
; CHECK-NEXT: Content: '06000000'
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
+; CHECK-NEXT: Version: 1
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: DATA
diff --git a/llvm/test/MC/WebAssembly/visibility.ll b/llvm/test/MC/WebAssembly/visibility.ll
index 8bdaa1ebf66..49a922dad4c 100644
--- a/llvm/test/MC/WebAssembly/visibility.ll
+++ b/llvm/test/MC/WebAssembly/visibility.ll
@@ -14,9 +14,7 @@ entry:
ret void
}
-; CHECK: - Type: CUSTOM
-; CHECK-NEXT: Name: linking
-; CHECK-NEXT: SymbolTable:
+; CHECK: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Name: defaultVis
diff --git a/llvm/test/MC/WebAssembly/weak-alias.ll b/llvm/test/MC/WebAssembly/weak-alias.ll
index b9d855c3d26..fee055f2c32 100644
--- a/llvm/test/MC/WebAssembly/weak-alias.ll
+++ b/llvm/test/MC/WebAssembly/weak-alias.ll
@@ -138,6 +138,7 @@ entry:
; CHECK-NEXT: Content: '01000000'
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
+; CHECK-NEXT: Version: 1
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/weak.ll b/llvm/test/MC/WebAssembly/weak.ll
index f0402259350..1ba48faadfb 100644
--- a/llvm/test/MC/WebAssembly/weak.ll
+++ b/llvm/test/MC/WebAssembly/weak.ll
@@ -20,9 +20,7 @@ entry:
; CHECK-NEXT: Field: __indirect_function_table
-; CHECK: - Type: CUSTOM
-; CHECK-NEXT: Name: linking
-; CHECK-NEXT: SymbolTable:
+; CHECK: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Name: weak_function
diff --git a/llvm/test/Object/Inputs/trivial-object-test.wasm b/llvm/test/Object/Inputs/trivial-object-test.wasm
index f992b12d161..2aa042d54dc 100644
--- a/llvm/test/Object/Inputs/trivial-object-test.wasm
+++ b/llvm/test/Object/Inputs/trivial-object-test.wasm
Binary files differ
diff --git a/llvm/test/Object/obj2yaml.test b/llvm/test/Object/obj2yaml.test
index 235b461ca58..d9540d4422f 100644
--- a/llvm/test/Object/obj2yaml.test
+++ b/llvm/test/Object/obj2yaml.test
@@ -651,6 +651,7 @@ WASM-NEXT: FileHeader:
WASM-NEXT: Version: 0x00000001
WASM: - Type: CUSTOM
WASM-NEXT: Name: linking
+WASM-NEXT: Version: 1
WASM-NEXT: SymbolTable:
WASM-NEXT: - Index: 0
WASM-NEXT: Kind: FUNCTION
diff --git a/llvm/test/Object/wasm-bad-metadata-version.yaml b/llvm/test/Object/wasm-bad-metadata-version.yaml
new file mode 100644
index 00000000000..b2970bb59ea
--- /dev/null
+++ b/llvm/test/Object/wasm-bad-metadata-version.yaml
@@ -0,0 +1,11 @@
+# RUN: yaml2obj %s | not llvm-objdump -h - 2>&1 | FileCheck %s
+
+!WASM
+FileHeader:
+ Version: 0x00000001
+Sections:
+ - Type: CUSTOM
+ Name: linking
+ Version: 0
+
+# CHECK: {{.*}}: Unexpected metadata version: 0 (Expected: 1)
diff --git a/llvm/test/ObjectYAML/wasm/code_section.yaml b/llvm/test/ObjectYAML/wasm/code_section.yaml
index 62f60d65424..0d7cf61638b 100644
--- a/llvm/test/ObjectYAML/wasm/code_section.yaml
+++ b/llvm/test/ObjectYAML/wasm/code_section.yaml
@@ -39,6 +39,7 @@ Sections:
Body: 108180808000210020000F0B
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: FUNCTION
diff --git a/llvm/test/ObjectYAML/wasm/data_section.yaml b/llvm/test/ObjectYAML/wasm/data_section.yaml
index 5c9b688f9c1..ef5945dcaac 100644
--- a/llvm/test/ObjectYAML/wasm/data_section.yaml
+++ b/llvm/test/ObjectYAML/wasm/data_section.yaml
@@ -24,6 +24,7 @@ Sections:
Addend: -6
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: DATA
diff --git a/llvm/test/ObjectYAML/wasm/invalid_global_weak.yaml b/llvm/test/ObjectYAML/wasm/invalid_global_weak.yaml
index 557882dcaab..c364075e2e4 100644
--- a/llvm/test/ObjectYAML/wasm/invalid_global_weak.yaml
+++ b/llvm/test/ObjectYAML/wasm/invalid_global_weak.yaml
@@ -13,6 +13,7 @@ Sections:
GlobalMutable: false
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: GLOBAL
diff --git a/llvm/test/ObjectYAML/wasm/linking_section.yaml b/llvm/test/ObjectYAML/wasm/linking_section.yaml
index 0c2c86404ae..d1f0243037d 100644
--- a/llvm/test/ObjectYAML/wasm/linking_section.yaml
+++ b/llvm/test/ObjectYAML/wasm/linking_section.yaml
@@ -29,6 +29,7 @@ Sections:
Content: '11110000'
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: FUNCTION
@@ -48,9 +49,7 @@ Sections:
- Priority: 1
Symbol: 0
...
-# CHECK: - Type: CUSTOM
-# CHECK-NEXT: Name: linking
-# CHECK-NEXT: SymbolTable:
+# CHECK: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
# CHECK-NEXT: Name: bar
diff --git a/llvm/test/ObjectYAML/wasm/weak_symbols.yaml b/llvm/test/ObjectYAML/wasm/weak_symbols.yaml
index 3957caae74f..3e9ca34deac 100644
--- a/llvm/test/ObjectYAML/wasm/weak_symbols.yaml
+++ b/llvm/test/ObjectYAML/wasm/weak_symbols.yaml
@@ -36,6 +36,7 @@ Sections:
Body: 00
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: FUNCTION
diff --git a/llvm/test/tools/llvm-nm/wasm/exports.yaml b/llvm/test/tools/llvm-nm/wasm/exports.yaml
index de87978fd94..55d2b76470a 100644
--- a/llvm/test/tools/llvm-nm/wasm/exports.yaml
+++ b/llvm/test/tools/llvm-nm/wasm/exports.yaml
@@ -37,6 +37,7 @@ Sections:
Content: '616263'
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: FUNCTION
diff --git a/llvm/test/tools/llvm-nm/wasm/imports.yaml b/llvm/test/tools/llvm-nm/wasm/imports.yaml
index 23f7218401d..9696972de4d 100644
--- a/llvm/test/tools/llvm-nm/wasm/imports.yaml
+++ b/llvm/test/tools/llvm-nm/wasm/imports.yaml
@@ -25,6 +25,7 @@ Sections:
GlobalMutable: false
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: FUNCTION
diff --git a/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml b/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml
index e758194e2ff..caa981df436 100644
--- a/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml
+++ b/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml
@@ -43,6 +43,7 @@ Sections:
Content: '616263'
- Type: CUSTOM
Name: linking
+ Version: 1
SymbolTable:
- Index: 0
Kind: DATA
diff --git a/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm b/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm
index f992b12d161..2aa042d54dc 100644
--- a/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm
+++ b/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/wasm.txt b/llvm/test/tools/llvm-objdump/wasm.txt
index 622df7bcd94..d24db89188e 100644
--- a/llvm/test/tools/llvm-objdump/wasm.txt
+++ b/llvm/test/tools/llvm-objdump/wasm.txt
@@ -7,7 +7,7 @@
# CHECK-NEXT: 2 FUNCTION 00000002 0000000000000000
# CHECK-NEXT: 3 CODE 00000019 0000000000000000 TEXT
# CHECK-NEXT: 4 DATA 0000001c 0000000000000000 DATA
-# CHECK-NEXT: 5 linking 0000004d 0000000000000000
+# CHECK-NEXT: 5 linking 00000051 0000000000000000
# CHECK-NEXT: 6 reloc.CODE 0000000c 0000000000000000
# RUN: llvm-objdump -p %p/Inputs/trivial.obj.wasm | FileCheck %s -check-prefix CHECK-HEADER
diff --git a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
index 15700e91973..0e3efb66a7f 100644
--- a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
+++ b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
Binary files differ
diff --git a/llvm/test/tools/llvm-readobj/sections.test b/llvm/test/tools/llvm-readobj/sections.test
index a5fa7f51060..4900c4f57b6 100644
--- a/llvm/test/tools/llvm-readobj/sections.test
+++ b/llvm/test/tools/llvm-readobj/sections.test
@@ -528,14 +528,14 @@ WASM-NEXT: ]
WASM-NEXT: }
WASM-NEXT: Section {
WASM-NEXT: Type: CUSTOM (0x0)
-WASM-NEXT: Size: 57
+WASM-NEXT: Size: 61
WASM-NEXT: Offset: 191
WASM-NEXT: Name: linking
WASM-NEXT: }
WASM-NEXT: Section {
WASM-NEXT: Type: CUSTOM (0x0)
WASM-NEXT: Size: 12
-WASM-NEXT: Offset: 262
+WASM-NEXT: Offset: 266
WASM-NEXT: Name: reloc.CODE
WASM-NEXT: }
WASM-NEXT: ]
diff --git a/llvm/tools/obj2yaml/wasm2yaml.cpp b/llvm/tools/obj2yaml/wasm2yaml.cpp
index 29bf9b5e25e..55fc2bf9234 100644
--- a/llvm/tools/obj2yaml/wasm2yaml.cpp
+++ b/llvm/tools/obj2yaml/wasm2yaml.cpp
@@ -62,6 +62,8 @@ std::unique_ptr<WasmYAML::CustomSection> WasmDumper::dumpCustomSection(const Was
CustomSec = std::move(NameSec);
} else if (WasmSec.Name == "linking") {
std::unique_ptr<WasmYAML::LinkingSection> LinkingSec = make_unique<WasmYAML::LinkingSection>();
+ LinkingSec->Version = Obj.linkingData().Version;
+
ArrayRef<StringRef> Comdats = Obj.linkingData().Comdats;
for (StringRef ComdatName : Comdats)
LinkingSec->Comdats.emplace_back(WasmYAML::Comdat{ComdatName, {}});
@@ -71,6 +73,7 @@ std::unique_ptr<WasmYAML::CustomSection> WasmDumper::dumpCustomSection(const Was
WasmYAML::ComdatEntry{wasm::WASM_COMDAT_FUNCTION, Func.Index});
}
}
+
uint32_t SegmentIndex = 0;
for (const object::WasmSegment &Segment : Obj.dataSegments()) {
if (!Segment.Data.Name.empty()) {
@@ -87,6 +90,7 @@ std::unique_ptr<WasmYAML::CustomSection> WasmDumper::dumpCustomSection(const Was
}
SegmentIndex++;
}
+
uint32_t SymbolIndex = 0;
for (const wasm::WasmSymbolInfo &Symbol : Obj.linkingData().SymbolTable) {
WasmYAML::SymbolInfo Info;
@@ -105,10 +109,12 @@ std::unique_ptr<WasmYAML::CustomSection> WasmDumper::dumpCustomSection(const Was
}
LinkingSec->SymbolTable.emplace_back(Info);
}
+
for (const wasm::WasmInitFunc &Func : Obj.linkingData().InitFunctions) {
WasmYAML::InitFunction F{Func.Priority, Func.Symbol};
LinkingSec->InitFunctions.emplace_back(F);
}
+
CustomSec = std::move(LinkingSec);
} else {
CustomSec = make_unique<WasmYAML::CustomSection>(WasmSec.Name);
diff --git a/llvm/tools/yaml2obj/yaml2wasm.cpp b/llvm/tools/yaml2obj/yaml2wasm.cpp
index 9b2a98d8048..9be2f09125a 100644
--- a/llvm/tools/yaml2obj/yaml2wasm.cpp
+++ b/llvm/tools/yaml2obj/yaml2wasm.cpp
@@ -134,6 +134,7 @@ public:
int WasmWriter::writeSectionContent(raw_ostream &OS, WasmYAML::LinkingSection &Section) {
writeStringRef(Section.Name, OS);
+ encodeULEB128(Section.Version, OS);
SubSectionWriter SubSection(OS);
OpenPOWER on IntegriCloud