[lld] r190610 - [lld][ELF] Fix vaddr of the first section

Shankar Easwaran shankare at codeaurora.org
Thu Sep 12 08:43:18 PDT 2013


Author: shankare
Date: Thu Sep 12 10:43:17 2013
New Revision: 190610

URL: http://llvm.org/viewvc/llvm-project?rev=190610&view=rev
Log:
[lld][ELF] Fix vaddr of the first section

The first section in the output was not aligned to the alignment of the section.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/Atoms.h
    lld/trunk/lib/ReaderWriter/ELF/Chunk.h
    lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
    lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h
    lld/trunk/test/elf/Hexagon/dynlib-hash.test
    lld/trunk/test/elf/Hexagon/dynlib-syms.test

Modified: lld/trunk/lib/ReaderWriter/ELF/Atoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Atoms.h?rev=190610&r1=190609&r2=190610&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Atoms.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Atoms.h Thu Sep 12 10:43:17 2013
@@ -314,6 +314,7 @@ public:
         break;
       case (llvm::ELF::SHF_MERGE|llvm::ELF::SHF_STRINGS):
       case llvm::ELF::SHF_STRINGS:
+      case llvm::ELF::SHF_MERGE:
         ret = typeConstant;
         break;
       default:

Modified: lld/trunk/lib/ReaderWriter/ELF/Chunk.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Chunk.h?rev=190610&r1=190609&r2=190610&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Chunk.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Chunk.h Thu Sep 12 10:43:17 2013
@@ -51,8 +51,9 @@ public:
   StringRef name() const { return _name; }
   // Kind of chunk
   Kind kind() const { return _kind; }
-  uint64_t            fileSize() const { return _fsize; }
-  uint64_t            align2() const { return _align2; }
+  uint64_t        fileSize() const { return _fsize; }
+  void            setAlign(uint64_t align) { _align2 = align; }
+  uint64_t        align2() const { return _align2; }
 
   // The ordinal value of the chunk
   uint64_t            ordinal() const { return _ordinal;}

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=190610&r1=190609&r2=190610&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Thu Sep 12 10:43:17 2013
@@ -705,6 +705,7 @@ DefaultLayout<ELFT>::assignVirtualAddres
   for (auto si : _segments) {
     if (si->segmentType() == llvm::ELF::PT_LOAD) {
       firstLoadSegment = si;
+      si->firstSection()->setAlign(si->align2());
       break;
     }
   }

Modified: lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h?rev=190610&r1=190609&r2=190610&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h Thu Sep 12 10:43:17 2013
@@ -270,6 +270,8 @@ public:
     return _segmentSlices.end();
   }
 
+  Chunk<ELFT> *firstSection() { return _sections[0]; }
+
 private:
 
   /// \brief Check if the chunk needs to be aligned

Modified: lld/trunk/test/elf/Hexagon/dynlib-hash.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Hexagon/dynlib-hash.test?rev=190610&r1=190609&r2=190610&view=diff
==============================================================================
--- lld/trunk/test/elf/Hexagon/dynlib-hash.test (original)
+++ lld/trunk/test/elf/Hexagon/dynlib-hash.test Thu Sep 12 10:43:17 2013
@@ -4,6 +4,6 @@ RUN: llvm-objdump -s %t > %t1
 RUN: FileCheck -check-prefix=CHECKHASH %s < %t1
 
 CHECKHASH: Contents of section .hash:
-CHECKHASH:  00b4 03000000 07000000 06000000 01000000  ................
-CHECKHASH:  00c4 04000000 00000000 00000000 00000000  ................
-CHECKHASH:  00d4 00000000 03000000 02000000 05000000  ................
+CHECKHASH:  00c0 03000000 07000000 06000000 01000000  ................
+CHECKHASH:  00d0 04000000 00000000 00000000 00000000  ................
+CHECKHASH:  00e0 00000000 03000000 02000000 05000000  ................

Modified: lld/trunk/test/elf/Hexagon/dynlib-syms.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Hexagon/dynlib-syms.test?rev=190610&r1=190609&r2=190610&view=diff
==============================================================================
--- lld/trunk/test/elf/Hexagon/dynlib-syms.test (original)
+++ lld/trunk/test/elf/Hexagon/dynlib-syms.test Thu Sep 12 10:43:17 2013
@@ -3,6 +3,6 @@ RUN:   -o %t --noinhibit-exec -shared
 RUN: llvm-nm -n -s %t > %t1
 RUN: FileCheck -check-prefix=CHECKSYMS %s < %t1
 
-CHECKSYMS: 000002a8 A _DYNAMIC
+CHECKSYMS: 000002b8 A _DYNAMIC
 CHECKSYMS: 00001008 A _GLOBAL_OFFSET_TABLE_
 CHECKSYMS: 00002000 A _SDA_BASE_





More information about the llvm-commits mailing list