diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-10-31 21:03:29 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-10-31 21:03:29 +0000 |
commit | 4a782fbfe6698f581e4b5e40658b65b4d7039ac1 (patch) | |
tree | 54b807db4c039c16096dd289b97d839fe1c156fb | |
parent | 7f253aa63c1d779ac7380337876301c7cd4e5379 (diff) | |
download | bcm5719-llvm-4a782fbfe6698f581e4b5e40658b65b4d7039ac1.tar.gz bcm5719-llvm-4a782fbfe6698f581e4b5e40658b65b4d7039ac1.zip |
Simplify handling of archive Symbol tables.
We only need to store a StringRef.
llvm-svn: 251748
-rw-r--r-- | llvm/include/llvm/Object/Archive.h | 9 | ||||
-rw-r--r-- | llvm/lib/Object/Archive.cpp | 23 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 9 |
3 files changed, 18 insertions, 23 deletions
diff --git a/llvm/include/llvm/Object/Archive.h b/llvm/include/llvm/Object/Archive.h index 0d394fd98b6..acf22b8f7e7 100644 --- a/llvm/include/llvm/Object/Archive.h +++ b/llvm/include/llvm/Object/Archive.h @@ -208,16 +208,11 @@ public: child_iterator findSym(StringRef name) const; bool hasSymbolTable() const; - child_iterator getSymbolTableChild() const { return SymbolTable; } - StringRef getSymbolTable() const { - // We know that the symbol table is not an external file, - // so we just assert there is no error. - return *SymbolTable->getBuffer(); - } + StringRef getSymbolTable() const { return SymbolTable; } uint32_t getNumberOfSymbols() const; private: - child_iterator SymbolTable; + StringRef SymbolTable; StringRef StringTable; child_iterator FirstRegular; unsigned Format : 2; diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index 2e71b8205d4..4bb50a0f757 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -233,8 +233,7 @@ ErrorOr<std::unique_ptr<Archive>> Archive::create(MemoryBufferRef Source) { } Archive::Archive(MemoryBufferRef Source, std::error_code &ec) - : Binary(Binary::ID_Archive, Source), SymbolTable(child_end()), - FirstRegular(child_end()) { + : Binary(Binary::ID_Archive, Source), FirstRegular(child_end()) { StringRef Buffer = Data.getBuffer(); // Check for sufficient magic. if (Buffer.startswith(ThinMagic)) { @@ -278,7 +277,9 @@ Archive::Archive(MemoryBufferRef Source, std::error_code &ec) if (Name == "__.SYMDEF") { Format = K_BSD; - SymbolTable = i; + // We know that the symbol table is not an external file, so we just assert + // there is no error. + SymbolTable = *i->getBuffer(); ++i; FirstRegular = i; ec = std::error_code(); @@ -294,7 +295,9 @@ Archive::Archive(MemoryBufferRef Source, std::error_code &ec) return; Name = NameOrErr.get(); if (Name == "__.SYMDEF SORTED" || Name == "__.SYMDEF") { - SymbolTable = i; + // We know that the symbol table is not an external file, so we just + // assert there is no error. + SymbolTable = *i->getBuffer(); ++i; } FirstRegular = i; @@ -308,7 +311,9 @@ Archive::Archive(MemoryBufferRef Source, std::error_code &ec) bool has64SymTable = false; if (Name == "/" || Name == "/SYM64/") { - SymbolTable = i; + // We know that the symbol table is not an external file, so we just assert + // there is no error. + SymbolTable = *i->getBuffer(); if (Name == "/SYM64/") has64SymTable = true; @@ -344,7 +349,9 @@ Archive::Archive(MemoryBufferRef Source, std::error_code &ec) } Format = K_COFF; - SymbolTable = i; + // We know that the symbol table is not an external file, so we just assert + // there is no error. + SymbolTable = *i->getBuffer(); ++i; if (i == e) { @@ -551,6 +558,4 @@ Archive::child_iterator Archive::findSym(StringRef name) const { return child_end(); } -bool Archive::hasSymbolTable() const { - return SymbolTable != child_end(); -} +bool Archive::hasSymbolTable() const { return !SymbolTable.empty(); } diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 3ea6fe4c99b..b94b6d0f0cf 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -1452,13 +1452,8 @@ static void printArchiveChild(Archive::Child &C, bool verbose, } static void printArchiveHeaders(Archive *A, bool verbose, bool print_offset) { - if (A->hasSymbolTable()) { - Archive::child_iterator S = A->getSymbolTableChild(); - Archive::Child C = *S; - printArchiveChild(C, verbose, print_offset); - } - for (Archive::child_iterator I = A->child_begin(), E = A->child_end(); I != E; - ++I) { + for (Archive::child_iterator I = A->child_begin(false), E = A->child_end(); + I != E; ++I) { Archive::Child C = *I; printArchiveChild(C, verbose, print_offset); } |