[llvm-commits] [llvm] r77272 - in /llvm/trunk: include/llvm/MC/MCStreamer.h lib/MC/MCAsmStreamer.cpp test/MC/AsmParser/directive_abort.s tools/llvm-mc/AsmParser.cpp tools/llvm-mc/AsmParser.h tools/llvm-mc/MC-X86Specific.cpp

Daniel Dunbar daniel at zuster.org
Mon Jul 27 16:20:53 PDT 2009


Author: ddunbar
Date: Mon Jul 27 18:20:52 2009
New Revision: 77272

URL: http://llvm.org/viewvc/llvm-project?rev=77272&view=rev
Log:
llvm-mc: Implement .abort fully in the front end

Modified:
    llvm/trunk/include/llvm/MC/MCStreamer.h
    llvm/trunk/lib/MC/MCAsmStreamer.cpp
    llvm/trunk/test/MC/AsmParser/directive_abort.s
    llvm/trunk/tools/llvm-mc/AsmParser.cpp
    llvm/trunk/tools/llvm-mc/AsmParser.h
    llvm/trunk/tools/llvm-mc/MC-X86Specific.cpp

Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=77272&r1=77271&r2=77272&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
+++ llvm/trunk/include/llvm/MC/MCStreamer.h Mon Jul 27 18:20:52 2009
@@ -156,13 +156,6 @@
     virtual void EmitZerofill(MCSection *Section, MCSymbol *Symbol = 0,
                               unsigned Size = 0,unsigned Pow2Alignment = 0) = 0;
 
-    /// AbortAssembly - Stop and don't produce output, printing @param
-    /// AbortReason if non-NULL to indicate the reason the assembly is
-    /// terminated.
-    ///
-    /// @param AbortReason - The reason assembly is terminated, if non-NULL.
-    virtual void AbortAssembly(const char *AbortReason) = 0;
-
     /// @}
     /// @name Generating Data
     /// @{

Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=77272&r1=77271&r2=77272&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Mon Jul 27 18:20:52 2009
@@ -55,8 +55,6 @@
     virtual void EmitZerofill(MCSection *Section, MCSymbol *Symbol = NULL,
                               unsigned Size = 0, unsigned Pow2Alignment = 0);
 
-    virtual void AbortAssembly(const char *AbortReason = NULL);
-
     virtual void EmitBytes(const StringRef &Data);
 
     virtual void EmitValue(const MCValue &Value, unsigned Size);
@@ -132,14 +130,6 @@
   OS << '\n';
 }
 
-void MCAsmStreamer::AbortAssembly(const char *AbortReason) {
-  OS << ".abort";
-  if (AbortReason != NULL)
-    OS << ' ' << AbortReason;
-  OS << '\n';
-  
-}
-
 void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
                                    bool MakeAbsolute) {
   assert(!Symbol->getSection() && "Cannot assign to a label!");

Modified: llvm/trunk/test/MC/AsmParser/directive_abort.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/directive_abort.s?rev=77272&r1=77271&r2=77272&view=diff

==============================================================================
--- llvm/trunk/test/MC/AsmParser/directive_abort.s (original)
+++ llvm/trunk/test/MC/AsmParser/directive_abort.s Mon Jul 27 18:20:52 2009
@@ -1,8 +1,6 @@
-# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
+# RUN: llvm-mc -triple i386-unknown-unknown %s 2> %t
+# RUN: FileCheck -input-file %t %s
 
-# CHECK: TEST0:
 # CHECK: .abort "please stop assembing"
-# CHECK: .abort
 TEST0:  
 	.abort       "please stop assembing"
-.abort

Modified: llvm/trunk/tools/llvm-mc/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/AsmParser.cpp?rev=77272&r1=77271&r2=77272&view=diff

==============================================================================
--- llvm/trunk/tools/llvm-mc/AsmParser.cpp (original)
+++ llvm/trunk/tools/llvm-mc/AsmParser.cpp Mon Jul 27 18:20:52 2009
@@ -14,6 +14,7 @@
 #include "AsmParser.h"
 
 #include "AsmExpr.h"
+#include "llvm/ADT/Twine.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCInst.h"
 #include "llvm/MC/MCStreamer.h"
@@ -23,12 +24,12 @@
 #include "llvm/Target/TargetAsmParser.h"
 using namespace llvm;
 
-void AsmParser::Warning(SMLoc L, const char *Msg) {
-  Lexer.PrintMessage(L, Msg, "warning");
+void AsmParser::Warning(SMLoc L, const Twine &Msg) {
+  Lexer.PrintMessage(L, Msg.str(), "warning");
 }
 
-bool AsmParser::Error(SMLoc L, const char *Msg) {
-  Lexer.PrintMessage(L, Msg, "error");
+bool AsmParser::Error(SMLoc L, const Twine &Msg) {
+  Lexer.PrintMessage(L, Msg.str(), "error");
   return true;
 }
 
@@ -1117,6 +1118,9 @@
 /// ParseDirectiveAbort
 ///  ::= .abort [ "abort_string" ]
 bool AsmParser::ParseDirectiveAbort() {
+  // FIXME: Use loc from directive.
+  SMLoc Loc = Lexer.getLoc();
+
   StringRef Str = "";
   if (Lexer.isNot(asmtok::EndOfStatement)) {
     if (Lexer.isNot(asmtok::String))
@@ -1133,7 +1137,10 @@
   Lexer.Lex();
 
   // FIXME: Handle here.
-  Out.AbortAssembly(Str.str().c_str());
+  if (Str.empty())
+    Error(Loc, ".abort detected. Assembly stopping.");
+  else
+    Error(Loc, ".abort '" + Str + "' detected. Assembly stopping.");
 
   return false;
 }

Modified: llvm/trunk/tools/llvm-mc/AsmParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/AsmParser.h?rev=77272&r1=77271&r2=77272&view=diff

==============================================================================
--- llvm/trunk/tools/llvm-mc/AsmParser.h (original)
+++ llvm/trunk/tools/llvm-mc/AsmParser.h Mon Jul 27 18:20:52 2009
@@ -25,6 +25,7 @@
 class MCStreamer;
 class MCValue;
 class TargetAsmParser;
+class Twine;
 
 class AsmParser : MCAsmParser {
 public:
@@ -52,8 +53,8 @@
 private:
   bool ParseStatement();
 
-  void Warning(SMLoc L, const char *Msg);
-  bool Error(SMLoc L, const char *Msg);
+  void Warning(SMLoc L, const Twine &Msg);
+  bool Error(SMLoc L, const Twine &Msg);
   bool TokError(const char *Msg);
   
   void EatToEndOfStatement();

Modified: llvm/trunk/tools/llvm-mc/MC-X86Specific.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/MC-X86Specific.cpp?rev=77272&r1=77271&r2=77272&view=diff

==============================================================================
--- llvm/trunk/tools/llvm-mc/MC-X86Specific.cpp (original)
+++ llvm/trunk/tools/llvm-mc/MC-X86Specific.cpp Mon Jul 27 18:20:52 2009
@@ -13,6 +13,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "AsmParser.h"
+#include "llvm/ADT/Twine.h"
 #include "llvm/MC/MCInst.h"
 #include "llvm/Support/SourceMgr.h"
 using namespace llvm;





More information about the llvm-commits mailing list