diff options
author | Sean Fertile <sfertile@ca.ibm.com> | 2019-01-23 21:46:28 +0000 |
---|---|---|
committer | Sean Fertile <sfertile@ca.ibm.com> | 2019-01-23 21:46:28 +0000 |
commit | 5500a785ffcc416cee19f4460b877250cde8129a (patch) | |
tree | c2adb62f069841e71cd236a606563afe1a1eb486 | |
parent | ddc6decbbb141038de53e8ce219b0eaf2606c976 (diff) |
Revert "[PPC64] Sort .toc sections accessed with small code model ..."
This reverts commit ca87c57a3aa4770c9cf0defd4b2feccbc342ee93.
Added test fails on several windows buildbots.
git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@351985 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | ELF/Arch/PPC64.cpp | 9 | ||||
-rw-r--r-- | ELF/InputFiles.h | 10 | ||||
-rw-r--r-- | ELF/Relocations.cpp | 3 | ||||
-rw-r--r-- | ELF/Target.h | 2 | ||||
-rw-r--r-- | ELF/Writer.cpp | 18 | ||||
-rw-r--r-- | test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s | 23 | ||||
-rw-r--r-- | test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s | 41 | ||||
-rw-r--r-- | test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s | 18 | ||||
-rw-r--r-- | test/ELF/ppc64-sort-small-cm-relocs.s | 108 |
9 files changed, 0 insertions, 232 deletions
diff --git a/ELF/Arch/PPC64.cpp b/ELF/Arch/PPC64.cpp index e3df5b114..f0de72506 100644 --- a/ELF/Arch/PPC64.cpp +++ b/ELF/Arch/PPC64.cpp @@ -98,15 +98,6 @@ unsigned elf::getPPC64GlobalEntryToLocalEntryOffset(uint8_t StOther) { return 0; } -bool elf::isPPC64SmallCodeModelReloc(RelType Type) { - // List is not yet complete, at the very least the got based tls related - // relocations need to be added, and we need to determine how the section - // sorting interacts with the thread pointer and dynamic thread pointer - // relative tls relocations. - return Type == R_PPC64_GOT16 || Type == R_PPC64_TOC16 || - Type == R_PPC64_TOC16_DS; -} - namespace { class PPC64 final : public TargetInfo { public: diff --git a/ELF/InputFiles.h b/ELF/InputFiles.h index d849eddd0..359b79cc6 100644 --- a/ELF/InputFiles.h +++ b/ELF/InputFiles.h @@ -113,16 +113,6 @@ public: // True if this is an argument for --just-symbols. Usually false. bool JustSymbols = false; - // On PPC64 we need to keep track of which files contain small code model - // relocations. To minimize the chance of a relocation overflow files that do - // contain small code model relocations should have their .toc sections sorted - // closer to the .got section than files that do not contain any small code - // model relocations. Thats because the toc-pointer is defined to point at - // .got + 0x8000 and the instructions used with small code model relocations - // support immediates in the range [-0x8000, 0x7FFC], making the addressable - // range relative to the toc pointer [.got, .got + 0xFFFC]. - bool PPC64SmallCodeModelRelocs = false; - // GroupId is used for --warn-backrefs which is an optional error // checking feature. All files within the same --{start,end}-group or // --{start,end}-lib get the same group ID. Otherwise, each file gets a new diff --git a/ELF/Relocations.cpp b/ELF/Relocations.cpp index 884257280..5acf04ea5 100644 --- a/ELF/Relocations.cpp +++ b/ELF/Relocations.cpp @@ -1000,9 +1000,6 @@ static void scanReloc(InputSectionBase &Sec, OffsetGetter &GetOffset, RelTy *&I, if (isRelExprOneOf<R_HINT, R_NONE>(Expr)) return; - if (Config->EMachine == EM_PPC64 && isPPC64SmallCodeModelReloc(Type)) - Sec.File->PPC64SmallCodeModelRelocs = true; - // Strenghten or relax relocations. // // GNU ifunc symbols must be accessed via PLT because their addresses diff --git a/ELF/Target.h b/ELF/Target.h index ace0705ad..cf7a2a10c 100644 --- a/ELF/Target.h +++ b/ELF/Target.h @@ -176,8 +176,6 @@ static inline std::string getErrorLocation(const uint8_t *Loc) { // to the local entry-point. unsigned getPPC64GlobalEntryToLocalEntryOffset(uint8_t StOther); -bool isPPC64SmallCodeModelReloc(RelType Type); - uint64_t getPPC64TocBase(); uint64_t getAArch64Page(uint64_t Expr); diff --git a/ELF/Writer.cpp b/ELF/Writer.cpp index 70cdbf952..35a68ed12 100644 --- a/ELF/Writer.cpp +++ b/ELF/Writer.cpp @@ -1250,24 +1250,6 @@ static void sortSection(OutputSection *Sec, if (Name == ".init" || Name == ".fini") return; - // .toc is allocated just after .got and is accessed using GOT-relative - // relocations. Object files compiled with small code model have an - // addressable range of [.got, .got + 0xFFFC] for GOT-relative relocations. - // To reduce the risk of relocation overflow, .toc contents are sorted so that - // sections having smaller relocation offsets are at beginning of .toc - if (Config->EMachine == EM_PPC64 && Name == ".toc") { - if (Script->HasSectionsCommand) - return; - assert(Sec->SectionCommands.size() == 1); - auto *ISD = cast<InputSectionDescription>(Sec->SectionCommands[0]); - std::stable_sort(ISD->Sections.begin(), ISD->Sections.end(), - [](const InputSection *A, const InputSection *B) -> bool { - return A->File->PPC64SmallCodeModelRelocs && - !B->File->PPC64SmallCodeModelRelocs; - }); - return; - } - // Sort input sections by priority using the list provided // by --symbol-ordering-file. if (!Order.empty()) diff --git a/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s b/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s deleted file mode 100644 index b903f9b54..000000000 --- a/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s +++ /dev/null @@ -1,23 +0,0 @@ - .text - - .global set - .type set,@function -set: -.Lgep: - addis 2, 12, .TOC.-.Lgep@ha - addi 2, 2, .TOC.-.Lgep@l -.Llep: - .localentry set, .Llep-.Lgep - addis 5, 2, .LC0@toc@ha - addis 6, 2, .LC1@toc@ha - ld 5, .LC0@toc@l(5) - ld 6, .LC1@toc@l(6) - stw 3, 0(5) - stw 4, 0(6) - blr - - .section .toc,"aw",@progbits -.LC0: - .tc c[TC],c -.LC1: - .tc d[TC],d diff --git a/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s b/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s deleted file mode 100644 index 733bbb344..000000000 --- a/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s +++ /dev/null @@ -1,41 +0,0 @@ - .text - .global getA - .type getA,@function -getA: -.LgepA: - addis 2, 12, .TOC.-.LgepA@ha - addi 2, 2, .TOC.-.LgepA@l -.LlepA: - .localentry getA, .LlepA-.LgepA - ld 3, .LC0@toc(2) - lwa 3, 0(3) - blr - - .global getB - .type getB,@function -getB: -.LgepB: - addis 2, 12, .TOC.-.LgepB@ha - addi 2, 2, .TOC.-.LgepB@l -.LlepB: - .localentry getB, .LlepB-.LgepB - ld 3, .LC1@toc(2) - lwa 3, 0(3) - blr - - .section .toc,"aw",@progbits -.LC0: - .tc a[TC],a -.LConst1: - .quad 0xa -.LC1: - .tc b[TC],b -.Lconst2: - .quad 0xaabbccddeeff - - .type b,@object - .data - .global b -b: - .long 22 - .size b, 4 diff --git a/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s b/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s deleted file mode 100644 index 90f6e0fd6..000000000 --- a/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s +++ /dev/null @@ -1,18 +0,0 @@ - .text - .global getRodata - .type getRodata,@function -getRodata: -.Lgep: - addis 2, 12, .TOC.-.Lgep@ha - addi 2, 2, .TOC.-.Lgep@l -.Llep: - .localentry getRodata, .Llep-.Lgep - lwa 3, .LC0@toc(2) - blr - - .section .rodata,"aMS",@progbits,8 - .quad _start - - .section .toc,"aw",@progbits -.LC0: - .tc .rodata[TC], .rodata diff --git a/test/ELF/ppc64-sort-small-cm-relocs.s b/test/ELF/ppc64-sort-small-cm-relocs.s deleted file mode 100644 index cda2c1a95..000000000 --- a/test/ELF/ppc64-sort-small-cm-relocs.s +++ /dev/null @@ -1,108 +0,0 @@ -# REQUIRES: ppc -# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t1.o -# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %p/Inputs/ppc64-sort-small-cm-relocs-input2.s -o %t2.o -# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %p/Inputs/ppc64-sort-small-cm-relocs-input3.s -o %t3.o -# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %p/Inputs/ppc64-sort-small-cm-relocs-input4.s -o %t4.o - -# RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -Map=%t.map -# RUN: FileCheck %s < %t.map - -# Test an alternate link order. -# RUN: ld.lld %t2.o %t3.o %t4.o %t1.o -o %t -Map=%t.map -# RUN: FileCheck %s -check-prefix=ALTERNATE < %t.map - -# If a linker script has a sections command then allow that to override the -# default sorting behavior. -# RUN: echo "SECTIONS { \ -# RUN: .toc : { \ -# RUN: */ppc64-sort-small-cm-relocs.s.tmp4.o(.toc*) \ -# RUN: */ppc64-sort-small-cm-relocs.s.tmp1.o(.toc*) \ -# RUN: *(.toc*) \ -# RUN: } \ -# RUN: } " > %t.script -# RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -script %t.script -Map=%t.map -# RUN: FileCheck %s -check-prefix=SEC-CMD < %t.map - -# RUN: echo "SECTIONS { .text : {*(.text*)} } " > %t.script -# RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -script %t.script -Map=%t.map -# RUN: FileCheck %s -check-prefix=SEC-CMD2 < %t.map - -# Default sort if the linker script does not have a sections command. -# RUN: echo "" > %t.script -# RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -script %t.script -Map=%t.map -# RUN: FileCheck %s -check-prefix=NOSEC < %t.map - .text - - .global _start - .type _start,@function -_start: - li 3, 55 - blr - - .type a,@object - .data - .global a -a: - .long 10 - .size a, 4 - - .type c,@object - .data - .global c -c: - .long 55 - .size c, 4 - - .type d,@object - .global d -d: - .long 33 - .size d, 4 - - # .toc section contains only some constants. - .section .toc,"aw",@progbits - .quad 0xa1a1a1a1a1a1a1a1 - .quad 0xb2b2b2b2b2b2b2b2 - -# Input files tmp3.o and tmp4.o contain small code model relocs. - -# CHECK: .got -# CHECK-NEXT: <internal>:(.got) -# CHECK-NEXT: .toc -# CHECK-NEXT: {{.*}}3.o:(.toc) -# CHECK-NEXT: {{.*}}4.o:(.toc) -# CHECK-NEXT: {{.*}}1.o:(.toc) -# CHECK-NEXT: {{.*}}2.o:(.toc) - -# ALTERNATE: .got -# ALTERNATE-NEXT: <internal>:(.got) -# ALTERNATE-NEXT: .toc -# ALTERNATE-NEXT: {{.*}}3.o:(.toc) -# ALTERNATE-NEXT: {{.*}}4.o:(.toc) -# ALTERNATE-NEXT: {{.*}}2.o:(.toc) -# ALTERNATE-NEXT: {{.*}}1.o:(.toc) - -# SEC-CMD: .got -# SEC-CMD-NEXT: <internal>:(.got) -# SEC-CMD-NEXT: .toc -# SEC-CMD-NEXT: {{.*}}4.o:(.toc) -# SEC-CMD-NEXT: {{.*}}1.o:(.toc) -# SEC-CMD-NEXT: {{.*}}2.o:(.toc) -# SEC-CMD-NEXT: {{.*}}3.o:(.toc) - -# SEC-CMD2: .got -# SEC-CMD2-NEXT: <internal>:(.got) -# SEC-CMD2-NEXT: .toc -# SEC-CMD2-NEXT: {{.*}}1.o:(.toc) -# SEC-CMD2-NEXT: {{.*}}2.o:(.toc) -# SEC-CMD2-NEXT: {{.*}}3.o:(.toc) -# SEC-CMD2-NEXT: {{.*}}4.o:(.toc) - -# NOSEC: .got -# NOSEC-NEXT: <internal>:(.got) -# NOSEC-NEXT: .toc -# NOSEC-NEXT: {{.*}}3.o:(.toc) -# NOSEC-NEXT: {{.*}}4.o:(.toc) -# NOSEC-NEXT: {{.*}}1.o:(.toc) -# NOSEC-NEXT: {{.*}}2.o:(.toc) - |