[lld] r228905 - [ELF] Add LinkingContext to the ELFReader.
Rui Ueyama
ruiu at google.com
Thu Feb 12 12:43:55 PST 2015
I'm sorry, but what I was asking is a reason.
On Thu, Feb 12, 2015 at 12:34 PM, Shankar Easwaran <shankare at codeaurora.org>
wrote:
> Yes, its needed as all the create functions have a architecture specific
> LinkingContext.
>
>
> On 2/12/2015 2:31 PM, Rui Ueyama wrote:
>
>> 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, AArch64DynamicFileCreateELFTra
>>>> its>(
>>>> - useUndefines, llvm::ELF::EM_AARCH64) {}
>>>> + AArch64ELFDSOReader(AArch64LinkingContext &ctx)
>>>> + : ELFDSOReader<AArch64ELFType, AArch64DynamicFileCreateELFTra
>>>> its,
>>>> + 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, HexagonDynamicFileCreateELFTra
>>>> its>(
>>>> - useUndefines, llvm::ELF::EM_HEXAGON) {}
>>>> + HexagonELFDSOReader(HexagonLinkingContext &ctx)
>>>> + : ELFDSOReader<HexagonELFType, HexagonDynamicFileCreateELFTra
>>>> its,
>>>> + 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
>>>>
>>>>
>>>
>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
> by the Linux Foundation
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150212/80127402/attachment.html>
More information about the llvm-commits
mailing list