mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-29 16:23:44 +00:00
Fixed a bug in llvm-objdump when disassembling using -macho option for a binary
containing no symbols. Fixed the crash and fixed it not disassembling anything. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157031 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0e5e821a69
commit
59c15e920c
5
test/MC/MachO/ARM/llvm-objdump-macho-stripped.s
Normal file
5
test/MC/MachO/ARM/llvm-objdump-macho-stripped.s
Normal file
@ -0,0 +1,5 @@
|
||||
@ RUN: llvm-mc -triple=thumbv7-apple-ios -filetype=obj -o - < %s | llvm-objdump -d -macho -triple=thumbv7-apple-ios - | FileCheck %s
|
||||
nop
|
||||
# CHECK: 0: 00 bf nop
|
||||
# We are checking that disassembly happens when there are no symbols.
|
||||
# rdar://11460289
|
@ -286,8 +286,10 @@ void llvm::DisassembleInputMachO(StringRef Filename) {
|
||||
|
||||
// Read and register the symbol table data.
|
||||
InMemoryStruct<macho::SymtabLoadCommand> SymtabLC;
|
||||
MachOObj->ReadSymtabLoadCommand(*SymtabLCI, SymtabLC);
|
||||
MachOObj->RegisterStringTable(*SymtabLC);
|
||||
if (SymtabLCI) {
|
||||
MachOObj->ReadSymtabLoadCommand(*SymtabLCI, SymtabLC);
|
||||
MachOObj->RegisterStringTable(*SymtabLC);
|
||||
}
|
||||
|
||||
std::vector<SectionRef> Sections;
|
||||
std::vector<SymbolRef> Symbols;
|
||||
@ -498,6 +500,31 @@ void llvm::DisassembleInputMachO(StringRef Filename) {
|
||||
InstrAnalysis.get(), Start, DebugOut, FunctionMap, Functions);
|
||||
}
|
||||
}
|
||||
if (!CFG && !symbolTableWorked) {
|
||||
// Reading the symbol table didn't work, disassemble the whole section.
|
||||
uint64_t SectAddress;
|
||||
Sections[SectIdx].getAddress(SectAddress);
|
||||
uint64_t SectSize;
|
||||
Sections[SectIdx].getSize(SectSize);
|
||||
uint64_t InstSize;
|
||||
for (uint64_t Index = 0; Index < SectSize; Index += InstSize) {
|
||||
MCInst Inst;
|
||||
|
||||
if (DisAsm->getInstruction(Inst, InstSize, memoryObject, Index,
|
||||
DebugOut, nulls())) {
|
||||
outs() << format("%8" PRIx64 ":\t", SectAddress + Index);
|
||||
|
||||
DumpBytes(StringRef(Bytes.data() + Index, InstSize));
|
||||
IP->printInst(&Inst, outs(), "");
|
||||
|
||||
outs() << "\n";
|
||||
} else {
|
||||
errs() << "llvm-objdump: warning: invalid instruction encoding\n";
|
||||
if (InstSize == 0)
|
||||
InstSize = 1; // skip illegible bytes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (CFG) {
|
||||
if (!symbolTableWorked) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user