forked from OSchip/llvm-project
[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
This commit is contained in:
parent
97a42ea896
commit
2bd98af563
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: }
|
|
@ -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
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ v1:
|
|||
.gpword bar
|
||||
|
||||
# CHECK: Contents of section .rodata:
|
||||
# CHECK: 0114 fffe8014 fffe8018
|
||||
# CHECK: 00f4 fffe8014 fffe8018
|
||||
# ^ 0x10004 - 0x27ff0
|
||||
# ^ 0x10008 - 0x27ff0
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: ]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue