diff options
author | Kevin Enderby <enderby@apple.com> | 2014-06-19 22:03:18 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2014-06-19 22:03:18 +0000 |
commit | c28016e4131bdd50c23510adb3a0254b7fb5adc6 (patch) | |
tree | a3189bf985158cb78e2ca2b9ac6613fb53febced /tools | |
parent | 0b5745abd8e46ac60cd16f949a2fd5a581fc8fd4 (diff) | |
download | llvm-c28016e4131bdd50c23510adb3a0254b7fb5adc6.tar.gz llvm-c28016e4131bdd50c23510adb3a0254b7fb5adc6.tar.bz2 llvm-c28016e4131bdd50c23510adb3a0254b7fb5adc6.tar.xz |
Change the output of llvm-nm and llvm-size for Mach-O universal files (aka
fat files) to print “ (for architecture XYZ)” for fat files with more than
one architecture to be like what the darwin tools do for fat files.
Also clean up the Mach-O printing of archive membernames in llvm-nm to use
the darwin form of "libx.a(foo.o)".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211316 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/llvm-nm/llvm-nm.cpp | 22 | ||||
-rw-r--r-- | tools/llvm-size/llvm-size.cpp | 19 |
2 files changed, 33 insertions, 8 deletions
diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index e605e6e430..c6b80d1dd9 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -752,20 +752,28 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { if (ChildOrErr.getError()) continue; if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) { - outs() << O->getFileName() << ":\n"; + if (isa<MachOObjectFile>(O)) { + outs() << Filename << "(" << O->getFileName() << ")"; + } else + outs() << O->getFileName(); + outs() << ":\n"; dumpSymbolNamesFromObject(O); } } return; } if (MachOUniversalBinary *UB = dyn_cast<MachOUniversalBinary>(Bin.get())) { + bool moreThanOneArch = UB->getNumberOfObjects() > 1; for (MachOUniversalBinary::object_iterator I = UB->begin_objects(), E = UB->end_objects(); I != E; ++I) { std::unique_ptr<ObjectFile> Obj; std::unique_ptr<Archive> A; if (!I->getAsObjectFile(Obj)) { - outs() << Obj->getFileName() << ":\n"; + outs() << Obj->getFileName(); + if (isa<MachOObjectFile>(Obj.get()) && moreThanOneArch) + outs() << " (for architecture " << I->getArchTypeName() << ")"; + outs() << ":\n"; dumpSymbolNamesFromObject(Obj.get()); } else if (!I->getAsArchive(A)) { @@ -776,8 +784,14 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { if (ChildOrErr.getError()) continue; if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) { - outs() << A->getFileName() << ":"; - outs() << O->getFileName() << ":\n"; + outs() << A->getFileName(); + if (isa<MachOObjectFile>(O)) { + outs() << "(" << O->getFileName() << ")"; + if (moreThanOneArch) + outs() << " (for architecture " << I->getArchTypeName() << ")"; + } else + outs() << ":" << O->getFileName(); + outs() << ":\n"; dumpSymbolNamesFromObject(O); } } diff --git a/tools/llvm-size/llvm-size.cpp b/tools/llvm-size/llvm-size.cpp index b3aaac8d27..408bb4a188 100644 --- a/tools/llvm-size/llvm-size.cpp +++ b/tools/llvm-size/llvm-size.cpp @@ -469,13 +469,20 @@ static void PrintFileSectionSizes(StringRef file) { std::unique_ptr<Archive> UA; if (!I->getAsObjectFile(UO)) { if (ObjectFile *o = dyn_cast<ObjectFile>(&*UO.get())) { + MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o); if (OutputFormat == sysv) outs() << o->getFileName() << " :\n"; + else if(MachO && OutputFormat == darwin) { + if (moreThanOneFile || moreThanOneArch) + outs() << o->getFileName() << " (for architecture " + << I->getArchTypeName() << "):"; + outs() << "\n"; + } PrintObjectSectionSizes(o); if (OutputFormat == berkeley) { - MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o); if (!MachO || moreThanOneFile || moreThanOneArch) - outs() << o->getFileName(); + outs() << o->getFileName() << " (for architecture " + << I->getArchTypeName() << ")"; outs() << "\n"; } } @@ -495,11 +502,15 @@ static void PrintFileSectionSizes(StringRef file) { outs() << o->getFileName() << " (ex " << UA->getFileName() << "):\n"; else if(MachO && OutputFormat == darwin) - outs() << UA->getFileName() << "(" << o->getFileName() << "):\n"; + outs() << UA->getFileName() << "(" << o->getFileName() << ")" + << " (for architecture " << I->getArchTypeName() + << "):\n"; PrintObjectSectionSizes(o); if (OutputFormat == berkeley) { if (MachO) - outs() << UA->getFileName() << "(" << o->getFileName() << ")\n"; + outs() << UA->getFileName() << "(" << o->getFileName() << ")" + << " (for architecture " << I->getArchTypeName() + << ")\n"; else outs() << o->getFileName() << " (ex " << UA->getFileName() << ")\n"; |