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.");
|
||||
}
|
||||
|
||||
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(
|
||||
|
|
|
@ -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