diff options
author | Davide Italiano <davide@freebsd.org> | 2015-06-17 21:50:51 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2015-06-17 21:50:51 +0000 |
commit | 6cac62797fbb1462cbe9ec3fccf94b7ecc6847e0 (patch) | |
tree | 14ccffd9ad8b5b39e52797c46207803ac013151f | |
parent | f9977bfb23563719225217278a243008f79b505e (diff) | |
download | bcm5719-llvm-6cac62797fbb1462cbe9ec3fccf94b7ecc6847e0.tar.gz bcm5719-llvm-6cac62797fbb1462cbe9ec3fccf94b7ecc6847e0.zip |
[ELF] Now that there's an API for ELF symbol types in LLVM, use it.
Common symbols will be handled in a separate patch because it seems
Hexagon redefines the notion of common symbol, which I'm not (yet)
very familiar with.
llvm-svn: 239951
-rw-r--r-- | lld/lib/ReaderWriter/ELF/ELFFile.cpp | 6 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ELF/ELFFile.h | 21 |
2 files changed, 3 insertions, 24 deletions
diff --git a/lld/lib/ReaderWriter/ELF/ELFFile.cpp b/lld/lib/ReaderWriter/ELF/ELFFile.cpp index 34d1735c974..b28238d34db 100644 --- a/lld/lib/ReaderWriter/ELF/ELFFile.cpp +++ b/lld/lib/ReaderWriter/ELF/ELFFile.cpp @@ -223,12 +223,12 @@ std::error_code ELFFile<ELFT>::createSymbolsFromAtomizableSections() { if (std::error_code ec = symbolName.getError()) return ec; - if (isAbsoluteSymbol(&*SymI)) { + if (SymI->isAbsolute()) { ELFAbsoluteAtom<ELFT> *absAtom = createAbsoluteAtom( *symbolName, &*SymI, (int64_t)getSymbolValue(&*SymI)); addAtom(*absAtom); _symbolToAtomMapping.insert(std::make_pair(&*SymI, absAtom)); - } else if (isUndefinedSymbol(&*SymI)) { + } else if (SymI->isUndefined()) { if (_useWrap && (_wrapSymbolMap.find(*symbolName) != _wrapSymbolMap.end())) { auto wrapAtom = _wrapSymbolMap.find(*symbolName); @@ -245,7 +245,7 @@ std::error_code ELFFile<ELFT>::createSymbolsFromAtomizableSections() { commonAtom->setOrdinal(++_ordinal); addAtom(*commonAtom); _symbolToAtomMapping.insert(std::make_pair(&*SymI, commonAtom)); - } else if (isDefinedSymbol(&*SymI)) { + } else if (SymI->isDefined()) { _sectionSymbols[section].push_back(SymI); } else { llvm::errs() << "Unable to create atom for: " << *symbolName << "\n"; diff --git a/lld/lib/ReaderWriter/ELF/ELFFile.h b/lld/lib/ReaderWriter/ELF/ELFFile.h index b9ee5afe12f..ff8d47bd8ca 100644 --- a/lld/lib/ReaderWriter/ELF/ELFFile.h +++ b/lld/lib/ReaderWriter/ELF/ELFFile.h @@ -197,11 +197,6 @@ protected: return _objFile->getSectionContents(shdr); } - /// Returns true if the symbol is a undefined symbol. - bool isUndefinedSymbol(const Elf_Sym *sym) const { - return (sym->st_shndx == llvm::ELF::SHN_UNDEF); - } - /// Determines if the target wants to create an atom for a section that has no /// symbol references. bool handleSectionWithNoSymbols(const Elf_Shdr *shdr, @@ -225,11 +220,6 @@ protected: return new (_readerStorage) ELFUndefinedAtom<ELFT>(*this, symName, sym); } - /// Returns true if the symbol is a absolute symbol. - bool isAbsoluteSymbol(const Elf_Sym *sym) const { - return (sym->st_shndx == llvm::ELF::SHN_ABS); - } - /// Process the Absolute symbol and create an atom for it. ELFAbsoluteAtom<ELFT> *createAbsoluteAtom(StringRef symName, const Elf_Sym *sym, int64_t value) { @@ -281,17 +271,6 @@ protected: return new (_readerStorage) ELFCommonAtom<ELFT>(*this, symName, sym); } - /// Returns true if the symbol is a defined symbol. - virtual bool isDefinedSymbol(const Elf_Sym *sym) const { - return (sym->getType() == llvm::ELF::STT_NOTYPE || - sym->getType() == llvm::ELF::STT_OBJECT || - sym->getType() == llvm::ELF::STT_FUNC || - sym->getType() == llvm::ELF::STT_GNU_IFUNC || - sym->getType() == llvm::ELF::STT_SECTION || - sym->getType() == llvm::ELF::STT_FILE || - sym->getType() == llvm::ELF::STT_TLS); - } - /// Creates an atom for a given defined symbol. virtual ELFDefinedAtom<ELFT> * createDefinedAtom(StringRef symName, StringRef sectionName, |