[WebAssembly] section kind can be code

Currently, when creating a named section, the Wasm
frontend forces it to use `SectionKind::Data`, whereas
in fact C++ does generate code sections with custom
names.

Patch by Nicholas Wilson

Differential Revision: https://reviews.llvm.org/D40906

llvm-svn: 320002
This commit is contained in:
Sam Clegg 2017-12-07 02:55:51 +00:00
parent 74fe0ba105
commit e1694f9bf8
2 changed files with 21 additions and 1 deletions

View File

@ -1265,11 +1265,22 @@ static void checkWasmComdat(const GlobalValue *GV) {
"' cannot be lowered.");
}
static SectionKind getWasmKindForNamedSection(StringRef Name, SectionKind K) {
// If we're told we have function data, then use that.
if (K.isText())
return SectionKind::getText();
// Otherwise, ignore whatever section type the generic impl detected and use
// a plain data section.
return SectionKind::getData();
}
MCSection *TargetLoweringObjectFileWasm::getExplicitSectionGlobal(
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
StringRef Name = GO->getSection();
checkWasmComdat(GO);
return getContext().getWasmSection(Name, SectionKind::getData());
Kind = getWasmKindForNamedSection(Name, Kind);
return getContext().getWasmSection(Name, Kind);
}
static MCSectionWasm *selectWasmSectionForGlobal(

View File

@ -0,0 +1,9 @@
; RUN: llc -mtriple wasm32-unknown-unknown-wasm -O2 -filetype=obj %s -o %t.o
; Wasm silently ignores custom sections for code.
; We had a bug where this cause a crash
define hidden void @call_indirect() section "some_section_name" {
entry:
ret void
}