summaryrefslogtreecommitdiff
path: root/tools/llvm-mc/llvm-mc.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-07-17 22:38:58 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-07-17 22:38:58 +0000
commitb4b53e5c13167925d6315a6f57c7b863e4e2b704 (patch)
tree798dca05cc66cf81e982d211b009becd5d69df10 /tools/llvm-mc/llvm-mc.cpp
parentcbdf0e2455d78b047aec4141ec84cf96095bee16 (diff)
downloadllvm-b4b53e5c13167925d6315a6f57c7b863e4e2b704.tar.gz
llvm-b4b53e5c13167925d6315a6f57c7b863e4e2b704.tar.bz2
llvm-b4b53e5c13167925d6315a6f57c7b863e4e2b704.tar.xz
llvm-mc: Add -triple, and start fetching the target asm printer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76257 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-mc/llvm-mc.cpp')
-rw-r--r--tools/llvm-mc/llvm-mc.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp
index b52edd1ed4..c7f3996c97 100644
--- a/tools/llvm-mc/llvm-mc.cpp
+++ b/tools/llvm-mc/llvm-mc.cpp
@@ -22,6 +22,8 @@
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Signals.h"
+#include "llvm/Target/TargetRegistry.h"
+#include "llvm/Target/TargetSelect.h"
#include "AsmParser.h"
using namespace llvm;
@@ -36,6 +38,11 @@ static cl::list<std::string>
IncludeDirs("I", cl::desc("Directory of include files"),
cl::value_desc("directory"), cl::Prefix);
+static cl::opt<std::string>
+Triple("triple", cl::desc("Target triple to assemble for,"
+ "see -version for available targets"),
+ cl::init(""));
+
enum ActionType {
AC_AsLex,
AC_Assemble
@@ -137,6 +144,23 @@ static int AsLexInput(const char *ProgName) {
}
static int AssembleInput(const char *ProgName) {
+ // Get the target specific parser.
+ std::string Error;
+ const Target *TheTarget =
+ TargetRegistry::getClosestStaticTargetForTriple(Triple, Error);
+ if (TheTarget == 0) {
+ errs() << ProgName << ": error: unable to get target for '" << Triple
+ << "', see --version and --triple.\n";
+ return 1;
+ }
+
+ TargetAsmParser *TAP = TheTarget->createAsmParser();
+ if (!TAP) {
+ errs() << ProgName
+ << ": error: this target does not support assembly parsing.\n";
+ return 1;
+ }
+
std::string ErrorMessage;
MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(InputFilename,
&ErrorMessage);
@@ -174,6 +198,11 @@ int main(int argc, char **argv) {
sys::PrintStackTraceOnErrorSignal();
PrettyStackTraceProgram X(argc, argv);
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
+
+ // Initialize targets and assembly parsers.
+ llvm::InitializeAllTargetInfos();
+ llvm::InitializeAllAsmParsers();
+
cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n");
switch (Action) {