Second try at integrating the edis tester. This
time I use the LIBS variable, which is not subject
to a %.a -> -l% transformation, to link llvm-mc
against libEnhancedDisassembly.
llvm-mc -edis works the same as llvm-mc
-disassemble, but outputs tokens and operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101058 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp
index c6657f5..47f67c5 100644
--- a/tools/llvm-mc/llvm-mc.cpp
+++ b/tools/llvm-mc/llvm-mc.cpp
@@ -97,7 +97,8 @@
enum ActionType {
AC_AsLex,
AC_Assemble,
- AC_Disassemble
+ AC_Disassemble,
+ AC_EDisassemble
};
static cl::opt<ActionType>
@@ -109,6 +110,8 @@
"Assemble a .s file (default)"),
clEnumValN(AC_Disassemble, "disassemble",
"Disassemble strings of hex bytes"),
+ clEnumValN(AC_EDisassemble, "edis",
+ "Enhanced disassembly of strings of hex bytes"),
clEnumValEnd));
static const Target *GetTarget(const char *ProgName) {
@@ -325,7 +328,7 @@
return Res;
}
-static int DisassembleInput(const char *ProgName) {
+static int DisassembleInput(const char *ProgName, bool Enhanced) {
const Target *TheTarget = GetTarget(ProgName);
if (!TheTarget)
return 0;
@@ -344,7 +347,10 @@
return 1;
}
- return Disassembler::disassemble(*TheTarget, TripleName, *Buffer);
+ if (Enhanced)
+ return Disassembler::disassembleEnhanced(TripleName, *Buffer);
+ else
+ return Disassembler::disassemble(*TheTarget, TripleName, *Buffer);
}
@@ -371,7 +377,9 @@
case AC_Assemble:
return AssembleInput(argv[0]);
case AC_Disassemble:
- return DisassembleInput(argv[0]);
+ return DisassembleInput(argv[0], false);
+ case AC_EDisassemble:
+ return DisassembleInput(argv[0], true);
}
return 0;