[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