[lld] r178467 - [ELF][Hexagon] Create .got.plt entries with the appropriate alignment

Shankar Easwaran shankare at codeaurora.org
Mon Apr 1 08:14:34 PDT 2013


Author: shankare
Date: Mon Apr  1 10:14:34 2013
New Revision: 178467

URL: http://llvm.org/viewvc/llvm-project?rev=178467&view=rev
Log:
[ELF][Hexagon] Create .got.plt entries with the appropriate alignment

Modified:
    lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
    lld/trunk/test/elf/Hexagon/dynlib-gotoff.test
    lld/trunk/test/elf/Hexagon/dynlib-hash.test
    lld/trunk/test/elf/Hexagon/dynlib-syms.test

Modified: lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h?rev=178467&r1=178466&r2=178467&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h Mon Apr  1 10:14:34 2013
@@ -54,6 +54,9 @@ void DynamicLibraryWriter<ELFT>::buildDy
                                                atom->_virtualAddr, atom);
       }
 
+  for (const UndefinedAtom *a : file.undefined())
+    this->_dynamicSymbolTable->addSymbol(a, ELF::SHN_UNDEF);
+
   OutputELFWriter<ELFT>::buildDynamicSymbolTable(file);
 }
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h?rev=178467&r1=178466&r2=178467&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h Mon Apr  1 10:14:34 2013
@@ -17,27 +17,29 @@ namespace lld {
 namespace elf {
 
 class HexagonGOTAtom : public GOTAtom {
-  static const uint8_t _defaultContent[8];
+  static const uint8_t _defaultContent[4];
 
 public:
   HexagonGOTAtom(const File &f) : GOTAtom(f, ".got") {}
 
   virtual ArrayRef<uint8_t> rawContent() const {
-    return ArrayRef<uint8_t>(_defaultContent, 8);
+    return ArrayRef<uint8_t>(_defaultContent, 4);
   }
 
   virtual Alignment alignment() const { return Alignment(2); }
 };
 
 class HexagonGOTPLTAtom : public GOTAtom {
-  static const uint8_t _defaultContent[8];
+  static const uint8_t _defaultContent[4];
 
 public:
   HexagonGOTPLTAtom(const File &f) : GOTAtom(f, ".got.plt") {}
 
   virtual ArrayRef<uint8_t> rawContent() const {
-    return ArrayRef<uint8_t>(_defaultContent, 8);
+    return ArrayRef<uint8_t>(_defaultContent, 4);
   }
+
+  virtual Alignment alignment() const { return Alignment(2); }
 };
 
 class HexagonGOTPLT0Atom : public GOTAtom {
@@ -49,10 +51,12 @@ public:
   virtual ArrayRef<uint8_t> rawContent() const {
     return ArrayRef<uint8_t>(_defaultContent, 16);
   }
+
+  virtual Alignment alignment() const { return Alignment(3); }
 };
 
-const uint8_t HexagonGOTAtom::_defaultContent[8] = { 0 };
-const uint8_t HexagonGOTPLTAtom::_defaultContent[8] = { 0 };
+const uint8_t HexagonGOTAtom::_defaultContent[4] = { 0 };
+const uint8_t HexagonGOTPLTAtom::_defaultContent[4] = { 0 };
 const uint8_t HexagonGOTPLT0Atom::_defaultContent[16] = { 0 };
 
 class HexagonPLTAtom : public PLTAtom {

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp?rev=178467&r1=178466&r2=178467&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp Mon Apr  1 10:14:34 2013
@@ -38,6 +38,7 @@ template <class Derived> class GOTPLTPas
   void handleReference(const DefinedAtom &atom, const Reference &ref) {
     switch (ref.kind()) {
     case R_HEX_PLT_B22_PCREL:
+    case R_HEX_B22_PCREL:
       static_cast<Derived *>(this)->handlePLT32(ref);
       break;
     case R_HEX_GOT_LO16:

Modified: lld/trunk/test/elf/Hexagon/dynlib-gotoff.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Hexagon/dynlib-gotoff.test?rev=178467&r1=178466&r2=178467&view=diff
==============================================================================
--- lld/trunk/test/elf/Hexagon/dynlib-gotoff.test (original)
+++ lld/trunk/test/elf/Hexagon/dynlib-gotoff.test Mon Apr  1 10:14:34 2013
@@ -10,7 +10,7 @@ CHECKGOTPLT:    alignment:       2^3
 CHECKGOTPLT:    section-name:    .got.plt
               - name:            __got_c
 CHECKGOTPLT:    type:            got
-CHECKGOTPLT:    content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+CHECKGOTPLT:    content:         [ 00, 00, 00, 00 ]
 CHECKGOTPLT:    alignment:       2^2
 CHECKGOTPLT:    section-name:    .got
 CHECKGOTPLT:    permissions:     rw-
@@ -20,7 +20,7 @@ CHECKGOTPLT:        offset:          0
 CHECKGOTPLT:        target:          c
               - name:            __got_shankar
 CHECKGOTPLT:    type:            got
-CHECKGOTPLT:    content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+CHECKGOTPLT:    content:         [ 00, 00, 00, 00 ]
 CHECKGOTPLT:    alignment:       2^2
 CHECKGOTPLT:    section-name:    .got
 CHECKGOTPLT:    permissions:     rw-
@@ -30,8 +30,8 @@ CHECKGOTPLT:        offset:          0
 CHECKGOTPLT:        target:          shankar
               - name:            __got_fn
 CHECKGOTPLT:    type:            got
-CHECKGOTPLT:    content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECKGOTPLT:    alignment:       2^3
+CHECKGOTPLT:    content:         [ 00, 00, 00, 00 ]
+CHECKGOTPLT:    alignment:       2^2
 CHECKGOTPLT:    section-name:    .got.plt
 CHECKGOTPLT:    permissions:     rw-
 CHECKGOTPLT:    references:      
@@ -43,8 +43,8 @@ CHECKGOTPLT:        offset:          0
                     target:          .PLT0
               - name:            __got_fn1
 CHECKGOTPLT:    type:            got
-CHECKGOTPLT:    content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECKGOTPLT:    alignment:       2^3
+CHECKGOTPLT:    content:         [ 00, 00, 00, 00 ]
+CHECKGOTPLT:    alignment:       2^2
 CHECKGOTPLT:    section-name:    .got.plt
 CHECKGOTPLT:    permissions:     rw-
 CHECKGOTPLT:    references:      
@@ -56,8 +56,8 @@ CHECKGOTPLT:        offset:          0
                     target:          .PLT0
               - name:            __got_fn2
 CHECKGOTPLT:    type:            got
-CHECKGOTPLT:    content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECKGOTPLT:    alignment:       2^3
+CHECKGOTPLT:    content:         [ 00, 00, 00, 00 ]
+CHECKGOTPLT:    alignment:       2^2
 CHECKGOTPLT:    section-name:    .got.plt
 CHECKGOTPLT:    permissions:     rw-
 CHECKGOTPLT:    references:      

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=178467&r1=178466&r2=178467&view=diff
==============================================================================
--- lld/trunk/test/elf/Hexagon/dynlib-hash.test (original)
+++ lld/trunk/test/elf/Hexagon/dynlib-hash.test Mon Apr  1 10:14:34 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 06000000 05000000 01000000  ................
-CHECKHASH: 00c4 04000000 00000000 00000000 00000000  ................
-CHECKHASH: 00d4 00000000 03000000 02000000           ............
+CHECKHASH:  00b4 03000000 07000000 06000000 01000000  ................
+CHECKHASH:  00c4 04000000 00000000 00000000 00000000  ................
+CHECKHASH:  00d4 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=178467&r1=178466&r2=178467&view=diff
==============================================================================
--- lld/trunk/test/elf/Hexagon/dynlib-syms.test (original)
+++ lld/trunk/test/elf/Hexagon/dynlib-syms.test Mon Apr  1 10:14:34 2013
@@ -3,6 +3,6 @@ RUN: -output=%t -output=%t -noinhibit-ex
 RUN: llvm-nm -n -s %t > %t1
 RUN: FileCheck -check-prefix=CHECKSYMS %s < %t1
 
-CHECKSYMS: 00000288 A _DYNAMIC
-CHECKSYMS: 00001010 A _GLOBAL_OFFSET_TABLE_
+CHECKSYMS: 000002a8 A _DYNAMIC
+CHECKSYMS: 00001008 A _GLOBAL_OFFSET_TABLE_
 CHECKSYMS: 00002000 A _SDA_BASE_





More information about the llvm-commits mailing list