summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2015-06-17 21:50:51 +0000
committerDavide Italiano <davide@freebsd.org>2015-06-17 21:50:51 +0000
commit6cac62797fbb1462cbe9ec3fccf94b7ecc6847e0 (patch)
tree14ccffd9ad8b5b39e52797c46207803ac013151f
parentf9977bfb23563719225217278a243008f79b505e (diff)
downloadbcm5719-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.cpp6
-rw-r--r--lld/lib/ReaderWriter/ELF/ELFFile.h21
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,
OpenPOWER on IntegriCloud