[lld] r228905 - [ELF] Add LinkingContext to the ELFReader.
Rui Ueyama
ruiu at google.com
Thu Feb 12 12:31:08 PST 2015
One question is if we really had to pass <arch>ELFLinkingContext instead of
plain ELFLinkingContext to the ELFObjectReader? You parameterized that type
as ContextT, but seems like it doesn't have to be an architecture-specific
subclass of ELFLinkingContext.
On Thu, Feb 12, 2015 at 12:06 PM, Rui Ueyama <ruiu at google.com> wrote:
> This is a large patch that possibly many places in ELF. Since many people
> are interested in LLD ELF support and code health of LLD in general, please
> send this kind of patch to review before submitting in the future. Thanks.
>
> On Wed, Feb 11, 2015 at 9:02 PM, Shankar Easwaran <shankare at codeaurora.org
> > wrote:
>
>> Author: shankare
>> Date: Wed Feb 11 23:02:41 2015
>> New Revision: 228905
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=228905&view=rev
>> Log:
>> [ELF] Add LinkingContext to the ELFReader.
>>
>> This adds the LinkingContext parameter to the ELFReader. Previously the
>> flags in
>> that were needed in the Context was passed to the ELFReader, this made it
>> very
>> hard to access data structures in the LinkingContext when reading an ELF
>> file.
>>
>> This change makes the ELFReader more flexible so that required parameters
>> can be
>> grabbed directly from the LinkingContext.
>>
>> Future patches make use of the changes.
>>
>> There is no change in functionality though.
>>
>> Modified:
>> lld/trunk/include/lld/Core/Reader.h
>> lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
>> lld/trunk/lib/Driver/GnuLdDriver.cpp
>> lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h
>> lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h
>> lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
>> lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h
>> lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h
>> lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h
>> lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h
>> lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h
>> lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h
>> lld/trunk/lib/ReaderWriter/ELF/ELFFile.h
>> lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
>> lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h
>> lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h
>> lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h
>> lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
>> lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
>> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
>> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h
>> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
>> lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
>> lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
>> lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h
>> lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h
>> lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
>> lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h
>> lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h
>> lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h
>>
>> Modified: lld/trunk/include/lld/Core/Reader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Reader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/include/lld/Core/Reader.h (original)
>> +++ lld/trunk/include/lld/Core/Reader.h Wed Feb 11 23:02:41 2015
>> @@ -122,9 +122,8 @@ public:
>> void addSupportCOFFObjects(PECOFFLinkingContext &);
>> void addSupportCOFFImportLibraries(PECOFFLinkingContext &);
>> void addSupportMachOObjects(MachOLinkingContext &);
>> - void addSupportELFObjects(bool atomizeStrings, TargetHandlerBase
>> *handler);
>> - void addSupportELFDynamicSharedObjects(bool useShlibUndefines,
>> - TargetHandlerBase *handler);
>> + void addSupportELFObjects(ELFLinkingContext &);
>> + void addSupportELFDynamicSharedObjects(ELFLinkingContext &);
>>
>> /// To convert between kind values and names, the registry walks the
>> list
>> /// of registered kind tables. Each table is a zero terminated array of
>>
>> Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
>> +++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Wed Feb 11
>> 23:02:41 2015
>> @@ -38,9 +38,9 @@ public:
>> virtual ~TargetHandlerBase() {}
>> virtual void registerRelocationNames(Registry &) = 0;
>>
>> - virtual std::unique_ptr<Reader> getObjReader(bool) = 0;
>> + virtual std::unique_ptr<Reader> getObjReader() = 0;
>>
>> - virtual std::unique_ptr<Reader> getDSOReader(bool) = 0;
>> + virtual std::unique_ptr<Reader> getDSOReader() = 0;
>>
>> virtual std::unique_ptr<Writer> getWriter() = 0;
>> };
>>
>> Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
>> +++ lld/trunk/lib/Driver/GnuLdDriver.cpp Wed Feb 11 23:02:41 2015
>> @@ -587,15 +587,12 @@ bool GnuLdDriver::parse(int argc, const
>> }
>>
>> // Register possible input file parsers.
>> - ctx->registry().addSupportELFObjects(
>> - ctx->mergeCommonStrings(),
>> - ctx->targetHandler());
>> + ctx->registry().addSupportELFObjects(*ctx);
>> ctx->registry().addSupportArchives(ctx->logInputFiles());
>> ctx->registry().addSupportYamlFiles();
>> ctx->registry().addSupportNativeObjects();
>> if (ctx->allowLinkWithDynamicLibraries())
>> - ctx->registry().addSupportELFDynamicSharedObjects(
>> - ctx->useShlibUndefines(), ctx->targetHandler());
>> + ctx->registry().addSupportELFDynamicSharedObjects(*ctx);
>>
>> std::stack<int> groupStack;
>> int numfiles = 0;
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h Wed Feb 11
>> 23:02:41 2015
>> @@ -19,13 +19,13 @@ class AArch64LinkingContext;
>>
>> template <class ELFT> class AArch64ELFFile : public ELFFile<ELFT> {
>> public:
>> - AArch64ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
>> - : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
>> + AArch64ELFFile(std::unique_ptr<MemoryBuffer> mb, AArch64LinkingContext
>> &ctx)
>> + : ELFFile<ELFT>(std::move(mb), ctx) {}
>>
>> static ErrorOr<std::unique_ptr<AArch64ELFFile>>
>> - create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
>> + create(std::unique_ptr<MemoryBuffer> mb, AArch64LinkingContext &ctx) {
>> return std::unique_ptr<AArch64ELFFile<ELFT>>(
>> - new AArch64ELFFile<ELFT>(std::move(mb), atomizeStrings));
>> + new AArch64ELFFile<ELFT>(std::move(mb), ctx));
>> }
>> };
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h Wed Feb 11
>> 23:02:41 2015
>> @@ -23,9 +23,8 @@ struct AArch64DynamicFileCreateELFTraits
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool useUndefines) {
>> - return lld::elf::AArch64DynamicFile<ELFT>::create(std::move(mb),
>> - useUndefines);
>> + AArch64LinkingContext &ctx) {
>> + return lld::elf::AArch64DynamicFile<ELFT>::create(std::move(mb),
>> ctx);
>> }
>> };
>>
>> @@ -34,26 +33,27 @@ struct AArch64ELFFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool atomizeStrings) {
>> - return lld::elf::AArch64ELFFile<ELFT>::create(std::move(mb),
>> - atomizeStrings);
>> + AArch64LinkingContext &ctx) {
>> + return lld::elf::AArch64ELFFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> class AArch64ELFObjectReader
>> - : public ELFObjectReader<AArch64ELFType,
>> AArch64ELFFileCreateELFTraits> {
>> + : public ELFObjectReader<AArch64ELFType,
>> AArch64ELFFileCreateELFTraits,
>> + AArch64LinkingContext> {
>> public:
>> - AArch64ELFObjectReader(bool atomizeStrings)
>> - : ELFObjectReader<AArch64ELFType, AArch64ELFFileCreateELFTraits>(
>> - atomizeStrings, llvm::ELF::EM_AARCH64) {}
>> + AArch64ELFObjectReader(AArch64LinkingContext &ctx)
>> + : ELFObjectReader<AArch64ELFType, AArch64ELFFileCreateELFTraits,
>> + AArch64LinkingContext>(ctx,
>> llvm::ELF::EM_AARCH64) {}
>> };
>>
>> class AArch64ELFDSOReader
>> - : public ELFDSOReader<AArch64ELFType,
>> AArch64DynamicFileCreateELFTraits> {
>> + : public ELFDSOReader<AArch64ELFType,
>> AArch64DynamicFileCreateELFTraits,
>> + AArch64LinkingContext> {
>> public:
>> - AArch64ELFDSOReader(bool useUndefines)
>> - : ELFDSOReader<AArch64ELFType, AArch64DynamicFileCreateELFTraits>(
>> - useUndefines, llvm::ELF::EM_AARCH64) {}
>> + AArch64ELFDSOReader(AArch64LinkingContext &ctx)
>> + : ELFDSOReader<AArch64ELFType, AArch64DynamicFileCreateELFTraits,
>> + AArch64LinkingContext>(ctx, llvm::ELF::EM_AARCH64)
>> {}
>> };
>>
>> } // namespace elf
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
>> (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h Wed Feb
>> 11 23:02:41 2015
>> @@ -41,12 +41,12 @@ public:
>> return *(_AArch64RelocationHandler.get());
>> }
>>
>> - std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
>> - return std::unique_ptr<Reader>(new
>> AArch64ELFObjectReader(atomizeStrings));
>> + std::unique_ptr<Reader> getObjReader() override {
>> + return std::unique_ptr<Reader>(new AArch64ELFObjectReader(_context));
>> }
>>
>> - std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
>> - return std::unique_ptr<Reader>(new
>> AArch64ELFDSOReader(useShlibUndefines));
>> + std::unique_ptr<Reader> getDSOReader() override {
>> + return std::unique_ptr<Reader>(new AArch64ELFDSOReader(_context));
>> }
>>
>> std::unique_ptr<Writer> getWriter() override;
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h Wed Feb 11 23:02:41
>> 2015
>> @@ -52,13 +52,13 @@ public:
>>
>> template <class ELFT> class ARMELFFile : public ELFFile<ELFT> {
>> public:
>> - ARMELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
>> - : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
>> + ARMELFFile(std::unique_ptr<MemoryBuffer> mb, ARMLinkingContext &ctx)
>> + : ELFFile<ELFT>(std::move(mb), ctx) {}
>>
>> static ErrorOr<std::unique_ptr<ARMELFFile>>
>> - create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
>> + create(std::unique_ptr<MemoryBuffer> mb, ARMLinkingContext &ctx) {
>> return std::unique_ptr<ARMELFFile<ELFT>>(
>> - new ARMELFFile<ELFT>(std::move(mb), atomizeStrings));
>> + new ARMELFFile<ELFT>(std::move(mb), ctx));
>> }
>>
>> private:
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h Wed Feb 11 23:02:41
>> 2015
>> @@ -23,8 +23,8 @@ struct ARMDynamicFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool useUndefines) {
>> - return lld::elf::ARMDynamicFile<ELFT>::create(std::move(mb),
>> useUndefines);
>> + ARMLinkingContext &ctx) {
>> + return lld::elf::ARMDynamicFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> @@ -33,25 +33,27 @@ struct ARMELFFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool atomizeStrings) {
>> - return lld::elf::ARMELFFile<ELFT>::create(std::move(mb),
>> atomizeStrings);
>> + ARMLinkingContext &ctx) {
>> + return lld::elf::ARMELFFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> class ARMELFObjectReader
>> - : public ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits> {
>> + : public ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits,
>> + ARMLinkingContext> {
>> public:
>> - ARMELFObjectReader(bool atomizeStrings)
>> - : ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits>(
>> - atomizeStrings, llvm::ELF::EM_ARM) {}
>> + ARMELFObjectReader(ARMLinkingContext &ctx)
>> + : ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits,
>> + ARMLinkingContext>(ctx, llvm::ELF::EM_ARM) {}
>> };
>>
>> class ARMELFDSOReader
>> - : public ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits> {
>> + : public ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits,
>> + ARMLinkingContext> {
>> public:
>> - ARMELFDSOReader(bool useUndefines)
>> - : ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits>(
>> - useUndefines, llvm::ELF::EM_ARM) {}
>> + ARMELFDSOReader(ARMLinkingContext &ctx)
>> + : ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits,
>> + ARMLinkingContext>(ctx, llvm::ELF::EM_ARM) {}
>> };
>>
>> } // namespace elf
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h Wed Feb 11
>> 23:02:41 2015
>> @@ -45,12 +45,12 @@ public:
>> return *(_armRelocationHandler.get());
>> }
>>
>> - std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
>> - return std::unique_ptr<Reader>(new
>> ARMELFObjectReader(atomizeStrings));
>> + std::unique_ptr<Reader> getObjReader() override {
>> + return std::unique_ptr<Reader>(new ARMELFObjectReader(_context));
>> }
>>
>> - std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
>> - return std::unique_ptr<Reader>(new
>> ARMELFDSOReader(useShlibUndefines));
>> + std::unique_ptr<Reader> getDSOReader() override {
>> + return std::unique_ptr<Reader>(new ARMELFDSOReader(_context));
>> }
>>
>> std::unique_ptr<Writer> getWriter() override;
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h Wed Feb 11
>> 23:02:41 2015
>> @@ -26,9 +26,9 @@ class DefaultTargetHandler : public Targ
>> public:
>> const TargetRelocationHandler &getRelocationHandler() const = 0;
>>
>> - virtual std::unique_ptr<Reader> getObjReader(bool atomizeStrings) = 0;
>> + virtual std::unique_ptr<Reader> getObjReader() = 0;
>>
>> - virtual std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) =
>> 0;
>> + virtual std::unique_ptr<Reader> getDSOReader() = 0;
>>
>> virtual std::unique_ptr<Writer> getWriter() = 0;
>> };
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h Wed Feb 11 23:02:41 2015
>> @@ -22,7 +22,7 @@ namespace elf {
>> template <class ELFT> class DynamicFile : public SharedLibraryFile {
>> public:
>> static ErrorOr<std::unique_ptr<DynamicFile>>
>> - create(std::unique_ptr<llvm::MemoryBuffer> mb, bool useShlibUndefines);
>> + create(std::unique_ptr<llvm::MemoryBuffer> mb, ELFLinkingContext &ctx);
>>
>> const SharedLibraryAtom *exports(StringRef name,
>> bool dataSymbolOnly) const override {
>> @@ -84,9 +84,9 @@ protected:
>> }
>>
>> private:
>> - DynamicFile(std::unique_ptr<MemoryBuffer> mb, bool useShlibUndefines)
>> - : SharedLibraryFile(mb->getBufferIdentifier()),
>> - _mb(std::move(mb)), _useShlibUndefines(useShlibUndefines) {}
>> + DynamicFile(std::unique_ptr<MemoryBuffer> mb, ELFLinkingContext &ctx)
>> + : SharedLibraryFile(mb->getBufferIdentifier()), _mb(std::move(mb)),
>> + _ctx(ctx), _useShlibUndefines(ctx.useShlibUndefines()) {}
>>
>> mutable llvm::BumpPtrAllocator _alloc;
>> std::unique_ptr<llvm::object::ELFFile<ELFT>> _objFile;
>> @@ -100,6 +100,7 @@ private:
>> };
>>
>> std::unique_ptr<MemoryBuffer> _mb;
>> + ELFLinkingContext &_ctx;
>> bool _useShlibUndefines;
>> mutable std::unordered_map<StringRef, SymAtomPair> _nameToSym;
>> };
>> @@ -107,9 +108,8 @@ private:
>> template <class ELFT>
>> ErrorOr<std::unique_ptr<DynamicFile<ELFT>>>
>> DynamicFile<ELFT>::create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool useShlibUndefines) {
>> - return std::unique_ptr<DynamicFile>(
>> - new DynamicFile(std::move(mb), useShlibUndefines));
>> + ELFLinkingContext &ctx) {
>> + return std::unique_ptr<DynamicFile>(new DynamicFile(std::move(mb),
>> ctx));
>> }
>>
>> } // end namespace elf
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h Wed Feb 11
>> 23:02:41 2015
>> @@ -25,8 +25,7 @@ class DynamicLibraryWriter;
>> template<class ELFT>
>> class DynamicLibraryWriter : public OutputELFWriter<ELFT> {
>> public:
>> - DynamicLibraryWriter(const ELFLinkingContext &context,
>> - TargetLayout<ELFT> &layout)
>> + DynamicLibraryWriter(ELFLinkingContext &context, TargetLayout<ELFT>
>> &layout)
>> : OutputELFWriter<ELFT>(context, layout),
>> _runtimeFile(new CRuntimeFile<ELFT>(context)) {}
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/ELFFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/ELFFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/ELFFile.h Wed Feb 11 23:02:41 2015
>> @@ -115,17 +115,18 @@ template <class ELFT> class ELFFile : pu
>> typedef typename MergedSectionMapT::iterator MergedSectionMapIterT;
>>
>> public:
>> - ELFFile(StringRef name)
>> - : File(name, kindObject), _ordinal(0), _doStringsMerge(false) {
>> + ELFFile(StringRef name, ELFLinkingContext &ctx)
>> + : File(name, kindObject), _ordinal(0),
>> + _doStringsMerge(ctx.mergeCommonStrings()), _ctx(ctx) {
>> setLastError(std::error_code());
>> }
>>
>> - ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings = false)
>> + ELFFile(std::unique_ptr<MemoryBuffer> mb, ELFLinkingContext &ctx)
>> : File(mb->getBufferIdentifier(), kindObject), _mb(std::move(mb)),
>> - _ordinal(0), _doStringsMerge(atomizeStrings) {}
>> + _ordinal(0), _doStringsMerge(ctx.mergeCommonStrings()),
>> _ctx(ctx) {}
>>
>> static ErrorOr<std::unique_ptr<ELFFile>>
>> - create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings);
>> + create(std::unique_ptr<MemoryBuffer> mb, ELFLinkingContext &ctx);
>>
>> virtual Reference::KindArch kindArch();
>>
>> @@ -360,6 +361,9 @@ protected:
>>
>> /// \brief the cached options relevant while reading the ELF File
>> bool _doStringsMerge;
>> +
>> + /// \brief The LinkingContext.
>> + ELFLinkingContext &_ctx;
>> };
>>
>> /// \brief All atoms are owned by a File. To add linker specific atoms
>> @@ -370,8 +374,8 @@ protected:
>> template <class ELFT> class CRuntimeFile : public ELFFile<ELFT> {
>> public:
>> typedef llvm::object::Elf_Sym_Impl<ELFT> Elf_Sym;
>> - CRuntimeFile(const ELFLinkingContext &context, StringRef name = "C
>> runtime")
>> - : ELFFile<ELFT>(name) {}
>> + CRuntimeFile(ELFLinkingContext &context, StringRef name = "C runtime")
>> + : ELFFile<ELFT>(name, context) {}
>>
>> /// \brief add a global absolute atom
>> virtual Atom *addAbsoluteAtom(StringRef symbolName) {
>> @@ -411,9 +415,9 @@ public:
>>
>> template <class ELFT>
>> ErrorOr<std::unique_ptr<ELFFile<ELFT>>>
>> -ELFFile<ELFT>::create(std::unique_ptr<MemoryBuffer> mb, bool
>> atomizeStrings) {
>> - std::unique_ptr<ELFFile<ELFT>> file(
>> - new ELFFile<ELFT>(std::move(mb), atomizeStrings));
>> +ELFFile<ELFT>::create(std::unique_ptr<MemoryBuffer> mb,
>> + ELFLinkingContext &ctx) {
>> + std::unique_ptr<ELFFile<ELFT>> file(new ELFFile<ELFT>(std::move(mb),
>> ctx));
>> return std::move(file);
>> }
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/ELFReader.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/ELFReader.h Wed Feb 11 23:02:41 2015
>> @@ -18,13 +18,13 @@
>> namespace lld {
>> namespace elf {
>>
>> -template <typename ELFT, typename ELFTraitsT>
>> +template <typename ELFT, typename ELFTraitsT, typename ContextT>
>> class ELFObjectReader : public Reader {
>> public:
>> typedef llvm::object::Elf_Ehdr_Impl<ELFT> Elf_Ehdr;
>>
>> - ELFObjectReader(bool atomizeStrings, uint64_t machine)
>> - : _atomizeStrings(atomizeStrings), _machine(machine) {}
>> + ELFObjectReader(ContextT &ctx, uint64_t machine)
>> + : _ctx(ctx), _machine(machine) {}
>>
>> bool canParse(file_magic magic, StringRef,
>> const MemoryBuffer &buf) const override {
>> @@ -39,7 +39,7 @@ public:
>> 1ULL <<
>> llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
>> auto f =
>>
>> createELF<ELFTraitsT>(llvm::object::getElfArchType(mb->getBuffer()),
>> - maxAlignment, std::move(mb),
>> _atomizeStrings);
>> + maxAlignment, std::move(mb), _ctx);
>> if (std::error_code ec = f.getError())
>> return ec;
>> result.push_back(std::move(*f));
>> @@ -53,17 +53,17 @@ public:
>> }
>>
>> protected:
>> - bool _atomizeStrings;
>> + ContextT &_ctx;
>> uint64_t _machine;
>> };
>>
>> -template <typename ELFT, typename ELFTraitsT>
>> +template <typename ELFT, typename ELFTraitsT, typename ContextT>
>> class ELFDSOReader : public Reader {
>> public:
>> typedef llvm::object::Elf_Ehdr_Impl<ELFT> Elf_Ehdr;
>>
>> - ELFDSOReader(bool useUndefines, uint64_t machine)
>> - : _useUndefines(useUndefines), _machine(machine) {}
>> + ELFDSOReader(ContextT &ctx, uint64_t machine)
>> + : _ctx(ctx), _machine(machine) {}
>>
>> bool canParse(file_magic magic, StringRef,
>> const MemoryBuffer &buf) const override {
>> @@ -78,7 +78,7 @@ public:
>> 1ULL <<
>> llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
>> auto f =
>>
>> createELF<ELFTraitsT>(llvm::object::getElfArchType(mb->getBuffer()),
>> - maxAlignment, std::move(mb),
>> _useUndefines);
>> + maxAlignment, std::move(mb), _ctx);
>> if (std::error_code ec = f.getError())
>> return ec;
>> result.push_back(std::move(*f));
>> @@ -92,7 +92,7 @@ public:
>> }
>>
>> protected:
>> - bool _useUndefines;
>> + ContextT &_ctx;
>> uint64_t _machine;
>> };
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h Wed Feb 11 23:02:41
>> 2015
>> @@ -25,7 +25,7 @@ class ExecutableWriter;
>> template<class ELFT>
>> class ExecutableWriter : public OutputELFWriter<ELFT> {
>> public:
>> - ExecutableWriter(const ELFLinkingContext &context, TargetLayout<ELFT>
>> &layout)
>> + ExecutableWriter(ELFLinkingContext &context, TargetLayout<ELFT>
>> &layout)
>> : OutputELFWriter<ELFT>(context, layout),
>> _runtimeFile(new CRuntimeFile<ELFT>(context)) {}
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h Wed Feb 11
>> 23:02:41 2015
>> @@ -114,13 +114,13 @@ template <class ELFT> class HexagonELFFi
>> typedef llvm::object::Elf_Shdr_Impl<ELFT> Elf_Shdr;
>>
>> public:
>> - HexagonELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
>> - : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
>> + HexagonELFFile(std::unique_ptr<MemoryBuffer> mb, HexagonLinkingContext
>> &ctx)
>> + : ELFFile<ELFT>(std::move(mb), ctx) {}
>>
>> static ErrorOr<std::unique_ptr<HexagonELFFile>>
>> - create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
>> + create(std::unique_ptr<MemoryBuffer> mb, HexagonLinkingContext &ctx) {
>> return std::unique_ptr<HexagonELFFile<ELFT>>(
>> - new HexagonELFFile<ELFT>(std::move(mb), atomizeStrings));
>> + new HexagonELFFile<ELFT>(std::move(mb), ctx));
>> }
>>
>> bool isCommonSymbol(const Elf_Sym *symbol) const override {
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h Wed Feb 11
>> 23:02:41 2015
>> @@ -23,9 +23,8 @@ struct HexagonDynamicFileCreateELFTraits
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool useUndefines) {
>> - return lld::elf::HexagonDynamicFile<ELFT>::create(std::move(mb),
>> - useUndefines);
>> + HexagonLinkingContext &ctx) {
>> + return lld::elf::HexagonDynamicFile<ELFT>::create(std::move(mb),
>> ctx);
>> }
>> };
>>
>> @@ -34,26 +33,27 @@ struct HexagonELFFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool atomizeStrings) {
>> - return lld::elf::HexagonELFFile<ELFT>::create(std::move(mb),
>> - atomizeStrings);
>> + HexagonLinkingContext &ctx) {
>> + return lld::elf::HexagonELFFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> class HexagonELFObjectReader
>> - : public ELFObjectReader<HexagonELFType,
>> HexagonELFFileCreateELFTraits> {
>> + : public ELFObjectReader<HexagonELFType,
>> HexagonELFFileCreateELFTraits,
>> + HexagonLinkingContext> {
>> public:
>> - HexagonELFObjectReader(bool atomizeStrings)
>> - : ELFObjectReader<HexagonELFType, HexagonELFFileCreateELFTraits>(
>> - atomizeStrings, llvm::ELF::EM_HEXAGON) {}
>> + HexagonELFObjectReader(HexagonLinkingContext &ctx)
>> + : ELFObjectReader<HexagonELFType, HexagonELFFileCreateELFTraits,
>> + HexagonLinkingContext>(ctx,
>> llvm::ELF::EM_HEXAGON) {}
>> };
>>
>> class HexagonELFDSOReader
>> - : public ELFDSOReader<HexagonELFType,
>> HexagonDynamicFileCreateELFTraits> {
>> + : public ELFDSOReader<HexagonELFType,
>> HexagonDynamicFileCreateELFTraits,
>> + HexagonLinkingContext> {
>> public:
>> - HexagonELFDSOReader(bool useUndefines)
>> - : ELFDSOReader<HexagonELFType, HexagonDynamicFileCreateELFTraits>(
>> - useUndefines, llvm::ELF::EM_HEXAGON) {}
>> + HexagonELFDSOReader(HexagonLinkingContext &ctx)
>> + : ELFDSOReader<HexagonELFType, HexagonDynamicFileCreateELFTraits,
>> + HexagonLinkingContext>(ctx, llvm::ELF::EM_HEXAGON)
>> {}
>> };
>>
>> } // namespace elf
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
>> (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h Wed
>> Feb 11 23:02:41 2015
>> @@ -20,7 +20,7 @@ class HexagonLinkingContext;
>> template <class HexagonELFType> class HexagonRuntimeFile
>> : public CRuntimeFile<HexagonELFType> {
>> public:
>> - HexagonRuntimeFile(const HexagonLinkingContext &context)
>> + HexagonRuntimeFile(HexagonLinkingContext &context)
>> : CRuntimeFile<HexagonELFType>(context, "Hexagon runtime file") {}
>> };
>> } // elf
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
>> (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h Wed Feb
>> 11 23:02:41 2015
>> @@ -117,12 +117,14 @@ public:
>> return *(_hexagonTargetLayout.get());
>> }
>>
>> - std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
>> - return std::unique_ptr<Reader>(new
>> HexagonELFObjectReader(atomizeStrings));
>> + std::unique_ptr<Reader> getObjReader() override {
>> + return std::unique_ptr<Reader>(
>> + new HexagonELFObjectReader(_hexagonLinkingContext));
>> }
>>
>> - std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
>> - return std::unique_ptr<Reader>(new
>> HexagonELFDSOReader(useShlibUndefines));
>> + std::unique_ptr<Reader> getDSOReader() override {
>> + return std::unique_ptr<Reader>(
>> + new HexagonELFDSOReader(_hexagonLinkingContext));
>> }
>>
>> std::unique_ptr<Writer> getWriter() override;
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h Wed Feb 11 23:02:41
>> 2015
>> @@ -80,13 +80,13 @@ public:
>>
>> template <class ELFT> class MipsELFFile : public ELFFile<ELFT> {
>> public:
>> - MipsELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
>> - : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
>> + MipsELFFile(std::unique_ptr<MemoryBuffer> mb, MipsLinkingContext &ctx)
>> + : ELFFile<ELFT>(std::move(mb), ctx) {}
>>
>> static ErrorOr<std::unique_ptr<MipsELFFile>>
>> - create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
>> + create(std::unique_ptr<MemoryBuffer> mb, MipsLinkingContext &ctx) {
>> return std::unique_ptr<MipsELFFile<ELFT>>(
>> - new MipsELFFile<ELFT>(std::move(mb), atomizeStrings));
>> + new MipsELFFile<ELFT>(std::move(mb), ctx));
>> }
>>
>> bool isPIC() const {
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h Wed Feb 11
>> 23:02:41 2015
>> @@ -22,8 +22,8 @@ struct MipsELFFileCreateTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool atomizeStrings) {
>> - return lld::elf::MipsELFFile<ELFT>::create(std::move(mb),
>> atomizeStrings);
>> + MipsLinkingContext &ctx) {
>> + return lld::elf::MipsELFFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> @@ -32,19 +32,21 @@ struct MipsDynamicFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool useUndefines) {
>> - return lld::elf::MipsDynamicFile<ELFT>::create(std::move(mb),
>> useUndefines);
>> + MipsLinkingContext &ctx) {
>> + return lld::elf::MipsDynamicFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> template <class ELFT>
>> class MipsELFObjectReader
>> - : public ELFObjectReader<ELFT, MipsELFFileCreateTraits> {
>> - typedef ELFObjectReader<ELFT, MipsELFFileCreateTraits> BaseReaderType;
>> + : public ELFObjectReader<ELFT, MipsELFFileCreateTraits,
>> + MipsLinkingContext> {
>> + typedef ELFObjectReader<ELFT, MipsELFFileCreateTraits,
>> MipsLinkingContext>
>> + BaseReaderType;
>>
>> public:
>> - MipsELFObjectReader(MipsLinkingContext &ctx, bool atomizeStrings)
>> - : BaseReaderType(atomizeStrings, llvm::ELF::EM_MIPS),
>> + MipsELFObjectReader(MipsLinkingContext &ctx)
>> + : BaseReaderType(ctx, llvm::ELF::EM_MIPS),
>> _flagMerger(ctx.getELFFlagsMerger()) {}
>>
>> std::error_code
>> @@ -62,12 +64,14 @@ private:
>>
>> template <class ELFT>
>> class MipsELFDSOReader
>> - : public ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits> {
>> - typedef ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits>
>> BaseReaderType;
>> + : public ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits,
>> + MipsLinkingContext> {
>> + typedef ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits,
>> MipsLinkingContext>
>> + BaseReaderType;
>>
>> public:
>> - MipsELFDSOReader(MipsLinkingContext &ctx, bool useUndefines)
>> - : BaseReaderType(useUndefines, llvm::ELF::EM_MIPS),
>> + MipsELFDSOReader(MipsLinkingContext &ctx)
>> + : BaseReaderType(ctx, llvm::ELF::EM_MIPS),
>> _flagMerger(ctx.getELFFlagsMerger()) {}
>>
>> std::error_code
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h Wed Feb 11
>> 23:02:41 2015
>> @@ -79,7 +79,7 @@ private:
>> template <class ELFType>
>> class MipsRuntimeFile final : public CRuntimeFile<ELFType> {
>> public:
>> - MipsRuntimeFile(const MipsLinkingContext &ctx)
>> + MipsRuntimeFile(MipsLinkingContext &ctx)
>> : CRuntimeFile<ELFType>(ctx, "Mips runtime file") {}
>> };
>>
>> @@ -102,14 +102,12 @@ public:
>>
>> MipsTargetLayout<ELFT> &getTargetLayout() override { return
>> *_targetLayout; }
>>
>> - std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
>> - return std::unique_ptr<Reader>(
>> - new MipsELFObjectReader<ELFT>(_ctx, atomizeStrings));
>> + std::unique_ptr<Reader> getObjReader() override {
>> + return std::unique_ptr<Reader>(new MipsELFObjectReader<ELFT>(_ctx));
>> }
>>
>> - std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
>> - return std::unique_ptr<Reader>(
>> - new MipsELFDSOReader<ELFT>(_ctx, useShlibUndefines));
>> + std::unique_ptr<Reader> getDSOReader() override {
>> + return std::unique_ptr<Reader>(new MipsELFDSOReader<ELFT>(_ctx));
>> }
>>
>> const TargetRelocationHandler &getRelocationHandler() const override {
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Reader.cpp?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Reader.cpp (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Reader.cpp Wed Feb 11 23:02:41 2015
>> @@ -26,20 +26,18 @@ namespace lld {
>> // architectures to be pulled into the linker. If we want to support
>> making a
>> // linker that only supports one ELF architecture, we'd need to change
>> this
>> // to have a different registration method for each architecture.
>> -void Registry::addSupportELFObjects(bool atomizeStrings,
>> - TargetHandlerBase *handler) {
>> +void Registry::addSupportELFObjects(ELFLinkingContext &ctx) {
>>
>> // Tell registry about the ELF object file parser.
>> - add(std::move(handler->getObjReader(atomizeStrings)));
>> + add(std::move(ctx.targetHandler()->getObjReader()));
>>
>> // Tell registry about the relocation name to number mapping for this
>> arch.
>> - handler->registerRelocationNames(*this);
>> + ctx.targetHandler()->registerRelocationNames(*this);
>> }
>>
>> -void Registry::addSupportELFDynamicSharedObjects(bool useShlibUndefines,
>> - TargetHandlerBase
>> *handler) {
>> +void Registry::addSupportELFDynamicSharedObjects(ELFLinkingContext &ctx)
>> {
>> // Tell registry about the ELF dynamic shared library file parser.
>> - add(handler->getDSOReader(useShlibUndefines));
>> + add(ctx.targetHandler()->getDSOReader());
>> }
>>
>> } // end namespace lld
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h Wed Feb 11 23:02:41
>> 2015
>> @@ -63,10 +63,10 @@ public:
>> virtual const TargetRelocationHandler &getRelocationHandler() const =
>> 0;
>>
>> /// How does the target deal with reading input files.
>> - virtual std::unique_ptr<Reader> getObjReader(bool) = 0;
>> + virtual std::unique_ptr<Reader> getObjReader() = 0;
>>
>> /// How does the target deal with reading dynamic libraries.
>> - virtual std::unique_ptr<Reader> getDSOReader(bool) = 0;
>> + virtual std::unique_ptr<Reader> getDSOReader() = 0;
>>
>> /// How does the target deal with writing ELF output.
>> virtual std::unique_ptr<Writer> getWriter() = 0;
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h Wed Feb 11 23:02:41
>> 2015
>> @@ -19,13 +19,13 @@ class X86LinkingContext;
>>
>> template <class ELFT> class X86ELFFile : public ELFFile<ELFT> {
>> public:
>> - X86ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
>> - : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
>> + X86ELFFile(std::unique_ptr<MemoryBuffer> mb, X86LinkingContext &ctx)
>> + : ELFFile<ELFT>(std::move(mb), ctx) {}
>>
>> static ErrorOr<std::unique_ptr<X86ELFFile>>
>> - create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
>> + create(std::unique_ptr<MemoryBuffer> mb, X86LinkingContext &ctx) {
>> return std::unique_ptr<X86ELFFile<ELFT>>(
>> - new X86ELFFile<ELFT>(std::move(mb), atomizeStrings));
>> + new X86ELFFile<ELFT>(std::move(mb), ctx));
>> }
>> };
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h Wed Feb 11 23:02:41
>> 2015
>> @@ -23,8 +23,8 @@ struct X86DynamicFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool useUndefines) {
>> - return lld::elf::X86DynamicFile<ELFT>::create(std::move(mb),
>> useUndefines);
>> + X86LinkingContext &ctx) {
>> + return lld::elf::X86DynamicFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> @@ -33,25 +33,27 @@ struct X86ELFFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool atomizeStrings) {
>> - return lld::elf::X86ELFFile<ELFT>::create(std::move(mb),
>> atomizeStrings);
>> + X86LinkingContext &ctx) {
>> + return lld::elf::X86ELFFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> class X86ELFObjectReader
>> - : public ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits> {
>> + : public ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits,
>> + X86LinkingContext> {
>> public:
>> - X86ELFObjectReader(bool atomizeStrings)
>> - : ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits>(
>> - atomizeStrings, llvm::ELF::EM_386) {}
>> + X86ELFObjectReader(X86LinkingContext &ctx)
>> + : ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits,
>> + X86LinkingContext>(ctx, llvm::ELF::EM_386) {}
>> };
>>
>> class X86ELFDSOReader
>> - : public ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits> {
>> + : public ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits,
>> + X86LinkingContext> {
>> public:
>> - X86ELFDSOReader(bool useUndefines)
>> - : ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits>(
>> - useUndefines, llvm::ELF::EM_386) {}
>> + X86ELFDSOReader(X86LinkingContext &ctx)
>> + : ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits,
>> + X86LinkingContext>(ctx, llvm::ELF::EM_386) {}
>> };
>>
>> } // namespace elf
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h Wed Feb 11
>> 23:02:41 2015
>> @@ -41,12 +41,12 @@ public:
>> return *(_x86RelocationHandler.get());
>> }
>>
>> - std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
>> - return std::unique_ptr<Reader>(new
>> X86ELFObjectReader(atomizeStrings));
>> + std::unique_ptr<Reader> getObjReader() override {
>> + return std::unique_ptr<Reader>(new
>> X86ELFObjectReader(_x86LinkingContext));
>> }
>>
>> - std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
>> - return std::unique_ptr<Reader>(new
>> X86ELFDSOReader(useShlibUndefines));
>> + std::unique_ptr<Reader> getDSOReader() override {
>> + return std::unique_ptr<Reader>(new
>> X86ELFDSOReader(_x86LinkingContext));
>> }
>>
>> std::unique_ptr<Writer> getWriter() override;
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h Wed Feb 11
>> 23:02:41 2015
>> @@ -19,13 +19,13 @@ class X86_64LinkingContext;
>>
>> template <class ELFT> class X86_64ELFFile : public ELFFile<ELFT> {
>> public:
>> - X86_64ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
>> - : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
>> + X86_64ELFFile(std::unique_ptr<MemoryBuffer> mb, X86_64LinkingContext
>> &ctx)
>> + : ELFFile<ELFT>(std::move(mb), ctx) {}
>>
>> static ErrorOr<std::unique_ptr<X86_64ELFFile>>
>> - create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
>> + create(std::unique_ptr<MemoryBuffer> mb, X86_64LinkingContext &ctx) {
>> return std::unique_ptr<X86_64ELFFile<ELFT>>(
>> - new X86_64ELFFile<ELFT>(std::move(mb), atomizeStrings));
>> + new X86_64ELFFile<ELFT>(std::move(mb), ctx));
>> }
>> };
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h Wed Feb 11
>> 23:02:41 2015
>> @@ -23,9 +23,8 @@ struct X86_64DynamicFileCreateELFTraits
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool useUndefines) {
>> - return lld::elf::X86_64DynamicFile<ELFT>::create(std::move(mb),
>> - useUndefines);
>> + X86_64LinkingContext &ctx) {
>> + return lld::elf::X86_64DynamicFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> @@ -34,25 +33,27 @@ struct X86_64ELFFileCreateELFTraits {
>>
>> template <class ELFT>
>> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
>> - bool atomizeStrings) {
>> - return lld::elf::X86_64ELFFile<ELFT>::create(std::move(mb),
>> atomizeStrings);
>> + X86_64LinkingContext &ctx) {
>> + return lld::elf::X86_64ELFFile<ELFT>::create(std::move(mb), ctx);
>> }
>> };
>>
>> class X86_64ELFObjectReader
>> - : public ELFObjectReader<X86_64ELFType,
>> X86_64ELFFileCreateELFTraits> {
>> + : public ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits,
>> + X86_64LinkingContext> {
>> public:
>> - X86_64ELFObjectReader(bool atomizeStrings)
>> - : ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits>(
>> - atomizeStrings, llvm::ELF::EM_X86_64) {}
>> + X86_64ELFObjectReader(X86_64LinkingContext &ctx)
>> + : ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits,
>> + X86_64LinkingContext>(ctx, llvm::ELF::EM_X86_64)
>> {}
>> };
>>
>> class X86_64ELFDSOReader
>> - : public ELFDSOReader<X86_64ELFType,
>> X86_64DynamicFileCreateELFTraits> {
>> + : public ELFDSOReader<X86_64ELFType,
>> X86_64DynamicFileCreateELFTraits,
>> + X86_64LinkingContext> {
>> public:
>> - X86_64ELFDSOReader(bool useUndefines)
>> - : ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits>(
>> - useUndefines, llvm::ELF::EM_X86_64) {}
>> + X86_64ELFDSOReader(X86_64LinkingContext &ctx)
>> + : ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits,
>> + X86_64LinkingContext>(ctx, llvm::ELF::EM_X86_64) {}
>> };
>>
>> } // namespace elf
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h Wed Feb
>> 11 23:02:41 2015
>> @@ -42,12 +42,12 @@ public:
>> return *(_x86_64RelocationHandler.get());
>> }
>>
>> - std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
>> - return std::unique_ptr<Reader>(new
>> X86_64ELFObjectReader(atomizeStrings));
>> + std::unique_ptr<Reader> getObjReader() override {
>> + return std::unique_ptr<Reader>(new X86_64ELFObjectReader(_context));
>> }
>>
>> - std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
>> - return std::unique_ptr<Reader>(new
>> X86_64ELFDSOReader(useShlibUndefines));
>> + std::unique_ptr<Reader> getDSOReader() override {
>> + return std::unique_ptr<Reader>(new X86_64ELFDSOReader(_context));
>> }
>>
>> std::unique_ptr<Writer> getWriter() override;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150212/a088c99d/attachment.html>
More information about the llvm-commits
mailing list