CHECK-NEXT: U SomeOtherFunction
CHECK-NEXT: 0000000000000000 T main
CHECK-NEXT: U puts
-CHECK-NEXT: trivial-object-test2.elf-x86-64:
+
+CHECK: trivial-object-test2.elf-x86-64:
CHECK-NEXT: 0000000000000000 t bar
CHECK-NEXT: 0000000000000006 T foo
CHECK-NEXT: 0000000000000016 T main
CORRUPT-NEXT: U SomeOtherFunction
CORRUPT-NEXT: 0000000000000000 T main
CORRUPT-NEXT: U puts
-CORRUPT-NEXT: trivial-object-test2.elf-x86-64:
+
+CORRUPT: trivial-object-test2.elf-x86-64:
CORRUPT-NEXT: 0000000000000000 t bar
CORRUPT-NEXT: 0000000000000006 T foo
CORRUPT-NEXT: 0000000000000016 T main
outs() << "\n";
}
-static void sortAndPrintSymbolList(SymbolicFile *Obj) {
+static void sortAndPrintSymbolList(SymbolicFile *Obj, bool printName) {
if (!NoSort) {
if (NumericSort)
std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolAddress);
std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolName);
}
- if (OutputFormat == posix && MultipleFiles) {
+ if (OutputFormat == posix && MultipleFiles && printName) {
outs() << '\n' << CurrentFilename << ":\n";
- } else if (OutputFormat == bsd && MultipleFiles) {
+ } else if (OutputFormat == bsd && MultipleFiles && printName) {
outs() << "\n" << CurrentFilename << ":\n";
} else if (OutputFormat == sysv) {
outs() << "\n\nSymbols from " << CurrentFilename << ":\n\n"
return Ret;
}
-static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
+static void dumpSymbolNamesFromObject(SymbolicFile *Obj, bool printName) {
basic_symbol_iterator IBegin = Obj->symbol_begin();
basic_symbol_iterator IEnd = Obj->symbol_end();
if (DynamicSyms) {
}
CurrentFilename = Obj->getFileName();
- sortAndPrintSymbolList(Obj);
+ sortAndPrintSymbolList(Obj, printName);
}
static void dumpSymbolNamesFromFile(std::string &Filename) {
if (ChildOrErr.getError())
continue;
if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) {
+ outs() << "\n";
if (isa<MachOObjectFile>(O)) {
outs() << Filename << "(" << O->getFileName() << ")";
} else
outs() << O->getFileName();
outs() << ":\n";
- dumpSymbolNamesFromObject(O);
+ dumpSymbolNamesFromObject(O, false);
}
}
return;
std::unique_ptr<ObjectFile> Obj;
std::unique_ptr<Archive> A;
if (!I->getAsObjectFile(Obj)) {
+ if (moreThanOneArch)
+ outs() << "\n";
outs() << Obj->getFileName();
if (isa<MachOObjectFile>(Obj.get()) && moreThanOneArch)
outs() << " (for architecture " << I->getArchTypeName() << ")";
outs() << ":\n";
- dumpSymbolNamesFromObject(Obj.get());
+ dumpSymbolNamesFromObject(Obj.get(), false);
}
else if (!I->getAsArchive(A)) {
for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end();
if (ChildOrErr.getError())
continue;
if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) {
- outs() << A->getFileName();
+ outs() << "\n" << A->getFileName();
if (isa<MachOObjectFile>(O)) {
outs() << "(" << O->getFileName() << ")";
if (moreThanOneArch)
} else
outs() << ":" << O->getFileName();
outs() << ":\n";
- dumpSymbolNamesFromObject(O);
+ dumpSymbolNamesFromObject(O, false);
}
}
}
return;
}
if (SymbolicFile *O = dyn_cast<SymbolicFile>(Bin.get())) {
- dumpSymbolNamesFromObject(O);
+ dumpSymbolNamesFromObject(O, true);
return;
}
error("unrecognizable file type", Filename);