From e27c59d9e526e41e49675e1052954bbaba311708 Mon Sep 17 00:00:00 2001 From: Shankar Easwaran Date: Thu, 6 Nov 2014 02:03:38 +0000 Subject: [PATCH] [ELF] Implement isLittleEndian for all architectures llvm-svn: 221427 --- lld/include/lld/ReaderWriter/ELFLinkingContext.h | 2 +- lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h | 4 ++++ lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp | 5 ----- lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h | 4 ++++ lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h | 4 ++++ lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h | 4 ++++ 6 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lld/include/lld/ReaderWriter/ELFLinkingContext.h b/lld/include/lld/ReaderWriter/ELFLinkingContext.h index 225d3cabef11..3080977d0883 100644 --- a/lld/include/lld/ReaderWriter/ELFLinkingContext.h +++ b/lld/include/lld/ReaderWriter/ELFLinkingContext.h @@ -59,7 +59,7 @@ public: llvm::Triple getTriple() const { return _triple; } virtual bool is64Bits() const; - virtual bool isLittleEndian() const; + virtual bool isLittleEndian() const = 0; virtual uint64_t getPageSize() const { return 0x1000; } OutputMagic getOutputMagic() const { return _outputMagic; } uint16_t getOutputELFType() const { return _outputELFType; } diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h b/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h index 14807302db32..8e5a655a6e1b 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h @@ -57,6 +57,10 @@ public: } } + bool isLittleEndian() const override { + return AArch64ELFType::TargetEndianness == llvm::support::little; + } + bool isCopyRelocation(const Reference &r) const override { if (r.kindNamespace() != Reference::KindNamespace::ELF) return false; diff --git a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp index e6b655d55f51..c596aab0eddc 100644 --- a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp @@ -66,11 +66,6 @@ ELFLinkingContext::ELFLinkingContext( bool ELFLinkingContext::is64Bits() const { return getTriple().isArch64Bit(); } -bool ELFLinkingContext::isLittleEndian() const { - // TODO: Do this properly. It is not defined purely by arch. - return true; -} - void ELFLinkingContext::addPasses(PassManager &pm) { if (_runLayoutPass) pm.add(std::unique_ptr(new LayoutPass(registry()))); diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h index 06b40b0b4468..42a85f73a703 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h @@ -62,6 +62,10 @@ public: } } + bool isLittleEndian() const override { + return HexagonELFType::TargetEndianness == llvm::support::little; + } + /// \brief Create Internal files for Init/Fini void createInternalFiles( std::vector> &result) const override; diff --git a/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h b/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h index 8792566b0a0a..0ff5773f09dd 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h @@ -23,6 +23,10 @@ public: : ELFLinkingContext(triple, std::unique_ptr( new X86TargetHandler(*this))) {} + bool isLittleEndian() const override { + return X86ELFType::TargetEndianness == llvm::support::little; + } + /// \brief X86 has only two relative relocation /// a) for supporting IFUNC relocs - R_386_IRELATIVE /// b) for supporting relative relocs - R_386_RELATIVE diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h index 45f81b4be79f..b45abaaad0d5 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h @@ -56,6 +56,10 @@ public: } } + bool isLittleEndian() const override { + return X86_64ELFType::TargetEndianness == llvm::support::little; + } + bool isCopyRelocation(const Reference &r) const override { if (r.kindNamespace() != Reference::KindNamespace::ELF) return false;