From d8324e6983d06c3d56debcbfdc9ead0e0d4a817d Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 31 Jan 2014 20:57:12 +0000 Subject: Simplify getSymbolFlags. None of the object formats require extra parsing to compute these flags, so the method cannot fail. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200574 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/COFF.h | 3 +-- include/llvm/Object/ELFObjectFile.h | 9 ++++----- include/llvm/Object/MachO.h | 3 +-- include/llvm/Object/ObjectFile.h | 9 ++++----- lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp | 3 +-- lib/Object/COFFObjectFile.cpp | 7 +++---- lib/Object/MachOObjectFile.cpp | 13 +++++-------- tools/llvm-ar/llvm-ar.cpp | 3 +-- tools/llvm-nm/llvm-nm.cpp | 4 +--- tools/llvm-objdump/llvm-objdump.cpp | 3 +-- 10 files changed, 22 insertions(+), 35 deletions(-) diff --git a/include/llvm/Object/COFF.h b/include/llvm/Object/COFF.h index 248545d196..5d99508f57 100644 --- a/include/llvm/Object/COFF.h +++ b/include/llvm/Object/COFF.h @@ -279,8 +279,7 @@ protected: error_code getSymbolFileOffset(DataRefImpl Symb, uint64_t &Res) const LLVM_OVERRIDE; error_code getSymbolSize(DataRefImpl Symb, uint64_t &Res) const LLVM_OVERRIDE; - error_code getSymbolFlags(DataRefImpl Symb, uint32_t &Res) const - LLVM_OVERRIDE; + uint32_t getSymbolFlags(DataRefImpl Symb) const LLVM_OVERRIDE; error_code getSymbolType(DataRefImpl Symb, SymbolRef::Type &Res) const LLVM_OVERRIDE; error_code getSymbolSection(DataRefImpl Symb, section_iterator &Res) const diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index f6b874397a..5433a7a1b3 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/include/llvm/Object/ELFObjectFile.h @@ -65,7 +65,7 @@ protected: error_code getSymbolAlignment(DataRefImpl Symb, uint32_t &Res) const LLVM_OVERRIDE; error_code getSymbolSize(DataRefImpl Symb, uint64_t &Res) const LLVM_OVERRIDE; - error_code getSymbolFlags(DataRefImpl Symb, uint32_t &Res) const; + uint32_t getSymbolFlags(DataRefImpl Symb) const LLVM_OVERRIDE; error_code getSymbolType(DataRefImpl Symb, SymbolRef::Type &Res) const LLVM_OVERRIDE; error_code getSymbolSection(DataRefImpl Symb, section_iterator &Res) const @@ -378,11 +378,10 @@ error_code ELFObjectFile::getSymbolType(DataRefImpl Symb, } template -error_code ELFObjectFile::getSymbolFlags(DataRefImpl Symb, - uint32_t &Result) const { +uint32_t ELFObjectFile::getSymbolFlags(DataRefImpl Symb) const { const Elf_Sym *ESym = getSymbol(Symb); - Result = SymbolRef::SF_None; + uint32_t Result = SymbolRef::SF_None; if (ESym->getBinding() != ELF::STB_LOCAL) Result |= SymbolRef::SF_Global; @@ -407,7 +406,7 @@ error_code ELFObjectFile::getSymbolFlags(DataRefImpl Symb, if (ESym->getType() == ELF::STT_TLS) Result |= SymbolRef::SF_ThreadLocal; - return object_error::success; + return Result; } template diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h index 1f36938ea6..44217fc54f 100644 --- a/include/llvm/Object/MachO.h +++ b/include/llvm/Object/MachO.h @@ -71,8 +71,7 @@ public: error_code getSymbolSize(DataRefImpl Symb, uint64_t &Res) const LLVM_OVERRIDE; error_code getSymbolType(DataRefImpl Symb, SymbolRef::Type &Res) const LLVM_OVERRIDE; - error_code getSymbolFlags(DataRefImpl Symb, uint32_t &Res) const - LLVM_OVERRIDE; + uint32_t getSymbolFlags(DataRefImpl Symb) const LLVM_OVERRIDE; error_code getSymbolSection(DataRefImpl Symb, section_iterator &Res) const LLVM_OVERRIDE; error_code getSymbolValue(DataRefImpl Symb, uint64_t &Val) const diff --git a/include/llvm/Object/ObjectFile.h b/include/llvm/Object/ObjectFile.h index 69300c6628..131c822e6a 100644 --- a/include/llvm/Object/ObjectFile.h +++ b/include/llvm/Object/ObjectFile.h @@ -219,7 +219,7 @@ public: error_code getType(SymbolRef::Type &Result) const; /// Get symbol flags (bitwise OR of SymbolRef::Flags) - error_code getFlags(uint32_t &Result) const; + uint32_t getFlags() const; /// @brief Get section this symbol is defined in reference to. Result is /// end_sections() if it is undefined or is an absolute symbol. @@ -289,8 +289,7 @@ protected: virtual error_code getSymbolSize(DataRefImpl Symb, uint64_t &Res) const = 0; virtual error_code getSymbolType(DataRefImpl Symb, SymbolRef::Type &Res) const = 0; - virtual error_code getSymbolFlags(DataRefImpl Symb, - uint32_t &Res) const = 0; + virtual uint32_t getSymbolFlags(DataRefImpl Symb) const = 0; virtual error_code getSymbolSection(DataRefImpl Symb, section_iterator &Res) const = 0; virtual error_code getSymbolValue(DataRefImpl Symb, uint64_t &Val) const = 0; @@ -428,8 +427,8 @@ inline error_code SymbolRef::getSize(uint64_t &Result) const { return OwningObject->getSymbolSize(SymbolPimpl, Result); } -inline error_code SymbolRef::getFlags(uint32_t &Result) const { - return OwningObject->getSymbolFlags(SymbolPimpl, Result); +inline uint32_t SymbolRef::getFlags() const { + return OwningObject->getSymbolFlags(SymbolPimpl); } inline error_code SymbolRef::getSection(section_iterator &Result) const { diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index 6f9eefb68c..8ea941b69d 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -124,8 +124,7 @@ ObjectImage *RuntimeDyldImpl::loadObject(ObjectImage *InputObject) { Check(i->getType(SymType)); Check(i->getName(Name)); - uint32_t flags; - Check(i->getFlags(flags)); + uint32_t flags = i->getFlags(); bool isCommon = flags & SymbolRef::SF_Common; if (isCommon) { diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp index 43321c43a4..78cf1ab67c 100644 --- a/lib/Object/COFFObjectFile.cpp +++ b/lib/Object/COFFObjectFile.cpp @@ -155,10 +155,9 @@ error_code COFFObjectFile::getSymbolType(DataRefImpl Ref, return object_error::success; } -error_code COFFObjectFile::getSymbolFlags(DataRefImpl Ref, - uint32_t &Result) const { +uint32_t COFFObjectFile::getSymbolFlags(DataRefImpl Ref) const { const coff_symbol *Symb = toSymb(Ref); - Result = SymbolRef::SF_None; + uint32_t Result = SymbolRef::SF_None; // TODO: Correctly set SF_FormatSpecific, SF_ThreadLocal, SF_Common @@ -176,7 +175,7 @@ error_code COFFObjectFile::getSymbolFlags(DataRefImpl Ref, if (Symb->SectionNumber == COFF::IMAGE_SYM_ABSOLUTE) Result |= SymbolRef::SF_Absolute; - return object_error::success; + return Result; } error_code COFFObjectFile::getSymbolSize(DataRefImpl Ref, diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index aca12197ee..385d0b6be0 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -495,8 +495,7 @@ MachOObjectFile::getSymbolFileOffset(DataRefImpl Symb, error_code MachOObjectFile::getSymbolAlignment(DataRefImpl DRI, uint32_t &Result) const { - uint32_t flags; - this->getSymbolFlags(DRI, flags); + uint32_t flags = getSymbolFlags(DRI); if (flags & SymbolRef::SF_Common) { nlist_base Entry = getSymbolTableEntryBase(this, DRI); Result = 1 << MachO::GET_COMM_ALIGN(Entry.n_desc); @@ -520,8 +519,7 @@ error_code MachOObjectFile::getSymbolSize(DataRefImpl DRI, SectionIndex = Entry.n_sect; if (!SectionIndex) { - uint32_t flags = SymbolRef::SF_None; - this->getSymbolFlags(DRI, flags); + uint32_t flags = getSymbolFlags(DRI); if (flags & SymbolRef::SF_Common) Result = Value; else @@ -574,15 +572,14 @@ error_code MachOObjectFile::getSymbolType(DataRefImpl Symb, return object_error::success; } -error_code MachOObjectFile::getSymbolFlags(DataRefImpl DRI, - uint32_t &Result) const { +uint32_t MachOObjectFile::getSymbolFlags(DataRefImpl DRI) const { nlist_base Entry = getSymbolTableEntryBase(this, DRI); uint8_t MachOType = Entry.n_type; uint16_t MachOFlags = Entry.n_desc; // TODO: Correctly set SF_ThreadLocal - Result = SymbolRef::SF_None; + uint32_t Result = SymbolRef::SF_None; if ((MachOType & MachO::N_TYPE) == MachO::N_UNDF) Result |= SymbolRef::SF_Undefined; @@ -606,7 +603,7 @@ error_code MachOObjectFile::getSymbolFlags(DataRefImpl DRI, if ((MachOType & MachO::N_TYPE) == MachO::N_ABS) Result |= SymbolRef::SF_Absolute; - return object_error::success; + return Result; } error_code diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index bb5c0da8a3..1a1fd8a483 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -719,8 +719,7 @@ static void writeSymbolTable( for (object::symbol_iterator I = Obj->begin_symbols(), E = Obj->end_symbols(); I != E; ++I) { - uint32_t Symflags; - failIfError(I->getFlags(Symflags)); + uint32_t Symflags = I->getFlags();; if (Symflags & object::SymbolRef::SF_FormatSpecific) continue; if (!(Symflags & object::SymbolRef::SF_Global)) diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 958a9af18e..560ff73b34 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -561,9 +561,7 @@ static void dumpSymbolNamesFromObject(ObjectFile *Obj) { getDynamicSymbolIterators(Obj, IBegin, IEnd); } for (symbol_iterator I = IBegin; I != IEnd; ++I) { - uint32_t SymFlags; - if (error(I->getFlags(SymFlags))) - break; + uint32_t SymFlags = I->getFlags(); if (!DebugSyms && (SymFlags & SymbolRef::SF_FormatSpecific)) continue; NMSymbol S; diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 325e7006ed..4572c96548 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -702,11 +702,10 @@ static void PrintSymbolTable(const ObjectFile *o) { uint64_t Address; SymbolRef::Type Type; uint64_t Size; - uint32_t Flags; + uint32_t Flags = si->getFlags(); section_iterator Section = o->end_sections(); if (error(si->getName(Name))) continue; if (error(si->getAddress(Address))) continue; - if (error(si->getFlags(Flags))) continue; if (error(si->getType(Type))) continue; if (error(si->getSize(Size))) continue; if (error(si->getSection(Section))) continue; -- cgit v1.2.3