From a1da3dd845e763cf9cb06723b34ad20bbbea6c2c Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 30 Jan 2014 19:24:00 +0000 Subject: Use early returns and factor the object::Binary creation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200484 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-nm/llvm-nm.cpp | 128 +++++++++++++++++++++------------------------- 1 file changed, 59 insertions(+), 69 deletions(-) (limited to 'tools/llvm-nm') diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index da221d133a..2071aa627d 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -44,11 +44,7 @@ using namespace llvm; using namespace object; namespace { -enum OutputFormatTy { - bsd, - sysv, - posix -}; +enum OutputFormatTy { bsd, sysv, posix }; cl::opt OutputFormat( "format", cl::desc("Specify output format"), cl::values(clEnumVal(bsd, "BSD format"), clEnumVal(sysv, "System V format"), @@ -581,67 +577,64 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { dumpSymbolNamesFromModule(Result); delete Result; } - } else if (Magic == sys::fs::file_magic::archive) { - ErrorOr BinaryOrErr = object::createBinary(Buffer.take(), Magic); - if (error(BinaryOrErr.getError(), Filename)) - return; - OwningPtr Arch(BinaryOrErr.get()); - - if (object::Archive *A = dyn_cast(Arch.get())) { - if (ArchiveMap) { - object::Archive::symbol_iterator I = A->symbol_begin(); - object::Archive::symbol_iterator E = A->symbol_end(); - if (I != E) { - outs() << "Archive map" - << "\n"; - for (; I != E; ++I) { - object::Archive::child_iterator C; - StringRef SymName; - StringRef FileName; - if (error(I->getMember(C))) - return; - if (error(I->getName(SymName))) - return; - if (error(C->getName(FileName))) - return; - outs() << SymName << " in " << FileName << "\n"; - } - outs() << "\n"; - } - } + return; + } - for (object::Archive::child_iterator I = A->child_begin(), - E = A->child_end(); - I != E; ++I) { - OwningPtr Child; - if (I->getAsBinary(Child)) { - // Try opening it as a bitcode file. - OwningPtr Buff; - if (error(I->getMemoryBuffer(Buff))) + ErrorOr BinaryOrErr = object::createBinary(Buffer.take(), Magic); + if (error(BinaryOrErr.getError(), Filename)) + return; + OwningPtr Bin(BinaryOrErr.get()); + + if (object::Archive *A = dyn_cast(Bin.get())) { + if (ArchiveMap) { + object::Archive::symbol_iterator I = A->symbol_begin(); + object::Archive::symbol_iterator E = A->symbol_end(); + if (I != E) { + outs() << "Archive map" + << "\n"; + for (; I != E; ++I) { + object::Archive::child_iterator C; + StringRef SymName; + StringRef FileName; + if (error(I->getMember(C))) return; - - ErrorOr ModuleOrErr = parseBitcodeFile(Buff.get(), Context); - if (ModuleOrErr) { - Module *Result = ModuleOrErr.get(); - dumpSymbolNamesFromModule(Result); - delete Result; - } - continue; - } - if (object::ObjectFile *O = dyn_cast(Child.get())) { - outs() << O->getFileName() << ":\n"; - dumpSymbolNamesFromObject(O); + if (error(I->getName(SymName))) + return; + if (error(C->getName(FileName))) + return; + outs() << SymName << " in " << FileName << "\n"; } + outs() << "\n"; } } - } else if (Magic == sys::fs::file_magic::macho_universal_binary) { - ErrorOr BinaryOrErr = object::createBinary(Buffer.take(), Magic); - if (error(BinaryOrErr.getError(), Filename)) - return; - OwningPtr Bin(BinaryOrErr.get()); - object::MachOUniversalBinary *UB = - cast(Bin.get()); + for (object::Archive::child_iterator I = A->child_begin(), + E = A->child_end(); + I != E; ++I) { + OwningPtr Child; + if (I->getAsBinary(Child)) { + // Try opening it as a bitcode file. + OwningPtr Buff; + if (error(I->getMemoryBuffer(Buff))) + return; + + ErrorOr ModuleOrErr = parseBitcodeFile(Buff.get(), Context); + if (ModuleOrErr) { + Module *Result = ModuleOrErr.get(); + dumpSymbolNamesFromModule(Result); + delete Result; + } + continue; + } + if (object::ObjectFile *O = dyn_cast(Child.get())) { + outs() << O->getFileName() << ":\n"; + dumpSymbolNamesFromObject(O); + } + } + return; + } + if (object::MachOUniversalBinary *UB = + dyn_cast(Bin.get())) { for (object::MachOUniversalBinary::object_iterator I = UB->begin_objects(), E = UB->end_objects(); I != E; ++I) { @@ -651,17 +644,14 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { dumpSymbolNamesFromObject(Obj.get()); } } - } else if (Magic.is_object()) { - ErrorOr BinaryOrErr = object::createBinary(Buffer.take(), Magic); - if (error(BinaryOrErr.getError(), Filename)) - return; - OwningPtr Obj(BinaryOrErr.get()); - if (object::ObjectFile *O = dyn_cast(Obj.get())) - dumpSymbolNamesFromObject(O); - } else { - error("unrecognizable file type", Filename); return; } + if (object::ObjectFile *O = dyn_cast(Bin.get())) { + dumpSymbolNamesFromObject(O); + return; + } + error("unrecognizable file type", Filename); + return; } int main(int argc, char **argv) { -- cgit v1.2.3