[lld] r238304 - [ELF][Mips] Do not merge ELF flags in the `isCompatible` routine

Simon Atanasyan simon at atanasyan.com
Wed May 27 01:45:32 PDT 2015


Author: atanasyan
Date: Wed May 27 03:45:31 2015
New Revision: 238304

URL: http://llvm.org/viewvc/llvm-project?rev=238304&view=rev
Log:
[ELF][Mips] Do not merge ELF flags in the `isCompatible` routine

We do not need to merge ELF flags from DSO. But `isCompatible` is called
for all input files. So this change move ELF flags merging into the
MipsELFFile class.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/FileCommon.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h
    lld/trunk/test/elf/Mips/exe-fileheader.test

Modified: lld/trunk/lib/ReaderWriter/ELF/FileCommon.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/FileCommon.h?rev=238304&r1=238303&r2=238304&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/FileCommon.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/FileCommon.h Wed May 27 03:45:31 2015
@@ -36,9 +36,6 @@ std::error_code isCompatible(MemoryBuffe
   std::tie(size, endian) = llvm::object::getElfArchType(mb.getBuffer());
   if (std::error_code ec = checkCompatibility<ELFT>(size, endian))
     return ec;
-
-  if (auto ec = ctx.mergeHeaderFlags(hdr->getFileClass(), hdr->e_flags))
-    return ec;
   return std::error_code();
 }
 

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=238304&r1=238303&r2=238304&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h Wed May 27 03:45:31 2015
@@ -152,6 +152,7 @@ private:
     return nullptr;
   }
 
+  typedef typename llvm::object::ELFFile<ELFT>::Elf_Ehdr Elf_Ehdr;
   typedef llvm::object::Elf_Mips_RegInfo<ELFT> Elf_Mips_RegInfo;
   typedef llvm::object::Elf_Mips_Options<ELFT> Elf_Mips_Options;
 
@@ -205,6 +206,11 @@ private:
       ctx.mergeReginfoMask(*regInfo);
       _gp0 = regInfo->ri_gp_value;
     }
+
+    const Elf_Ehdr *hdr = this->_objFile->getHeader();
+    if (std::error_code ec = ctx.mergeElfFlags(hdr->e_flags))
+      return ec;
+
     return std::error_code();
   }
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp?rev=238304&r1=238303&r2=238304&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp Wed May 27 03:45:31 2015
@@ -64,8 +64,7 @@ MipsELFFlagsMerger::MipsELFFlagsMerger(b
 
 uint32_t MipsELFFlagsMerger::getMergedELFFlags() const { return _flags; }
 
-std::error_code MipsELFFlagsMerger::mergeHeaderFlags(uint8_t newClass,
-                                                     uint32_t newFlags) {
+std::error_code MipsELFFlagsMerger::mergeFlags(uint32_t newFlags) {
   // We support two ABI: O32 and N64. The last one does not have
   // the corresponding ELF flag.
   uint32_t inAbi = newFlags & EF_MIPS_ABI;

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.h?rev=238304&r1=238303&r2=238304&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.h Wed May 27 03:45:31 2015
@@ -22,7 +22,7 @@ public:
   uint32_t getMergedELFFlags() const;
 
   /// \brief Merge saved ELF header flags and the new set of flags.
-  std::error_code mergeHeaderFlags(uint8_t newClass, uint32_t newFlags);
+  std::error_code mergeFlags(uint32_t newFlags);
 
 private:
   const bool _is64Bit;

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp?rev=238304&r1=238303&r2=238304&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp Wed May 27 03:45:31 2015
@@ -40,9 +40,8 @@ MipsLinkingContext::MipsLinkingContext(l
     : ELFLinkingContext(triple, createTarget(triple, *this)),
       _flagsMerger(triple.isArch64Bit()) {}
 
-std::error_code MipsLinkingContext::mergeHeaderFlags(uint8_t fileClass,
-                                                     uint64_t flags) {
-  return _flagsMerger.mergeHeaderFlags(fileClass, flags);
+std::error_code MipsLinkingContext::mergeElfFlags(uint64_t flags) {
+  return _flagsMerger.mergeFlags(flags);
 }
 
 void MipsLinkingContext::mergeReginfoMask(const MipsReginfo &info) {

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h?rev=238304&r1=238303&r2=238304&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h Wed May 27 03:45:31 2015
@@ -42,7 +42,7 @@ public:
   int getMachineType() const override { return llvm::ELF::EM_MIPS; }
   MipsLinkingContext(llvm::Triple triple);
 
-  std::error_code mergeHeaderFlags(uint8_t fileClass, uint64_t flags) override;
+  std::error_code mergeElfFlags(uint64_t flags);
   void mergeReginfoMask(const MipsReginfo &info);
 
   uint32_t getMergedELFFlags() const;

Modified: lld/trunk/test/elf/Mips/exe-fileheader.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/exe-fileheader.test?rev=238304&r1=238303&r2=238304&view=diff
==============================================================================
--- lld/trunk/test/elf/Mips/exe-fileheader.test (original)
+++ lld/trunk/test/elf/Mips/exe-fileheader.test Wed May 27 03:45:31 2015
@@ -29,9 +29,9 @@
 # CHECK:   Entry: 0x{{[0-9A-F]+}}
 # CHECK:   ProgramHeaderOffset: 0x{{[0-9A-F]+}}
 # CHECK:   SectionHeaderOffset: 0x{{[0-9A-F]+}}
-# CHECK:   Flags [ (0x70001005)
+# CHECK:   Flags [ (0x50001005)
 # CHECK:     EF_MIPS_ABI_O32 (0x1000)
-# CHECK:     EF_MIPS_ARCH_32R2 (0x70000000)
+# CHECK:     EF_MIPS_ARCH_32 (0x50000000)
 # CHECK:     EF_MIPS_CPIC (0x4)
 # CHECK:     EF_MIPS_NOREORDER (0x1)
 # CHECK:   ]





More information about the llvm-commits mailing list