diff options
author | Simon Atanasyan <simon@atanasyan.com> | 2017-01-16 21:17:23 +0000 |
---|---|---|
committer | Simon Atanasyan <simon@atanasyan.com> | 2017-01-16 21:17:23 +0000 |
commit | 2bd98af563ab33c24192c300d4c97e3a96f94a6c (patch) | |
tree | 785c5b5a24f4ca93f3461aa870a0da86b7614389 | |
parent | 97a42ea896892db2a612ed97afc53170a86529ef (diff) | |
download | bcm5719-llvm-2bd98af563ab33c24192c300d4c97e3a96f94a6c.tar.gz bcm5719-llvm-2bd98af563ab33c24192c300d4c97e3a96f94a6c.zip |
[ELF][MIPS] Exclude mips .got from PT_GNU_RELRO segment
On MIPS .got section cannot be included into the PT_GNU_RELRO segment.
Sometimes it might work, but in general it is unsupported. One of the
problem is that all sections marked by SHF_MIPS_GPREL should be grouped
together because data in these sections is addressable with a gp
relative address, but such sections might be writable.
This patch exclude mips .got from PT_GNU_RELRO segment and group
SHF_MIPS_GPREL sections.
llvm-svn: 292161
-rw-r--r-- | lld/ELF/SyntheticSections.cpp | 2 | ||||
-rw-r--r-- | lld/ELF/Writer.cpp | 14 | ||||
-rw-r--r-- | lld/test/ELF/basic-mips.s | 36 | ||||
-rw-r--r-- | lld/test/ELF/eh-frame-hdr-abs-fde.s | 6 | ||||
-rw-r--r-- | lld/test/ELF/mips-64-rels.s | 2 | ||||
-rw-r--r-- | lld/test/ELF/mips-got-relocs.s | 16 | ||||
-rw-r--r-- | lld/test/ELF/mips-gp-ext.s | 8 | ||||
-rw-r--r-- | lld/test/ELF/mips-gp-lowest.s | 6 | ||||
-rw-r--r-- | lld/test/ELF/mips-gprel-sec.s | 37 | ||||
-rw-r--r-- | lld/test/ELF/mips-gprel32-relocs-gp0.s | 2 | ||||
-rw-r--r-- | lld/test/ELF/mips-gprel32-relocs.s | 2 | ||||
-rw-r--r-- | lld/test/ELF/mips-hilo-gp-disp.s | 30 | ||||
-rw-r--r-- | lld/test/ELF/mips-n32-rels.s | 2 | ||||
-rw-r--r-- | lld/test/ELF/mips-tls-64.s | 60 | ||||
-rw-r--r-- | lld/test/ELF/mips-tls-hilo.s | 4 | ||||
-rw-r--r-- | lld/test/ELF/mips-tls-static.s | 4 | ||||
-rw-r--r-- | lld/test/ELF/mips-tls.s | 68 | ||||
-rw-r--r-- | lld/test/ELF/mips-xgot-order.s | 4 |
18 files changed, 169 insertions, 134 deletions
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index 302a6ee51fc..920a7c83026 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -434,7 +434,7 @@ template <class ELFT> void GotSection<ELFT>::writeTo(uint8_t *Buf) { template <class ELFT> MipsGotSection<ELFT>::MipsGotSection() : SyntheticSection<ELFT>(SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL, - SHT_PROGBITS, Target->GotEntrySize, ".got") {} + SHT_PROGBITS, 16, ".got") {} template <class ELFT> void MipsGotSection<ELFT>::addEntry(SymbolBody &Sym, uintX_t Addend, diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 03d19629fde..fb0e3b85c87 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -490,6 +490,16 @@ static int getPPC64SectionRank(StringRef SectionName) { .Default(1); } +// All sections with SHF_MIPS_GPREL flag should be grouped together +// because data in these sections is addressable with a gp relative address. +static int getMipsSectionRank(const OutputSectionBase *S) { + if ((S->Flags & SHF_MIPS_GPREL) == 0) + return 0; + if (S->getName() == ".got") + return 1; + return 2; +} + template <class ELFT> bool elf::isRelroSection(const OutputSectionBase *Sec) { if (!Config->ZRelro) return false; @@ -508,8 +518,6 @@ template <class ELFT> bool elf::isRelroSection(const OutputSectionBase *Sec) { return true; if (In<ELFT>::Got && Sec == In<ELFT>::Got->OutSec) return true; - if (In<ELFT>::MipsGot && Sec == In<ELFT>::MipsGot->OutSec) - return true; if (Sec == Out<ELFT>::BssRelRo) return true; StringRef S = Sec->getName(); @@ -609,6 +617,8 @@ static bool compareSectionsNonScript(const OutputSectionBase *A, if (Config->EMachine == EM_PPC64) return getPPC64SectionRank(A->getName()) < getPPC64SectionRank(B->getName()); + if (Config->EMachine == EM_MIPS) + return getMipsSectionRank(A) < getMipsSectionRank(B); return false; } diff --git a/lld/test/ELF/basic-mips.s b/lld/test/ELF/basic-mips.s index 67b58f8f028..d6073722944 100644 --- a/lld/test/ELF/basic-mips.s +++ b/lld/test/ELF/basic-mips.s @@ -35,7 +35,7 @@ __start: # CHECK-NEXT: ] # CHECK-NEXT: HeaderSize: 52 # CHECK-NEXT: ProgramHeaderEntrySize: 32 -# CHECK-NEXT: ProgramHeaderCount: 6 +# CHECK-NEXT: ProgramHeaderCount: 5 # CHECK-NEXT: SectionHeaderEntrySize: 40 # CHECK-NEXT: SectionHeaderCount: 11 # CHECK-NEXT: StringTableSectionIndex: 9 @@ -62,8 +62,8 @@ __start: # CHECK-NEXT: Flags [ (0x2) # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100F8 -# CHECK-NEXT: Offset: 0xF8 +# CHECK-NEXT: Address: 0x100D8 +# CHECK-NEXT: Offset: 0xD8 # CHECK-NEXT: Size: 24 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 @@ -77,8 +77,8 @@ __start: # CHECK-NEXT: Flags [ (0x2) # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x10110 -# CHECK-NEXT: Offset: 0x110 +# CHECK-NEXT: Address: 0x100F0 +# CHECK-NEXT: Offset: 0xF0 # CHECK-NEXT: Size: 24 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 @@ -131,7 +131,7 @@ __start: # CHECK-NEXT: Size: 8 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 -# CHECK-NEXT: AddressAlignment: 4 +# CHECK-NEXT: AddressAlignment: 16 # CHECK-NEXT: EntrySize: 0 # CHECK-NEXT: } # CHECK-NEXT: Section { @@ -142,7 +142,7 @@ __start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x40000 +# CHECK-NEXT: Address: 0x30010 # CHECK-NEXT: Offset: 0x20008 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -246,8 +246,8 @@ __start: # CHECK-NEXT: Offset: 0x34 # CHECK-NEXT: VirtualAddress: 0x10034 # CHECK-NEXT: PhysicalAddress: 0x10034 -# CHECK-NEXT: FileSize: 192 -# CHECK-NEXT: MemSize: 192 +# CHECK-NEXT: FileSize: 160 +# CHECK-NEXT: MemSize: 160 # CHECK-NEXT: Flags [ (0x4) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: ] @@ -258,8 +258,8 @@ __start: # CHECK-NEXT: Offset: 0x0 # CHECK-NEXT: VirtualAddress: 0x10000 # CHECK-NEXT: PhysicalAddress: 0x10000 -# CHECK-NEXT: FileSize: 296 -# CHECK-NEXT: MemSize: 296 +# CHECK-NEXT: FileSize: 264 +# CHECK-NEXT: MemSize: 264 # CHECK-NEXT: Flags [ (0x4) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: ] @@ -284,7 +284,7 @@ __start: # CHECK-NEXT: VirtualAddress: 0x30000 # CHECK-NEXT: PhysicalAddress: 0x30000 # CHECK-NEXT: FileSize: 8 -# CHECK-NEXT: MemSize: 65536 +# CHECK-NEXT: MemSize: 16 # CHECK-NEXT: Flags [ # CHECK-NEXT: PF_R # CHECK-NEXT: PF_W @@ -292,18 +292,6 @@ __start: # CHECK-NEXT: Alignment: 65536 # CHECK-NEXT: } # CHECK-NEXT: ProgramHeader { -# CHECK-NEXT: Type: PT_GNU_RELRO (0x6474E552) -# CHECK-NEXT: Offset: 0x20000 -# CHECK-NEXT: VirtualAddress: 0x30000 -# CHECK-NEXT: PhysicalAddress: 0x30000 -# CHECK-NEXT: FileSize: 8 -# CHECK-NEXT: MemSize: 65536 -# CHECK-NEXT: Flags [ (0x4) -# CHECK-NEXT: PF_R (0x4) -# CHECK-NEXT: ] -# CHECK-NEXT: Alignment: 1 -# CHECK-NEXT: } -# CHECK-NEXT: ProgramHeader { # CHECK-NEXT: Type: PT_GNU_STACK # CHECK-NEXT: Offset: 0x0 # CHECK-NEXT: VirtualAddress: 0x0 diff --git a/lld/test/ELF/eh-frame-hdr-abs-fde.s b/lld/test/ELF/eh-frame-hdr-abs-fde.s index dd0836a0ab7..c3dc862ceb4 100644 --- a/lld/test/ELF/eh-frame-hdr-abs-fde.s +++ b/lld/test/ELF/eh-frame-hdr-abs-fde.s @@ -9,10 +9,10 @@ # REQUIRES: mips # CHECK: Contents of section .eh_frame_hdr: -# CHECK-NEXT: 10148 011b033b 00000010 00000001 0000feb8 -# ^-- 0x20000 - 0x10148 +# CHECK-NEXT: 10128 011b033b 00000010 00000001 0000fed8 +# ^-- 0x20000 - 0x10138 # .text - .eh_frame_hdr -# CHECK-NEXT: 10158 0000002c +# CHECK-NEXT: 10138 0000002c # CHECK: Contents of section .text: # CHECK-NEXT: 20000 00000000 diff --git a/lld/test/ELF/mips-64-rels.s b/lld/test/ELF/mips-64-rels.s index b9a3ee73848..93d893aacbd 100644 --- a/lld/test/ELF/mips-64-rels.s +++ b/lld/test/ELF/mips-64-rels.s @@ -20,7 +20,7 @@ # ^-- %lo(0x17ff0) # CHECK: Contents of section .rodata: -# CHECK-NEXT: 10190 ffffffff fffe8014 +# CHECK-NEXT: 10158 ffffffff fffe8014 # ^-- 0x20004 - 0x37ff0 = 0xfffffffffffe8014 # CHECK: 0000000000020004 .text 00000000 loc diff --git a/lld/test/ELF/mips-got-relocs.s b/lld/test/ELF/mips-got-relocs.s index bb4efd039fd..4471bc210e2 100644 --- a/lld/test/ELF/mips-got-relocs.s +++ b/lld/test/ELF/mips-got-relocs.s @@ -45,21 +45,21 @@ v1: .word 0 # EXE_SYM: Sections: -# EXE_SYM: .got 0000000c 0000000000040000 DATA +# EXE_SYM: .got 0000000c 0000000000030010 DATA # EXE_SYM: SYMBOL TABLE: -# EXE_SYM: 00047ff0 *ABS* 00000000 .hidden _gp +# EXE_SYM: 00038000 *ABS* 00000000 .hidden _gp # ^-- .got + GP offset (0x7ff0) # EXE_SYM: 00030000 g .data 00000004 v1 # EXE_GOT_BE: Contents of section .got: -# EXE_GOT_BE: 40000 00000000 80000000 00030000 +# EXE_GOT_BE: 30010 00000000 80000000 00030000 # ^ ^ ^-- v1 (0x30000) # | +-- Module pointer (0x80000000) # +-- Lazy resolver (0x0) # EXE_GOT_EL: Contents of section .got: -# EXE_GOT_EL: 40000 00000000 00000080 00000300 +# EXE_GOT_EL: 30010 00000000 00000080 00000300 # ^ ^ ^-- v1 (0x30000) # | +-- Module pointer (0x80000000) # +-- Lazy resolver (0x0) @@ -69,20 +69,20 @@ v1: # EXE_DIS_EL: 20000: 18 80 02 3c lui $2, 32792 # DSO_SYM: Sections: -# DSO_SYM: .got 0000000c 0000000000030000 DATA +# DSO_SYM: .got 0000000c 0000000000020010 DATA # DSO_SYM: SYMBOL TABLE: -# DSO_SYM: 00037ff0 *ABS* 00000000 .hidden _gp +# DSO_SYM: 00028000 *ABS* 00000000 .hidden _gp # ^-- .got + GP offset (0x7ff0) # DSO_SYM: 00020000 g .data 00000004 v1 # DSO_GOT_BE: Contents of section .got: -# DSO_GOT_BE: 30000 00000000 80000000 00020000 +# DSO_GOT_BE: 20010 00000000 80000000 00020000 # ^ ^ ^-- v1 (0x20000) # | +-- Module pointer (0x80000000) # +-- Lazy resolver (0x0) # DSO_GOT_EL: Contents of section .got: -# DSO_GOT_EL: 30000 00000000 00000080 00000200 +# DSO_GOT_EL: 20010 00000000 00000080 00000200 # ^ ^ ^-- v1 (0x20000) # | +-- Module pointer (0x80000000) # +-- Lazy resolver (0x0) diff --git a/lld/test/ELF/mips-gp-ext.s b/lld/test/ELF/mips-gp-ext.s index 21879986d51..ff459380764 100644 --- a/lld/test/ELF/mips-gp-ext.s +++ b/lld/test/ELF/mips-gp-ext.s @@ -20,10 +20,10 @@ # REQUIRES: mips # REL: Contents of section .text: -# REL-NEXT: 0000 3c080000 2108010c 8f82fff0 +# REL-NEXT: 0000 3c080000 2108010c 8f82fffc # ^-- %hi(_gp_disp) # ^-- %lo(_gp_disp) -# ^-- 8 - (0x10c - 0xf4) +# ^-- 8 - (0x10c - 0x100) # G - (GP - .got) # REL: Contents of section .reginfo: @@ -40,10 +40,10 @@ # REL: 0000010c *ABS* 00000000 .hidden _gp # ABS: Contents of section .text: -# ABS-NEXT: 0000 3c080000 21080200 8f82fefc +# ABS-NEXT: 0000 3c080000 21080200 8f82ff08 # ^-- %hi(_gp_disp) # ^-- %lo(_gp_disp) -# ^-- 8 - (0x200 - 0xf4) +# ^-- 8 - (0x200 - 0x100) # G - (GP - .got) # ABS: Contents of section .reginfo: diff --git a/lld/test/ELF/mips-gp-lowest.s b/lld/test/ELF/mips-gp-lowest.s index 86c44b0e94e..32a3e85ee9e 100644 --- a/lld/test/ELF/mips-gp-lowest.s +++ b/lld/test/ELF/mips-gp-lowest.s @@ -26,7 +26,7 @@ foo: # CHECK-NEXT: SHF_MIPS_GPREL # CHECK-NEXT: SHF_WRITE # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0xDD +# CHECK-NEXT: Address: 0xE0 # CHECK: } # CHECK: Section { # CHECK: Name: .got @@ -40,5 +40,5 @@ foo: # CHECK: } # CHECK: Name: _gp (5) -# CHECK-NEXT: Value: 0x80CD -# ^-- 0xDD + 0x7ff0 +# CHECK-NEXT: Value: 0x80D0 +# ^-- 0xE0 + 0x7ff0 diff --git a/lld/test/ELF/mips-gprel-sec.s b/lld/test/ELF/mips-gprel-sec.s new file mode 100644 index 00000000000..dc54f87216d --- /dev/null +++ b/lld/test/ELF/mips-gprel-sec.s @@ -0,0 +1,37 @@ +# Check order of gp-relative sections, i.e. sections with SHF_MIPS_GPREL flag. + +# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o +# RUN: ld.lld %t.o -shared -o %t.so +# RUN: llvm-readobj -s %t.so | FileCheck %s + +# REQUIRES: mips + + .text + nop + + .sdata + .word 0 + +# CHECK: Section { +# CHECK: Name: .got +# CHECK-NEXT: Type: SHT_PROGBITS +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: SHF_MIPS_GPREL +# CHECK-NEXT: SHF_WRITE +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x20000 +# CHECK-NEXT: Offset: 0x20000 +# CHECK: } +# CHECK: Section { +# CHECK-NEXT: Index: +# CHECK-NEXT: Name: .sdata +# CHECK-NEXT: Type: SHT_PROGBITS +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: SHF_MIPS_GPREL +# CHECK-NEXT: SHF_WRITE +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x20008 +# CHECK-NEXT: Offset: 0x20008 +# CHECK: } diff --git a/lld/test/ELF/mips-gprel32-relocs-gp0.s b/lld/test/ELF/mips-gprel32-relocs-gp0.s index e71f8856afe..4f1962bd683 100644 --- a/lld/test/ELF/mips-gprel32-relocs-gp0.s +++ b/lld/test/ELF/mips-gprel32-relocs-gp0.s @@ -22,7 +22,7 @@ # DSO: GP: 0x27FF0 # DUMP: Contents of section .rodata: -# DUMP: 0114 ffff0004 ffff0008 +# DUMP: 00f4 ffff0004 ffff0008 # ^ 0x10004 + 0x7ff0 - 0x27ff0 # ^ 0x10008 + 0x7ff0 - 0x27ff0 diff --git a/lld/test/ELF/mips-gprel32-relocs.s b/lld/test/ELF/mips-gprel32-relocs.s index 993596deedb..1c877b12b29 100644 --- a/lld/test/ELF/mips-gprel32-relocs.s +++ b/lld/test/ELF/mips-gprel32-relocs.s @@ -21,7 +21,7 @@ v1: .gpword bar # CHECK: Contents of section .rodata: -# CHECK: 0114 fffe8014 fffe8018 +# CHECK: 00f4 fffe8014 fffe8018 # ^ 0x10004 - 0x27ff0 # ^ 0x10008 - 0x27ff0 diff --git a/lld/test/ELF/mips-hilo-gp-disp.s b/lld/test/ELF/mips-hilo-gp-disp.s index 0edc2921091..62e03c7b676 100644 --- a/lld/test/ELF/mips-hilo-gp-disp.s +++ b/lld/test/ELF/mips-hilo-gp-disp.s @@ -24,32 +24,32 @@ bar: # EXE-NEXT: __start: # EXE-NEXT: 20000: 3c 08 00 02 lui $8, 2 # ^-- %hi(0x47ff0-0x20000) -# EXE-NEXT: 20004: 21 08 7f f0 addi $8, $8, 32752 -# ^-- %lo(0x47ff0-0x20004+4) +# EXE-NEXT: 20004: 21 08 80 00 addi $8, $8, -32768 +# ^-- %lo(0x38000-0x20004+4) # EXE: bar: -# EXE-NEXT: 2000c: 3c 08 00 02 lui $8, 2 -# ^-- %hi(0x47ff0-0x2000c) -# EXE-NEXT: 20010: 21 08 7f e4 addi $8, $8, 32740 -# ^-- %lo(0x47ff0-0x20010+4) +# EXE-NEXT: 2000c: 3c 08 00 01 lui $8, 1 +# ^-- %hi(0x38000-0x2000c) +# EXE-NEXT: 20010: 21 08 7f f4 addi $8, $8, 32756 +# ^-- %lo(0x38000-0x20010+4) # EXE: SYMBOL TABLE: # EXE: 0002000c .text 00000000 bar -# EXE: 00047ff0 *ABS* 00000000 .hidden _gp +# EXE: 00038000 *ABS* 00000000 .hidden _gp # EXE: 00020000 .text 00000000 __start # SO: Disassembly of section .text: # SO-NEXT: __start: # SO-NEXT: 10000: 3c 08 00 02 lui $8, 2 -# ^-- %hi(0x37ff0-0x10000) -# SO-NEXT: 10004: 21 08 7f f0 addi $8, $8, 32752 -# ^-- %lo(0x37ff0-0x10004+4) +# ^-- %hi(0x28000-0x10000) +# SO-NEXT: 10004: 21 08 80 00 addi $8, $8, -32768 +# ^-- %lo(0x28000-0x10004+4) # SO: bar: -# SO-NEXT: 1000c: 3c 08 00 02 lui $8, 2 -# ^-- %hi(0x37ff0-0x1000c) -# SO-NEXT: 10010: 21 08 7f e4 addi $8, $8, 32740 -# ^-- %lo(0x37ff0-0x10010+4) +# SO-NEXT: 1000c: 3c 08 00 01 lui $8, 1 +# ^-- %hi(0x28000-0x1000c) +# SO-NEXT: 10010: 21 08 7f f4 addi $8, $8, 32756 +# ^-- %lo(0x28000-0x10010+4) # SO: SYMBOL TABLE: # SO: 0001000c .text 00000000 bar -# SO: 00037ff0 *ABS* 00000000 .hidden _gp +# SO: 00028000 *ABS* 00000000 .hidden _gp # SO: 00010000 .text 00000000 __start diff --git a/lld/test/ELF/mips-n32-rels.s b/lld/test/ELF/mips-n32-rels.s index 4cf72887785..7706e2591a3 100644 --- a/lld/test/ELF/mips-n32-rels.s +++ b/lld/test/ELF/mips-n32-rels.s @@ -38,7 +38,7 @@ # ^-- %lo(0x17ff0) # CHECK: Contents of section .rodata: -# CHECK-NEXT: 100f4 00020004 +# CHECK-NEXT: 100d4 00020004 # ^-- loc # CHECK: 00020004 .text 00000000 loc diff --git a/lld/test/ELF/mips-tls-64.s b/lld/test/ELF/mips-tls-64.s index 39459cf2efa..259dd1f56b0 100644 --- a/lld/test/ELF/mips-tls-64.s +++ b/lld/test/ELF/mips-tls-64.s @@ -23,11 +23,11 @@ # DIS-NEXT: 20010: 24 62 80 58 addiu $2, $3, -32680 # DIS: Contents of section .got: -# DIS-NEXT: 40008 00000000 00000000 80000000 00000000 -# DIS-NEXT: 40018 00000000 00000000 00000000 00000000 -# DIS-NEXT: 40028 00000000 00000000 00000000 00000001 -# DIS-NEXT: 40038 00000000 00000000 00000000 00000001 -# DIS-NEXT: 40048 ffffffff ffff8004 ffffffff ffff9004 +# DIS-NEXT: 30010 00000000 00000000 80000000 00000000 +# DIS-NEXT: 30020 00000000 00000000 00000000 00000000 +# DIS-NEXT: 30030 00000000 00000000 00000000 00000001 +# DIS-NEXT: 30040 00000000 00000000 00000000 00000001 +# DIS-NEXT: 30050 ffffffff ffff8004 ffffffff ffff9004 # DIS: 0000000000040000 l .tdata 00000000 .tdata # DIS: 0000000000040000 l .tdata 00000000 loc @@ -36,13 +36,13 @@ # CHECK: Relocations [ # CHECK-NEXT: Section (7) .rela.dyn { -# CHECK-NEXT: 0x40018 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 -# CHECK-NEXT: 0x40020 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 -# CHECK-NEXT: 0x40028 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 +# CHECK-NEXT: 0x30020 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 +# CHECK-NEXT: 0x30028 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 +# CHECK-NEXT: 0x30030 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 # CHECK-NEXT: } # CHECK-NEXT: ] # CHECK-NEXT: Primary GOT { -# CHECK-NEXT: Canonical gp value: 0x47FF8 +# CHECK-NEXT: Canonical gp value: 0x38000 # CHECK-NEXT: Reserved entries [ # CHECK: ] # CHECK-NEXT: Local entries [ @@ -60,25 +60,25 @@ # ^-- -32680 R_MIPS_TLS_GOTTPREL VA - 0x7000 bar # DIS-SO: Contents of section .got: -# DIS-SO-NEXT: 20008 00000000 00000000 80000000 00000000 -# DIS-SO-NEXT: 20018 00000000 00000000 00000000 00000000 -# DIS-SO-NEXT: 20028 00000000 00000000 00000000 00000000 -# DIS-SO-NEXT: 20038 00000000 00000000 00000000 00000000 -# DIS-SO-NEXT: 20048 00000000 00000000 00000000 00000000 +# DIS-SO-NEXT: 20000 00000000 00000000 80000000 00000000 +# DIS-SO-NEXT: 20010 00000000 00000000 00000000 00000000 +# DIS-SO-NEXT: 20020 00000000 00000000 00000000 00000000 +# DIS-SO-NEXT: 20030 00000000 00000000 00000000 00000000 +# DIS-SO-NEXT: 20040 00000000 00000000 00000000 00000000 # SO: Relocations [ # SO-NEXT: Section (7) .rela.dyn { -# SO-NEXT: 0x20030 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE - 0x0 -# SO-NEXT: 0x20040 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE bar 0x0 -# SO-NEXT: 0x20048 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE bar 0x0 -# SO-NEXT: 0x20050 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE bar 0x0 -# SO-NEXT: 0x20018 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 -# SO-NEXT: 0x20020 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 -# SO-NEXT: 0x20028 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 +# SO-NEXT: 0x20028 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE - 0x0 +# SO-NEXT: 0x20038 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE bar 0x0 +# SO-NEXT: 0x20040 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE bar 0x0 +# SO-NEXT: 0x20048 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE bar 0x0 +# SO-NEXT: 0x20010 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 +# SO-NEXT: 0x20018 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 +# SO-NEXT: 0x20020 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0 # SO-NEXT: } # SO-NEXT: ] # SO-NEXT: Primary GOT { -# SO-NEXT: Canonical gp value: 0x27FF8 +# SO-NEXT: Canonical gp value: 0x27FF0 # SO-NEXT: Reserved entries [ # SO: ] # SO-NEXT: Local entries [ @@ -86,14 +86,14 @@ # SO-NEXT: Global entries [ # SO-NEXT: ] # SO-NEXT: Number of TLS and multi-GOT entries: 8 -# ^-- 0x20018 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD64 foo -# ^-- 0x20020 R_MIPS_TLS_DTPREL64 foo -# ^-- 0x20028 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL64 foo -# ^-- 0x20030 R_MIPS_TLS_LDM R_MIPS_TLS_DTPMOD64 loc -# ^-- 0x20038 0 loc -# ^-- 0x20040 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD64 bar -# ^-- 0x20048 R_MIPS_TLS_DTPREL64 bar -# ^-- 0x20050 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL64 bar +# ^-- -32736 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD64 foo +# ^-- -32728 R_MIPS_TLS_DTPREL64 foo +# ^-- -32720 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL64 foo +# ^-- -32712 R_MIPS_TLS_LDM R_MIPS_TLS_DTPMOD64 loc +# ^-- -32704 0 loc +# ^-- -32696 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD64 bar +# ^-- -32688 R_MIPS_TLS_DTPREL64 bar +# ^-- -32680 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL64 bar .text .global __start diff --git a/lld/test/ELF/mips-tls-hilo.s b/lld/test/ELF/mips-tls-hilo.s index 7628cb3a6ec..fb026a40bbb 100644 --- a/lld/test/ELF/mips-tls-hilo.s +++ b/lld/test/ELF/mips-tls-hilo.s @@ -21,8 +21,8 @@ # DIS-NEXT: 2000c: 24 62 90 00 addiu $2, $3, -28672 # %lo(loc0 - .tdata - 0x7000) --^ -# DIS: 00030000 l .tdata 00000000 .tdata -# DIS: 00030000 l .tdata 00000000 loc0 +# DIS: 00040000 l .tdata 00000000 .tdata +# DIS: 00040000 l .tdata 00000000 loc0 # CHECK: Relocations [ # CHECK-NEXT: ] diff --git a/lld/test/ELF/mips-tls-static.s b/lld/test/ELF/mips-tls-static.s index c8571a2658e..84b56cb4224 100644 --- a/lld/test/ELF/mips-tls-static.s +++ b/lld/test/ELF/mips-tls-static.s @@ -10,8 +10,8 @@ # CHECK: Contents of section .data: # CHECK-NEXT: 30000 0002000c ffff8004 ffff9004 # CHECK: Contents of section .got: -# CHECK-NEXT: 40008 00000000 80000000 00000001 ffff8000 -# CHECK-NEXT: 40018 00000001 00000000 ffff9000 +# CHECK-NEXT: 30010 00000000 80000000 00000001 ffff8000 +# CHECK-NEXT: 30020 00000001 00000000 ffff9000 # # CHECK: SYMBOL TABLE: # CHECK: 0002000c .text 00000000 __tls_get_addr diff --git a/lld/test/ELF/mips-tls.s b/lld/test/ELF/mips-tls.s index 7bca4773c99..fd8bab8fa3a 100644 --- a/lld/test/ELF/mips-tls.s +++ b/lld/test/ELF/mips-tls.s @@ -23,9 +23,9 @@ # DIS-NEXT: 20010: 24 62 80 34 addiu $2, $3, -32716 # DIS: Contents of section .got: -# DIS-NEXT: 40008 00000000 80000000 00000000 00000000 -# DIS-NEXT: 40018 00000000 00000001 00000000 00000001 -# DIS-NEXT: 40028 ffff8004 ffff9004 +# DIS-NEXT: 30010 00000000 80000000 00000000 00000000 +# DIS-NEXT: 30020 00000000 00000001 00000000 00000001 +# DIS-NEXT: 30030 ffff8004 ffff9004 # DIS: 00040000 l .tdata 00000000 .tdata # DIS: 00040000 l .tdata 00000000 loc @@ -34,13 +34,13 @@ # CHECK: Relocations [ # CHECK-NEXT: Section (7) .rel.dyn { -# CHECK-NEXT: 0x40010 R_MIPS_TLS_DTPMOD32 foo 0x0 -# CHECK-NEXT: 0x40014 R_MIPS_TLS_DTPREL32 foo 0x0 -# CHECK-NEXT: 0x40018 R_MIPS_TLS_TPREL32 foo 0x0 +# CHECK-NEXT: 0x30018 R_MIPS_TLS_DTPMOD32 foo 0x0 +# CHECK-NEXT: 0x3001C R_MIPS_TLS_DTPREL32 foo 0x0 +# CHECK-NEXT: 0x30020 R_MIPS_TLS_TPREL32 foo 0x0 # CHECK-NEXT: } # CHECK-NEXT: ] # CHECK-NEXT: Primary GOT { -# CHECK-NEXT: Canonical gp value: 0x47FF8 +# CHECK-NEXT: Canonical gp value: 0x38000 # CHECK-NEXT: Reserved entries [ # CHECK: ] # CHECK-NEXT: Local entries [ @@ -48,33 +48,33 @@ # CHECK-NEXT: Global entries [ # CHECK-NEXT: ] # CHECK-NEXT: Number of TLS and multi-GOT entries: 8 -# ^-- 0x30010 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD32 foo -# ^-- 0x30014 R_MIPS_TLS_DTPREL32 foo -# ^-- 0x30018 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL32 foo -# ^-- 0x3001C R_MIPS_TLS_LDM 1 loc -# ^-- 0x30020 0 loc -# ^-- 0x30024 R_MIPS_TLS_GD 1 bar -# ^-- 0x30028 VA - 0x8000 bar -# ^-- 0x3002C R_MIPS_TLS_GOTTPREL VA - 0x7000 bar +# ^-- -32744 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD32 foo +# ^-- -32740 R_MIPS_TLS_DTPREL32 foo +# ^-- -32736 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL32 foo +# ^-- -32732 R_MIPS_TLS_LDM 1 loc +# ^-- -32728 0 loc +# ^-- -32724 R_MIPS_TLS_GD 1 bar +# ^-- -32720 VA - 0x8000 bar +# ^-- -32716 R_MIPS_TLS_GOTTPREL VA - 0x7000 bar # DIS-SO: Contents of section .got: -# DIS-SO-NEXT: 20008 00000000 80000000 00000000 00000000 -# DIS-SO-NEXT: 20018 00000000 00000000 00000000 00000000 -# DIS-SO-NEXT: 20028 00000000 00000000 +# DIS-SO-NEXT: 20000 00000000 80000000 00000000 00000000 +# DIS-SO-NEXT: 20010 00000000 00000000 00000000 00000000 +# DIS-SO-NEXT: 20020 00000000 00000000 # SO: Relocations [ # SO-NEXT: Section (7) .rel.dyn { -# SO-NEXT: 0x2001C R_MIPS_TLS_DTPMOD32 - 0x0 -# SO-NEXT: 0x20024 R_MIPS_TLS_DTPMOD32 bar 0x0 -# SO-NEXT: 0x20028 R_MIPS_TLS_DTPREL32 bar 0x0 -# SO-NEXT: 0x2002C R_MIPS_TLS_TPREL32 bar 0x0 -# SO-NEXT: 0x20010 R_MIPS_TLS_DTPMOD32 foo 0x0 -# SO-NEXT: 0x20014 R_MIPS_TLS_DTPREL32 foo 0x0 -# SO-NEXT: 0x20018 R_MIPS_TLS_TPREL32 foo 0x0 +# SO-NEXT: 0x20014 R_MIPS_TLS_DTPMOD32 - 0x0 +# SO-NEXT: 0x2001C R_MIPS_TLS_DTPMOD32 bar 0x0 +# SO-NEXT: 0x20020 R_MIPS_TLS_DTPREL32 bar 0x0 +# SO-NEXT: 0x20024 R_MIPS_TLS_TPREL32 bar 0x0 +# SO-NEXT: 0x20008 R_MIPS_TLS_DTPMOD32 foo 0x0 +# SO-NEXT: 0x2000C R_MIPS_TLS_DTPREL32 foo 0x0 +# SO-NEXT: 0x20010 R_MIPS_TLS_TPREL32 foo 0x0 # SO-NEXT: } # SO-NEXT: ] # SO-NEXT: Primary GOT { -# SO-NEXT: Canonical gp value: 0x27FF8 +# SO-NEXT: Canonical gp value: 0x27FF0 # SO-NEXT: Reserved entries [ # SO: ] # SO-NEXT: Local entries [ @@ -82,14 +82,14 @@ # SO-NEXT: Global entries [ # SO-NEXT: ] # SO-NEXT: Number of TLS and multi-GOT entries: 8 -# ^-- 0x20010 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD32 foo -# ^-- 0x20014 R_MIPS_TLS_DTPREL32 foo -# ^-- 0x20018 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL32 foo -# ^-- 0x2001C R_MIPS_TLS_LDM R_MIPS_TLS_DTPMOD32 loc -# ^-- 0x20020 0 loc -# ^-- 0x20024 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD32 bar -# ^-- 0x20028 R_MIPS_TLS_DTPREL32 bar -# ^-- 0x2002C R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL32 bar +# ^-- -32744 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD32 foo +# ^-- -32740 R_MIPS_TLS_DTPREL32 foo +# ^-- -32736 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL32 foo +# ^-- -32732 R_MIPS_TLS_LDM R_MIPS_TLS_DTPMOD32 loc +# ^-- -32728 0 loc +# ^-- -32724 R_MIPS_TLS_GD R_MIPS_TLS_DTPMOD32 bar +# ^-- -32720 R_MIPS_TLS_DTPREL32 bar +# ^-- -32716 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL32 bar .text .global __start diff --git a/lld/test/ELF/mips-xgot-order.s b/lld/test/ELF/mips-xgot-order.s index b235c0c6b09..911731c713c 100644 --- a/lld/test/ELF/mips-xgot-order.s +++ b/lld/test/ELF/mips-xgot-order.s @@ -20,10 +20,10 @@ # CHECK-NEXT: 20018: 20 42 00 00 addi $2, $2, 0 # CHECK: Contents of section .got: -# CHECK-NEXT: 40000 00000000 80000000 00030000 00040000 +# CHECK-NEXT: 30010 00000000 80000000 00030000 00040000 # ^ %hi(loc) # ^ redundant entry -# CHECK-NEXT: 40010 00020010 00020000 00030000 +# CHECK-NEXT: 30020 00020010 00020000 00030000 # ^ %got(bar) # ^ %got_hi/lo(start) # ^ %got_hi/lo(loc) |