summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorKevin Enderby <enderby@apple.com>2014-06-19 22:03:18 +0000
committerKevin Enderby <enderby@apple.com>2014-06-19 22:03:18 +0000
commitc28016e4131bdd50c23510adb3a0254b7fb5adc6 (patch)
treea3189bf985158cb78e2ca2b9ac6613fb53febced /tools
parent0b5745abd8e46ac60cd16f949a2fd5a581fc8fd4 (diff)
downloadllvm-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.cpp22
-rw-r--r--tools/llvm-size/llvm-size.cpp19
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";