mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-20 10:24:12 +00:00
Fix up r137380 based on post-commit review by Jim Grosbach.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138948 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -135,9 +135,14 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
|
|||||||
MCInst Inst;
|
MCInst Inst;
|
||||||
const MCDisassembler *DisAsm = DC->getDisAsm();
|
const MCDisassembler *DisAsm = DC->getDisAsm();
|
||||||
MCInstPrinter *IP = DC->getIP();
|
MCInstPrinter *IP = DC->getIP();
|
||||||
if (!DisAsm->getInstruction(Inst, Size, MemoryObject, PC, /*REMOVE*/ nulls()))
|
MCDisassembler::DecodeStatus S;
|
||||||
|
S = DisAsm->getInstruction(Inst, Size, MemoryObject, PC, /*REMOVE*/ nulls());
|
||||||
|
switch (S) {
|
||||||
|
case MCDisassembler::Fail:
|
||||||
|
case MCDisassembler::SoftFail:
|
||||||
|
// FIXME: Do something different for soft failure modes?
|
||||||
return 0;
|
return 0;
|
||||||
|
case MCDisassembler::Success: {
|
||||||
SmallVector<char, 64> InsnStr;
|
SmallVector<char, 64> InsnStr;
|
||||||
raw_svector_ostream OS(InsnStr);
|
raw_svector_ostream OS(InsnStr);
|
||||||
IP->printInst(&Inst, OS);
|
IP->printInst(&Inst, OS);
|
||||||
@ -149,4 +154,6 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
|
|||||||
OutString[OutputSize] = '\0'; // Terminate string.
|
OutString[OutputSize] = '\0'; // Terminate string.
|
||||||
|
|
||||||
return Size;
|
return Size;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -239,14 +239,19 @@ EDInst *EDDisassembler::createInst(EDByteReaderCallback byteReader,
|
|||||||
MCInst* inst = new MCInst;
|
MCInst* inst = new MCInst;
|
||||||
uint64_t byteSize;
|
uint64_t byteSize;
|
||||||
|
|
||||||
if (!Disassembler->getInstruction(*inst,
|
MCDisassembler::DecodeStatus S;
|
||||||
|
S = Disassembler->getInstruction(*inst,
|
||||||
byteSize,
|
byteSize,
|
||||||
memoryObject,
|
memoryObject,
|
||||||
address,
|
address,
|
||||||
ErrorStream)) {
|
ErrorStream);
|
||||||
|
switch (S) {
|
||||||
|
case MCDisassembler::Fail:
|
||||||
|
case MCDisassembler::SoftFail:
|
||||||
|
// FIXME: Do something different on soft failure mode?
|
||||||
delete inst;
|
delete inst;
|
||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
case MCDisassembler::Success: {
|
||||||
const llvm::EDInstInfo *thisInstInfo = NULL;
|
const llvm::EDInstInfo *thisInstInfo = NULL;
|
||||||
|
|
||||||
if (InstInfos) {
|
if (InstInfos) {
|
||||||
@ -256,6 +261,7 @@ EDInst *EDDisassembler::createInst(EDByteReaderCallback byteReader,
|
|||||||
EDInst* sdInst = new EDInst(inst, byteSize, *this, thisInstInfo);
|
EDInst* sdInst = new EDInst(inst, byteSize, *this, thisInstInfo);
|
||||||
return sdInst;
|
return sdInst;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EDDisassembler::initMaps(const MCRegisterInfo ®isterInfo) {
|
void EDDisassembler::initMaps(const MCRegisterInfo ®isterInfo) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -132,9 +132,9 @@ void DisassemblerEmitter::run(raw_ostream &OS) {
|
|||||||
if (Target.getName() == "ARM" ||
|
if (Target.getName() == "ARM" ||
|
||||||
Target.getName() == "Thumb") {
|
Target.getName() == "Thumb") {
|
||||||
FixedLenDecoderEmitter(Records,
|
FixedLenDecoderEmitter(Records,
|
||||||
"CHECK(S, ", ");",
|
"if (!Check(S, ", ")) return MCDisassembler::Fail;",
|
||||||
"S", "Fail",
|
"S", "MCDisassembler::Fail",
|
||||||
"DecodeStatus S = Success;\n(void)S;").run(OS);
|
"MCDisassembler::DecodeStatus S = MCDisassembler::Success;\n(void)S;").run(OS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user