forked from OSchip/llvm-project
[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:
parent
74fe0ba105
commit
e1694f9bf8
|
@ -1265,11 +1265,22 @@ static void checkWasmComdat(const GlobalValue *GV) {
|
||||||
"' cannot be lowered.");
|
"' 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(
|
MCSection *TargetLoweringObjectFileWasm::getExplicitSectionGlobal(
|
||||||
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
|
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
|
||||||
StringRef Name = GO->getSection();
|
StringRef Name = GO->getSection();
|
||||||
checkWasmComdat(GO);
|
checkWasmComdat(GO);
|
||||||
return getContext().getWasmSection(Name, SectionKind::getData());
|
Kind = getWasmKindForNamedSection(Name, Kind);
|
||||||
|
return getContext().getWasmSection(Name, Kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCSectionWasm *selectWasmSectionForGlobal(
|
static MCSectionWasm *selectWasmSectionForGlobal(
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
Loading…
Reference in New Issue