diff options
author | Owen Anderson <resistor@mac.com> | 2011-08-17 17:44:15 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2011-08-17 17:44:15 +0000 |
commit | 83e3f67fb68d497b600da83a62f000fcce7868a9 (patch) | |
tree | 304ea462b8e700eb92526a43c9c2749341fb9e83 /lib/Target/X86 | |
parent | 0e6d230abdbf6ba67a2676c118431a4df8fb15dd (diff) |
Allow the MCDisassembler to return a "soft fail" status code, indicating an instruction that is disassemblable, but invalid. Only used for ARM UNPREDICTABLE instructions at the moment.
Patch by James Molloy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137830 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86')
-rw-r--r-- | lib/Target/X86/Disassembler/X86Disassembler.cpp | 15 | ||||
-rw-r--r-- | lib/Target/X86/Disassembler/X86Disassembler.h | 10 |
2 files changed, 13 insertions, 12 deletions
diff --git a/lib/Target/X86/Disassembler/X86Disassembler.cpp b/lib/Target/X86/Disassembler/X86Disassembler.cpp index 4a0d2ec727..3ea3add1d1 100644 --- a/lib/Target/X86/Disassembler/X86Disassembler.cpp +++ b/lib/Target/X86/Disassembler/X86Disassembler.cpp @@ -106,11 +106,12 @@ static void logger(void* arg, const char* log) { // Public interface for the disassembler // -bool X86GenericDisassembler::getInstruction(MCInst &instr, - uint64_t &size, - const MemoryObject ®ion, - uint64_t address, - raw_ostream &vStream) const { +MCDisassembler::DecodeStatus +X86GenericDisassembler::getInstruction(MCInst &instr, + uint64_t &size, + const MemoryObject ®ion, + uint64_t address, + raw_ostream &vStream) const { InternalInstruction internalInstr; int ret = decodeInstruction(&internalInstr, @@ -123,11 +124,11 @@ bool X86GenericDisassembler::getInstruction(MCInst &instr, if (ret) { size = internalInstr.readerCursor - address; - return false; + return Fail; } else { size = internalInstr.length; - return !translateInstruction(instr, internalInstr); + return (!translateInstruction(instr, internalInstr)) ? Success : Fail; } } diff --git a/lib/Target/X86/Disassembler/X86Disassembler.h b/lib/Target/X86/Disassembler/X86Disassembler.h index 550cf9d40d..cced10e4a2 100644 --- a/lib/Target/X86/Disassembler/X86Disassembler.h +++ b/lib/Target/X86/Disassembler/X86Disassembler.h @@ -112,11 +112,11 @@ public: ~X86GenericDisassembler(); /// getInstruction - See MCDisassembler. - bool getInstruction(MCInst &instr, - uint64_t &size, - const MemoryObject ®ion, - uint64_t address, - raw_ostream &vStream) const; + DecodeStatus getInstruction(MCInst &instr, + uint64_t &size, + const MemoryObject ®ion, + uint64_t address, + raw_ostream &vStream) const; /// getEDInfo - See MCDisassembler. EDInstInfo *getEDInfo() const; |