From 819536857fa1b24c48377e0c395a62dd93d3c068 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 4 Feb 2014 00:21:18 +0000 Subject: Move error handling down to getSymbolNMTypeChar. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200727 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-nm/llvm-nm.cpp | 84 +++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 54 deletions(-) diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 560ff73b34..5b8bafc8ab 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -307,8 +307,7 @@ static void dumpSymbolNamesFromModule(Module *M) { } template -static error_code getSymbolNMTypeChar(ELFObjectFile &Obj, - symbol_iterator I, char &Result) { +static char getSymbolNMTypeChar(ELFObjectFile &Obj, symbol_iterator I) { typedef typename ELFObjectFile::Elf_Sym Elf_Sym; typedef typename ELFObjectFile::Elf_Shdr Elf_Shdr; @@ -371,41 +370,35 @@ static error_code getSymbolNMTypeChar(ELFObjectFile &Obj, if (Ret == '?' && ESym->getType() == ELF::STT_SECTION) { StringRef Name; - error_code EC = I->getName(Name); - if (EC) - return EC; - Result = StringSwitch(Name) - .StartsWith(".debug", 'N') - .StartsWith(".note", 'n') - .Default('?'); - return object_error::success; + if (error(I->getName(Name))) + return '?'; + return StringSwitch(Name) + .StartsWith(".debug", 'N') + .StartsWith(".note", 'n') + .Default('?'); } - Result = Ret; - return object_error::success; + return Ret; } -static error_code getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I, - char &Result) { +static char getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I) { const coff_symbol *Symb = Obj.getCOFFSymbol(I); StringRef Name; - if (error_code EC = I->getName(Name)) - return EC; + if (error(I->getName(Name))) + return '?'; char Ret = StringSwitch(Name) .StartsWith(".debug", 'N') .StartsWith(".sxdata", 'N') .Default('?'); - if (Ret != '?') { - Result = Ret; - return object_error::success; - } + if (Ret != '?') + return Ret; uint32_t Characteristics = 0; if (Symb->SectionNumber > 0) { section_iterator SecI = Obj.end_sections(); - if (error_code EC = I->getSection(SecI)) - return EC; + if (error(I->getSection(SecI))) + return '?'; const coff_section *Section = Obj.getCOFFSection(SecI); Characteristics = Section->Characteristics; } @@ -414,8 +407,7 @@ static error_code getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I, case COFF::IMAGE_SYM_UNDEFINED: // Check storage classes. if (Symb->StorageClass == COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL) { - Result = 'w'; - return object_error::success; // Don't do ::toupper. + return 'w'; // Don't do ::toupper. } else if (Symb->Value != 0) // Check for common symbols. Ret = 'c'; else @@ -450,8 +442,7 @@ static error_code getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I, if (Symb->StorageClass == COFF::IMAGE_SYM_CLASS_EXTERNAL) Ret = ::toupper(static_cast(Ret)); - Result = Ret; - return object_error::success; + return Ret; } static uint8_t getNType(MachOObjectFile &Obj, DataRefImpl Symb) { @@ -463,8 +454,7 @@ static uint8_t getNType(MachOObjectFile &Obj, DataRefImpl Symb) { return STE.n_type; } -static error_code getSymbolNMTypeChar(MachOObjectFile &Obj, symbol_iterator I, - char &Res) { +static char getSymbolNMTypeChar(MachOObjectFile &Obj, symbol_iterator I) { DataRefImpl Symb = I->getRawDataRefImpl(); uint8_t NType = getNType(Obj, Symb); @@ -495,36 +485,22 @@ static error_code getSymbolNMTypeChar(MachOObjectFile &Obj, symbol_iterator I, if (NType & (MachO::N_EXT | MachO::N_PEXT)) Char = toupper(static_cast(Char)); - Res = Char; - return object_error::success; + return Char; } static char getNMTypeChar(ObjectFile *Obj, symbol_iterator I) { - char Res = '?'; - if (COFFObjectFile *COFF = dyn_cast(Obj)) { - error(getSymbolNMTypeChar(*COFF, I, Res)); - return Res; - } - if (MachOObjectFile *MachO = dyn_cast(Obj)) { - error(getSymbolNMTypeChar(*MachO, I, Res)); - return Res; - } - - if (ELF32LEObjectFile *ELF = dyn_cast(Obj)) { - error(getSymbolNMTypeChar(*ELF, I, Res)); - return Res; - } - if (ELF64LEObjectFile *ELF = dyn_cast(Obj)) { - error(getSymbolNMTypeChar(*ELF, I, Res)); - return Res; - } - if (ELF32BEObjectFile *ELF = dyn_cast(Obj)) { - error(getSymbolNMTypeChar(*ELF, I, Res)); - return Res; - } + if (COFFObjectFile *COFF = dyn_cast(Obj)) + return getSymbolNMTypeChar(*COFF, I); + if (MachOObjectFile *MachO = dyn_cast(Obj)) + return getSymbolNMTypeChar(*MachO, I); + if (ELF32LEObjectFile *ELF = dyn_cast(Obj)) + return getSymbolNMTypeChar(*ELF, I); + if (ELF64LEObjectFile *ELF = dyn_cast(Obj)) + return getSymbolNMTypeChar(*ELF, I); + if (ELF32BEObjectFile *ELF = dyn_cast(Obj)) + return getSymbolNMTypeChar(*ELF, I); ELF64BEObjectFile *ELF = cast(Obj); - error(getSymbolNMTypeChar(*ELF, I, Res)); - return Res; + return getSymbolNMTypeChar(*ELF, I); } static void getDynamicSymbolIterators(ObjectFile *Obj, symbol_iterator &Begin, -- cgit v1.2.3