diff options
author | Kevin Enderby <enderby@apple.com> | 2016-01-21 21:13:27 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2016-01-21 21:13:27 +0000 |
commit | 1f472eace5207f41e55953d62cc9c5b0dab31eba (patch) | |
tree | f45739dbacda44119f006be74a9241afdf092711 /llvm/tools/llvm-nm/llvm-nm.cpp | |
parent | f0a275e0358911794545810b96c5d160e7bd714f (diff) | |
download | bcm5719-llvm-1f472eace5207f41e55953d62cc9c5b0dab31eba.tar.gz bcm5719-llvm-1f472eace5207f41e55953d62cc9c5b0dab31eba.zip |
Fix MachOObjectFile::getSymbolSection() to not call report_fatal_error()
but to return object_error::parse_failed. Then made the code in llvm-nm
do for Mach-O files what is done in the darwin native tools which is to
print "(?,?)" or just "s" for bad section indexes. Also added a test to show
it prints the bad section index of "42" when printing the fields as raw hex.
llvm-svn: 258434
Diffstat (limited to 'llvm/tools/llvm-nm/llvm-nm.cpp')
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 50960653f75..b70a79c334c 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -367,7 +367,13 @@ static void darwinPrintSymbol(SymbolicFile &Obj, SymbolListT::iterator I, outs() << "(?,?) "; break; } - section_iterator Sec = *MachO->getSymbolSection(I->Sym.getRawDataRefImpl()); + ErrorOr<section_iterator> SecOrErr = + MachO->getSymbolSection(I->Sym.getRawDataRefImpl()); + if (SecOrErr.getError()) { + outs() << "(?,?) "; + break; + } + section_iterator Sec = *SecOrErr; DataRefImpl Ref = Sec->getRawDataRefImpl(); StringRef SectionName; MachO->getSectionName(Ref, SectionName); @@ -772,7 +778,10 @@ static char getSymbolNMTypeChar(MachOObjectFile &Obj, basic_symbol_iterator I) { case MachO::N_INDR: return 'i'; case MachO::N_SECT: { - section_iterator Sec = *Obj.getSymbolSection(Symb); + ErrorOr<section_iterator> SecOrErr = Obj.getSymbolSection(Symb); + if (SecOrErr.getError()) + return 's'; + section_iterator Sec = *SecOrErr; DataRefImpl Ref = Sec->getRawDataRefImpl(); StringRef SectionName; Obj.getSectionName(Ref, SectionName); |