summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/DynamicFile.h
diff options
context:
space:
mode:
authorMichael J. Spencer <bigcheesegs@gmail.com>2013-08-08 22:26:50 +0000
committerMichael J. Spencer <bigcheesegs@gmail.com>2013-08-08 22:26:50 +0000
commit238cc72ec5d9ec896a5f657d6dee0ee7048eed0c (patch)
treec9ae03d4524d472779e5a75a2326aa9a72a21d6d /lld/lib/ReaderWriter/ELF/DynamicFile.h
parent00fcf2e1694f5af8afb0d80199d23488e0a1c016 (diff)
downloadbcm5719-llvm-238cc72ec5d9ec896a5f657d6dee0ee7048eed0c.tar.gz
bcm5719-llvm-238cc72ec5d9ec896a5f657d6dee0ee7048eed0c.zip
Update to llvm changes.
llvm-svn: 188021
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/DynamicFile.h')
-rw-r--r--lld/lib/ReaderWriter/ELF/DynamicFile.h39
1 files changed, 16 insertions, 23 deletions
diff --git a/lld/lib/ReaderWriter/ELF/DynamicFile.h b/lld/lib/ReaderWriter/ELF/DynamicFile.h
index 2ffe142b2b4..04ed72ab96c 100644
--- a/lld/lib/ReaderWriter/ELF/DynamicFile.h
+++ b/lld/lib/ReaderWriter/ELF/DynamicFile.h
@@ -28,22 +28,16 @@ public:
create(const ELFLinkingContext &ti, std::unique_ptr<llvm::MemoryBuffer> mb) {
std::unique_ptr<DynamicFile> file(
new DynamicFile(ti, mb->getBufferIdentifier()));
- llvm::OwningPtr<llvm::object::Binary> binaryFile;
- bool useShlibUndefines = ti.useShlibUndefines();
-
- if (error_code ec = createBinary(mb.release(), binaryFile))
- return ec;
- // Point Obj to correct class and bitwidth ELF object
- file->_objFile.reset(
- dyn_cast<llvm::object::ELFObjectFile<ELFT>>(binaryFile.get()));
+ bool useShlibUndefines = ti.useShlibUndefines();
- if (!file->_objFile)
- return make_error_code(llvm::object::object_error::invalid_file_type);
+ error_code ec;
+ file->_objFile.reset(new llvm::object::ELFFile<ELFT>(mb.release(), ec));
- binaryFile.take();
+ if (ec)
+ return ec;
- llvm::object::ELFObjectFile<ELFT> &obj = *file->_objFile;
+ llvm::object::ELFFile<ELFT> &obj = *file->_objFile;
file->_soname = obj.getLoadName();
if (file->_soname.empty())
@@ -52,13 +46,12 @@ public:
// Create a map from names to dynamic symbol table entries.
// TODO: This should use the object file's build in hash table instead if
// it exists.
- for (auto i = obj.begin_elf_dynamic_symbols(),
- e = obj.end_elf_dynamic_symbols();
+ for (auto i = obj.begin_dynamic_symbols(),
+ e = obj.end_dynamic_symbols();
i != e; ++i) {
- StringRef name;
- if (error_code ec = obj.getSymbolName(
- obj.getDynamicSymbolTableSectionHeader(), &*i, name))
- return ec;
+ auto name = obj.getSymbolName(i);
+ if (!name)
+ return error_code(name);
// TODO: Add absolute symbols
if (i->st_shndx == llvm::ELF::SHN_ABS)
@@ -66,14 +59,14 @@ public:
if (useShlibUndefines && (i->st_shndx == llvm::ELF::SHN_UNDEF)) {
// Create an undefined atom.
- if (!name.empty()) {
+ if (!name->empty()) {
auto *newAtom =
- new (file->_alloc) ELFUndefinedAtom<ELFT>(*file.get(), name, &*i);
+ new (file->_alloc) ELFUndefinedAtom<ELFT>(*file.get(), *name, &*i);
file->_undefinedAtoms._atoms.push_back(newAtom);
}
continue;
}
- file->_nameToSym[name]._symbol = &*i;
+ file->_nameToSym[*name]._symbol = &*i;
}
return std::move(file);
@@ -120,7 +113,7 @@ private:
mutable llvm::BumpPtrAllocator _alloc;
const ELFLinkingContext &_context;
- std::unique_ptr<llvm::object::ELFObjectFile<ELFT> > _objFile;
+ std::unique_ptr<llvm::object::ELFFile<ELFT>> _objFile;
atom_collection_vector<DefinedAtom> _definedAtoms;
atom_collection_vector<UndefinedAtom> _undefinedAtoms;
atom_collection_vector<SharedLibraryAtom> _sharedLibraryAtoms;
@@ -130,7 +123,7 @@ private:
struct SymAtomPair {
SymAtomPair() : _symbol(nullptr), _atom(nullptr) {}
- const typename llvm::object::ELFObjectFile<ELFT>::Elf_Sym *_symbol;
+ const typename llvm::object::ELFFile<ELFT>::Elf_Sym *_symbol;
const SharedLibraryAtom *_atom;
};
OpenPOWER on IntegriCloud