diff options
-rw-r--r-- | lld/ELF/Writer.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/basic-mips.s | 89 | ||||
-rw-r--r-- | lld/test/ELF/eh-frame-hdr-abs-fde.s | 6 | ||||
-rw-r--r-- | lld/test/ELF/mips-gp-local.s | 6 | ||||
-rw-r--r-- | lld/test/ELF/mips-hilo.s | 10 | ||||
-rw-r--r-- | lld/test/ELF/mips-pc-relocs.s | 4 |
6 files changed, 73 insertions, 44 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 31cf3198e72..d990990a266 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1163,7 +1163,7 @@ template <class ELFT> bool Writer<ELFT>::needsGot() { // We add the .got section to the result for dynamic MIPS target because // its address and properties are mentioned in the .dynamic section. - if (Config->EMachine == EM_MIPS && isOutputDynamic()) + if (Config->EMachine == EM_MIPS) return true; // If we have a relocation that is relative to GOT (such as GOTOFFREL), diff --git a/lld/test/ELF/basic-mips.s b/lld/test/ELF/basic-mips.s index aaa0318fe02..0a1ff301143 100644 --- a/lld/test/ELF/basic-mips.s +++ b/lld/test/ELF/basic-mips.s @@ -27,7 +27,7 @@ __start: # CHECK-NEXT: Version: 1 # CHECK-NEXT: Entry: 0x20000 # CHECK-NEXT: ProgramHeaderOffset: 0x34 -# CHECK-NEXT: SectionHeaderOffset: 0x20084 +# CHECK-NEXT: SectionHeaderOffset: 0x30088 # CHECK-NEXT: Flags [ # CHECK-NEXT: EF_MIPS_ABI_O32 # CHECK-NEXT: EF_MIPS_ARCH_32R2 @@ -35,10 +35,10 @@ __start: # CHECK-NEXT: ] # CHECK-NEXT: HeaderSize: 52 # CHECK-NEXT: ProgramHeaderEntrySize: 32 -# CHECK-NEXT: ProgramHeaderCount: 5 +# CHECK-NEXT: ProgramHeaderCount: 6 # CHECK-NEXT: SectionHeaderEntrySize: 40 -# CHECK-NEXT: SectionHeaderCount: 9 -# CHECK-NEXT: StringTableSectionIndex: 7 +# CHECK-NEXT: SectionHeaderCount: 10 +# CHECK-NEXT: StringTableSectionIndex: 8 # CHECK-NEXT: } # CHECK-NEXT: Sections [ # CHECK-NEXT: Section { @@ -62,8 +62,8 @@ __start: # CHECK-NEXT: Flags [ (0x2) # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100D4 -# CHECK-NEXT: Offset: 0xD4 +# CHECK-NEXT: Address: 0x100F4 +# CHECK-NEXT: Offset: 0xF4 # 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: 0x100F0 -# CHECK-NEXT: Offset: 0xF0 +# CHECK-NEXT: Address: 0x10110 +# CHECK-NEXT: Offset: 0x110 # CHECK-NEXT: Size: 24 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 @@ -103,14 +103,31 @@ __start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 4 -# CHECK-NEXT: Name: .data +# CHECK-NEXT: Name: .got (31) # CHECK-NEXT: Type: SHT_PROGBITS (0x1) -# CHECK-NEXT: Flags [ (0x3) +# CHECK-NEXT: Flags [ (0x10000003) # CHECK-NEXT: SHF_ALLOC (0x2) +# CHECK-NEXT: SHF_MIPS_GPREL (0x10000000) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x30000 # CHECK-NEXT: Offset: 0x20000 +# CHECK-NEXT: Size: 8 +# CHECK-NEXT: Link: 0 +# CHECK-NEXT: Info: 0 +# CHECK-NEXT: AddressAlignment: 4 +# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: } +# CHECK-NEXT: Section { +# CHECK-NEXT: Index: 5 +# CHECK-NEXT: Name: .data +# CHECK-NEXT: Type: SHT_PROGBITS (0x1) +# CHECK-NEXT: Flags [ (0x3) +# CHECK-NEXT: SHF_ALLOC (0x2) +# CHECK-NEXT: SHF_WRITE (0x1) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x40000 +# CHECK-NEXT: Offset: 0x30000 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 @@ -118,15 +135,15 @@ __start: # CHECK-NEXT: EntrySize: 0 # CHECK-NEXT: } # CHECK-NEXT: Section { -# CHECK-NEXT: Index: 5 -# CHECK-NEXT: Name: .bss (37) +# CHECK-NEXT: Index: 6 +# CHECK-NEXT: Name: .bss # CHECK-NEXT: Type: SHT_NOBITS (0x8) # CHECK-NEXT: Flags [ (0x3) # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x30000 -# CHECK-NEXT: Offset: 0x20000 +# CHECK-NEXT: Address: 0x40000 +# CHECK-NEXT: Offset: 0x30000 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 @@ -134,41 +151,41 @@ __start: # CHECK-NEXT: EntrySize: 0 # CHECK-NEXT: } # CHECK-NEXT: Section { -# CHECK-NEXT: Index: 6 +# CHECK-NEXT: Index: 7 # CHECK-NEXT: Name: .symtab # CHECK-NEXT: Type: SHT_SYMTAB (0x2) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 -# CHECK-NEXT: Offset: 0x20000 +# CHECK-NEXT: Offset: 0x30000 # CHECK-NEXT: Size: 48 -# CHECK-NEXT: Link: 8 +# CHECK-NEXT: Link: 9 # CHECK-NEXT: Info: 1 # CHECK-NEXT: AddressAlignment: 4 # CHECK-NEXT: EntrySize: 16 # CHECK-NEXT: } # CHECK-NEXT: Section { -# CHECK-NEXT: Index: 7 +# CHECK-NEXT: Index: 8 # CHECK-NEXT: Name: .shstrtab # CHECK-NEXT: Type: SHT_STRTAB (0x3) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 -# CHECK-NEXT: Offset: 0x20030 -# CHECK-NEXT: Size: 68 +# CHECK-NEXT: Offset: 0x30030 +# CHECK-NEXT: Size: 73 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 1 # CHECK-NEXT: EntrySize: 0 # CHECK-NEXT: } # CHECK-NEXT: Section { -# CHECK-NEXT: Index: 8 -# CHECK-NEXT: Name: .strtab (60) +# CHECK-NEXT: Index: 9 +# CHECK-NEXT: Name: .strtab # CHECK-NEXT: Type: SHT_STRTAB (0x3) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 -# CHECK-NEXT: Offset: 0x20074 +# CHECK-NEXT: Offset: 0x30079 # CHECK-NEXT: Size: 13 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 @@ -197,7 +214,7 @@ __start: # CHECK-NEXT: } # CHECK-NEXT: Symbol { # CHECK-NEXT: Name: _gp -# CHECK-NEXT: Value: 0x0 +# CHECK-NEXT: Value: 0x37FF0 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Binding: Global # CHECK-NEXT: Type: None (0x0) @@ -211,8 +228,8 @@ __start: # CHECK-NEXT: Offset: 0x34 # CHECK-NEXT: VirtualAddress: 0x10034 # CHECK-NEXT: PhysicalAddress: 0x10034 -# CHECK-NEXT: FileSize: 160 -# CHECK-NEXT: MemSize: 160 +# CHECK-NEXT: FileSize: 192 +# CHECK-NEXT: MemSize: 192 # CHECK-NEXT: Flags [ (0x4) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: ] @@ -223,8 +240,8 @@ __start: # CHECK-NEXT: Offset: 0x0 # CHECK-NEXT: VirtualAddress: 0x10000 # CHECK-NEXT: PhysicalAddress: 0x10000 -# CHECK-NEXT: FileSize: 264 -# CHECK-NEXT: MemSize: 264 +# CHECK-NEXT: FileSize: 296 +# CHECK-NEXT: MemSize: 296 # CHECK-NEXT: Flags [ (0x4) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: ] @@ -248,8 +265,8 @@ __start: # CHECK-NEXT: Offset: 0x20000 # CHECK-NEXT: VirtualAddress: 0x30000 # CHECK-NEXT: PhysicalAddress: 0x30000 -# CHECK-NEXT: FileSize: 0 -# CHECK-NEXT: MemSize: 0 +# CHECK-NEXT: FileSize: 65536 +# CHECK-NEXT: MemSize: 65536 # CHECK-NEXT: Flags [ # CHECK-NEXT: PF_R # CHECK-NEXT: PF_W @@ -257,6 +274,18 @@ __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: 8 +# 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 edc892ac8d0..37705d6ad81 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: 10158 011b033b ffffffcc 00000001 0000fea8 -# ^-- 0x20000 - 0x10158 +# CHECK-NEXT: 10178 011b033b ffffffcc 00000001 0000fe88 +# ^-- 0x20000 - 0x10178 # .text - .eh_frame_hdr -# CHECK-NEXT: 10168 ffffffe8 +# CHECK-NEXT: 10188 ffffffe8 # CHECK-NEXT: Contents of section .text: # CHECK-NEXT: 20000 00000000 diff --git a/lld/test/ELF/mips-gp-local.s b/lld/test/ELF/mips-gp-local.s index 0ca8ec3b483..50c98656416 100644 --- a/lld/test/ELF/mips-gp-local.s +++ b/lld/test/ELF/mips-gp-local.s @@ -8,10 +8,10 @@ # CHECK: Disassembly of section .text: # CHECK-NEXT: __start: -# CHECK-NEXT: 20000: 3c 08 00 00 lui $8, 0 -# CHECK-NEXT: 20004: 21 08 00 00 addi $8, $8, 0 +# CHECK-NEXT: 20000: 3c 08 00 03 lui $8, 3 +# CHECK-NEXT: 20004: 21 08 7f f0 addi $8, $8, 32752 -# CHECK: 00000000 *ABS* 00000000 _gp +# CHECK: 00037ff0 *ABS* 00000000 _gp .text .globl __start diff --git a/lld/test/ELF/mips-hilo.s b/lld/test/ELF/mips-hilo.s index d5de9422c42..4f1452831ae 100644 --- a/lld/test/ELF/mips-hilo.s +++ b/lld/test/ELF/mips-hilo.s @@ -34,20 +34,20 @@ g1: # CHECK-NEXT: __start: # CHECK-NEXT: 20000: 3c 08 00 02 lui $8, 2 # ^-- %hi(__start+4) -# CHECK-NEXT: 20004: 3c 09 00 03 lui $9, 3 +# CHECK-NEXT: 20004: 3c 09 00 04 lui $9, 4 # ^-- %hi(g1+8) # CHECK-NEXT: 20008: 21 08 00 04 addi $8, $8, 4 # ^-- %lo(__start+4) # CHECK-NEXT: 2000c: 21 08 00 0c addi $8, $8, 12 # ^-- %lo(g1+8) -# CHECK-NEXT: 20010: 3c 08 00 04 lui $8, 4 +# CHECK-NEXT: 20010: 3c 08 00 05 lui $8, 5 # ^-- %hi(l1+0x10000-4) -# CHECK-NEXT: 20014: 3c 09 00 05 lui $9, 5 +# CHECK-NEXT: 20014: 3c 09 00 06 lui $9, 6 # ^-- %hi(l1+0x20000-4) # CHECK-NEXT: 20018: 21 08 ff fc addi $8, $8, -4 # ^-- %lo(l1-4) # CHECK: SYMBOL TABLE: -# CHECK: 0030000 l .data 00000004 l1 +# CHECK: 0040000 l .data 00000004 l1 # CHECK: 0020000 .text 00000000 __start -# CHECK: 0030004 g .data 00000004 g1 +# CHECK: 0040004 g .data 00000004 g1 diff --git a/lld/test/ELF/mips-pc-relocs.s b/lld/test/ELF/mips-pc-relocs.s index b659b9c6fcc..d6f0a3bf59d 100644 --- a/lld/test/ELF/mips-pc-relocs.s +++ b/lld/test/ELF/mips-pc-relocs.s @@ -38,8 +38,8 @@ __start: # ^-- %lo(0x20020-0x20014) # CHECK: Contents of section .data: -# CHECK-NEXT: 30000 ffff0028 00000000 00000000 00000000 -# ^-- 0x20020 + 8 - 0x30000 +# CHECK-NEXT: 40000 fffe0028 00000000 00000000 00000000 +# ^-- 0x20020 + 8 - 0x40000 # CHECK: 00020000 .text 00000000 __start # CHECK: 00020020 .text 00000000 _foo |