mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 02:24:22 +00:00
Pass an ArrayRef to MCDisassembler::getInstruction.
With this patch MCDisassembler::getInstruction takes an ArrayRef<uint8_t> instead of a MemoryObject. Even on X86 there is a maximum size an instruction can have. Given that, it seems way simpler and more efficient to just pass an ArrayRef to the disassembler instead of a MemoryObject and have it do a virtual call every time it wants some extra bytes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -374,10 +374,11 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
|
||||
SmallString<40> Comments;
|
||||
raw_svector_ostream CommentStream(Comments);
|
||||
|
||||
StringRef Bytes;
|
||||
if (error(Section.getContents(Bytes)))
|
||||
StringRef BytesStr;
|
||||
if (error(Section.getContents(BytesStr)))
|
||||
break;
|
||||
StringRefMemoryObject memoryObject(Bytes, SectionAddr);
|
||||
ArrayRef<uint8_t> Bytes((uint8_t *)BytesStr.data(), BytesStr.size());
|
||||
|
||||
uint64_t Size;
|
||||
uint64_t Index;
|
||||
|
||||
@ -404,13 +405,13 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
|
||||
for (Index = Start; Index < End; Index += Size) {
|
||||
MCInst Inst;
|
||||
|
||||
if (DisAsm->getInstruction(Inst, Size, memoryObject,
|
||||
SectionAddr + Index,
|
||||
DebugOut, CommentStream)) {
|
||||
if (DisAsm->getInstruction(Inst, Size, Bytes.slice(Index),
|
||||
SectionAddr + Index, DebugOut,
|
||||
CommentStream)) {
|
||||
outs() << format("%8" PRIx64 ":", SectionAddr + Index);
|
||||
if (!NoShowRawInsn) {
|
||||
outs() << "\t";
|
||||
DumpBytes(StringRef(Bytes.data() + Index, Size));
|
||||
DumpBytes(StringRef((char *)Bytes.data() + Index, Size));
|
||||
}
|
||||
IP->printInst(&Inst, outs(), "");
|
||||
outs() << CommentStream.str();
|
||||
|
Reference in New Issue
Block a user