[PATCH] D95838: [WebAssembly] Prevent data inside text sections in assembly
Wouter van Oortmerssen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 1 17:30:13 PST 2021
aardappel updated this revision to Diff 320643.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D95838/new/
https://reviews.llvm.org/D95838
Files:
llvm/lib/MC/MCParser/WasmAsmParser.cpp
llvm/lib/MC/WasmObjectWriter.cpp
Index: llvm/lib/MC/WasmObjectWriter.cpp
===================================================================
--- llvm/lib/MC/WasmObjectWriter.cpp
+++ llvm/lib/MC/WasmObjectWriter.cpp
@@ -488,10 +488,14 @@
const MCSymbol *SectionSymbol = nullptr;
const MCSection &SecA = SymA->getSection();
- if (SecA.getKind().isText())
- SectionSymbol = SectionFunctions.find(&SecA)->second;
- else
+ if (SecA.getKind().isText()) {
+ auto &SecSymIt = SectionFunctions.find(&SecA);
+ if (SecSymIt == SectionFunctions.end())
+ report_fatal_error("section doesn\'t have defining symbol");
+ SectionSymbol = SecSymIt->second;
+ } else {
SectionSymbol = SecA.getBeginSymbol();
+ }
if (!SectionSymbol)
report_fatal_error("section symbol is required for relocation");
Index: llvm/lib/MC/MCParser/WasmAsmParser.cpp
===================================================================
--- llvm/lib/MC/MCParser/WasmAsmParser.cpp
+++ llvm/lib/MC/MCParser/WasmAsmParser.cpp
@@ -221,18 +221,22 @@
Lexer->is(AsmToken::Identifier)))
return error("Expected label, at type declaration, got: ", Lexer->getTok());
auto TypeName = Lexer->getTok().getString();
+ auto *Current =
+ cast<MCSectionWasm>(getStreamer().getCurrentSection().first);
if (TypeName == "function") {
WasmSym->setType(wasm::WASM_SYMBOL_TYPE_FUNCTION);
- auto *Current =
- cast<MCSectionWasm>(getStreamer().getCurrentSection().first);
if (Current->getGroup())
WasmSym->setComdat(true);
- } else if (TypeName == "global")
+ } else if (TypeName == "global") {
WasmSym->setType(wasm::WASM_SYMBOL_TYPE_GLOBAL);
- else if (TypeName == "object")
+ } else if (TypeName == "object") {
+ if (Current->getKind().isText())
+ return error("WASM doesn\'t support data symbols in text sections: ",
+ Lexer->getTok());
WasmSym->setType(wasm::WASM_SYMBOL_TYPE_DATA);
- else
+ } else {
return error("Unknown WASM symbol type: ", Lexer->getTok());
+ }
Lex();
return expect(AsmToken::EndOfStatement, "EOL");
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D95838.320643.patch
Type: text/x-patch
Size: 2158 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210202/9d4b8447/attachment.bin>
More information about the llvm-commits
mailing list