[lld] r177483 - [ELF] Interp section is only needed in dynamic executables

Shankar Easwaran shankare at codeaurora.org
Tue Mar 19 22:06:40 PDT 2013


Author: shankare
Date: Wed Mar 20 00:06:40 2013
New Revision: 177483

URL: http://llvm.org/viewvc/llvm-project?rev=177483&view=rev
Log:
[ELF] Interp section is only needed in dynamic executables

Modified:
    lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h
    lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h

Modified: lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h?rev=177483&r1=177482&r2=177483&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h Wed Mar 20 00:06:40 2013
@@ -31,9 +31,10 @@ public:
 
 private:
   virtual void addDefaultAtoms();
-  virtual void addFiles(InputFiles&);
+  virtual void addFiles(InputFiles &);
   virtual void finalizeDefaultAtomValues();
-
+  virtual void createDefaultSections();
+  LLD_UNIQUE_BUMP_PTR(InterpSection<ELFT>) _interpSection;
   CRuntimeFile<ELFT> _runtimeFile;
 };
 
@@ -69,10 +70,19 @@ void ExecutableWriter<ELFT>::addFiles(In
   this->_targetHandler.addFiles(inputFiles);
 }
 
+template <class ELFT> void ExecutableWriter<ELFT>::createDefaultSections() {
+  OutputELFWriter<ELFT>::createDefaultSections();
+  if (this->_targetInfo.isDynamic()) {
+    _interpSection.reset(new (this->_alloc) InterpSection<ELFT>(
+        this->_targetInfo, ".interp", DefaultLayout<ELFT>::ORDER_INTERP,
+        this->_targetInfo.getInterpreter()));
+    this->_layout->addSection(_interpSection.get());
+  }
+}
+
 /// Finalize the value of all the absolute symbols that we
 /// created
-template<class ELFT>
-void ExecutableWriter<ELFT>::finalizeDefaultAtomValues() {
+template <class ELFT> void ExecutableWriter<ELFT>::finalizeDefaultAtomValues() {
   auto bssStartAtomIter = this->_layout->findAbsoluteAtom("__bss_start");
   auto bssEndAtomIter = this->_layout->findAbsoluteAtom("__bss_end");
   auto underScoreEndAtomIter = this->_layout->findAbsoluteAtom("_end");

Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=177483&r1=177482&r2=177483&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Wed Mar 20 00:06:40 2013
@@ -109,7 +109,6 @@ protected:
   LLD_UNIQUE_BUMP_PTR(DynamicTable<ELFT>) _dynamicTable;
   LLD_UNIQUE_BUMP_PTR(DynamicSymbolTable<ELFT>) _dynamicSymbolTable;
   LLD_UNIQUE_BUMP_PTR(StringTable<ELFT>) _dynamicStringTable;
-  LLD_UNIQUE_BUMP_PTR(InterpSection<ELFT>) _interpSection;
   LLD_UNIQUE_BUMP_PTR(HashSection<ELFT>) _hashTable;
   llvm::StringSet<> _soNeeded;
   /// @}
@@ -226,15 +225,11 @@ void OutputELFWriter<ELFT>::createDefaul
         true));
     _dynamicSymbolTable.reset(new (_alloc) DynamicSymbolTable<ELFT>(
         _targetInfo, ".dynsym", DefaultLayout<ELFT>::ORDER_DYNAMIC_SYMBOLS));
-    _interpSection.reset(new (_alloc) InterpSection<ELFT>(
-        _targetInfo, ".interp", DefaultLayout<ELFT>::ORDER_INTERP,
-        _targetInfo.getInterpreter()));
     _hashTable.reset(new (_alloc) HashSection<ELFT>(
         _targetInfo, ".hash", DefaultLayout<ELFT>::ORDER_HASH));
     _layout->addSection(_dynamicTable.get());
     _layout->addSection(_dynamicStringTable.get());
     _layout->addSection(_dynamicSymbolTable.get());
-    _layout->addSection(_interpSection.get());
     _layout->addSection(_hashTable.get());
     _dynamicSymbolTable->setStringSection(_dynamicStringTable.get());
     if (_layout->hasDynamicRelocationTable())





More information about the llvm-commits mailing list