[lld] [llvm] [WebAssembly] Add target architecture to object file format (PR #225979)
Sam Clegg via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 24 09:51:12 PDT 2026
https://github.com/sbc100 updated https://github.com/llvm/llvm-project/pull/225979
>From 3c113eb08390aee54bef37c7b6eb502e41bb0172 Mon Sep 17 00:00:00 2001
From: Sam Clegg <sbc at chromium.org>
Date: Wed, 23 Sep 2026 16:58:33 -0700
Subject: [PATCH] [WebAssembly] Add target architecture to object file format
Store the target architecture string (`wasm32` or `wasm64`) in a new
`WASM_TARGET_ARCH` subsection in the `linking` custom section and in a
new `WASM_DYLINK_TARGET_ARCH` subsection in the `dylink.0` custom
section.
Previously, architecture detection for object files and shared libraries
relied on heuristics (such as whether memory64 was imported/defined or
presence of 64-bit relocations). For modules that do not access memory,
this resulted in wasm64 objects/shared libraries being incorrectly
detected as wasm32.
With this change:
- `WasmObjectWriter` emits the `WASM_TARGET_ARCH` subsection in
`linking`.
- `wasm-ld` emits `WASM_DYLINK_TARGET_ARCH` when generating shared
libraries and `WASM_TARGET_ARCH` when generating relocatable output
(`-r`).
- `WasmObjectFile::getArch()` checks these subsections first before
falling back to the `HasMemory64` heuristic.
- `SharedFile` in `lld` now checks the object architecture via
`checkArch()`.
- Added support to `obj2yaml` and `yaml2obj`.
Fixes: #98778
---
lld/test/wasm/check-arch-32-in-64.test | 3 +++
lld/test/wasm/check-arch-64-in-32.test | 3 +++
lld/test/wasm/dylink.s | 1 +
lld/test/wasm/emit-relocs.s | 1 +
lld/test/wasm/locals-duplicate.test | 1 +
lld/test/wasm/lto/relocatable-undefined.ll | 1 +
lld/test/wasm/pie.s | 1 +
lld/test/wasm/relocatable.ll | 1 +
lld/test/wasm/rpath.s | 1 +
lld/test/wasm/shared-needed.s | 2 ++
lld/test/wasm/shared-weak-undefined.s | 1 +
lld/test/wasm/shared.s | 1 +
lld/test/wasm/shared64.s | 1 +
lld/test/wasm/signature-mismatch-relocatable.s | 1 +
lld/test/wasm/signature-mismatch.s | 1 +
lld/test/wasm/stack-pointer.s | 1 +
lld/test/wasm/tls-export.s | 2 ++
lld/test/wasm/weak-alias.s | 1 +
lld/wasm/InputFiles.cpp | 8 ++------
lld/wasm/SyntheticSections.cpp | 14 ++++++++++++++
llvm/include/llvm/BinaryFormat/Wasm.h | 4 ++++
llvm/include/llvm/ObjectYAML/WasmYAML.h | 2 ++
llvm/lib/MC/WasmObjectWriter.cpp | 4 ++++
llvm/lib/Object/WasmObjectFile.cpp | 15 ++++++++++++++-
llvm/lib/ObjectYAML/WasmEmitter.cpp | 14 ++++++++++++++
llvm/lib/ObjectYAML/WasmYAML.cpp | 2 ++
llvm/test/CodeGen/WebAssembly/profile.ll | 1 +
llvm/test/MC/WebAssembly/assembler-binary.ll | 1 +
.../test/MC/WebAssembly/call-indirect-relocs.s | 1 +
llvm/test/MC/WebAssembly/comdat.ll | 1 +
llvm/test/MC/WebAssembly/common.s | 1 +
llvm/test/MC/WebAssembly/custom-sections.ll | 2 +-
llvm/test/MC/WebAssembly/data-section.s | 2 ++
llvm/test/MC/WebAssembly/debug-info.ll | 16 ++++++++--------
llvm/test/MC/WebAssembly/debug-info64.ll | 18 +++++++++---------
llvm/test/MC/WebAssembly/export-name.s | 1 +
llvm/test/MC/WebAssembly/function-sections.ll | 1 +
llvm/test/MC/WebAssembly/global-ctor-dtor.ll | 1 +
llvm/test/MC/WebAssembly/globals.s | 1 +
llvm/test/MC/WebAssembly/init-array-label.s | 1 +
llvm/test/MC/WebAssembly/init-array.s | 1 +
llvm/test/MC/WebAssembly/reloc-pic.s | 1 +
llvm/test/MC/WebAssembly/reloc-pic64.s | 1 +
llvm/test/MC/WebAssembly/tables.s | 1 +
llvm/test/MC/WebAssembly/tag-section.s | 1 +
llvm/test/MC/WebAssembly/tls.s | 1 +
llvm/test/MC/WebAssembly/tls64.s | 1 +
llvm/test/MC/WebAssembly/type-index.s | 1 +
llvm/test/MC/WebAssembly/unnamed-data.ll | 3 ++-
llvm/test/MC/WebAssembly/wasm64.s | 1 +
llvm/test/MC/WebAssembly/weak-alias.s | 2 ++
llvm/test/ObjectYAML/wasm/dylink_section.yaml | 2 ++
llvm/test/ObjectYAML/wasm/linking_section.yaml | 6 +++++-
llvm/tools/obj2yaml/wasm2yaml.cpp | 2 ++
54 files changed, 132 insertions(+), 27 deletions(-)
diff --git a/lld/test/wasm/check-arch-32-in-64.test b/lld/test/wasm/check-arch-32-in-64.test
index b4eb925d0f04b..67e1f3782855c 100644
--- a/lld/test/wasm/check-arch-32-in-64.test
+++ b/lld/test/wasm/check-arch-32-in-64.test
@@ -1,4 +1,7 @@
RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/start.s -o %t.o
RUN: not wasm-ld -mwasm64 %t.o -o %t.wasm 2>&1 | FileCheck %s
+RUN: wasm-ld -shared --no-entry %t.o -o %t.so
+RUN: not wasm-ld -mwasm64 %t.so -o %t2.wasm 2>&1 | FileCheck %s
+
CHECK: wasm32 object file can't be linked in wasm64 mode
diff --git a/lld/test/wasm/check-arch-64-in-32.test b/lld/test/wasm/check-arch-64-in-32.test
index 8b23e5f5c1deb..5483167ec1b1c 100644
--- a/lld/test/wasm/check-arch-64-in-32.test
+++ b/lld/test/wasm/check-arch-64-in-32.test
@@ -1,4 +1,7 @@
RUN: llvm-mc -filetype=obj -triple=wasm64-unknown-unknown %p/Inputs/start.s -o %t.o
RUN: not wasm-ld %t.o -o %t.wasm 2>&1 | FileCheck %s
+RUN: wasm-ld -mwasm64 -shared --no-entry %t.o -o %t.so
+RUN: not wasm-ld %t.so -o %t2.wasm 2>&1 | FileCheck %s
+
CHECK: must specify -mwasm64 to process wasm64 object files
diff --git a/lld/test/wasm/dylink.s b/lld/test/wasm/dylink.s
index d129f9032a2d2..856b9bc0cdd99 100644
--- a/lld/test/wasm/dylink.s
+++ b/lld/test/wasm/dylink.s
@@ -36,6 +36,7 @@ _start:
# CHECK: Sections:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: dylink.0
+# CHECK-NEXT: TargetArch: {{wasm32|wasm64}}
# CHECK-NEXT: MemorySize: 0
# CHECK-NEXT: MemoryAlignment: 0
# CHECK-NEXT: TableSize: 0
diff --git a/lld/test/wasm/emit-relocs.s b/lld/test/wasm/emit-relocs.s
index 3df345c0c7038..86a38bb778766 100644
--- a/lld/test/wasm/emit-relocs.s
+++ b/lld/test/wasm/emit-relocs.s
@@ -60,6 +60,7 @@ foo:
# CHECK: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
diff --git a/lld/test/wasm/locals-duplicate.test b/lld/test/wasm/locals-duplicate.test
index fbbd7d8d20d5f..c2f2b3a80633c 100644
--- a/lld/test/wasm/locals-duplicate.test
+++ b/lld/test/wasm/locals-duplicate.test
@@ -369,6 +369,7 @@
; RELOC-NEXT: - Type: CUSTOM
; RELOC-NEXT: Name: linking
; RELOC-NEXT: Version: 2
+; RELOC-NEXT: TargetArch: wasm32
; RELOC-NEXT: SymbolTable:
; RELOC-NEXT: - Index: 0
; RELOC-NEXT: Kind: FUNCTION
diff --git a/lld/test/wasm/lto/relocatable-undefined.ll b/lld/test/wasm/lto/relocatable-undefined.ll
index 37ec50e131961..e903f4e1599b9 100644
--- a/lld/test/wasm/lto/relocatable-undefined.ll
+++ b/lld/test/wasm/lto/relocatable-undefined.ll
@@ -19,6 +19,7 @@ entry:
; CHECK: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/lld/test/wasm/pie.s b/lld/test/wasm/pie.s
index a86f50f04ce16..702f55846f0c5 100644
--- a/lld/test/wasm/pie.s
+++ b/lld/test/wasm/pie.s
@@ -76,6 +76,7 @@ _start:
# CHECK: Sections:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: dylink.0
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: MemorySize: 16
# CHECK-NEXT: MemoryAlignment: 2
# CHECK-NEXT: TableSize: 3
diff --git a/lld/test/wasm/relocatable.ll b/lld/test/wasm/relocatable.ll
index 45be3167038bb..014ce80a52907 100644
--- a/lld/test/wasm/relocatable.ll
+++ b/lld/test/wasm/relocatable.ll
@@ -176,6 +176,7 @@ define void @_start() {
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/lld/test/wasm/rpath.s b/lld/test/wasm/rpath.s
index 1b430b40966a9..15649a91f48de 100644
--- a/lld/test/wasm/rpath.s
+++ b/lld/test/wasm/rpath.s
@@ -4,6 +4,7 @@
# CHECK: - Type: CUSTOM
# CHECK-NEXT: Name: dylink.0
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: MemorySize: 0
# CHECK-NEXT: MemoryAlignment: 0
# CHECK-NEXT: TableSize: 0
diff --git a/lld/test/wasm/shared-needed.s b/lld/test/wasm/shared-needed.s
index bdc7dc3ce7d65..2c291bebfc31a 100644
--- a/lld/test/wasm/shared-needed.s
+++ b/lld/test/wasm/shared-needed.s
@@ -35,6 +35,7 @@ data:
# SO1: Sections:
# SO1-NEXT: - Type: CUSTOM
# SO1-NEXT: Name: dylink.0
+# SO1-NEXT: TargetArch: wasm32
# SO1-NEXT: MemorySize: 0
# SO1-NEXT: MemoryAlignment: 0
# SO1-NEXT: TableSize: 0
@@ -45,6 +46,7 @@ data:
# SO2: Sections:
# SO2-NEXT: - Type: CUSTOM
# SO2-NEXT: Name: dylink.0
+# SO2-NEXT: TargetArch: wasm32
# SO2-NEXT: MemorySize: 4
# SO2-NEXT: MemoryAlignment: 2
# SO2-NEXT: TableSize: 0
diff --git a/lld/test/wasm/shared-weak-undefined.s b/lld/test/wasm/shared-weak-undefined.s
index 7be38a1cea30b..d798358e994e5 100644
--- a/lld/test/wasm/shared-weak-undefined.s
+++ b/lld/test/wasm/shared-weak-undefined.s
@@ -48,6 +48,7 @@ call_weak_libfunc:
# CHECK: Sections:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: dylink.0
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: MemorySize: 0
# CHECK-NEXT: MemoryAlignment: 0
# CHECK-NEXT: TableSize: 0
diff --git a/lld/test/wasm/shared.s b/lld/test/wasm/shared.s
index 1ea95d90ca0af..eb58552724420 100644
--- a/lld/test/wasm/shared.s
+++ b/lld/test/wasm/shared.s
@@ -129,6 +129,7 @@ get_local_func_address:
# CHECK: Sections:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: dylink.0
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: MemorySize: 24
# CHECK-NEXT: MemoryAlignment: 2
# CHECK-NEXT: TableSize: 2
diff --git a/lld/test/wasm/shared64.s b/lld/test/wasm/shared64.s
index da0577b03ec73..2ededb9b33272 100644
--- a/lld/test/wasm/shared64.s
+++ b/lld/test/wasm/shared64.s
@@ -130,6 +130,7 @@ get_local_func_address:
# CHECK: Sections:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: dylink.0
+# CHECK-NEXT: TargetArch: wasm64
# CHECK-NEXT: MemorySize: 36
# CHECK-NEXT: MemoryAlignment: 2
# CHECK-NEXT: TableSize: 2
diff --git a/lld/test/wasm/signature-mismatch-relocatable.s b/lld/test/wasm/signature-mismatch-relocatable.s
index e4eddd3671af2..6a3d461550a02 100644
--- a/lld/test/wasm/signature-mismatch-relocatable.s
+++ b/lld/test/wasm/signature-mismatch-relocatable.s
@@ -23,6 +23,7 @@ _start:
# CHECK: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
diff --git a/lld/test/wasm/signature-mismatch.s b/lld/test/wasm/signature-mismatch.s
index 9c9e81c29fa66..b52f875589781 100644
--- a/lld/test/wasm/signature-mismatch.s
+++ b/lld/test/wasm/signature-mismatch.s
@@ -81,6 +81,7 @@ ret32_address_main:
# RELOC: Name: linking
# RELOC-NEXT: Version: 2
+# RELOC-NEXT: TargetArch: wasm32
# RELOC-NEXT: SymbolTable:
# RELOC-NEXT: - Index: 0
# RELOC-NEXT: Kind: FUNCTION
diff --git a/lld/test/wasm/stack-pointer.s b/lld/test/wasm/stack-pointer.s
index 902ac493d3dec..8f668ee308a58 100644
--- a/lld/test/wasm/stack-pointer.s
+++ b/lld/test/wasm/stack-pointer.s
@@ -48,6 +48,7 @@ _start:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
diff --git a/lld/test/wasm/tls-export.s b/lld/test/wasm/tls-export.s
index 8660a71cf5448..cae13dc023f97 100644
--- a/lld/test/wasm/tls-export.s
+++ b/lld/test/wasm/tls-export.s
@@ -46,6 +46,8 @@ _start:
.ascii "mutable-globals"
+# CHECK: Name: dylink.0
+# CHECK-NEXT: TargetArch: wasm32
# CHECK: ExportInfo:
# CHECK-NEXT: - Name: tls1
# CHECK-NEXT: Flags: [ TLS ]
diff --git a/lld/test/wasm/weak-alias.s b/lld/test/wasm/weak-alias.s
index 22e84bf0e37a6..0431e4fc82929 100644
--- a/lld/test/wasm/weak-alias.s
+++ b/lld/test/wasm/weak-alias.s
@@ -209,6 +209,7 @@ _start:
# RELOC-NEXT: - Type: CUSTOM
# RELOC-NEXT: Name: linking
# RELOC-NEXT: Version: 2
+# RELOC-NEXT: TargetArch: wasm32
# RELOC-NEXT: SymbolTable:
# RELOC-NEXT: - Index: 0
# RELOC-NEXT: Kind: FUNCTION
diff --git a/lld/wasm/InputFiles.cpp b/lld/wasm/InputFiles.cpp
index f5595f4bf25c9..89905006073a5 100644
--- a/lld/wasm/InputFiles.cpp
+++ b/lld/wasm/InputFiles.cpp
@@ -419,12 +419,6 @@ ObjFile::ObjFile(MemoryBufferRef m, StringRef archiveName, bool lazy)
this->lazy = lazy;
this->archiveName = std::string(archiveName);
- // Currently we only do this check for regular object file, and not for shared
- // object files. This is because architecture detection for shared objects is
- // currently based on a heuristic, which is fallable:
- // https://github.com/llvm/llvm-project/issues/98778
- checkArch(wasmObj->getArch());
-
// Unless we are processing this as a lazy object file (e.g. part of an
// archive file or within `--start-lib`/`--end-lib`, it's eagerly linked, so
// mark it live.
@@ -490,6 +484,8 @@ WasmFileBase::WasmFileBase(Kind k, MemoryBufferRef m) : InputFile(k, m) {
bin.release();
wasmObj.reset(obj);
+
+ checkArch(wasmObj->getArch());
}
void ObjFile::parse(bool ignoreComdats) {
diff --git a/lld/wasm/SyntheticSections.cpp b/lld/wasm/SyntheticSections.cpp
index 79adafb418cb2..c629ed3cf2bb4 100644
--- a/lld/wasm/SyntheticSections.cpp
+++ b/lld/wasm/SyntheticSections.cpp
@@ -152,6 +152,13 @@ void DylinkSection::writeBody() {
writeStr(sub.os, ref, "rpath entry");
sub.writeTo(os);
}
+
+ {
+ SubSection sub(WASM_DYLINK_TARGET_ARCH);
+ writeStr(sub.os, ctx.arg.is64.value_or(false) ? "wasm64" : "wasm32",
+ "target arch");
+ sub.writeTo(os);
+ }
}
uint32_t TypeSection::registerType(const WasmSignature &sig) {
@@ -806,6 +813,13 @@ void LinkingSection::writeBody() {
}
sub.writeTo(os);
}
+
+ {
+ SubSection sub(WASM_TARGET_ARCH);
+ writeStr(sub.os, ctx.arg.is64.value_or(false) ? "wasm64" : "wasm32",
+ "target arch");
+ sub.writeTo(os);
+ }
}
void LinkingSection::addToSymtab(Symbol *sym) {
diff --git a/llvm/include/llvm/BinaryFormat/Wasm.h b/llvm/include/llvm/BinaryFormat/Wasm.h
index f8020a823dda4..c351ea42e5636 100644
--- a/llvm/include/llvm/BinaryFormat/Wasm.h
+++ b/llvm/include/llvm/BinaryFormat/Wasm.h
@@ -205,6 +205,7 @@ enum : unsigned {
WASM_INIT_FUNCS = 0x6,
WASM_COMDAT_INFO = 0x7,
WASM_SYMBOL_TABLE = 0x8,
+ WASM_TARGET_ARCH = 0x9,
};
// Kind codes used in the custom "dylink" section
@@ -214,6 +215,7 @@ enum : unsigned {
WASM_DYLINK_EXPORT_INFO = 0x3,
WASM_DYLINK_IMPORT_INFO = 0x4,
WASM_DYLINK_RUNTIME_PATH = 0x5,
+ WASM_DYLINK_TARGET_ARCH = 0x6,
};
// Kind codes used in the custom "linking" section in the WASM_COMDAT_INFO
@@ -309,6 +311,7 @@ struct WasmDylinkInfo {
std::vector<WasmDylinkImportInfo> ImportInfo;
std::vector<WasmDylinkExportInfo> ExportInfo;
std::vector<StringRef> RuntimePath;
+ StringRef TargetArch;
};
struct WasmProducerInfo {
@@ -514,6 +517,7 @@ struct WasmLinkingData {
uint32_t Version;
std::vector<WasmInitFunc> InitFunctions;
std::vector<StringRef> Comdats;
+ StringRef TargetArch;
// The linking section also contains a symbol table. This info (represented
// in a WasmSymbolInfo struct) is stored inside the WasmSymbol object instead
// of in this structure; this allows vectors of WasmSymbols and
diff --git a/llvm/include/llvm/ObjectYAML/WasmYAML.h b/llvm/include/llvm/ObjectYAML/WasmYAML.h
index 81a93d113b72b..a766404bf9631 100644
--- a/llvm/include/llvm/ObjectYAML/WasmYAML.h
+++ b/llvm/include/llvm/ObjectYAML/WasmYAML.h
@@ -233,6 +233,7 @@ struct DylinkSection : CustomSection {
std::vector<DylinkImportInfo> ImportInfo;
std::vector<DylinkExportInfo> ExportInfo;
std::vector<StringRef> RuntimePath;
+ StringRef TargetArch;
};
struct NameSection : CustomSection {
@@ -261,6 +262,7 @@ struct LinkingSection : CustomSection {
std::vector<SegmentInfo> SegmentInfos;
std::vector<InitFunction> InitFunctions;
std::vector<Comdat> Comdats;
+ StringRef TargetArch;
};
struct ProducersSection : CustomSection {
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index aa3edd82ff30a..93209aab83af1 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -1223,6 +1223,10 @@ void WasmObjectWriter::writeLinkingMetaDataSection(
endSection(SubSection);
}
+ startSection(SubSection, wasm::WASM_TARGET_ARCH);
+ writeString(TargetObjectWriter->is64Bit() ? "wasm64" : "wasm32");
+ endSection(SubSection);
+
endSection(Section);
}
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index d54e337da8c66..713849b4ce63d 100644
--- a/llvm/lib/Object/WasmObjectFile.cpp
+++ b/llvm/lib/Object/WasmObjectFile.cpp
@@ -506,6 +506,9 @@ Error WasmObjectFile::parseDylink0Section(ReadContext &Ctx) {
}
break;
}
+ case wasm::WASM_DYLINK_TARGET_ARCH:
+ DylinkInfo.TargetArch = readString(Ctx);
+ break;
default:
LLVM_DEBUG(dbgs() << "unknown dylink.0 sub-section: " << Type << "\n");
Ctx.Ptr += Size;
@@ -694,6 +697,9 @@ Error WasmObjectFile::parseLinkingSection(ReadContext &Ctx) {
if (Error Err = parseLinkingSectionComdat(Ctx))
return Err;
break;
+ case wasm::WASM_TARGET_ARCH:
+ LinkingData.TargetArch = readString(Ctx);
+ break;
default:
Ctx.Ptr += Size;
break;
@@ -2191,12 +2197,19 @@ section_iterator WasmObjectFile::section_end() const {
}
uint8_t WasmObjectFile::getBytesInAddress() const {
- return HasMemory64 ? 8 : 4;
+ return getArch() == Triple::wasm64 ? 8 : 4;
}
StringRef WasmObjectFile::getFileFormatName() const { return "WASM"; }
Triple::ArchType WasmObjectFile::getArch() const {
+ if (!LinkingData.TargetArch.empty())
+ return Triple(LinkingData.TargetArch).getArch();
+ if (!DylinkInfo.TargetArch.empty())
+ return Triple(DylinkInfo.TargetArch).getArch();
+ // Fall back to the HasMemory64 heuristic for backwards compatibility with
+ // older object files/shared libraries that lack target architecture metadata,
+ // as well as final executables that lack custom linking/dylink sections.
return HasMemory64 ? Triple::wasm64 : Triple::wasm32;
}
diff --git a/llvm/lib/ObjectYAML/WasmEmitter.cpp b/llvm/lib/ObjectYAML/WasmEmitter.cpp
index c676f6b7a23bc..8406ad6b6dc3d 100644
--- a/llvm/lib/ObjectYAML/WasmEmitter.cpp
+++ b/llvm/lib/ObjectYAML/WasmEmitter.cpp
@@ -208,6 +208,12 @@ void WasmWriter::writeSectionContent(raw_ostream &OS,
writeStringRef(Path, SubOS);
SubSection.done();
}
+ if (!Section.TargetArch.empty()) {
+ writeUint8(OS, wasm::WASM_DYLINK_TARGET_ARCH);
+ raw_ostream &SubOS = SubSection.getStream();
+ writeStringRef(Section.TargetArch, SubOS);
+ SubSection.done();
+ }
}
void WasmWriter::writeSectionContent(raw_ostream &OS,
@@ -299,6 +305,14 @@ void WasmWriter::writeSectionContent(raw_ostream &OS,
}
SubSection.done();
}
+
+ // TARGET_ARCH subsection
+ if (!Section.TargetArch.empty()) {
+ writeUint8(OS, wasm::WASM_TARGET_ARCH);
+ raw_ostream &SubOS = SubSection.getStream();
+ writeStringRef(Section.TargetArch, SubOS);
+ SubSection.done();
+ }
}
void WasmWriter::writeSectionContent(raw_ostream &OS,
diff --git a/llvm/lib/ObjectYAML/WasmYAML.cpp b/llvm/lib/ObjectYAML/WasmYAML.cpp
index 8c93d3a0763f7..d5030b8196c20 100644
--- a/llvm/lib/ObjectYAML/WasmYAML.cpp
+++ b/llvm/lib/ObjectYAML/WasmYAML.cpp
@@ -52,6 +52,7 @@ static void commonSectionMapping(IO &IO, WasmYAML::Section &Section) {
static void sectionMapping(IO &IO, WasmYAML::DylinkSection &Section) {
commonSectionMapping(IO, Section);
IO.mapRequired("Name", Section.Name);
+ IO.mapOptional("TargetArch", Section.TargetArch, StringRef());
IO.mapRequired("MemorySize", Section.MemorySize);
IO.mapRequired("MemoryAlignment", Section.MemoryAlignment);
IO.mapRequired("TableSize", Section.TableSize);
@@ -74,6 +75,7 @@ static void sectionMapping(IO &IO, WasmYAML::LinkingSection &Section) {
commonSectionMapping(IO, Section);
IO.mapRequired("Name", Section.Name);
IO.mapRequired("Version", Section.Version);
+ IO.mapOptional("TargetArch", Section.TargetArch, StringRef());
IO.mapOptional("SymbolTable", Section.SymbolTable);
IO.mapOptional("SegmentInfo", Section.SegmentInfos);
IO.mapOptional("InitFunctions", Section.InitFunctions);
diff --git a/llvm/test/CodeGen/WebAssembly/profile.ll b/llvm/test/CodeGen/WebAssembly/profile.ll
index 27802cc3bf356..46064be4b8fba 100644
--- a/llvm/test/CodeGen/WebAssembly/profile.ll
+++ b/llvm/test/CodeGen/WebAssembly/profile.ll
@@ -36,6 +36,7 @@ $__covrec_B = comdat any
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: Comdats:
; CHECK-NEXT: - Name: __covrec_A
; CHECK-NEXT: Entries:
diff --git a/llvm/test/MC/WebAssembly/assembler-binary.ll b/llvm/test/MC/WebAssembly/assembler-binary.ll
index 32f7d679b8968..1cbd8b1c18738 100644
--- a/llvm/test/MC/WebAssembly/assembler-binary.ll
+++ b/llvm/test/MC/WebAssembly/assembler-binary.ll
@@ -67,6 +67,7 @@ entry:
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/call-indirect-relocs.s b/llvm/test/MC/WebAssembly/call-indirect-relocs.s
index 8a1b6451982fa..60c13556ef88d 100644
--- a/llvm/test/MC/WebAssembly/call-indirect-relocs.s
+++ b/llvm/test/MC/WebAssembly/call-indirect-relocs.s
@@ -69,6 +69,7 @@ empty_fref_table:
# BIN-NEXT: - Type: CUSTOM
# BIN-NEXT: Name: linking
# BIN-NEXT: Version: 2
+# BIN-NEXT: TargetArch: wasm32
# BIN-NEXT: SymbolTable:
# BIN-NEXT: - Index: 0
# BIN-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/comdat.ll b/llvm/test/MC/WebAssembly/comdat.ll
index 0886301597471..0a2a86fd13422 100644
--- a/llvm/test/MC/WebAssembly/comdat.ll
+++ b/llvm/test/MC/WebAssembly/comdat.ll
@@ -76,6 +76,7 @@ define linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) {
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/common.s b/llvm/test/MC/WebAssembly/common.s
index 9af65dbcc4a84..10aaabb2d7bcb 100644
--- a/llvm/test/MC/WebAssembly/common.s
+++ b/llvm/test/MC/WebAssembly/common.s
@@ -10,6 +10,7 @@
# CHECK: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: DATA
diff --git a/llvm/test/MC/WebAssembly/custom-sections.ll b/llvm/test/MC/WebAssembly/custom-sections.ll
index ba669716c934d..9c1519e4319b1 100644
--- a/llvm/test/MC/WebAssembly/custom-sections.ll
+++ b/llvm/test/MC/WebAssembly/custom-sections.ll
@@ -27,6 +27,6 @@ target triple = "wasm32-unknown-unknown"
; CHECK: Section {
; CHECK: Type: CUSTOM (0x0)
; CHECK: Size: 25
-; CHECK: Offset: 90
+; CHECK: Offset: 103
; CHECK: Name: producers
; CHECK: }
diff --git a/llvm/test/MC/WebAssembly/data-section.s b/llvm/test/MC/WebAssembly/data-section.s
index 72c735fec0f35..add9c188a7619 100644
--- a/llvm/test/MC/WebAssembly/data-section.s
+++ b/llvm/test/MC/WebAssembly/data-section.s
@@ -77,6 +77,8 @@ test0:
# BIN-NEXT: - Type: CUSTOM
# BIN-NEXT: Name: linking
# BIN-NEXT: Version: 2
+# BIN32-NEXT: TargetArch: wasm32
+# BIN64-NEXT: TargetArch: wasm64
# BIN-NEXT: SymbolTable:
# BIN-NEXT: - Index: 0
# BIN-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/debug-info.ll b/llvm/test/MC/WebAssembly/debug-info.ll
index 5080a5364242d..49967d564e094 100644
--- a/llvm/test/MC/WebAssembly/debug-info.ll
+++ b/llvm/test/MC/WebAssembly/debug-info.ll
@@ -95,50 +95,50 @@
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
-; CHECK-NEXT: Size: 91
+; CHECK-NEXT: Size: 104
; CHECK-NEXT: Offset: 805
; CHECK-NEXT: Name: linking
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 9
-; CHECK-NEXT: Offset: 910
+; CHECK-NEXT: Offset: 923
; CHECK-NEXT: Name: reloc.DATA
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 61
-; CHECK-NEXT: Offset: 936
+; CHECK-NEXT: Offset: 949
; CHECK-NEXT: Name: reloc..debug_info
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 18
-; CHECK-NEXT: Offset: 1021
+; CHECK-NEXT: Offset: 1034
; CHECK-NEXT: Name: reloc..debug_aranges
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
-; CHECK-NEXT: Offset: 1066
+; CHECK-NEXT: Offset: 1079
; CHECK-NEXT: Name: reloc..debug_pubnames
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
-; CHECK-NEXT: Offset: 1100
+; CHECK-NEXT: Offset: 1113
; CHECK-NEXT: Name: reloc..debug_pubtypes
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
-; CHECK-NEXT: Offset: 1134
+; CHECK-NEXT: Offset: 1147
; CHECK-NEXT: Name: reloc..debug_line
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 77
-; CHECK-NEXT: Offset: 1164
+; CHECK-NEXT: Offset: 1177
; CHECK-NEXT: Name: producers
; CHECK-NEXT: }
; CHECK-NEXT:]
diff --git a/llvm/test/MC/WebAssembly/debug-info64.ll b/llvm/test/MC/WebAssembly/debug-info64.ll
index 2091b87e10828..65aa51e6646a0 100644
--- a/llvm/test/MC/WebAssembly/debug-info64.ll
+++ b/llvm/test/MC/WebAssembly/debug-info64.ll
@@ -95,56 +95,56 @@
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
-; CHECK-NEXT: Size: 91
+; CHECK-NEXT: Size: 104
; CHECK-NEXT: Offset: 865
; CHECK-NEXT: Name: linking
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 9
-; CHECK-NEXT: Offset: 970
+; CHECK-NEXT: Offset: 983
; CHECK-NEXT: Name: reloc.DATA
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 61
-; CHECK-NEXT: Offset: 996
+; CHECK-NEXT: Offset: 1009
; CHECK-NEXT: Name: reloc..debug_info
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 18
-; CHECK-NEXT: Offset: 1081
+; CHECK-NEXT: Offset: 1094
; CHECK-NEXT: Name: reloc..debug_aranges
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
-; CHECK-NEXT: Offset: 1126
+; CHECK-NEXT: Offset: 1139
; CHECK-NEXT: Name: reloc..debug_pubnames
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
-; CHECK-NEXT: Offset: 1160
+; CHECK-NEXT: Offset: 1173
; CHECK-NEXT: Name: reloc..debug_pubtypes
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
-; CHECK-NEXT: Offset: 1194
+; CHECK-NEXT: Offset: 1207
; CHECK-NEXT: Name: reloc..debug_line
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 77
-; CHECK-NEXT: Offset: 1224
+; CHECK-NEXT: Offset: 1237
; CHECK-NEXT: Name: producers
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 11
-; CHECK-NEXT: Offset: 1317
+; CHECK-NEXT: Offset: 1330
; CHECK-NEXT: Name: target_features
; CHECK-NEXT: }
; CHECK-NEXT: ]
diff --git a/llvm/test/MC/WebAssembly/export-name.s b/llvm/test/MC/WebAssembly/export-name.s
index 6923b43f31af6..7e74bdd11d8d9 100644
--- a/llvm/test/MC/WebAssembly/export-name.s
+++ b/llvm/test/MC/WebAssembly/export-name.s
@@ -48,6 +48,7 @@ mid?question:
# CHECK-OBJ: Name: linking
# CHECK-OBJ-NEXT: Version: 2
+# CHECK-OBJ-NEXT: TargetArch: wasm32
# CHECK-OBJ-NEXT: SymbolTable:
# CHECK-OBJ-NEXT: - Index: 0
# CHECK-OBJ-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/function-sections.ll b/llvm/test/MC/WebAssembly/function-sections.ll
index 9c10cace404f2..f4729daf96c70 100644
--- a/llvm/test/MC/WebAssembly/function-sections.ll
+++ b/llvm/test/MC/WebAssembly/function-sections.ll
@@ -15,6 +15,7 @@ entry:
; CHECK: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll
index f1ec71da1ebb6..df46a1c65657c 100644
--- a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll
+++ b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll
@@ -114,6 +114,7 @@ declare void @func3()
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/globals.s b/llvm/test/MC/WebAssembly/globals.s
index b7e25cb9f0519..dca55863f08ce 100644
--- a/llvm/test/MC/WebAssembly/globals.s
+++ b/llvm/test/MC/WebAssembly/globals.s
@@ -55,6 +55,7 @@ global4:
# BIN: - Type: CUSTOM
# BIN-NEXT: Name: linking
# BIN-NEXT: Version: 2
+# BIN-NEXT: TargetArch: wasm32
# BIN-NEXT: SymbolTable:
# BIN-NEXT: - Index: 0
# BIN-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/init-array-label.s b/llvm/test/MC/WebAssembly/init-array-label.s
index 0b4a5ea2da0b5..4d2e77807f75e 100644
--- a/llvm/test/MC/WebAssembly/init-array-label.s
+++ b/llvm/test/MC/WebAssembly/init-array-label.s
@@ -50,6 +50,7 @@ p_init2:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/init-array.s b/llvm/test/MC/WebAssembly/init-array.s
index e79fb453ec12a..785d0c2942937 100644
--- a/llvm/test/MC/WebAssembly/init-array.s
+++ b/llvm/test/MC/WebAssembly/init-array.s
@@ -29,6 +29,7 @@ init2:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/reloc-pic.s b/llvm/test/MC/WebAssembly/reloc-pic.s
index 32c7de775e331..638ebfa3dcc4b 100644
--- a/llvm/test/MC/WebAssembly/reloc-pic.s
+++ b/llvm/test/MC/WebAssembly/reloc-pic.s
@@ -159,6 +159,7 @@ REF-.tabletype mytable, externref
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/reloc-pic64.s b/llvm/test/MC/WebAssembly/reloc-pic64.s
index 743bba33749bd..ce16d88d14e09 100644
--- a/llvm/test/MC/WebAssembly/reloc-pic64.s
+++ b/llvm/test/MC/WebAssembly/reloc-pic64.s
@@ -162,6 +162,7 @@ hidden_func:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm64
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/tables.s b/llvm/test/MC/WebAssembly/tables.s
index 8239432eed88d..0ed8012e6eaac 100644
--- a/llvm/test/MC/WebAssembly/tables.s
+++ b/llvm/test/MC/WebAssembly/tables.s
@@ -179,6 +179,7 @@ table_fill:
# BIN: - Type: CUSTOM
# BIN-NEXT: Name: linking
# BIN-NEXT: Version: 2
+# BIN-NEXT: TargetArch: wasm32
# BIN-NEXT: SymbolTable:
# BIN-NEXT: - Index: 0
# BIN-NEXT: Kind: TABLE
diff --git a/llvm/test/MC/WebAssembly/tag-section.s b/llvm/test/MC/WebAssembly/tag-section.s
index 40339c5fa3f37..acaf5fe8d073d 100644
--- a/llvm/test/MC/WebAssembly/tag-section.s
+++ b/llvm/test/MC/WebAssembly/tag-section.s
@@ -50,6 +50,7 @@ my_exception:
# CHECK: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK: - Index: 1
diff --git a/llvm/test/MC/WebAssembly/tls.s b/llvm/test/MC/WebAssembly/tls.s
index 340cd5ac6a183..cb58e434a2d96 100644
--- a/llvm/test/MC/WebAssembly/tls.s
+++ b/llvm/test/MC/WebAssembly/tls.s
@@ -50,6 +50,7 @@ tls2:
# CHECK-OBJ: - Type: CUSTOM
# CHECK-OBJ-NEXT: Name: linking
# CHECK-OBJ-NEXT: Version: 2
+# CHECK-OBJ-NEXT: TargetArch: wasm32
# CHECK-OBJ-NEXT: SymbolTable:
# CHECK-OBJ-NEXT: - Index: 0
# CHECK-OBJ-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/tls64.s b/llvm/test/MC/WebAssembly/tls64.s
index 9d6dd5a0f729a..20547bbfd733f 100644
--- a/llvm/test/MC/WebAssembly/tls64.s
+++ b/llvm/test/MC/WebAssembly/tls64.s
@@ -42,6 +42,7 @@ tls2:
# CHECK-OBJ: - Type: CUSTOM
# CHECK-OBJ-NEXT: Name: linking
# CHECK-OBJ-NEXT: Version: 2
+# CHECK-OBJ-NEXT: TargetArch: wasm64
# CHECK-OBJ-NEXT: SymbolTable:
# CHECK-OBJ-NEXT: - Index: 0
# CHECK-OBJ-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/type-index.s b/llvm/test/MC/WebAssembly/type-index.s
index 1c2feeda3e870..1439d688c58a1 100644
--- a/llvm/test/MC/WebAssembly/type-index.s
+++ b/llvm/test/MC/WebAssembly/type-index.s
@@ -65,6 +65,7 @@ test0:
# BIN-NEXT: - Type: CUSTOM
# BIN-NEXT: Name: linking
# BIN-NEXT: Version: 2
+# BIN-NEXT: TargetArch: wasm32
# BIN-NEXT: SymbolTable:
# BIN-NEXT: - Index: 0
# BIN-NEXT: Kind: FUNCTION
diff --git a/llvm/test/MC/WebAssembly/unnamed-data.ll b/llvm/test/MC/WebAssembly/unnamed-data.ll
index 0887622277bb3..3e422ee9d759c 100644
--- a/llvm/test/MC/WebAssembly/unnamed-data.ll
+++ b/llvm/test/MC/WebAssembly/unnamed-data.ll
@@ -45,6 +45,7 @@ target triple = "wasm32-unknown-unknown"
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: Version: 2
+; CHECK-NEXT: TargetArch: wasm32
; CHECK-NEXT: SymbolTable:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Kind: DATA
@@ -87,4 +88,4 @@ target triple = "wasm32-unknown-unknown"
; CHECK-NEXT: Name: .data.b
; CHECK-NEXT: Alignment: 3
; CHECK-NEXT: Flags: [ ]
-; CHECK-NEXT: ...
+; CHECK-NEXT: ...
diff --git a/llvm/test/MC/WebAssembly/wasm64.s b/llvm/test/MC/WebAssembly/wasm64.s
index 4b572a43c65d7..ec81f0aaad387 100644
--- a/llvm/test/MC/WebAssembly/wasm64.s
+++ b/llvm/test/MC/WebAssembly/wasm64.s
@@ -218,6 +218,7 @@ test:
# BIN-NEXT: - Type: CUSTOM
# BIN-NEXT: Name: linking
# BIN-NEXT: Version: 2
+# BIN-NEXT: TargetArch: wasm64
# BIN-NEXT: SymbolTable:
# BIN-NEXT: - Index: 0
# BIN-NEXT: Kind: TABLE
diff --git a/llvm/test/MC/WebAssembly/weak-alias.s b/llvm/test/MC/WebAssembly/weak-alias.s
index 6c4887034bd39..c05e501911ca7 100644
--- a/llvm/test/MC/WebAssembly/weak-alias.s
+++ b/llvm/test/MC/WebAssembly/weak-alias.s
@@ -174,6 +174,7 @@ alias_address:
# CHECK-NEXT: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
@@ -347,6 +348,7 @@ alias_address:
# REF-NEXT: - Type: CUSTOM
# REF-NEXT: Name: linking
# REF-NEXT: Version: 2
+# REF-NEXT: TargetArch: wasm32
# REF-NEXT: SymbolTable:
# REF-NEXT: - Index: 0
# REF-NEXT: Kind: FUNCTION
diff --git a/llvm/test/ObjectYAML/wasm/dylink_section.yaml b/llvm/test/ObjectYAML/wasm/dylink_section.yaml
index fa8d1d67bb397..6883d2cfe80d5 100644
--- a/llvm/test/ObjectYAML/wasm/dylink_section.yaml
+++ b/llvm/test/ObjectYAML/wasm/dylink_section.yaml
@@ -6,6 +6,7 @@ FileHeader:
Sections:
- Type: CUSTOM
Name: dylink.0
+ TargetArch: wasm32
MemorySize: 4
MemoryAlignment: 2
TableSize: 1
@@ -19,6 +20,7 @@ Sections:
# CHECK: Sections:
# CHECK: - Type: CUSTOM
# CHECK: Name: dylink.0
+# CHECK: TargetArch: wasm32
# CHECK: MemorySize: 4
# CHECK: MemoryAlignment: 2
# CHECK: TableSize: 1
diff --git a/llvm/test/ObjectYAML/wasm/linking_section.yaml b/llvm/test/ObjectYAML/wasm/linking_section.yaml
index 2e3da8791c7bb..e6401d0685e65 100644
--- a/llvm/test/ObjectYAML/wasm/linking_section.yaml
+++ b/llvm/test/ObjectYAML/wasm/linking_section.yaml
@@ -31,6 +31,7 @@ Sections:
- Type: CUSTOM
Name: linking
Version: 2
+ TargetArch: wasm32
SymbolTable:
- Index: 0
Kind: FUNCTION
@@ -50,7 +51,10 @@ Sections:
- Priority: 1
Symbol: 0
...
-# CHECK: SymbolTable:
+# CHECK: Name: linking
+# CHECK-NEXT: Version: 2
+# CHECK-NEXT: TargetArch: wasm32
+# CHECK-NEXT: SymbolTable:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Kind: FUNCTION
# CHECK-NEXT: Name: bar
diff --git a/llvm/tools/obj2yaml/wasm2yaml.cpp b/llvm/tools/obj2yaml/wasm2yaml.cpp
index 2db5387b1ec6c..990709f331cfb 100644
--- a/llvm/tools/obj2yaml/wasm2yaml.cpp
+++ b/llvm/tools/obj2yaml/wasm2yaml.cpp
@@ -67,6 +67,7 @@ WasmDumper::dumpCustomSection(const WasmSection &WasmSec) {
DylinkSec->ImportInfo.push_back({Imp.Module, Imp.Field, Imp.Flags});
for (const auto &Exp : Info.ExportInfo)
DylinkSec->ExportInfo.push_back({Exp.Name, Exp.Flags});
+ DylinkSec->TargetArch = Info.TargetArch;
CustomSec = std::move(DylinkSec);
} else if (WasmSec.Name == "name") {
std::unique_ptr<WasmYAML::NameSection> NameSec =
@@ -160,6 +161,7 @@ WasmDumper::dumpCustomSection(const WasmSection &WasmSec) {
LinkingSec->InitFunctions.emplace_back(F);
}
+ LinkingSec->TargetArch = Obj.linkingData().TargetArch;
CustomSec = std::move(LinkingSec);
} else if (WasmSec.Name == "producers") {
std::unique_ptr<WasmYAML::ProducersSection> ProducersSec =
More information about the llvm-commits
mailing list