mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-07 01:38:26 +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:
parent
7f17b5a483
commit
c047dcade5
@ -135,18 +135,25 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
|
||||
MCInst Inst;
|
||||
const MCDisassembler *DisAsm = DC->getDisAsm();
|
||||
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;
|
||||
case MCDisassembler::Success: {
|
||||
SmallVector<char, 64> InsnStr;
|
||||
raw_svector_ostream OS(InsnStr);
|
||||
IP->printInst(&Inst, OS);
|
||||
OS.flush();
|
||||
|
||||
SmallVector<char, 64> InsnStr;
|
||||
raw_svector_ostream OS(InsnStr);
|
||||
IP->printInst(&Inst, OS);
|
||||
OS.flush();
|
||||
assert(OutStringSize != 0 && "Output buffer cannot be zero size");
|
||||
size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
|
||||
std::memcpy(OutString, InsnStr.data(), OutputSize);
|
||||
OutString[OutputSize] = '\0'; // Terminate string.
|
||||
|
||||
assert(OutStringSize != 0 && "Output buffer cannot be zero size");
|
||||
size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
|
||||
std::memcpy(OutString, InsnStr.data(), OutputSize);
|
||||
OutString[OutputSize] = '\0'; // Terminate string.
|
||||
|
||||
return Size;
|
||||
return Size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -239,14 +239,19 @@ EDInst *EDDisassembler::createInst(EDByteReaderCallback byteReader,
|
||||
MCInst* inst = new MCInst;
|
||||
uint64_t byteSize;
|
||||
|
||||
if (!Disassembler->getInstruction(*inst,
|
||||
byteSize,
|
||||
memoryObject,
|
||||
address,
|
||||
ErrorStream)) {
|
||||
MCDisassembler::DecodeStatus S;
|
||||
S = Disassembler->getInstruction(*inst,
|
||||
byteSize,
|
||||
memoryObject,
|
||||
address,
|
||||
ErrorStream);
|
||||
switch (S) {
|
||||
case MCDisassembler::Fail:
|
||||
case MCDisassembler::SoftFail:
|
||||
// FIXME: Do something different on soft failure mode?
|
||||
delete inst;
|
||||
return NULL;
|
||||
} else {
|
||||
case MCDisassembler::Success: {
|
||||
const llvm::EDInstInfo *thisInstInfo = NULL;
|
||||
|
||||
if (InstInfos) {
|
||||
@ -256,6 +261,7 @@ EDInst *EDDisassembler::createInst(EDByteReaderCallback byteReader,
|
||||
EDInst* sdInst = new EDInst(inst, byteSize, *this, thisInstInfo);
|
||||
return sdInst;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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" ||
|
||||
Target.getName() == "Thumb") {
|
||||
FixedLenDecoderEmitter(Records,
|
||||
"CHECK(S, ", ");",
|
||||
"S", "Fail",
|
||||
"DecodeStatus S = Success;\n(void)S;").run(OS);
|
||||
"if (!Check(S, ", ")) return MCDisassembler::Fail;",
|
||||
"S", "MCDisassembler::Fail",
|
||||
"MCDisassembler::DecodeStatus S = MCDisassembler::Success;\n(void)S;").run(OS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user