[lld] r266063 - Always create a .got on mips.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 12 06:21:15 PDT 2016


Author: rafael
Date: Tue Apr 12 08:21:13 2016
New Revision: 266063

URL: http://llvm.org/viewvc/llvm-project?rev=266063&view=rev
Log:
Always create a .got on mips.

The _gp* family of symbols is defined as an offset in .got, and it is
not at all clear what should happen when .got is not defined.

This will allow some simplifications on how these symbols are handled.

Modified:
    lld/trunk/ELF/Writer.cpp
    lld/trunk/test/ELF/basic-mips.s
    lld/trunk/test/ELF/eh-frame-hdr-abs-fde.s
    lld/trunk/test/ELF/mips-gp-local.s
    lld/trunk/test/ELF/mips-hilo.s
    lld/trunk/test/ELF/mips-pc-relocs.s

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=266063&r1=266062&r2=266063&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Tue Apr 12 08:21:13 2016
@@ -1163,7 +1163,7 @@ template <class ELFT> bool Writer<ELFT>:
 
   // 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),

Modified: lld/trunk/test/ELF/basic-mips.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/basic-mips.s?rev=266063&r1=266062&r2=266063&view=diff
==============================================================================
--- lld/trunk/test/ELF/basic-mips.s (original)
+++ lld/trunk/test/ELF/basic-mips.s Tue Apr 12 08:21:13 2016
@@ -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

Modified: lld/trunk/test/ELF/eh-frame-hdr-abs-fde.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/eh-frame-hdr-abs-fde.s?rev=266063&r1=266062&r2=266063&view=diff
==============================================================================
--- lld/trunk/test/ELF/eh-frame-hdr-abs-fde.s (original)
+++ lld/trunk/test/ELF/eh-frame-hdr-abs-fde.s Tue Apr 12 08:21:13 2016
@@ -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
 

Modified: lld/trunk/test/ELF/mips-gp-local.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-gp-local.s?rev=266063&r1=266062&r2=266063&view=diff
==============================================================================
--- lld/trunk/test/ELF/mips-gp-local.s (original)
+++ lld/trunk/test/ELF/mips-gp-local.s Tue Apr 12 08:21:13 2016
@@ -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

Modified: lld/trunk/test/ELF/mips-hilo.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-hilo.s?rev=266063&r1=266062&r2=266063&view=diff
==============================================================================
--- lld/trunk/test/ELF/mips-hilo.s (original)
+++ lld/trunk/test/ELF/mips-hilo.s Tue Apr 12 08:21:13 2016
@@ -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

Modified: lld/trunk/test/ELF/mips-pc-relocs.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-pc-relocs.s?rev=266063&r1=266062&r2=266063&view=diff
==============================================================================
--- lld/trunk/test/ELF/mips-pc-relocs.s (original)
+++ lld/trunk/test/ELF/mips-pc-relocs.s Tue Apr 12 08:21:13 2016
@@ -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




More information about the llvm-commits mailing list