diff options
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 6 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/function-sections.ll | 28 |
2 files changed, 34 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 0b8d5220e2a..b07e2f68264 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1408,6 +1408,12 @@ static SectionKind getWasmKindForNamedSection(StringRef Name, SectionKind K) { MCSection *TargetLoweringObjectFileWasm::getExplicitSectionGlobal( const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const { + // We don't support explict section names for functions in the wasm object + // format. Each function has to be in its own unique section. + if (isa<Function>(GO)) { + return SelectSectionForGlobal(GO, Kind, TM); + } + StringRef Name = GO->getSection(); Kind = getWasmKindForNamedSection(Name, Kind); diff --git a/llvm/test/MC/WebAssembly/function-sections.ll b/llvm/test/MC/WebAssembly/function-sections.ll new file mode 100644 index 00000000000..8f1e29adccf --- /dev/null +++ b/llvm/test/MC/WebAssembly/function-sections.ll @@ -0,0 +1,28 @@ +; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s + +target triple = "wasm32-unknown-unknown" + +define hidden i32 @foo() section "baz" { +entry: + ret i32 2 +} + +define hidden i32 @bar() section "baz" { +entry: + ret i32 1 +} + +; CHECK: - Type: CUSTOM +; CHECK-NEXT: Name: linking +; CHECK-NEXT: Version: 1 +; CHECK-NEXT: SymbolTable: +; CHECK-NEXT: - Index: 0 +; CHECK-NEXT: Kind: FUNCTION +; CHECK-NEXT: Name: foo +; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ] +; CHECK-NEXT: Function: 0 +; CHECK-NEXT: - Index: 1 +; CHECK-NEXT: Kind: FUNCTION +; CHECK-NEXT: Name: bar +; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ] +; CHECK-NEXT: Function: 1 |