summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objdump/MachODump.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2011-09-21 22:16:43 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2011-09-21 22:16:43 +0000
commit8a529dc10aac301fde365a6ca3562a80f6e4c1d0 (patch)
tree83f2b776174593e6c4681f9b3b0fc5d4f8208ba0 /llvm/tools/llvm-objdump/MachODump.cpp
parent7b3fc8ee38e7c6d7a9cb980009f900672408619b (diff)
downloadbcm5719-llvm-8a529dc10aac301fde365a6ca3562a80f6e4c1d0.tar.gz
bcm5719-llvm-8a529dc10aac301fde365a6ca3562a80f6e4c1d0.zip
llvm-objdump: Detach symbol listing from section enumeration for mach-o.
This reduces memory usage as we don't add the same symbol multiple times anymore. llvm-svn: 140278
Diffstat (limited to 'llvm/tools/llvm-objdump/MachODump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/MachODump.cpp35
1 files changed, 16 insertions, 19 deletions
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index 22eaab7de03..b474d5fce75 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -230,15 +230,6 @@ static void getSectionsAndSymbols(const macho::Header &Header,
MachOObj->ReadSection(LCI, SectNum, Sect);
Sections.push_back(copySection(Sect));
- // Store the symbols in this section.
- if (SymtabLC) {
- for (unsigned i = 0; i != (*SymtabLC)->NumSymbolTableEntries; ++i) {
- InMemoryStruct<macho::SymbolTableEntry> STE;
- MachOObj->ReadSymbolTableEntry((*SymtabLC)->SymbolTableOffset, i,
- STE);
- Symbols.push_back(copySymbol(STE));
- }
- }
}
} else if (LCI.Command.Type == macho::LCT_Segment64) {
InMemoryStruct<macho::Segment64LoadCommand> Segment64LC;
@@ -250,16 +241,6 @@ static void getSectionsAndSymbols(const macho::Header &Header,
InMemoryStruct<macho::Section64> Sect64;
MachOObj->ReadSection64(LCI, SectNum, Sect64);
Sections.push_back(copySection(Sect64));
-
- // Store the symbols in this section.
- if (SymtabLC) {
- for (unsigned i = 0; i != (*SymtabLC)->NumSymbolTableEntries; ++i) {
- InMemoryStruct<macho::Symbol64TableEntry> STE;
- MachOObj->ReadSymbol64TableEntry((*SymtabLC)->SymbolTableOffset, i,
- STE);
- Symbols.push_back(copySymbol(STE));
- }
- }
}
} else if (LCI.Command.Type == macho::LCT_FunctionStarts) {
// We found a function starts segment, parse the addresses for later
@@ -270,6 +251,22 @@ static void getSectionsAndSymbols(const macho::Header &Header,
MachOObj->ReadULEB128s(LLC->DataOffset, FoundFns);
}
}
+ // Store the symbols.
+ if (SymtabLC) {
+ for (unsigned i = 0; i != (*SymtabLC)->NumSymbolTableEntries; ++i) {
+ if (MachOObj->is64Bit()) {
+ InMemoryStruct<macho::Symbol64TableEntry> STE;
+ MachOObj->ReadSymbol64TableEntry((*SymtabLC)->SymbolTableOffset, i,
+ STE);
+ Symbols.push_back(copySymbol(STE));
+ } else {
+ InMemoryStruct<macho::SymbolTableEntry> STE;
+ MachOObj->ReadSymbolTableEntry((*SymtabLC)->SymbolTableOffset, i,
+ STE);
+ Symbols.push_back(copySymbol(STE));
+ }
+ }
+ }
}
void llvm::DisassembleInputMachO(StringRef Filename) {
OpenPOWER on IntegriCloud