summaryrefslogtreecommitdiff
path: root/tools/llvm-mc/llvm-mc.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-06-21 05:22:37 +0000
committerChris Lattner <sabre@nondot.org>2009-06-21 05:22:37 +0000
commitb23677e076bea7c3bf4763ba14d8ee96faf8a74b (patch)
tree3655ee491e69b5f1e78f78c0058a73f2cdb5639a /tools/llvm-mc/llvm-mc.cpp
parent7ee5d5f97b3fa709038ff7fd640dc775efaadc26 (diff)
downloadllvm-b23677e076bea7c3bf4763ba14d8ee96faf8a74b.tar.gz
llvm-b23677e076bea7c3bf4763ba14d8ee96faf8a74b.tar.bz2
llvm-b23677e076bea7c3bf4763ba14d8ee96faf8a74b.tar.xz
start wiring up support for asm parsing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73846 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-mc/llvm-mc.cpp')
-rw-r--r--tools/llvm-mc/llvm-mc.cpp57
1 files changed, 45 insertions, 12 deletions
diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp
index e8e51c5023..74e419ccfc 100644
--- a/tools/llvm-mc/llvm-mc.cpp
+++ b/tools/llvm-mc/llvm-mc.cpp
@@ -16,6 +16,7 @@
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/PrettyStackTrace.h"
+#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Signals.h"
using namespace llvm;
@@ -27,31 +28,63 @@ static cl::opt<std::string>
OutputFilename("o", cl::desc("Output filename"),
cl::value_desc("filename"));
-int main(int argc, char **argv) {
- // Print a stack trace if we signal out.
- sys::PrintStackTraceOnErrorSignal();
- PrettyStackTraceProgram X(argc, argv);
-
- llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
+static cl::list<std::string>
+IncludeDirs("I", cl::desc("Directory of include files"),
+ cl::value_desc("directory"), cl::Prefix);
- cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n");
+enum ActionType {
+ AC_Assemble
+};
- std::string ErrorMessage;
-
- MemoryBuffer *Buffer
- = MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage);
+static cl::opt<ActionType>
+Action(cl::desc("Action to perform:"),
+ cl::values(clEnumValN(AC_Assemble, "assemble",
+ "Assemble a .s file (default)"),
+ clEnumValEnd));
+static int AssembleInput(const char *ProgName) {
+ std::string ErrorMessage;
+ MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(InputFilename,
+ &ErrorMessage);
if (Buffer == 0) {
- errs() << argv[0] << ": ";
+ errs() << ProgName << ": ";
if (ErrorMessage.size())
errs() << ErrorMessage << "\n";
else
errs() << "input file didn't read correctly.\n";
return 1;
}
+
+ SourceMgr SrcMgr;
+
+ // Tell SrcMgr about this buffer, which is what TGParser will pick up.
+ SrcMgr.AddNewSourceBuffer(Buffer, SMLoc());
+
+ // Record the location of the include directories so that the lexer can find
+ // it later.
+ SrcMgr.setIncludeDirs(IncludeDirs);
+ //TGParser Parser(SrcMgr);
+ //return Parser.ParseFile();
+ return 1;
+}
+
+
+int main(int argc, char **argv) {
+ // Print a stack trace if we signal out.
+ sys::PrintStackTraceOnErrorSignal();
+ PrettyStackTraceProgram X(argc, argv);
+ llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
+ cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n");
+
+ switch (Action) {
+ default:
+ case AC_Assemble:
+ return AssembleInput(argv[0]);
+ }
+
return 0;
}