diff options
-rw-r--r-- | lld/ELF/OutputSections.cpp | 2 | ||||
-rw-r--r-- | lld/ELF/OutputSections.h | 1 | ||||
-rw-r--r-- | lld/test/elf2/shared-be.s | 35 |
3 files changed, 36 insertions, 2 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 1f636488ad8..91839150f9b 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -223,8 +223,6 @@ template <class ELFT> void DynamicSection<ELFT>::finalize() { } template <class ELFT> void DynamicSection<ELFT>::writeTo(uint8_t *Buf) { - typedef typename std::conditional<ELFT::Is64Bits, Elf64_Dyn, Elf32_Dyn>::type - Elf_Dyn; auto *P = reinterpret_cast<Elf_Dyn *>(Buf); auto WritePtr = [&](int32_t Tag, uint64_t Val) { diff --git a/lld/ELF/OutputSections.h b/lld/ELF/OutputSections.h index f3937e2bba3..3f0022bd7be 100644 --- a/lld/ELF/OutputSections.h +++ b/lld/ELF/OutputSections.h @@ -316,6 +316,7 @@ class DynamicSection final : public OutputSectionBase<ELFT::Is64Bits> { typedef typename llvm::object::ELFFile<ELFT>::Elf_Rel Elf_Rel; typedef typename llvm::object::ELFFile<ELFT>::Elf_Rela Elf_Rela; typedef typename llvm::object::ELFFile<ELFT>::Elf_Sym Elf_Sym; + typedef typename llvm::object::ELFFile<ELFT>::Elf_Dyn Elf_Dyn; public: DynamicSection(SymbolTable &SymTab, HashTableSection<ELFT> &HashSec, diff --git a/lld/test/elf2/shared-be.s b/lld/test/elf2/shared-be.s new file mode 100644 index 00000000000..891c039662f --- /dev/null +++ b/lld/test/elf2/shared-be.s @@ -0,0 +1,35 @@ +// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o +// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %p/Inputs/shared.s -o %t2.o +// RUN: lld -flavor gnu2 -shared %t2.o -o %t2.so +// RUN: lld -flavor gnu2 -dynamic-linker /lib64/ld64.so.1 -rpath foo -rpath bar --export-dynamic %t.o %t2.so -o %t +// RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data -hash-table %t | FileCheck %s +// REQUIRES: ppc + +// CHECK: Name: .rela.dyn +// CHECK-NEXT: Type: SHT_REL +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: [[RELADDR:.*]] +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: [[RELSIZE:.*]] +// CHECK-NEXT: Link: +// CHECK-NEXT: Info: +// CHECK-NEXT: AddressAlignment: +// CHECK-NEXT: EntrySize: [[RELENT:.*]] + +// CHECK: DynamicSection [ +// CHECK-NEXT: Tag Type Name/Value +// CHECK-NEXT: 0x0000000000000007 RELA [[RELADDR]] +// CHECK-NEXT: 0x0000000000000008 RELASZ [[RELSIZE]] (bytes) +// CHECK-NEXT: 0x0000000000000009 RELAENT [[RELENT]] (bytes) +// CHECK: 0x000000000000001D RUNPATH foo:bar +// CHECK-NEXT: 0x0000000000000001 NEEDED SharedLibrary ({{.*}}2.so) +// CHECK-NEXT: 0x0000000000000000 NULL 0x0 +// CHECK-NEXT: ] + +.global _start +_start: +.long bar +.long zed + |