diff options
author | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-08-08 22:26:50 +0000 |
---|---|---|
committer | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-08-08 22:26:50 +0000 |
commit | 238cc72ec5d9ec896a5f657d6dee0ee7048eed0c (patch) | |
tree | c9ae03d4524d472779e5a75a2326aa9a72a21d6d /lld/lib/ReaderWriter/ELF/DynamicFile.h | |
parent | 00fcf2e1694f5af8afb0d80199d23488e0a1c016 (diff) | |
download | bcm5719-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.h | 39 |
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; }; |