[lld] r351985 - Revert "[PPC64] Sort .toc sections accessed with small code model ..."
Sean Fertile via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 23 13:46:28 PST 2019
Author: sfertile
Date: Wed Jan 23 13:46:28 2019
New Revision: 351985
URL: http://llvm.org/viewvc/llvm-project?rev=351985&view=rev
Log:
Revert "[PPC64] Sort .toc sections accessed with small code model ..."
This reverts commit ca87c57a3aa4770c9cf0defd4b2feccbc342ee93.
Added test fails on several windows buildbots.
Removed:
lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s
lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s
lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s
lld/trunk/test/ELF/ppc64-sort-small-cm-relocs.s
Modified:
lld/trunk/ELF/Arch/PPC64.cpp
lld/trunk/ELF/InputFiles.h
lld/trunk/ELF/Relocations.cpp
lld/trunk/ELF/Target.h
lld/trunk/ELF/Writer.cpp
Modified: lld/trunk/ELF/Arch/PPC64.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/PPC64.cpp?rev=351985&r1=351984&r2=351985&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/PPC64.cpp (original)
+++ lld/trunk/ELF/Arch/PPC64.cpp Wed Jan 23 13:46:28 2019
@@ -98,15 +98,6 @@ unsigned elf::getPPC64GlobalEntryToLocal
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:
Modified: lld/trunk/ELF/InputFiles.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=351985&r1=351984&r2=351985&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.h (original)
+++ lld/trunk/ELF/InputFiles.h Wed Jan 23 13:46:28 2019
@@ -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
Modified: lld/trunk/ELF/Relocations.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.cpp?rev=351985&r1=351984&r2=351985&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.cpp (original)
+++ lld/trunk/ELF/Relocations.cpp Wed Jan 23 13:46:28 2019
@@ -1000,9 +1000,6 @@ static void scanReloc(InputSectionBase &
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
Modified: lld/trunk/ELF/Target.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.h?rev=351985&r1=351984&r2=351985&view=diff
==============================================================================
--- lld/trunk/ELF/Target.h (original)
+++ lld/trunk/ELF/Target.h Wed Jan 23 13:46:28 2019
@@ -176,8 +176,6 @@ static inline std::string getErrorLocati
// to the local entry-point.
unsigned getPPC64GlobalEntryToLocalEntryOffset(uint8_t StOther);
-bool isPPC64SmallCodeModelReloc(RelType Type);
-
uint64_t getPPC64TocBase();
uint64_t getAArch64Page(uint64_t Expr);
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=351985&r1=351984&r2=351985&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Wed Jan 23 13:46:28 2019
@@ -1250,24 +1250,6 @@ static void sortSection(OutputSection *S
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())
Removed: lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s?rev=351984&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s (original)
+++ lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input2.s (removed)
@@ -1,23 +0,0 @@
- .text
-
- .global set
- .type set, at function
-set:
-.Lgep:
- addis 2, 12, .TOC.-.Lgep at ha
- addi 2, 2, .TOC.-.Lgep at l
-.Llep:
- .localentry set, .Llep-.Lgep
- addis 5, 2, .LC0 at toc@ha
- addis 6, 2, .LC1 at toc@ha
- ld 5, .LC0 at toc@l(5)
- ld 6, .LC1 at toc@l(6)
- stw 3, 0(5)
- stw 4, 0(6)
- blr
-
- .section .toc,"aw", at progbits
-.LC0:
- .tc c[TC],c
-.LC1:
- .tc d[TC],d
Removed: lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s?rev=351984&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s (original)
+++ lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input3.s (removed)
@@ -1,41 +0,0 @@
- .text
- .global getA
- .type getA, at function
-getA:
-.LgepA:
- addis 2, 12, .TOC.-.LgepA at ha
- addi 2, 2, .TOC.-.LgepA at l
-.LlepA:
- .localentry getA, .LlepA-.LgepA
- ld 3, .LC0 at toc(2)
- lwa 3, 0(3)
- blr
-
- .global getB
- .type getB, at function
-getB:
-.LgepB:
- addis 2, 12, .TOC.-.LgepB at ha
- addi 2, 2, .TOC.-.LgepB at l
-.LlepB:
- .localentry getB, .LlepB-.LgepB
- ld 3, .LC1 at toc(2)
- lwa 3, 0(3)
- blr
-
- .section .toc,"aw", at progbits
-.LC0:
- .tc a[TC],a
-.LConst1:
- .quad 0xa
-.LC1:
- .tc b[TC],b
-.Lconst2:
- .quad 0xaabbccddeeff
-
- .type b, at object
- .data
- .global b
-b:
- .long 22
- .size b, 4
Removed: lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s?rev=351984&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s (original)
+++ lld/trunk/test/ELF/Inputs/ppc64-sort-small-cm-relocs-input4.s (removed)
@@ -1,18 +0,0 @@
- .text
- .global getRodata
- .type getRodata, at function
-getRodata:
-.Lgep:
- addis 2, 12, .TOC.-.Lgep at ha
- addi 2, 2, .TOC.-.Lgep at l
-.Llep:
- .localentry getRodata, .Llep-.Lgep
- lwa 3, .LC0 at toc(2)
- blr
-
- .section .rodata,"aMS", at progbits,8
- .quad _start
-
- .section .toc,"aw", at progbits
-.LC0:
- .tc .rodata[TC], .rodata
Removed: lld/trunk/test/ELF/ppc64-sort-small-cm-relocs.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/ppc64-sort-small-cm-relocs.s?rev=351984&view=auto
==============================================================================
--- lld/trunk/test/ELF/ppc64-sort-small-cm-relocs.s (original)
+++ lld/trunk/test/ELF/ppc64-sort-small-cm-relocs.s (removed)
@@ -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, at function
-_start:
- li 3, 55
- blr
-
- .type a, at object
- .data
- .global a
-a:
- .long 10
- .size a, 4
-
- .type c, at object
- .data
- .global c
-c:
- .long 55
- .size c, 4
-
- .type d, at object
- .global d
-d:
- .long 33
- .size d, 4
-
- # .toc section contains only some constants.
- .section .toc,"aw", at 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)
-
More information about the llvm-commits
mailing list