forked from OSchip/llvm-project
				
			[ELF] - Revert of: r332038, r332054, r332060, r332061, r332062, r332063
This reverts "Mitigate relocation overflow [part 1 of 2]." and the following commits which were trying to fix the bots. At the moment of r332082, bots are still failing and we need to find the reason of test case breakages first of all. http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/17042/steps/test/logs/stdio http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/29845/steps/test/logs/stdio llvm-svn: 332085
This commit is contained in:
		
							parent
							
								
									dcc95e9385
								
							
						
					
					
						commit
						4c9ae67bb7
					
				| 
						 | 
				
			
			@ -697,12 +697,11 @@ enum RankFlags {
 | 
			
		|||
  RF_NOT_INTERP = 1 << 17,
 | 
			
		||||
  RF_NOT_ALLOC = 1 << 16,
 | 
			
		||||
  RF_WRITE = 1 << 15,
 | 
			
		||||
  RF_EXEC_WRITE = 1 << 14,
 | 
			
		||||
  RF_EXEC = 1 << 13,
 | 
			
		||||
  RF_NON_TLS_BSS = 1 << 12,
 | 
			
		||||
  RF_NON_TLS_BSS_RO = 1 << 11,
 | 
			
		||||
  RF_NOT_TLS = 1 << 10,
 | 
			
		||||
  RF_ALLOC_FIRST = 1 << 9,
 | 
			
		||||
  RF_EXEC_WRITE = 1 << 13,
 | 
			
		||||
  RF_EXEC = 1 << 12,
 | 
			
		||||
  RF_NON_TLS_BSS = 1 << 11,
 | 
			
		||||
  RF_NON_TLS_BSS_RO = 1 << 10,
 | 
			
		||||
  RF_NOT_TLS = 1 << 9,
 | 
			
		||||
  RF_BSS = 1 << 8,
 | 
			
		||||
  RF_NOTE = 1 << 7,
 | 
			
		||||
  RF_PPC_NOT_TOCBSS = 1 << 6,
 | 
			
		||||
| 
						 | 
				
			
			@ -733,16 +732,6 @@ static unsigned getSectionRank(const OutputSection *Sec) {
 | 
			
		|||
  if (!(Sec->Flags & SHF_ALLOC))
 | 
			
		||||
    return Rank | RF_NOT_ALLOC;
 | 
			
		||||
 | 
			
		||||
  // Place .dynsym and .dynstr at the beginning of SHF_ALLOC
 | 
			
		||||
  // sections. We want to do this to mitigate the possibility that
 | 
			
		||||
  // huge .dynsym and .dynstr sections placed between text sections
 | 
			
		||||
  // cause relocation overflow.  Note: .dynstr has SHT_STRTAB type and
 | 
			
		||||
  // SHF_ALLOC attribute, whereas sections that only have SHT_STRTAB
 | 
			
		||||
  // but without SHF_ALLOC is placed at the end. All "Sec" reaching
 | 
			
		||||
  // here has SHF_ALLOC bit set.
 | 
			
		||||
  if (Sec->Type == SHT_DYNSYM || Sec->Type == SHT_STRTAB)
 | 
			
		||||
    return Rank | RF_ALLOC_FIRST;
 | 
			
		||||
 | 
			
		||||
  // Sort sections based on their access permission in the following
 | 
			
		||||
  // order: R, RX, RWX, RW.  This order is based on the following
 | 
			
		||||
  // considerations:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,4 +90,4 @@ _start:
 | 
			
		|||
 | 
			
		||||
// RODATA: Contents of section .rodata:
 | 
			
		||||
// S(z) = 0x40014
 | 
			
		||||
// RODATA-NEXT:  10293 14000400
 | 
			
		||||
// RODATA-NEXT:  101c8 14000400
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,13 +33,13 @@ low_target2:
 | 
			
		|||
// Expect range extension thunks for .text_low
 | 
			
		||||
// adrp calculation is (PC + signed immediate) & (!0xfff)
 | 
			
		||||
// CHECK: __AArch64ADRPThunk_high_target:
 | 
			
		||||
// CHECK-NEXT:       70:       10 00 08 90     adrp    x16, #268435456
 | 
			
		||||
// CHECK-NEXT:       74:       10 02 03 91     add     x16, x16, #192
 | 
			
		||||
// CHECK-NEXT:       78:       00 02 1f d6     br      x16
 | 
			
		||||
// CHECK-NEXT:       10:       10 00 08 90     adrp    x16, #268435456
 | 
			
		||||
// CHECK-NEXT:       14:       10 82 04 91     add     x16, x16, #288
 | 
			
		||||
// CHECK-NEXT:       18:       00 02 1f d6     br      x16
 | 
			
		||||
// CHECK: __AArch64ADRPThunk_high_target2:
 | 
			
		||||
// CHECK-NEXT:       7c:       10 00 08 90     adrp    x16, #268435456
 | 
			
		||||
// CHECK-NEXT:       80:       10 22 00 91     add     x16, x16, #8
 | 
			
		||||
// CHECK-NEXT:       84:       00 02 1f d6     br      x16
 | 
			
		||||
// CHECK-NEXT:       1c:       10 00 08 90     adrp    x16, #268435456
 | 
			
		||||
// CHECK-NEXT:       20:       10 22 00 91     add     x16, x16, #8
 | 
			
		||||
// CHECK-NEXT:       24:       00 02 1f d6     br      x16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 .section .text_high, "ax", %progbits
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ high_target:
 | 
			
		|||
 bl low_target
 | 
			
		||||
 ret
 | 
			
		||||
// CHECK: high_target:
 | 
			
		||||
// CHECK-NEXT: 10000000:        34 00 00 94     bl      #208
 | 
			
		||||
// CHECK-NEXT: 10000000:        4c 00 00 94     bl      #304
 | 
			
		||||
// CHECK-NEXT: 10000004:        c0 03 5f d6     ret
 | 
			
		||||
 | 
			
		||||
 .hidden high_target2
 | 
			
		||||
| 
						 | 
				
			
			@ -68,24 +68,24 @@ high_target2:
 | 
			
		|||
 | 
			
		||||
// CHECK: __AArch64ADRPThunk_low_target2:
 | 
			
		||||
// CHECK-NEXT: 10000010:	10 00 f8 90 	adrp	x16, #-268435456
 | 
			
		||||
// CHECK-NEXT: 10000014:	10 a2 01 91 	add	x16, x16, #104
 | 
			
		||||
// CHECK-NEXT: 10000014:	10 22 00 91 	add	x16, x16, #8
 | 
			
		||||
// CHECK-NEXT: 10000018:	00 02 1f d6 	br	x16
 | 
			
		||||
 | 
			
		||||
// CHECK: Disassembly of section .plt:
 | 
			
		||||
// CHECK-NEXT: .plt:
 | 
			
		||||
// CHECK-NEXT: 100000a0:       f0 7b bf a9     stp     x16, x30, [sp, #-16]!
 | 
			
		||||
// CHECK-NEXT: 100000a4:       10 00 00 90     adrp    x16, #0
 | 
			
		||||
// CHECK-NEXT: 100000a8:       11 7a 40 f9     ldr     x17, [x16, #240]
 | 
			
		||||
// CHECK-NEXT: 100000ac:       10 c2 03 91     add     x16, x16, #240
 | 
			
		||||
// CHECK-NEXT: 100000b0:       20 02 1f d6     br      x17
 | 
			
		||||
// CHECK-NEXT: 100000b4:       1f 20 03 d5     nop
 | 
			
		||||
// CHECK-NEXT: 100000b8:       1f 20 03 d5     nop
 | 
			
		||||
// CHECK-NEXT: 100000bc:       1f 20 03 d5     nop
 | 
			
		||||
// CHECK-NEXT: 100000c0:       10 00 00 90     adrp    x16, #0
 | 
			
		||||
// CHECK-NEXT: 100000c4:       11 7e 40 f9     ldr     x17, [x16, #248]
 | 
			
		||||
// CHECK-NEXT: 100000c8:       10 e2 03 91     add     x16, x16, #248
 | 
			
		||||
// CHECK-NEXT: 100000cc:       20 02 1f d6     br      x17
 | 
			
		||||
// CHECK-NEXT: 100000d0:       10 00 00 90     adrp    x16, #0
 | 
			
		||||
// CHECK-NEXT: 100000d4:       11 82 40 f9     ldr     x17, [x16, #256]
 | 
			
		||||
// CHECK-NEXT: 100000d8:       10 02 04 91     add     x16, x16, #256
 | 
			
		||||
// CHECK-NEXT: 100000dc:       20 02 1f d6     br      x17
 | 
			
		||||
// CHECK-NEXT: 10000100:        f0 7b bf a9     stp     x16, x30, [sp, #-16]!
 | 
			
		||||
// CHECK-NEXT: 10000104:        10 00 00 90     adrp    x16, #0
 | 
			
		||||
// CHECK-NEXT: 10000108:        11 aa 40 f9     ldr     x17, [x16, #336]
 | 
			
		||||
// CHECK-NEXT: 1000010c:        10 42 05 91     add     x16, x16, #336
 | 
			
		||||
// CHECK-NEXT: 10000110:        20 02 1f d6     br      x17
 | 
			
		||||
// CHECK-NEXT: 10000114:        1f 20 03 d5     nop
 | 
			
		||||
// CHECK-NEXT: 10000118:        1f 20 03 d5     nop
 | 
			
		||||
// CHECK-NEXT: 1000011c:        1f 20 03 d5     nop
 | 
			
		||||
// CHECK-NEXT: 10000120:        10 00 00 90     adrp    x16, #0
 | 
			
		||||
// CHECK-NEXT: 10000124:        11 ae 40 f9     ldr     x17, [x16, #344]
 | 
			
		||||
// CHECK-NEXT: 10000128:        10 62 05 91     add     x16, x16, #344
 | 
			
		||||
// CHECK-NEXT: 1000012c:        20 02 1f d6     br      x17
 | 
			
		||||
// CHECK-NEXT: 10000130:        10 00 00 90     adrp    x16, #0
 | 
			
		||||
// CHECK-NEXT: 10000134:        11 b2 40 f9     ldr     x17, [x16, #352]
 | 
			
		||||
// CHECK-NEXT: 10000138:        10 82 05 91     add     x16, x16, #352
 | 
			
		||||
// CHECK-NEXT: 1000013c:        20 02 1f d6     br      x17
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,4 +78,4 @@ _start:
 | 
			
		|||
 | 
			
		||||
// RODATA: Contents of section .rodata:
 | 
			
		||||
// S(z) = 0x13004
 | 
			
		||||
// RODATA-NEXT: 101a9 04300100
 | 
			
		||||
// RODATA-NEXT: 10114 04300100
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,24 +14,24 @@
 | 
			
		|||
// RUN: llvm-readelf -l %t.so | FileCheck --check-prefix=DIFF %s
 | 
			
		||||
 | 
			
		||||
// CHECK-NOT:  LOAD
 | 
			
		||||
// CHECK:      LOAD           0x000000 0x00000000 0x00000000 0x00170 0x00170  R 0x1000
 | 
			
		||||
// CHECK:      LOAD           0x000000 0x00000000 0x00000000 0x0016d  0x0016d  R   0x1000
 | 
			
		||||
// CHECK:      LOAD           0x001000 0x00001000 0x00001000 0x{{.*}} 0x{{.*}} R E 0x1000
 | 
			
		||||
// CHECK:      LOAD           0x002000 0x00002000 0x00002000 0x{{.*}} 0x{{.*}}   E 0x1000
 | 
			
		||||
// CHECK:      LOAD           0x003000 0x00003000 0x00003000 0x00038  0x00038  RW  0x1000
 | 
			
		||||
// CHECK-NOT:  LOAD
 | 
			
		||||
 | 
			
		||||
// CHECK: 01     .dynsym .dynstr .gnu.hash .hash
 | 
			
		||||
// CHECK: 01     .dynsym .gnu.hash .hash .dynstr
 | 
			
		||||
// CHECK: 02     .text
 | 
			
		||||
// CHECK: 03     .foo
 | 
			
		||||
// CHECK: 04     .dynamic
 | 
			
		||||
 | 
			
		||||
// DIFF-NOT:  LOAD
 | 
			
		||||
// DIFF:      LOAD           0x000000 0x00000000 0x00000000 0x00150 0x00150 R   0x1000
 | 
			
		||||
// DIFF:      LOAD           0x000000 0x00000000 0x00000000 0x0014d 0x0014d R   0x1000
 | 
			
		||||
// DIFF:      LOAD           0x001000 0x00001000 0x00001000 0x0000c 0x0000c R E 0x1000
 | 
			
		||||
// DIFF:      LOAD           0x002000 0x00002000 0x00002000 0x00038 0x00038 RW  0x1000
 | 
			
		||||
// DIFF-NOT:  LOAD
 | 
			
		||||
 | 
			
		||||
// DIFF: 01     .dynsym .dynstr .gnu.hash .hash
 | 
			
		||||
// DIFF: 01     .dynsym .gnu.hash .hash .dynstr
 | 
			
		||||
// DIFF: 02     .text .foo
 | 
			
		||||
// DIFF: 03     .dynamic
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,5 +41,5 @@ __aeabi_unwind_cpp_pr0:
 | 
			
		|||
// CHECK-NEXT:     0x200C R_ARM_JUMP_SLOT __gxx_personality_v0
 | 
			
		||||
 | 
			
		||||
// CHECK-EXTAB: Contents of section .ARM.extab:
 | 
			
		||||
// 01d8 + 0e58 = 0x1030 = __gxx_personality_v0(PLT)
 | 
			
		||||
// CHECK-EXTAB-NEXT:  01d8 580e0000 b0b0b000 00000000
 | 
			
		||||
// 014c + 0ee4 = 0x1030 = __gxx_personality_v0(PLT)
 | 
			
		||||
// CHECK-EXTAB-NEXT:  014c e40e0000 b0b0b000 00000000
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,7 @@
 | 
			
		|||
// CHECK-NEXT:     Address: 0x114
 | 
			
		||||
// CHECK-NEXT:     Offset: 0x114
 | 
			
		||||
// CHECK-NEXT:     Size: 16
 | 
			
		||||
// CHECK-NEXT:     Link: 2
 | 
			
		||||
// CHECK-NEXT:     Link: 3
 | 
			
		||||
// CHECK-NEXT:     Info: 1
 | 
			
		||||
// CHECK-NEXT:     AddressAlignment: 4
 | 
			
		||||
// CHECK-NEXT:     EntrySize: 16
 | 
			
		||||
| 
						 | 
				
			
			@ -75,31 +75,13 @@
 | 
			
		|||
// CHECK-NEXT:   }
 | 
			
		||||
// CHECK-NEXT:   Section {
 | 
			
		||||
// CHECK-NEXT:     Index: 2
 | 
			
		||||
// CHECK-NEXT:     Name: .dynstr
 | 
			
		||||
// CHECK-NEXT:     Type: SHT_STRTAB (0x3)
 | 
			
		||||
// CHECK-NEXT:     Flags [ (0x2)
 | 
			
		||||
// CHECK-NEXT:       SHF_ALLOC (0x2)
 | 
			
		||||
// CHECK-NEXT:     ]
 | 
			
		||||
// CHECK-NEXT:     Address: 0x124
 | 
			
		||||
// CHECK-NEXT:     Offset: 0x124
 | 
			
		||||
// CHECK-NEXT:     Size: 1
 | 
			
		||||
// CHECK-NEXT:     Link: 0
 | 
			
		||||
// CHECK-NEXT:     Info: 0
 | 
			
		||||
// CHECK-NEXT:     AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT:     EntrySize: 0
 | 
			
		||||
// CHECK-NEXT:     SectionData (
 | 
			
		||||
// CHECK-NEXT:       0000: 00                                   |.|
 | 
			
		||||
// CHECK-NEXT:     )
 | 
			
		||||
// CHECK-NEXT:   }
 | 
			
		||||
// CHECK-NEXT:   Section {
 | 
			
		||||
// CHECK-NEXT:     Index: 3
 | 
			
		||||
// CHECK-NEXT:     Name: .hash
 | 
			
		||||
// CHECK-NEXT:     Type: SHT_HASH (0x5)
 | 
			
		||||
// CHECK-NEXT:     Flags [ (0x2)
 | 
			
		||||
// CHECK-NEXT:       SHF_ALLOC (0x2)
 | 
			
		||||
// CHECK-NEXT:     ]
 | 
			
		||||
// CHECK-NEXT:     Address: 0x128
 | 
			
		||||
// CHECK-NEXT:     Offset: 0x128
 | 
			
		||||
// CHECK-NEXT:     Address: 0x124
 | 
			
		||||
// CHECK-NEXT:     Offset: 0x124
 | 
			
		||||
// CHECK-NEXT:     Size: 16
 | 
			
		||||
// CHECK-NEXT:     Link: 1
 | 
			
		||||
// CHECK-NEXT:     Info: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -110,6 +92,24 @@
 | 
			
		|||
// CHECK-NEXT:     )
 | 
			
		||||
// CHECK-NEXT:   }
 | 
			
		||||
// CHECK-NEXT:   Section {
 | 
			
		||||
// CHECK-NEXT:     Index: 3
 | 
			
		||||
// CHECK-NEXT:     Name: .dynstr
 | 
			
		||||
// CHECK-NEXT:     Type: SHT_STRTAB (0x3)
 | 
			
		||||
// CHECK-NEXT:     Flags [ (0x2)
 | 
			
		||||
// CHECK-NEXT:       SHF_ALLOC (0x2)
 | 
			
		||||
// CHECK-NEXT:     ]
 | 
			
		||||
// CHECK-NEXT:     Address: 0x134
 | 
			
		||||
// CHECK-NEXT:     Offset: 0x134
 | 
			
		||||
// CHECK-NEXT:     Size: 1
 | 
			
		||||
// CHECK-NEXT:     Link: 0
 | 
			
		||||
// CHECK-NEXT:     Info: 0
 | 
			
		||||
// CHECK-NEXT:     AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT:     EntrySize: 0
 | 
			
		||||
// CHECK-NEXT:     SectionData (
 | 
			
		||||
// CHECK-NEXT:       0000: 00                                   |.|
 | 
			
		||||
// CHECK-NEXT:     )
 | 
			
		||||
// CHECK-NEXT:   }
 | 
			
		||||
// CHECK-NEXT:   Section {
 | 
			
		||||
// CHECK-NEXT:     Index: 4
 | 
			
		||||
// CHECK-NEXT:     Name: .text
 | 
			
		||||
// CHECK-NEXT:     Type: SHT_PROGBITS (0x1)
 | 
			
		||||
| 
						 | 
				
			
			@ -139,14 +139,14 @@
 | 
			
		|||
// CHECK-NEXT:     Address: 0x2000
 | 
			
		||||
// CHECK-NEXT:     Offset: 0x2000
 | 
			
		||||
// CHECK-NEXT:     Size: 48
 | 
			
		||||
// CHECK-NEXT:     Link: 2
 | 
			
		||||
// CHECK-NEXT:     Link: 3
 | 
			
		||||
// CHECK-NEXT:     Info: 0
 | 
			
		||||
// CHECK-NEXT:     AddressAlignment: 4
 | 
			
		||||
// CHECK-NEXT:     EntrySize: 8
 | 
			
		||||
// CHECK-NEXT:     SectionData (
 | 
			
		||||
// CHECK-NEXT:       0000: 00000006 00000114 0000000B 00000010  |................|
 | 
			
		||||
// CHECK-NEXT:       0010: 00000005 00000124 0000000A 00000001  |.......$........|
 | 
			
		||||
// CHECK-NEXT:       0020: 00000004 00000128 00000000 00000000  |.......(........|
 | 
			
		||||
// CHECK-NEXT:       0010: 00000005 00000134 0000000A 00000001  |.......4........|
 | 
			
		||||
// CHECK-NEXT:       0020: 00000004 00000124 00000000 00000000  |.......$........|
 | 
			
		||||
// CHECK-NEXT:     )
 | 
			
		||||
// CHECK-NEXT:   }
 | 
			
		||||
// CHECK-NEXT:   Section {
 | 
			
		||||
| 
						 | 
				
			
			@ -200,8 +200,8 @@
 | 
			
		|||
// CHECK-NEXT:     AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT:     EntrySize: 0
 | 
			
		||||
// CHECK-NEXT:     SectionData (
 | 
			
		||||
// CHECK-NEXT:       0000: 002E6479 6E73796D 002E6479 6E737472  |..dynsym..dynstr|
 | 
			
		||||
// CHECK-NEXT:       0010: 002E6861 7368002E 74657874 002E6479  |..hash..text..dy|
 | 
			
		||||
// CHECK-NEXT:       0000: 002E6479 6E73796D 002E6861 7368002E  |..dynsym..hash..|
 | 
			
		||||
// CHECK-NEXT:       0010: 64796E73 7472002E 74657874 002E6479  |dynstr..text..dy|
 | 
			
		||||
// CHECK-NEXT:       0020: 6E616D69 63002E63 6F6D6D65 6E74002E  |namic..comment..|
 | 
			
		||||
// CHECK-NEXT:       0030: 73796D74 6162002E 73687374 72746162  |symtab..shstrtab|
 | 
			
		||||
// CHECK-NEXT:       0040: 002E7374 72746162 00                 |..strtab.|
 | 
			
		||||
| 
						 | 
				
			
			@ -215,7 +215,7 @@
 | 
			
		|||
// CHECK-NEXT:     ]
 | 
			
		||||
// CHECK-NEXT:     Address: 0x0
 | 
			
		||||
// CHECK-NEXT:     Offset: 0x20A1
 | 
			
		||||
// CHECK-NEXT:     Size: 10
 | 
			
		||||
// CHECK-NEXT:     Size: 1
 | 
			
		||||
// CHECK-NEXT:     Link: 0
 | 
			
		||||
// CHECK-NEXT:     Info: 0
 | 
			
		||||
// CHECK-NEXT:     AddressAlignment: 1
 | 
			
		||||
| 
						 | 
				
			
			@ -243,8 +243,8 @@
 | 
			
		|||
// CHECK-NEXT:     Offset: 0x0
 | 
			
		||||
// CHECK-NEXT:     VirtualAddress: 0x0
 | 
			
		||||
// CHECK-NEXT:     PhysicalAddress: 0x0
 | 
			
		||||
// CHECK-NEXT:     FileSize: 312
 | 
			
		||||
// CHECK-NEXT:     MemSize: 312
 | 
			
		||||
// CHECK-NEXT:     FileSize: 309
 | 
			
		||||
// CHECK-NEXT:     MemSize: 309
 | 
			
		||||
// CHECK-NEXT:     Flags [ (0x4)
 | 
			
		||||
// CHECK-NEXT:       PF_R (0x4)
 | 
			
		||||
// CHECK-NEXT:     ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@
 | 
			
		|||
// CHECK-NEXT:    Address: 0x1C8
 | 
			
		||||
// CHECK-NEXT:    Offset: 0x1C8
 | 
			
		||||
// CHECK-NEXT:    Size: 24
 | 
			
		||||
// CHECK-NEXT:    Link: 2
 | 
			
		||||
// CHECK-NEXT:    Link: 3
 | 
			
		||||
// CHECK-NEXT:    Info: 1
 | 
			
		||||
// CHECK-NEXT:    AddressAlignment: 8
 | 
			
		||||
// CHECK-NEXT:    EntrySize: 24
 | 
			
		||||
| 
						 | 
				
			
			@ -77,31 +77,13 @@
 | 
			
		|||
// CHECK-NEXT:  }
 | 
			
		||||
// CHECK-NEXT:  Section {
 | 
			
		||||
// CHECK-NEXT:    Index: 2
 | 
			
		||||
// CHECK-NEXT:    Name: .dynstr (9)
 | 
			
		||||
// CHECK-NEXT:    Type: SHT_STRTAB (0x3)
 | 
			
		||||
// CHECK-NEXT:    Name: .hash (9)
 | 
			
		||||
// CHECK-NEXT:    Type: SHT_HASH (0x5)
 | 
			
		||||
// CHECK-NEXT:    Flags [ (0x2)
 | 
			
		||||
// CHECK-NEXT:      SHF_ALLOC (0x2)
 | 
			
		||||
// CHECK-NEXT:    ]
 | 
			
		||||
// CHECK-NEXT:    Address: 0x1E0
 | 
			
		||||
// CHECK-NEXT:    Offset: 0x1E0
 | 
			
		||||
// CHECK-NEXT:    Size: 1
 | 
			
		||||
// CHECK-NEXT:    Link: 0
 | 
			
		||||
// CHECK-NEXT:    Info: 0
 | 
			
		||||
// CHECK-NEXT:    AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT:    EntrySize: 0
 | 
			
		||||
// CHECK-NEXT:    SectionData (
 | 
			
		||||
// CHECK-NEXT:      0000: 00                                   |.|
 | 
			
		||||
// CHECK-NEXT:    )
 | 
			
		||||
// CHECK-NEXT:  }
 | 
			
		||||
// CHECK-NEXT:  Section {
 | 
			
		||||
// CHECK-NEXT:    Index: 3
 | 
			
		||||
// CHECK-NEXT:    Name: .hash (17)
 | 
			
		||||
// CHECK-NEXT:    Type: SHT_HASH (0x5)
 | 
			
		||||
// CHECK-NEXT:    Flags [ (0x2)
 | 
			
		||||
// CHECK-NEXT:      SHF_ALLOC (0x2)
 | 
			
		||||
// CHECK-NEXT:    ]
 | 
			
		||||
// CHECK-NEXT:    Address: 0x1E4
 | 
			
		||||
// CHECK-NEXT:    Offset: 0x1E4
 | 
			
		||||
// CHECK-NEXT:    Size: 16
 | 
			
		||||
// CHECK-NEXT:    Link: 1
 | 
			
		||||
// CHECK-NEXT:    Info: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -112,6 +94,24 @@
 | 
			
		|||
// CHECK-NEXT:    )
 | 
			
		||||
// CHECK-NEXT:  }
 | 
			
		||||
// CHECK-NEXT:  Section {
 | 
			
		||||
// CHECK-NEXT:    Index: 3
 | 
			
		||||
// CHECK-NEXT:    Name: .dynstr (15)
 | 
			
		||||
// CHECK-NEXT:    Type: SHT_STRTAB (0x3)
 | 
			
		||||
// CHECK-NEXT:    Flags [ (0x2)
 | 
			
		||||
// CHECK-NEXT:      SHF_ALLOC (0x2)
 | 
			
		||||
// CHECK-NEXT:    ]
 | 
			
		||||
// CHECK-NEXT:    Address: 0x1F0
 | 
			
		||||
// CHECK-NEXT:    Offset: 0x1F0
 | 
			
		||||
// CHECK-NEXT:    Size: 1
 | 
			
		||||
// CHECK-NEXT:    Link: 0
 | 
			
		||||
// CHECK-NEXT:    Info: 0
 | 
			
		||||
// CHECK-NEXT:    AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT:    EntrySize: 0
 | 
			
		||||
// CHECK-NEXT:    SectionData (
 | 
			
		||||
// CHECK-NEXT:      0000: 00                                   |.|
 | 
			
		||||
// CHECK-NEXT:    )
 | 
			
		||||
// CHECK-NEXT:  }
 | 
			
		||||
// CHECK-NEXT:  Section {
 | 
			
		||||
// CHECK-NEXT:    Index: 4
 | 
			
		||||
// CHECK-NEXT:    Name: .text (23)
 | 
			
		||||
// CHECK-NEXT:    Type: SHT_PROGBITS (0x1)
 | 
			
		||||
| 
						 | 
				
			
			@ -141,16 +141,16 @@
 | 
			
		|||
// CHECK-NEXT:    Address: 0x20000
 | 
			
		||||
// CHECK-NEXT:    Offset: 0x20000
 | 
			
		||||
// CHECK-NEXT:    Size: 96
 | 
			
		||||
// CHECK-NEXT:    Link: 2
 | 
			
		||||
// CHECK-NEXT:    Link: 3
 | 
			
		||||
// CHECK-NEXT:    Info: 0
 | 
			
		||||
// CHECK-NEXT:    AddressAlignment: 8
 | 
			
		||||
// CHECK-NEXT:    EntrySize: 16
 | 
			
		||||
// CHECK-NEXT:    SectionData (
 | 
			
		||||
// CHECK-NEXT:      0000: 06000000 00000000 C8010000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:      0010: 0B000000 00000000 18000000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:      0020: 05000000 00000000 E0010000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:      0020: 05000000 00000000 F0010000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:      0030: 0A000000 00000000 01000000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:      0040: 04000000 00000000 E4010000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:      0040: 04000000 00000000 E0010000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:      0050: 00000000 00000000 00000000 00000000  |................|
 | 
			
		||||
// CHECK-NEXT:    )
 | 
			
		||||
// CHECK-NEXT:  }
 | 
			
		||||
| 
						 | 
				
			
			@ -206,8 +206,8 @@
 | 
			
		|||
// CHECK-NEXT:    AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT:    EntrySize: 0
 | 
			
		||||
// CHECK-NEXT:    SectionData (
 | 
			
		||||
// CHECK-NEXT:      0000: 002E6479 6E73796D 002E6479 6E737472  |..dynsym..dynstr|
 | 
			
		||||
// CHECK-NEXT:      0010: 002E6861 7368002E 74657874 002E6479  |..hash..text..dy|
 | 
			
		||||
// CHECK-NEXT:      0000: 002E6479 6E73796D 002E6861 7368002E  |..dynsym..hash..|
 | 
			
		||||
// CHECK-NEXT:      0010: 64796E73 7472002E 74657874 002E6479  |dynstr..text..dy|
 | 
			
		||||
// CHECK-NEXT:      0020: 6E616D69 63002E63 6F6D6D65 6E74002E  |namic..comment..|
 | 
			
		||||
// CHECK-NEXT:      0030: 73796D74 6162002E 73687374 72746162  |symtab..shstrtab|
 | 
			
		||||
// CHECK-NEXT:      0040: 002E7374 72746162 00                 |..strtab.|
 | 
			
		||||
| 
						 | 
				
			
			@ -249,8 +249,8 @@
 | 
			
		|||
// CHECK-NEXT:    Offset: 0x0
 | 
			
		||||
// CHECK-NEXT:    VirtualAddress: 0x0
 | 
			
		||||
// CHECK-NEXT:    PhysicalAddress: 0x0
 | 
			
		||||
// CHECK-NEXT:    FileSize: 500
 | 
			
		||||
// CHECK-NEXT:    MemSize: 500
 | 
			
		||||
// CHECK-NEXT:    FileSize: 497
 | 
			
		||||
// CHECK-NEXT:    MemSize: 497
 | 
			
		||||
// CHECK-NEXT:    Flags [ (0x4)
 | 
			
		||||
// CHECK-NEXT:      PF_R (0x4)
 | 
			
		||||
// CHECK-NEXT:    ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,9 +7,9 @@
 | 
			
		|||
# CHECK-NEXT:   Tag                Type                 Name/Value
 | 
			
		||||
# CHECK-NEXT:   0x0000000000000006 SYMTAB               0x120
 | 
			
		||||
# CHECK-NEXT:   0x000000000000000B SYMENT               24 (bytes)
 | 
			
		||||
# CHECK-NEXT:   0x0000000000000005 STRTAB               0x138
 | 
			
		||||
# CHECK-NEXT:   0x0000000000000005 STRTAB               0x1D8
 | 
			
		||||
# CHECK-NEXT:   0x000000000000000A STRSZ                1 (bytes)
 | 
			
		||||
# CHECK-NEXT:   0x000000006FFFFEF5 GNU_HASH             0x140
 | 
			
		||||
# CHECK-NEXT:   0x0000000000000004 HASH                 0x15C
 | 
			
		||||
# CHECK-NEXT:   0x000000006FFFFEF5 GNU_HASH             0x138
 | 
			
		||||
# CHECK-NEXT:   0x0000000000000004 HASH                 0x154
 | 
			
		||||
# CHECK-NEXT:   0x0000000000000000 NULL                 0x0
 | 
			
		||||
# CHECK-NEXT: ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
# REQUIRES: x86
 | 
			
		||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
 | 
			
		||||
 | 
			
		||||
# RUN: ld.lld --hash-style=gnu -o %t1  %t -shared
 | 
			
		||||
# RUN: llvm-readobj -elf-output-style=GNU -s %t1 | FileCheck %s
 | 
			
		||||
 | 
			
		||||
# Dynamic symbol and dynamic strtab sections are at the beginning of
 | 
			
		||||
# SHF_ALLOC sections.
 | 
			
		||||
# CHECK:      .dynsym  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .dynstr  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: foo      {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .hash    {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .text    {{.*}}   AX
 | 
			
		||||
 | 
			
		||||
.section foo, "a"
 | 
			
		||||
.byte 0
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ bar:
 | 
			
		|||
// CHECK-NEXT: EntrySize:
 | 
			
		||||
// CHECK-NEXT: SectionData (
 | 
			
		||||
// CHECK-NEXT:   0000: 1C000000 00000000 017A5052 00017810
 | 
			
		||||
// CHECK-NEXT:   0010: 061BDAFF FFFF1B0C 07089001 00000000
 | 
			
		||||
// CHECK-NEXT:   0020: 14000000 24000000 C4FFFFFF 00000000
 | 
			
		||||
// CHECK-NEXT:   0010: 061BBEFF FFFF1B0C 07089001 00000000
 | 
			
		||||
// CHECK-NEXT:   0020: 14000000 24000000 A8FFFFFF 00000000
 | 
			
		||||
// CHECK-NEXT:   0030: 00000000 00000000
 | 
			
		||||
// CHECK-NEXT: )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
// CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
// CHECK-NEXT:   SHF_STRINGS
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x1FD
 | 
			
		||||
// CHECK-NEXT: Address: 0x1C8
 | 
			
		||||
// CHECK-NEXT: Offset:
 | 
			
		||||
// CHECK-NEXT: Size: 4
 | 
			
		||||
// CHECK-NEXT: Link: 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
## when there are no other relocations except R_*_IRELATIVE.
 | 
			
		||||
 | 
			
		||||
# CHECK:  Name          Size      Address
 | 
			
		||||
# CHECK:  .rela.plt   00000030 0000000000000218
 | 
			
		||||
# CHECK:  .rela.plt   00000030 0000000000000210
 | 
			
		||||
# CHECK:  .got.plt    00000010 0000000000002000
 | 
			
		||||
 | 
			
		||||
# TAGS:      Relocations [
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +19,7 @@
 | 
			
		|||
# TAGS-NEXT: ]
 | 
			
		||||
 | 
			
		||||
# TAGS:   Tag                Type                 Name/Value
 | 
			
		||||
# TAGS:   0x0000000000000017 JMPREL               0x218
 | 
			
		||||
# TAGS:   0x0000000000000017 JMPREL               0x210
 | 
			
		||||
# TAGS:   0x0000000000000002 PLTRELSZ             48
 | 
			
		||||
# TAGS:   0x0000000000000003 PLTGOT               0x2000
 | 
			
		||||
# TAGS:   0x0000000000000014 PLTREL               RELA
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
// CHECK-NEXT:   SHF_ALLOC
 | 
			
		||||
// CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x128
 | 
			
		||||
// CHECK-NEXT: Address: 0x114
 | 
			
		||||
// CHECK-NEXT: Offset:
 | 
			
		||||
// CHECK-NEXT: Size:
 | 
			
		||||
// CHECK-NEXT: Link:
 | 
			
		||||
| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
// CHECK-NEXT: AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT: EntrySize: 0
 | 
			
		||||
// CHECK-NEXT: SectionData (
 | 
			
		||||
// CHECK-NEXT:   0000: 28010000 |
 | 
			
		||||
// CHECK-NEXT:   0000: 14010000 |
 | 
			
		||||
// CHECK-NEXT: )
 | 
			
		||||
 | 
			
		||||
// The content of .data should be the address of .mysec. 14010000 is 0x114 in
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,9 +14,9 @@
 | 
			
		|||
 | 
			
		||||
// CHECK:      Disassembly of section .plt:
 | 
			
		||||
// CHECK-NEXT: .plt:
 | 
			
		||||
// CHECK-NEXT: 10:       ff 35 cc 00 00 00       pushl   204
 | 
			
		||||
// CHECK-NEXT: 10:       ff 35 fc 00 00 00       pushl   252
 | 
			
		||||
// CHECK-NEXT: 16:       50      pushl   %eax
 | 
			
		||||
// CHECK-NEXT: 17:       a1 d0 00 00 00 movl    208, %eax
 | 
			
		||||
// CHECK-NEXT: 17:       a1 00 01 00 00  movl    256, %eax
 | 
			
		||||
// CHECK-NEXT: 1c:       e8 0f 00 00 00  calll   15 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 21:       f3 90   pause
 | 
			
		||||
// CHECK-NEXT: 23:       0f ae e8        lfence
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +37,7 @@
 | 
			
		|||
// CHECK-NEXT: 3e:       c3      retl
 | 
			
		||||
// CHECK-NEXT: 3f:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 40:       50      pushl   %eax
 | 
			
		||||
// CHECK-NEXT: 41:       a1 d4 00 00 00  movl    212, %eax
 | 
			
		||||
// CHECK-NEXT: 41:       a1 04 01 00 00  movl    260, %eax
 | 
			
		||||
// CHECK-NEXT: 46:       e8 e5 ff ff ff  calll   -27 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 4b:       e9 d1 ff ff ff  jmp     -47 <.plt+0x11>
 | 
			
		||||
// CHECK-NEXT: 50:       68 00 00 00 00  pushl   $0
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +49,7 @@
 | 
			
		|||
// CHECK-NEXT: 5e:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 5f:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 60:       50      pushl   %eax
 | 
			
		||||
// CHECK-NEXT: 61:       a1 d8 00 00 00  movl    216, %eax
 | 
			
		||||
// CHECK-NEXT: 61:       a1 08 01 00 00  movl    264, %eax
 | 
			
		||||
// CHECK-NEXT: 66:       e8 c5 ff ff ff  calll   -59 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 6b:       e9 b1 ff ff ff  jmp     -79 <.plt+0x11>
 | 
			
		||||
// CHECK-NEXT: 70:       68 08 00 00 00  pushl   $8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,9 +14,9 @@
 | 
			
		|||
 | 
			
		||||
// CHECK:      Disassembly of section .plt:
 | 
			
		||||
// CHECK-NEXT: .plt:
 | 
			
		||||
// CHECK-NEXT: 10:       ff b3 cc 00 00 00       pushl   204(%ebx)
 | 
			
		||||
// CHECK-NEXT: 10:       ff b3 fc 00 00 00       pushl   252(%ebx)
 | 
			
		||||
// CHECK-NEXT: 16:       50      pushl   %eax
 | 
			
		||||
// CHECK-NEXT: 17:       8b 83 d0 00 00 00 movl    208(%ebx), %eax
 | 
			
		||||
// CHECK-NEXT: 17:       8b 83 00 01 00 00       movl    256(%ebx), %eax
 | 
			
		||||
// CHECK-NEXT: 1d:       e8 0e 00 00 00  calll   14 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 22:       f3 90   pause
 | 
			
		||||
// CHECK-NEXT: 24:       0f ae e8        lfence
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +36,7 @@
 | 
			
		|||
// CHECK-NEXT: 3e:       c3      retl
 | 
			
		||||
// CHECK-NEXT: 3f:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 40:       50      pushl   %eax
 | 
			
		||||
// CHECK-NEXT: 41:       8b 83 d4 00 00 00       movl    212(%ebx), %eax
 | 
			
		||||
// CHECK-NEXT: 41:       8b 83 04 01 00 00       movl    260(%ebx), %eax
 | 
			
		||||
// CHECK-NEXT: 47:       e8 e4 ff ff ff  calll   -28 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 4c:       e9 d1 ff ff ff  jmp     -47 <.plt+0x12>
 | 
			
		||||
// CHECK-NEXT: 51:       68 00 00 00 00  pushl   $0
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
// CHECK-NEXT: 5e:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 5f:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 60:       50      pushl   %eax
 | 
			
		||||
// CHECK-NEXT: 61:       8b 83 d8 00 00 00       movl    216(%ebx), %eax
 | 
			
		||||
// CHECK-NEXT: 61:       8b 83 08 01 00 00       movl    264(%ebx), %eax
 | 
			
		||||
// CHECK-NEXT: 67:       e8 c4 ff ff ff  calll   -60 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 6c:       e9 b1 ff ff ff  jmp     -79 <.plt+0x12>
 | 
			
		||||
// CHECK-NEXT: 71:       68 08 00 00 00  pushl   $8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
 | 
			
		||||
# CHECK:      Symbol {
 | 
			
		||||
# CHECK:        Name: foo
 | 
			
		||||
# CHECK-NEXT:   Value: 0x38
 | 
			
		||||
# CHECK-NEXT:   Value: 0x0
 | 
			
		||||
# CHECK-NEXT:   Size: 0
 | 
			
		||||
# CHECK-NEXT:   Binding: Global
 | 
			
		||||
# CHECK-NEXT:   Type: None
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,4 @@ SECTIONS {
 | 
			
		|||
# CHECK:      Sections:
 | 
			
		||||
# CHECK-NEXT: Idx Name          Size      Address
 | 
			
		||||
# CHECK-NEXT:   0               00000000 0000000000000000
 | 
			
		||||
# CHECK-NEXT:   1 .dynsym       00000018 0000000000000190
 | 
			
		||||
# CHECK-NEXT:   2 .dynstr       00000001 00000000000001a8
 | 
			
		||||
# CHECK-NEXT:   3 foo           00000001 0000000000001000
 | 
			
		||||
# CHECK-NEXT:   1 foo           00000001 0000000000001000
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@
 | 
			
		|||
# CHECK-NEXT:     SHF_ALLOC
 | 
			
		||||
# CHECK-NEXT:     SHF_EXECINSTR
 | 
			
		||||
# CHECK-NEXT:   ]
 | 
			
		||||
# CHECK-NEXT:   Address: 0x1C
 | 
			
		||||
# CHECK-NEXT:   Address: 0x0
 | 
			
		||||
# CHECK-NEXT:   Offset:
 | 
			
		||||
# CHECK-NEXT:   Size: 4
 | 
			
		||||
# CHECK-NEXT:   Link:
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,7 @@
 | 
			
		|||
 | 
			
		||||
# CHECK:      Symbol {
 | 
			
		||||
# CHECK:        Name: foo
 | 
			
		||||
# CHECK-NEXT:   Value: 0x20
 | 
			
		||||
# CHECK-NEXT:   Value: 0x4
 | 
			
		||||
# CHECK-NEXT:   Size: 0
 | 
			
		||||
# CHECK-NEXT:   Binding: Local
 | 
			
		||||
# CHECK-NEXT:   Type: None
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,9 +9,9 @@
 | 
			
		|||
 | 
			
		||||
# CHECK:      Relocations [
 | 
			
		||||
# CHECK-NEXT:   Section ({{.*}}) .rela.dyn {
 | 
			
		||||
# CHECK-NEXT:     0x68 R_X86_64_64 .foo 0x0
 | 
			
		||||
# CHECK-NEXT:     0x66 R_X86_64_64 .foo 0x0
 | 
			
		||||
# CHECK-NEXT:   }
 | 
			
		||||
# CHECK-NEXT:   Section ({{.*}}) .rela.data {
 | 
			
		||||
# CHECK-NEXT:     0x68 R_X86_64_64 .foo 0x0
 | 
			
		||||
# CHECK-NEXT:     0x66 R_X86_64_64 .foo 0x0
 | 
			
		||||
# CHECK-NEXT:   }
 | 
			
		||||
# CHECK-NEXT: ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,11 +13,11 @@ SECTIONS {
 | 
			
		|||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
# CHECK:  3 .text         00000000 00000000000000d0 TEXT DATA
 | 
			
		||||
# CHECK:  1 .text         00000000 0000000000000004 TEXT DATA
 | 
			
		||||
 | 
			
		||||
# CHECK: 00000000000000d1         .text		 00000000 foo1
 | 
			
		||||
# CHECK: 00000000000000d1         .text		 00000000 bar1
 | 
			
		||||
# CHECK: 0000000000000005         .text		 00000000 foo1
 | 
			
		||||
# CHECK: 0000000000000005         .text		 00000000 bar1
 | 
			
		||||
# CHECK: 0000000000000000         .text		 00000000 foo2
 | 
			
		||||
# CHECK: 0000000000000000         .text		 00000000 bar2
 | 
			
		||||
# CHECK: 00000000000000d1         .text		 00000000 foo3
 | 
			
		||||
# CHECK: 00000000000000d1         .text		 00000000 bar3
 | 
			
		||||
# CHECK: 0000000000000005         .text		 00000000 foo3
 | 
			
		||||
# CHECK: 0000000000000005         .text		 00000000 bar3
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,8 +8,8 @@
 | 
			
		|||
# RUN: llvm-readobj -elf-output-style=GNU -l %t1 | FileCheck %s
 | 
			
		||||
 | 
			
		||||
# CHECK:      Segment Sections...
 | 
			
		||||
# CHECK-NEXT:   00     .text .hash .dynamic
 | 
			
		||||
# CHECK-NEXT:   01     .bar .dynsym .dynstr .foo
 | 
			
		||||
# CHECK-NEXT:   00     .text .dynsym .hash .dynstr .dynamic
 | 
			
		||||
# CHECK-NEXT:   01     .bar .foo
 | 
			
		||||
 | 
			
		||||
PHDRS {
 | 
			
		||||
  ph_write PT_LOAD FLAGS(2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
# REQUIRES: x86
 | 
			
		||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
 | 
			
		||||
# RUN: echo "SECTIONS {" > %t.script
 | 
			
		||||
# RUN: echo ". = 0x150; . = 0x10; .text : {} }" >> %t.script
 | 
			
		||||
# RUN: echo ". = 0x20; . = 0x10; .text : {} }" >> %t.script
 | 
			
		||||
# RUN: ld.lld %t.o --script %t.script -o %t -shared
 | 
			
		||||
# RUN: llvm-objdump -section-headers %t | FileCheck %s
 | 
			
		||||
# CHECK: Idx Name   Size      Address
 | 
			
		||||
# CHECK:  3 .text 00000000 0000000000000010
 | 
			
		||||
# CHECK:  1 .text 00000000 0000000000000010
 | 
			
		||||
 | 
			
		||||
# RUN: echo "SECTIONS { . = 0x20; . = ASSERT(0x1, "foo"); }" > %t2.script
 | 
			
		||||
# RUN: ld.lld %t.o --script %t2.script -o %t -shared
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@
 | 
			
		|||
# CHECK-NEXT:   }
 | 
			
		||||
# CHECK-NEXT:   Symbol {
 | 
			
		||||
# CHECK-NEXT:     Name: A
 | 
			
		||||
# CHECK-NEXT:     Value: 0x1E2
 | 
			
		||||
# CHECK-NEXT:     Value: 0x195
 | 
			
		||||
# CHECK-NEXT:     Size:
 | 
			
		||||
# CHECK-NEXT:     Binding:
 | 
			
		||||
# CHECK-NEXT:     Type:
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,7 @@
 | 
			
		|||
# CHECK-NEXT:   }
 | 
			
		||||
# CHECK-NEXT:   Symbol {
 | 
			
		||||
# CHECK-NEXT:     Name: B
 | 
			
		||||
# CHECK-NEXT:     Value: 0x1E3
 | 
			
		||||
# CHECK-NEXT:     Value: 0x196
 | 
			
		||||
# CHECK-NEXT:     Size:
 | 
			
		||||
# CHECK-NEXT:     Binding:
 | 
			
		||||
# CHECK-NEXT:     Type:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@
 | 
			
		|||
 | 
			
		||||
# CHECK:      Name: end
 | 
			
		||||
# 0x19E = begin + sizeof(.foo) = 0x190 + 0xE
 | 
			
		||||
# CHECK-NEXT: Value: 0x1F2
 | 
			
		||||
# CHECK-NEXT: Value: 0x19E
 | 
			
		||||
 | 
			
		||||
# Check that we don't crash with --gc-sections
 | 
			
		||||
# RUN: ld.lld --gc-sections -o %t2 --script %t.script %t -shared
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
# REQUIRES: x86
 | 
			
		||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
 | 
			
		||||
 | 
			
		||||
# RUN: echo "SECTIONS {foo 0 : {*(foo*)} .dynsym : {*(.dynsym)} .dynstr : {*(.dynstr)} }" > %t.script
 | 
			
		||||
# RUN: echo "SECTIONS {foo 0 : {*(foo*)} }" > %t.script
 | 
			
		||||
# RUN: ld.lld --hash-style=sysv -o %t --script %t.script %t.o -shared
 | 
			
		||||
# RUN: llvm-readobj -elf-output-style=GNU -l %t | FileCheck %s
 | 
			
		||||
 | 
			
		||||
# RUN: echo "SECTIONS {foo : {*(foo*)} .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } }" > %t.script
 | 
			
		||||
# RUN: echo "SECTIONS {foo : {*(foo*)} }" > %t.script
 | 
			
		||||
# RUN: ld.lld --hash-style=sysv -o %t --script %t.script %t.o -shared
 | 
			
		||||
# RUN: llvm-readobj -elf-output-style=GNU -l %t | FileCheck %s
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
 | 
			
		||||
# CHECK:      Section to Segment mapping:
 | 
			
		||||
# CHECK-NEXT:  Segment Sections...
 | 
			
		||||
# CHECK-NEXT:   00     foo .text .hash .dynsym .dynstr
 | 
			
		||||
# CHECK-NEXT:   00     foo .text .dynsym .hash .dynstr
 | 
			
		||||
 | 
			
		||||
.section foo, "a"
 | 
			
		||||
.quad 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@
 | 
			
		|||
 | 
			
		||||
# DUMP:       Disassembly of section .text:
 | 
			
		||||
# DUMP-NEXT:  foo:
 | 
			
		||||
# DUMP-NEXT:   50: {{.*}} -101(%rip), %eax
 | 
			
		||||
# DUMP-NEXT:   0: {{.*}} -21(%rip), %eax
 | 
			
		||||
 | 
			
		||||
# SYMBOL:     Symbol {
 | 
			
		||||
# SYMBOL:        Name: B
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
# SYMBOL-NEXT:   Other [
 | 
			
		||||
# SYMBOL-NEXT:     STV_HIDDEN
 | 
			
		||||
# SYMBOL-NEXT:   ]
 | 
			
		||||
# SYMBOL-NEXT:   Section: .dynsym
 | 
			
		||||
# SYMBOL-NEXT:   Section: .text
 | 
			
		||||
# SYMBOL-NEXT: }
 | 
			
		||||
 | 
			
		||||
.text
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,10 +9,8 @@ SECTIONS {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
# CHECK:       Sections:
 | 
			
		||||
# CHECK-NEXT:  Idx Name          Size      Address          Type
 | 
			
		||||
# CHECK-NEXT:   Idx Name          Size      Address
 | 
			
		||||
# CHECK-NEXT:    0               00000000 0000000000000000
 | 
			
		||||
# CHECK-NEXT:    1 .dynsym       00000030 0000000000001000 
 | 
			
		||||
# CHECK-NEXT:    2 .dynstr       00000003 0000000000001030 
 | 
			
		||||
# CHECK-NEXT:    3 .text         00000000 0000000000001034
 | 
			
		||||
# CHECK-NEXT:    1 .text         00000000 0000000000001000
 | 
			
		||||
 | 
			
		||||
# CHECK: 0000000000000001         .dynsym            00000000 A
 | 
			
		||||
# CHECK: 0000000000000001         .text            00000000 A
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@
 | 
			
		|||
 | 
			
		||||
# CHECK:      Section to Segment mapping:
 | 
			
		||||
# CHECK-NEXT:  Segment Sections...
 | 
			
		||||
# CHECK-NEXT:   00     .dynsym .dynstr .text .hash 
 | 
			
		||||
# CHECK-NEXT:   00     .text .dynsym .hash .dynstr
 | 
			
		||||
# CHECK-NEXT:   01     .dynamic
 | 
			
		||||
 | 
			
		||||
nop
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,4 +17,4 @@ SECTIONS {
 | 
			
		|||
# CHECK-NEXT:   SHF_ALLOC
 | 
			
		||||
# CHECK-NEXT:   SHF_EXECINSTR
 | 
			
		||||
# CHECK-NEXT: ]
 | 
			
		||||
# CHECK-NEXT: Address: 0x1038
 | 
			
		||||
# CHECK-NEXT: Address: 0x1000
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,37 +1,19 @@
 | 
			
		|||
# REQUIRES: x86
 | 
			
		||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-linux %s -o %t.o
 | 
			
		||||
# RUN: echo "SECTIONS { .data 0x4000 : {*(.data)} .dynsym 0x2000 : {*(.dynsym)} .dynstr : {*(.dynstr)} }" > %t.script
 | 
			
		||||
# RUN: echo "SECTIONS { .data 0x4000 : { *(.data) } .text 0x2000 : { *(.text) } }" > %t.script
 | 
			
		||||
# RUN: ld.lld --hash-style=sysv -o %t.so --script %t.script %t.o -shared
 | 
			
		||||
# RUN: llvm-objdump -section-headers %t.so | FileCheck %s
 | 
			
		||||
 | 
			
		||||
# Note: how the layout is done:
 | 
			
		||||
#  we need to layout 2 segments, each contains sections:
 | 
			
		||||
#    seg1: .data .dynamic
 | 
			
		||||
#    seg2: .dynsym .dynstr .text .hash
 | 
			
		||||
# for each segment, we start from the first section, regardless
 | 
			
		||||
# whether it is an orphan or not (sections that are not listed in the
 | 
			
		||||
# linkerscript are orphans):
 | 
			
		||||
#   for seg1, we assign address: .data(0x4000), .dynamic(0x4008)
 | 
			
		||||
#   for seg2, we assign address: .dynsym(0x2000), .dynstr(0x2018) ...
 | 
			
		||||
# .dynsym is not an orphan, so we take address from script, we assign
 | 
			
		||||
# .dynstr current address cursor, which is the end # of .dynsym and so
 | 
			
		||||
# on for later sections.
 | 
			
		||||
 | 
			
		||||
# Also note, it is absolutely *illegal* to have section addresses of
 | 
			
		||||
# the same segment in none-increasing order, authors of linker scripts
 | 
			
		||||
# must take responsibility to make sure this does not happen.
 | 
			
		||||
 | 
			
		||||
# CHECK:      Sections:
 | 
			
		||||
# CHECK-NEXT: Idx Name          Size      Address          Type
 | 
			
		||||
# CHECK-NEXT:   0               00000000 0000000000000000
 | 
			
		||||
# CHECK-NEXT:   1 .data         00000008 0000000000004000
 | 
			
		||||
# CHECK-NEXT:   1 .data         00000008 0000000000004000  DATA
 | 
			
		||||
# CHECK-NEXT:   2 .dynamic      00000060 0000000000004008
 | 
			
		||||
# CHECK-NEXT:   3 .dynsym       00000018 0000000000002000 
 | 
			
		||||
# CHECK-NEXT:   4 .dynstr       00000001 0000000000002018
 | 
			
		||||
# CHECK-NEXT:   5 .text         00000008 000000000000201c
 | 
			
		||||
# CHECK-NEXT:   6 .hash         00000010 0000000000002024
 | 
			
		||||
# CHECK-NEXT:   3 .text         00000008 0000000000002000  TEXT DATA
 | 
			
		||||
# CHECK-NEXT:   4 .dynsym       00000018 0000000000002008
 | 
			
		||||
# CHECK-NEXT:   5 .hash         00000010 0000000000002020
 | 
			
		||||
# CHECK-NEXT:   6 .dynstr       00000001 0000000000002030
 | 
			
		||||
 | 
			
		||||
.quad 0
 | 
			
		||||
.data
 | 
			
		||||
.quad 0
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
# BAD-LMA: .sec2             PROGBITS        0000000000008800 002800 000100 00  WA  0   0  1
 | 
			
		||||
# BAD-LMA-LABEL: Program Headers:
 | 
			
		||||
# BAD-LMA-NEXT:  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
 | 
			
		||||
# BAD-LMA-NEXT:  LOAD           0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 R E 0x1000
 | 
			
		||||
# BAD-LMA-NEXT:  LOAD           0x001000 0x0000000000000000 0x0000000000000000 0x0000fd 0x0000fd R E 0x1000
 | 
			
		||||
# BAD-LMA-NEXT:  LOAD           0x002000 0x0000000000008000 0x0000000000008000 0x000100 0x000100 RW  0x1000
 | 
			
		||||
# BAD-LMA-NEXT:  LOAD           0x002800 0x0000000000008800 0x0000000000008080 0x000170 0x000170 RW  0x1000
 | 
			
		||||
# BAD-LMA-LABEL: Section to Segment mapping:
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +49,7 @@
 | 
			
		|||
# BAD-VADDR: .sec2             PROGBITS        0000000000008020 003020 000100 00  WA  0   0  1
 | 
			
		||||
# BAD-VADDR-LABEL: Program Headers:
 | 
			
		||||
# BAD-VADDR-NEXT:  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
 | 
			
		||||
# BAD-VADDR-NEXT:  LOAD           0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 R E 0x1000
 | 
			
		||||
# BAD-VADDR-NEXT:  LOAD           0x001000 0x0000000000000000 0x0000000000000000 0x0000fd 0x0000fd R E 0x1000
 | 
			
		||||
# BAD-VADDR-NEXT:  LOAD           0x002000 0x0000000000008000 0x0000000000008000 0x000100 0x000100 RW  0x1000
 | 
			
		||||
# BAD-VADDR-NEXT:  LOAD           0x003020 0x0000000000008020 0x0000000000008800 0x000170 0x000170 RW  0x1000
 | 
			
		||||
# BAD-VADDR-LABEL: Section to Segment mapping:
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@
 | 
			
		|||
# BAD-BOTH: .sec2             PROGBITS        0000000000008040 002040 000100 00  WA  0   0  1
 | 
			
		||||
# BAD-BOTH-LABEL: Program Headers:
 | 
			
		||||
# BAD-BOTH-NEXT:  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
 | 
			
		||||
# BAD-BOTH-NEXT:  LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 R E 0x1000
 | 
			
		||||
# BAD-BOTH-NEXT:  LOAD           0x001000 0x0000000000000000 0x0000000000000000 0x0000fd 0x0000fd R E 0x1000
 | 
			
		||||
# BAD-BOTH-NEXT:  LOAD           0x002000 0x0000000000008000 0x0000000000008000 0x0001b0 0x0001b0 RW  0x1000
 | 
			
		||||
# BAD-BOTH-LABEL: Section to Segment mapping:
 | 
			
		||||
# BAD-BOTH:   01     .sec1 .sec2 .dynamic
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,11 +15,11 @@ nop
 | 
			
		|||
 | 
			
		||||
# CHECK: Id
 | 
			
		||||
# CHECK-NEXT: 0
 | 
			
		||||
# CHECK-NEXT: 1 .dynsym
 | 
			
		||||
# CHECK-NEXT: 2 .dynstr
 | 
			
		||||
# CHECK-NEXT: 3 .text
 | 
			
		||||
# CHECK-NEXT: 4 foo
 | 
			
		||||
# CHECK-NEXT: 5 .hash
 | 
			
		||||
# CHECK-NEXT: 1 .text
 | 
			
		||||
# CHECK-NEXT: 2 foo
 | 
			
		||||
# CHECK-NEXT: 3 .dynsym
 | 
			
		||||
# CHECK-NEXT: 4 .hash
 | 
			
		||||
# CHECK-NEXT: 5 .dynstr
 | 
			
		||||
# CHECK-NEXT: 6 .dynamic
 | 
			
		||||
# CHECK-NEXT: 7 .comment
 | 
			
		||||
# CHECK-NEXT: 8 .symtab
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@
 | 
			
		|||
# RUN: ld.lld --hash-style=sysv -o %t1 --script %t.script %t -shared
 | 
			
		||||
# RUN: llvm-readobj -elf-output-style=GNU -s %t1 | FileCheck %s
 | 
			
		||||
 | 
			
		||||
# CHECK:      .dynsym  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .dynstr  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .text    {{.*}}   AX
 | 
			
		||||
# CHECK:      .text    {{.*}}   AX
 | 
			
		||||
# CHECK-NEXT: .dynsym  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .hash    {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .dynstr  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: foo      {{.*}}  WA
 | 
			
		||||
# CHECK-NEXT: .dynamic {{.*}}  WA
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,6 @@ SECTIONS {
 | 
			
		|||
# CHECK-NEXT: Idx Name          Size      Address
 | 
			
		||||
# CHECK-NEXT:   0               00000000 0000000000000000
 | 
			
		||||
# CHECK:          abc           00000000 [[ADDR:[0-9a-f]*]] BSS
 | 
			
		||||
# CHECK-NEXT:     .dynsym       00000030 0000000000000190
 | 
			
		||||
# CHECK-NEXT:     .dynstr       00000005 00000000000001c0
 | 
			
		||||
# CHECK-NEXT:     bar           00000000 0000000000001000 DATA
 | 
			
		||||
 | 
			
		||||
# CHECK: SYMBOL TABLE:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,10 +10,8 @@
 | 
			
		|||
# RUN: llvm-objdump -section-headers %t.so | FileCheck %s
 | 
			
		||||
# CHECK-NOT:  .got
 | 
			
		||||
# CHECK-NOT:  .plt
 | 
			
		||||
# CHECK:      .dynsym
 | 
			
		||||
# CHECK-NEXT: .dynstr
 | 
			
		||||
# CHECK-NEXT: .text
 | 
			
		||||
# CHECK-NEXT: .gnu.hash
 | 
			
		||||
# CHECK:      .text
 | 
			
		||||
# CHECK-NEXT: .dynsym
 | 
			
		||||
 | 
			
		||||
# Test that the size of a removed unused synthetic input section is not added
 | 
			
		||||
# to the output section size. Adding a symbol assignment prevents removal of
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,20 +43,20 @@ labs = 0x1AB5
 | 
			
		|||
// CHECK:         VMA              LMA     Size Align Out     In      Symbol
 | 
			
		||||
// CHECK-NEXT: 2001c8           2001c8       78     8 .dynsym
 | 
			
		||||
// CHECK-NEXT: 2001c8           2001c8       78     8         <internal>:(.dynsym)
 | 
			
		||||
// CHECK-NEXT: 200240           200240       31     1 .dynstr
 | 
			
		||||
// CHECK-NEXT: 200240           200240       31     1         <internal>:(.dynstr)
 | 
			
		||||
// CHECK-NEXT: 200278           200278       2c     8 .gnu.hash
 | 
			
		||||
// CHECK-NEXT: 200278           200278       2c     8         <internal>:(.gnu.hash)
 | 
			
		||||
// CHECK-NEXT: 2002a4           2002a4       30     4 .hash
 | 
			
		||||
// CHECK-NEXT: 2002a4           2002a4       30     4         <internal>:(.hash)
 | 
			
		||||
// CHECK-NEXT: 2002d8           2002d8       30     8 .rela.dyn
 | 
			
		||||
// CHECK-NEXT: 2002d8           2002d8       30     8         <internal>:(.rela.dyn)
 | 
			
		||||
// CHECK-NEXT: 200308           200308       30     8 .rela.plt
 | 
			
		||||
// CHECK-NEXT: 200308           200308       30     8         <internal>:(.rela.plt)
 | 
			
		||||
// CHECK-NEXT: 200338           200338       64     8 .eh_frame
 | 
			
		||||
// CHECK-NEXT: 200338           200338       2c     1         {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x0)
 | 
			
		||||
// CHECK-NEXT: 200368           200368       14     1         {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x2c)
 | 
			
		||||
// CHECK-NEXT: 200380           200380       18     1         {{.*}}{{/|\\}}map-file.s.tmp2.o:(.eh_frame+0x18)
 | 
			
		||||
// CHECK-NEXT: 200240           200240       2c     8 .gnu.hash
 | 
			
		||||
// CHECK-NEXT: 200240           200240       2c     8         <internal>:(.gnu.hash)
 | 
			
		||||
// CHECK-NEXT: 20026c           20026c       30     4 .hash
 | 
			
		||||
// CHECK-NEXT: 20026c           20026c       30     4         <internal>:(.hash)
 | 
			
		||||
// CHECK-NEXT: 20029c           20029c       31     1 .dynstr
 | 
			
		||||
// CHECK-NEXT: 20029c           20029c       31     1         <internal>:(.dynstr)
 | 
			
		||||
// CHECK-NEXT: 2002d0           2002d0       30     8 .rela.dyn
 | 
			
		||||
// CHECK-NEXT: 2002d0           2002d0       30     8         <internal>:(.rela.dyn)
 | 
			
		||||
// CHECK-NEXT: 200300           200300       30     8 .rela.plt
 | 
			
		||||
// CHECK-NEXT: 200300           200300       30     8         <internal>:(.rela.plt)
 | 
			
		||||
// CHECK-NEXT: 200330           200330       64     8 .eh_frame
 | 
			
		||||
// CHECK-NEXT: 200330           200330       2c     1         {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x0)
 | 
			
		||||
// CHECK-NEXT: 200360           200360       14     1         {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x2c)
 | 
			
		||||
// CHECK-NEXT: 200378           200378       18     1         {{.*}}{{/|\\}}map-file.s.tmp2.o:(.eh_frame+0x18)
 | 
			
		||||
// CHECK-NEXT: 201000           201000       2d     4 .text
 | 
			
		||||
// CHECK-NEXT: 201000           201000       28     4         {{.*}}{{/|\\}}map-file.s.tmp1.o:(.text)
 | 
			
		||||
// CHECK-NEXT: 201000           201000        0     1                 _start
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,6 @@ labs = 0x1AB5
 | 
			
		|||
// CHECK-NEXT:      0                0       6d     1 .strtab
 | 
			
		||||
// CHECK-NEXT:      0                0       6d     1         <internal>:(.strtab)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// RUN: not ld.lld %t1.o %t2.o %t3.o %t4.a -o %t -Map=/ 2>&1 \
 | 
			
		||||
// RUN:  | FileCheck -check-prefix=FAIL %s
 | 
			
		||||
// FAIL: cannot open map file /
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
# CHECK-NEXT:   SHF_ALLOC
 | 
			
		||||
# CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
# CHECK-NEXT: ]
 | 
			
		||||
# CHECK-NEXT: Address: 0x1C8
 | 
			
		||||
# CHECK-NEXT: Address: 0x190
 | 
			
		||||
 | 
			
		||||
# CHECK:      Name: .bar
 | 
			
		||||
# CHECK-NEXT: Type: SHT_PROGBITS
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +24,7 @@
 | 
			
		|||
# CHECK-NEXT: AddressAlignment:
 | 
			
		||||
# CHECK-NEXT: EntrySize:
 | 
			
		||||
# CHECK-NEXT: SectionData (
 | 
			
		||||
# CHECK-NEXT:   0000: C9010000 00000000 CA010000 00000000
 | 
			
		||||
# CHECK-NEXT:   0000: 91010000 00000000 92010000 00000000
 | 
			
		||||
# CHECK-NEXT: )
 | 
			
		||||
 | 
			
		||||
        .section .foo,"aM",@progbits,8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,10 +19,10 @@
 | 
			
		|||
// CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
// CHECK-NEXT:   SHF_STRINGS
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x1E1
 | 
			
		||||
// CHECK-NEXT: Address: 0x1C8
 | 
			
		||||
 | 
			
		||||
// CHECK:      Relocations [
 | 
			
		||||
// CHECK-NEXT:   Section ({{.*}}) .rela.dyn {
 | 
			
		||||
// CHECK-NEXT:     0x{{.*}} R_X86_64_RELATIVE - 0x1E2
 | 
			
		||||
// CHECK-NEXT:     0x{{.*}} R_X86_64_RELATIVE - 0x1C9
 | 
			
		||||
// CHECK-NEXT:   }
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,10 +17,10 @@
 | 
			
		|||
// CHECK-NEXT:   SHF_ALLOC
 | 
			
		||||
// CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x1E4
 | 
			
		||||
// CHECK-NEXT: Address: 0x1C8
 | 
			
		||||
 | 
			
		||||
// CHECK:      Relocations [
 | 
			
		||||
// CHECK-NEXT:   Section ({{.*}}) .rela.dyn {
 | 
			
		||||
// CHECK-NEXT:     0x{{.*}} R_X86_64_RELATIVE - 0x1E6
 | 
			
		||||
// CHECK-NEXT:     0x{{.*}} R_X86_64_RELATIVE - 0x1CA
 | 
			
		||||
// CHECK-NEXT:   }
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,8 +28,8 @@ zed:
 | 
			
		|||
// CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
// CHECK-NEXT:   SHF_STRINGS
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x1E1
 | 
			
		||||
// CHECK-NEXT: Offset: 0x1E1
 | 
			
		||||
// CHECK-NEXT: Address:         0x1C8
 | 
			
		||||
// CHECK-NEXT: Offset:  0x1C8
 | 
			
		||||
// CHECK-NEXT: Size:    4
 | 
			
		||||
// CHECK-NEXT: Link: 0
 | 
			
		||||
// CHECK-NEXT: Info: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -46,8 +46,8 @@ zed:
 | 
			
		|||
// NOTAIL-NEXT:   SHF_MERGE
 | 
			
		||||
// NOTAIL-NEXT:   SHF_STRINGS
 | 
			
		||||
// NOTAIL-NEXT: ]
 | 
			
		||||
// NOTAIL-NEXT: Address: 0x1E1
 | 
			
		||||
// NOTAIL-NEXT: Offset: 0x1E1
 | 
			
		||||
// NOTAIL-NEXT: Address:         0x1C8
 | 
			
		||||
// NOTAIL-NEXT: Offset:  0x1C8
 | 
			
		||||
// NOTAIL-NEXT: Size:    7
 | 
			
		||||
// NOTAIL-NEXT: Link: 0
 | 
			
		||||
// NOTAIL-NEXT: Info: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -64,8 +64,8 @@ zed:
 | 
			
		|||
// NOMERGE-NEXT:   SHF_MERGE
 | 
			
		||||
// NOMERGE-NEXT:   SHF_STRINGS
 | 
			
		||||
// NOMERGE-NEXT: ]
 | 
			
		||||
// NOMERGE-NEXT: Address: 0x1E1
 | 
			
		||||
// NOMERGE-NEXT: Offset: 0x1E1
 | 
			
		||||
// NOMERGE-NEXT: Address:         0x1C8
 | 
			
		||||
// NOMERGE-NEXT: Offset:  0x1C8
 | 
			
		||||
// NOMERGE-NEXT: Size:    11
 | 
			
		||||
// NOMERGE-NEXT: Link: 0
 | 
			
		||||
// NOMERGE-NEXT: Info: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -82,8 +82,8 @@ zed:
 | 
			
		|||
// CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
// CHECK-NEXT:   SHF_STRINGS
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x1E6
 | 
			
		||||
// CHECK-NEXT: Offset: 0x1E6
 | 
			
		||||
// CHECK-NEXT: Address: 0x1CC
 | 
			
		||||
// CHECK-NEXT: Offset: 0x1CC
 | 
			
		||||
// CHECK-NEXT: Size: 4
 | 
			
		||||
// CHECK-NEXT: Link: 0
 | 
			
		||||
// CHECK-NEXT: Info: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -95,11 +95,11 @@ zed:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
// CHECK:      Name:    bar
 | 
			
		||||
// CHECK-NEXT: Value: 0x1E2
 | 
			
		||||
// CHECK-NEXT: Value:   0x1C9
 | 
			
		||||
 | 
			
		||||
// CHECK:      Name:    foo
 | 
			
		||||
// CHECK-NEXT: Value: 0x1E1
 | 
			
		||||
// CHECK-NEXT: Value:   0x1C8
 | 
			
		||||
 | 
			
		||||
// CHECK:      Name: zed
 | 
			
		||||
// CHECK-NEXT: Value: 0x1E6
 | 
			
		||||
// CHECK-NEXT: Value: 0x1CC
 | 
			
		||||
// CHECK-NEXT: Size: 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ foo:
 | 
			
		|||
// CHECK-NEXT:   SHF_ALLOC
 | 
			
		||||
// CHECK-NEXT:   SHF_MERGE
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x1E4
 | 
			
		||||
// CHECK-NEXT: Address: 0x1C8
 | 
			
		||||
 | 
			
		||||
// CHECK:      Name: foo
 | 
			
		||||
// CHECK-NEXT: Value: 0x1E6
 | 
			
		||||
// CHECK-NEXT: Value: 0x1CA
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,11 +15,11 @@
 | 
			
		|||
// CHECK-NEXT: AddressAlignment:
 | 
			
		||||
// CHECK-NEXT: EntrySize:
 | 
			
		||||
// CHECK-NEXT: SectionData (
 | 
			
		||||
// CHECK-NEXT:   0000: E4010000 00000000 EC010000 00000000  |
 | 
			
		||||
// CHECK-NEXT:   0000: C8010000 00000000 D0010000 00000000  |
 | 
			
		||||
// CHECK-NEXT: )
 | 
			
		||||
 | 
			
		||||
// CHECK:      Name: foo
 | 
			
		||||
// CHECK-NEXT: Value: 0x1E4
 | 
			
		||||
// CHECK-NEXT: Value: 0x1C8
 | 
			
		||||
 | 
			
		||||
        .section        .foo,"aM",@progbits,4
 | 
			
		||||
        .align  4
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
 | 
			
		||||
# CHECK:      Symbol {
 | 
			
		||||
# CHECK:        Name: $.str
 | 
			
		||||
# CHECK-NEXT:   Value: 0x105
 | 
			
		||||
# CHECK-NEXT:   Value: 0xF4
 | 
			
		||||
# CHECK:      }
 | 
			
		||||
 | 
			
		||||
# CHECK:      Local entries [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,42 +27,42 @@
 | 
			
		|||
# REQUIRES: mips
 | 
			
		||||
 | 
			
		||||
# REL:      Contents of section .text:
 | 
			
		||||
# REL-NEXT:  0030 3c080000 2108010c 8f82ffcc
 | 
			
		||||
# REL-NEXT:  0000 3c080000 2108010c 8f82fffc
 | 
			
		||||
#                 ^-- %hi(_gp_disp)
 | 
			
		||||
#                          ^-- %lo(_gp_disp)
 | 
			
		||||
#                                   ^-- 8 - (0x10c - 0x100)
 | 
			
		||||
#                                       G - (GP - .got)
 | 
			
		||||
 | 
			
		||||
# REL:      Contents of section .reginfo:
 | 
			
		||||
# REL-NEXT:  0058 10000104 00000000 00000000 00000000
 | 
			
		||||
# REL-NEXT:  0068 00000000 0000013c
 | 
			
		||||
# REL-NEXT:  0028 10000104 00000000 00000000 00000000
 | 
			
		||||
# REL-NEXT:  0038 00000000 0000010c
 | 
			
		||||
#                          ^-- _gp
 | 
			
		||||
 | 
			
		||||
# REL:      Contents of section .data:
 | 
			
		||||
# REL-NEXT:  00f0 fffffef4
 | 
			
		||||
#                 ^-- 0-0x10c
 | 
			
		||||
 | 
			
		||||
# REL: 00000030         .text           00000000 foo
 | 
			
		||||
# REL: 00000000         .text           00000000 foo
 | 
			
		||||
# REL: 00000000         *ABS*           00000000 .hidden _gp_disp
 | 
			
		||||
# REL: 0000013c         *ABS*           00000000 .hidden _gp
 | 
			
		||||
# REL: 0000010c         *ABS*           00000000 .hidden _gp
 | 
			
		||||
 | 
			
		||||
# ABS:      Contents of section .text:
 | 
			
		||||
# ABS-NEXT:  0030 3c080000 210801d0 8f82ff08
 | 
			
		||||
# ABS-NEXT:  0000 3c080000 21080200 8f82ff08
 | 
			
		||||
#                 ^-- %hi(_gp_disp)
 | 
			
		||||
#                          ^-- %lo(_gp_disp)
 | 
			
		||||
#                                   ^-- 8 - (0x200 - 0x100)
 | 
			
		||||
#                                       G - (GP - .got)
 | 
			
		||||
 | 
			
		||||
# ABS:      Contents of section .reginfo:
 | 
			
		||||
# ABS-NEXT:  0058 10000104 00000000 00000000 00000000
 | 
			
		||||
# ABS-NEXT:  0068 00000000 00000200
 | 
			
		||||
# ABS-NEXT:  0028 10000104 00000000 00000000 00000000
 | 
			
		||||
# ABS-NEXT:  0038 00000000 00000200
 | 
			
		||||
#                          ^-- _gp
 | 
			
		||||
 | 
			
		||||
# ABS:      Contents of section .data:
 | 
			
		||||
# ABS-NEXT:  00f0 fffffe30
 | 
			
		||||
# ABS-NEXT:  00f0 fffffe00
 | 
			
		||||
#                 ^-- 0-0x200
 | 
			
		||||
 | 
			
		||||
# ABS: 00000030         .text           00000000 foo
 | 
			
		||||
# ABS: 00000000         .text           00000000 foo
 | 
			
		||||
# ABS: 00000000         *ABS*           00000000 .hidden _gp_disp
 | 
			
		||||
# ABS: 00000200         *ABS*           00000000 .hidden _gp
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ foo:
 | 
			
		|||
# CHECK-NEXT:     SHF_MIPS_GPREL
 | 
			
		||||
# CHECK-NEXT:     SHF_WRITE
 | 
			
		||||
# CHECK-NEXT:   ]
 | 
			
		||||
# CHECK-NEXT:   Address: 0xF0
 | 
			
		||||
# CHECK-NEXT:   Address: 0xE0
 | 
			
		||||
# CHECK:      }
 | 
			
		||||
# CHECK:      Section {
 | 
			
		||||
# CHECK:        Name: .got
 | 
			
		||||
| 
						 | 
				
			
			@ -36,9 +36,9 @@ foo:
 | 
			
		|||
# CHECK-NEXT:     SHF_MIPS_GPREL
 | 
			
		||||
# CHECK-NEXT:     SHF_WRITE
 | 
			
		||||
# CHECK-NEXT:   ]
 | 
			
		||||
# CHECK-NEXT:   Address: 0x100
 | 
			
		||||
# CHECK-NEXT:   Address: 0xF0
 | 
			
		||||
# CHECK:      }
 | 
			
		||||
 | 
			
		||||
# CHECK:      Name: _gp (5)
 | 
			
		||||
# CHECK-NEXT: Value: 0x80E0
 | 
			
		||||
# CHECK-NEXT: Value: 0x80D0
 | 
			
		||||
#                    ^-- 0xE0 + 0x7ff0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@
 | 
			
		|||
// CHECK:        Type: PT_NOTE
 | 
			
		||||
// CHECK-NEXT:   Offset:
 | 
			
		||||
// CHECK-NEXT:   VirtualAddress: 0x[[ADDR]]
 | 
			
		||||
// CHECK-NEXT:   PhysicalAddress: 0x24C
 | 
			
		||||
// CHECK-NEXT:   PhysicalAddress: 0x245
 | 
			
		||||
// CHECK-NEXT:   FileSize: 16
 | 
			
		||||
// CHECK-NEXT:   MemSize: 16
 | 
			
		||||
// CHECK-NOT:  PT_NOTE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
// CHECK-NEXT: Flags [
 | 
			
		||||
// CHECK-NEXT:   SHF_ALLOC
 | 
			
		||||
// CHECK-NEXT: ]
 | 
			
		||||
// CHECK-NEXT: Address: 0x1E1
 | 
			
		||||
// CHECK-NEXT: Address: 0x1C8
 | 
			
		||||
// CHECK-NEXT: Offset:
 | 
			
		||||
// CHECK-NEXT: Size: 8
 | 
			
		||||
// CHECK-NEXT: Link: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -16,8 +16,8 @@
 | 
			
		|||
// CHECK-NEXT: AddressAlignment: 1
 | 
			
		||||
// CHECK-NEXT: EntrySize: 0
 | 
			
		||||
// CHECK-NEXT: SectionData (
 | 
			
		||||
// CHECK-NEXT:   0000: 1F0E0000 00000000
 | 
			
		||||
//                     0x1000 - 0x1E1 = 0xE1F
 | 
			
		||||
// CHECK-NEXT:   0000: 380E0000 00000000
 | 
			
		||||
//                     0x1000 - 0x1C8 = 0xE38
 | 
			
		||||
// CHECK-NEXT: )
 | 
			
		||||
 | 
			
		||||
// CHECK:      Name: .text
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,7 +113,7 @@ R_X86_64_64:
 | 
			
		|||
 .quad R_X86_64_64
 | 
			
		||||
 | 
			
		||||
// CHECK:      Contents of section .R_X86_64_64:
 | 
			
		||||
// CHECK-NEXT:   200298 98022000 00000000
 | 
			
		||||
// CHECK-NEXT:   2001c8 c8012000 00000000
 | 
			
		||||
 | 
			
		||||
.section .R_X86_64_GOTPCREL,"a",@progbits
 | 
			
		||||
.global R_X86_64_GOTPCREL
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +123,7 @@ R_X86_64_GOTPCREL:
 | 
			
		|||
// 0x2020F8 - 0x2001D8 = 7952
 | 
			
		||||
// 7952 = 0x101f0000 in little endian
 | 
			
		||||
// CHECK:      Contents of section .R_X86_64_GOTPCREL
 | 
			
		||||
// CHECK-NEXT:   2002a0 502e0000
 | 
			
		||||
// CHECK-NEXT:   2001d0 202f0000
 | 
			
		||||
 | 
			
		||||
.section .R_X86_64_GOT32,"a",@progbits
 | 
			
		||||
.global R_X86_64_GOT32
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,8 +9,8 @@
 | 
			
		|||
# NORELRO-NEXT: Idx Name          Size      Address          Type
 | 
			
		||||
# NORELRO-NEXT:   0               00000000 0000000000000000
 | 
			
		||||
# NORELRO-NEXT:   1 .dynsym       00000048 0000000000200120
 | 
			
		||||
# NORELRO-NEXT:   2 .dynstr       00000021 0000000000200168
 | 
			
		||||
# NORELRO-NEXT:   3 .hash         00000020 000000000020018c
 | 
			
		||||
# NORELRO-NEXT:   2 .hash         00000020 0000000000200168
 | 
			
		||||
# NORELRO-NEXT:   3 .dynstr       00000021 0000000000200188
 | 
			
		||||
# NORELRO-NEXT:   4 .rela.dyn     00000018 00000000002001b0
 | 
			
		||||
# NORELRO-NEXT:   5 .rela.plt     00000018 00000000002001c8
 | 
			
		||||
# NORELRO-NEXT:   6 .text         0000000a 00000000002001e0 TEXT DATA
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,6 +59,21 @@
 | 
			
		|||
// CHECK-NEXT:     0030:
 | 
			
		||||
// CHECK-NEXT:   )
 | 
			
		||||
// CHECK-NEXT: }
 | 
			
		||||
// CHECK-NEXT: Section {
 | 
			
		||||
// CHECK-NEXT:   Index: 3
 | 
			
		||||
// CHECK-NEXT:    Name: .hash
 | 
			
		||||
// CHECK-NEXT:    Type: SHT_HASH
 | 
			
		||||
// CHECK-NEXT:    Flags [
 | 
			
		||||
// CHECK-NEXT:      SHF_ALLOC
 | 
			
		||||
// CHECK-NEXT:    ]
 | 
			
		||||
// CHECK-NEXT:    Address: [[HASHADDR:.*]]
 | 
			
		||||
// CHECK-NEXT:    Offset:
 | 
			
		||||
// CHECK-NEXT:    Size:
 | 
			
		||||
// CHECK-NEXT:    Link: 2
 | 
			
		||||
// CHECK-NEXT:    Info: 0
 | 
			
		||||
// CHECK-NEXT:    AddressAlignment: 4
 | 
			
		||||
// CHECK-NEXT:    EntrySize: 4
 | 
			
		||||
 | 
			
		||||
// CHECK:        Index: [[DYNSTR]]
 | 
			
		||||
// CHECK-NEXT:   Name: .dynstr
 | 
			
		||||
// CHECK-NEXT:   Type: SHT_STRTAB
 | 
			
		||||
| 
						 | 
				
			
			@ -75,20 +90,6 @@
 | 
			
		|||
// CHECK-NEXT:   SectionData (
 | 
			
		||||
// CHECK:        )
 | 
			
		||||
// CHECK-NEXT: }
 | 
			
		||||
// CHECK-NEXT: Section {
 | 
			
		||||
// CHECK-NEXT:   Index: 4
 | 
			
		||||
// CHECK-NEXT:    Name: .hash
 | 
			
		||||
// CHECK-NEXT:    Type: SHT_HASH
 | 
			
		||||
// CHECK-NEXT:    Flags [
 | 
			
		||||
// CHECK-NEXT:      SHF_ALLOC
 | 
			
		||||
// CHECK-NEXT:    ]
 | 
			
		||||
// CHECK-NEXT:    Address: [[HASHADDR:.*]]
 | 
			
		||||
// CHECK-NEXT:    Offset:
 | 
			
		||||
// CHECK-NEXT:    Size:
 | 
			
		||||
// CHECK-NEXT:    Link: 2
 | 
			
		||||
// CHECK-NEXT:    Info: 0
 | 
			
		||||
// CHECK-NEXT:    AddressAlignment: 4
 | 
			
		||||
// CHECK-NEXT:    EntrySize: 4
 | 
			
		||||
 | 
			
		||||
// CHECK:      Name: .rel.dyn
 | 
			
		||||
// CHECK-NEXT: Type: SHT_REL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,10 +4,10 @@
 | 
			
		|||
# RUN: ld.lld --hash-style=sysv -no-rosegment -o %t1  %t -shared
 | 
			
		||||
# RUN: llvm-readobj -elf-output-style=GNU -s %t1 | FileCheck %s
 | 
			
		||||
 | 
			
		||||
# CHECK:      .dynsym  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .dynstr  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .text    {{.*}}   AX
 | 
			
		||||
# CHECK:      .text    {{.*}}   AX
 | 
			
		||||
# CHECK-NEXT: .dynsym  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .hash    {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: .dynstr  {{.*}}   A
 | 
			
		||||
# CHECK-NEXT: foo      {{.*}}  WA
 | 
			
		||||
# CHECK-NEXT: .dynamic {{.*}}  WA
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,13 +7,13 @@
 | 
			
		|||
# RUN:   | FileCheck %s --check-prefix=GOTDATA
 | 
			
		||||
 | 
			
		||||
# GOT:     Sections:
 | 
			
		||||
# GOT:      8  .got.plt     00000020 00000000000000d0 DATA
 | 
			
		||||
# GOT:      10 .got         00000008 00000000000001c0 DATA
 | 
			
		||||
# GOT:      8  .got.plt     00000020 00000000000000e0 DATA
 | 
			
		||||
# GOT:      10 .got         00000008 00000000000001d0 DATA
 | 
			
		||||
# GOTDATA:     Contents of section .got.plt:
 | 
			
		||||
# GOTDATA-NEXT:  00d0 f0000000 00000000 00000000 00000000
 | 
			
		||||
# GOTDATA-NEXT:  00e0 00000000 00000000 c6000000 00000000
 | 
			
		||||
# GOTDATA-NEXT:  00e0 00010000 00000000 00000000 00000000
 | 
			
		||||
# GOTDATA-NEXT:  00f0 00000000 00000000 d6000000 00000000
 | 
			
		||||
# GOTDATA-NEXT: Contents of section .got:
 | 
			
		||||
# GOTDATA-NEXT:  01c0 00000000 00000000
 | 
			
		||||
# GOTDATA-NEXT:  01d0 00000000 00000000
 | 
			
		||||
 | 
			
		||||
# RUN: echo "SECTIONS { .mygot : { *(.got) *(.got.plt) } }" > %t1.script
 | 
			
		||||
# RUN: ld.lld --hash-style=sysv -shared %t.o -o %t1.out --script %t1.script
 | 
			
		||||
| 
						 | 
				
			
			@ -21,12 +21,12 @@
 | 
			
		|||
# RUN: llvm-objdump -s -section=.mygot %t1.out | FileCheck %s --check-prefix=MYGOTDATA
 | 
			
		||||
 | 
			
		||||
# MYGOT:     Sections:
 | 
			
		||||
# MYGOT:      8  .mygot     00000028 00000000000000d0 DATA
 | 
			
		||||
# MYGOT:      8  .mygot     00000028 00000000000000e0 DATA
 | 
			
		||||
# MYGOT-NOT:  .got
 | 
			
		||||
# MYGOT-NOT:  .got.plt
 | 
			
		||||
# MYGOTDATA:      00d0 00000000 00000000 f8000000 00000000
 | 
			
		||||
# MYGOTDATA-NEXT: 00e0 00000000 00000000 00000000 00000000
 | 
			
		||||
# MYGOTDATA-NEXT: 00f0 c6000000 00000000
 | 
			
		||||
# MYGOTDATA:      00e0 00000000 00000000 08010000 00000000
 | 
			
		||||
# MYGOTDATA-NEXT: 00f0 00000000 00000000 00000000 00000000
 | 
			
		||||
# MYGOTDATA-NEXT: 0100 d6000000 00000000
 | 
			
		||||
 | 
			
		||||
mov bar@gotpcrel(%rip), %rax
 | 
			
		||||
call foo@plt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,8 +55,8 @@
 | 
			
		|||
# DSO-NEXT:  ]
 | 
			
		||||
# DSO-NEXT:  Version symbols {
 | 
			
		||||
# DSO-NEXT:    Section Name: .gnu.version
 | 
			
		||||
# DSO-NEXT:    Address: 0x256
 | 
			
		||||
# DSO-NEXT:    Offset: 0x256
 | 
			
		||||
# DSO-NEXT:    Address: 0x240
 | 
			
		||||
# DSO-NEXT:    Offset: 0x240
 | 
			
		||||
# DSO-NEXT:    Link: 1
 | 
			
		||||
# DSO-NEXT:    Symbols [
 | 
			
		||||
# DSO-NEXT:      Symbol {
 | 
			
		||||
| 
						 | 
				
			
			@ -150,8 +150,8 @@
 | 
			
		|||
# EXE-NEXT:  ]
 | 
			
		||||
# EXE-NEXT:  Version symbols {
 | 
			
		||||
# EXE-NEXT:    Section Name: .gnu.version
 | 
			
		||||
# EXE-NEXT:    Address: 0x20023C
 | 
			
		||||
# EXE-NEXT:    Offset: 0x23C
 | 
			
		||||
# EXE-NEXT:    Address: 0x200228
 | 
			
		||||
# EXE-NEXT:    Offset: 0x228
 | 
			
		||||
# EXE-NEXT:    Link: 1
 | 
			
		||||
# EXE-NEXT:    Symbols [
 | 
			
		||||
# EXE-NEXT:      Symbol {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,8 +8,8 @@
 | 
			
		|||
 | 
			
		||||
# DSO:        Version symbols {
 | 
			
		||||
# DSO-NEXT:   Section Name: .gnu.version
 | 
			
		||||
# DSO-NEXT:   Address: 0x260
 | 
			
		||||
# DSO-NEXT:   Offset: 0x260
 | 
			
		||||
# DSO-NEXT:   Address: 0x228
 | 
			
		||||
# DSO-NEXT:   Offset: 0x228
 | 
			
		||||
# DSO-NEXT:   Link: 1
 | 
			
		||||
# DSO-NEXT:   Symbols [
 | 
			
		||||
# DSO-NEXT:     Symbol {
 | 
			
		||||
| 
						 | 
				
			
			@ -70,8 +70,8 @@
 | 
			
		|||
 | 
			
		||||
# MAIN:      Version symbols {
 | 
			
		||||
# MAIN-NEXT:   Section Name: .gnu.version
 | 
			
		||||
# MAIN-NEXT:   Address: 0x200260
 | 
			
		||||
# MAIN-NEXT:   Offset: 0x260
 | 
			
		||||
# MAIN-NEXT:   Address: 0x200228
 | 
			
		||||
# MAIN-NEXT:   Offset: 0x228
 | 
			
		||||
# MAIN-NEXT:   Link: 1
 | 
			
		||||
# MAIN-NEXT:   Symbols [
 | 
			
		||||
# MAIN-NEXT:     Symbol {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,20 +19,47 @@
 | 
			
		|||
# CHECK-NEXT:    Address: 0x2001C8
 | 
			
		||||
# CHECK-NEXT:    Offset: 0x1C8
 | 
			
		||||
# CHECK-NEXT:    Size: 96
 | 
			
		||||
# CHECK-NEXT:     Link: 2
 | 
			
		||||
# CHECK-NEXT:    Link: 5
 | 
			
		||||
# CHECK-NEXT:    Info: 1
 | 
			
		||||
# CHECK-NEXT:    AddressAlignment: 8
 | 
			
		||||
# CHECK-NEXT:    EntrySize: 24
 | 
			
		||||
 | 
			
		||||
# CHECK:       Section {
 | 
			
		||||
# CHECK-NEXT:   Index: 2
 | 
			
		||||
# CHECK-NEXT:     Name: .dynstr
 | 
			
		||||
# CHECK-NEXT:     Type: SHT_STRTAB (0x3)
 | 
			
		||||
# CHECK-NEXT:   Name: .gnu.version
 | 
			
		||||
# CHECK-NEXT:   Type: SHT_GNU_versym (0x6FFFFFFF)
 | 
			
		||||
# CHECK-NEXT:   Flags [ (0x2)
 | 
			
		||||
# CHECK-NEXT:     SHF_ALLOC (0x2)
 | 
			
		||||
# CHECK-NEXT:   ]
 | 
			
		||||
# CHECK-NEXT:   Address: 0x200228
 | 
			
		||||
# CHECK-NEXT:   Offset: 0x228
 | 
			
		||||
# CHECK-NEXT:   Size: 8
 | 
			
		||||
# CHECK-NEXT:   Link: 1
 | 
			
		||||
# CHECK-NEXT:   Info: 0
 | 
			
		||||
# CHECK-NEXT:   AddressAlignment: 2
 | 
			
		||||
# CHECK-NEXT:   EntrySize: 2
 | 
			
		||||
# CHECK:       Section {
 | 
			
		||||
# CHECK-NEXT:   Index: 3
 | 
			
		||||
# CHECK-NEXT:   Name: .gnu.version_r
 | 
			
		||||
# CHECK-NEXT:   Type: SHT_GNU_verneed (0x6FFFFFFE)
 | 
			
		||||
# CHECK-NEXT:   Flags [ (0x2)
 | 
			
		||||
# CHECK-NEXT:     SHF_ALLOC (0x2)
 | 
			
		||||
# CHECK-NEXT:   ]
 | 
			
		||||
# CHECK-NEXT:   Address: 0x200230
 | 
			
		||||
# CHECK-NEXT:   Offset: 0x230
 | 
			
		||||
# CHECK-NEXT:   Size: 80
 | 
			
		||||
# CHECK-NEXT:   Link: 5
 | 
			
		||||
# CHECK-NEXT:   Info: 2
 | 
			
		||||
# CHECK-NEXT:   AddressAlignment: 4
 | 
			
		||||
# CHECK-NEXT:   EntrySize: 0
 | 
			
		||||
# CHECK:      Section {
 | 
			
		||||
# CHECK:        Index: 5
 | 
			
		||||
# CHECK-NEXT:   Name: .dynstr
 | 
			
		||||
# CHECK-NEXT:   Type: SHT_STRTAB
 | 
			
		||||
# CHECK-NEXT:   Flags [ (0x2)
 | 
			
		||||
# CHECK-NEXT:     SHF_ALLOC (0x2)
 | 
			
		||||
# CHECK-NEXT:   ]
 | 
			
		||||
# CHECK-NEXT:   Address: 0x2002A8
 | 
			
		||||
# CHECK-NEXT:   Offset: 0x2A8
 | 
			
		||||
# CHECK-NEXT:   Size: 47
 | 
			
		||||
# CHECK-NEXT:   Link: 0
 | 
			
		||||
# CHECK-NEXT:   Info: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -45,36 +72,6 @@
 | 
			
		|||
# CHECK-NEXT:   )
 | 
			
		||||
# CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
# CHECK:       Section {
 | 
			
		||||
# CHECK-NEXT:    Index: 3
 | 
			
		||||
# CHECK-NEXT:    Name: .gnu.version
 | 
			
		||||
# CHECK-NEXT:    Type: SHT_GNU_versym (0x6FFFFFFF)
 | 
			
		||||
# CHECK-NEXT:    Flags [ (0x2)
 | 
			
		||||
# CHECK-NEXT:      SHF_ALLOC (0x2)
 | 
			
		||||
# CHECK-NEXT:    ]
 | 
			
		||||
# CHECK-NEXT:    Address: 0x200258
 | 
			
		||||
# CHECK-NEXT:    Offset: 0x258
 | 
			
		||||
# CHECK-NEXT:    Size: 8
 | 
			
		||||
# CHECK-NEXT:    Link: 1
 | 
			
		||||
# CHECK-NEXT:    Info: 0
 | 
			
		||||
# CHECK-NEXT:    AddressAlignment: 2
 | 
			
		||||
# CHECK-NEXT:    EntrySize: 2
 | 
			
		||||
 | 
			
		||||
# CHECK:       Section {
 | 
			
		||||
# CHECK-NEXT:    Index: 4
 | 
			
		||||
# CHECK-NEXT:    Name: .gnu.version_r
 | 
			
		||||
# CHECK-NEXT:    Type: SHT_GNU_verneed (0x6FFFFFFE)
 | 
			
		||||
# CHECK-NEXT:    Flags [ (0x2)
 | 
			
		||||
# CHECK-NEXT:      SHF_ALLOC (0x2)
 | 
			
		||||
# CHECK-NEXT:    ]
 | 
			
		||||
# CHECK-NEXT:    Address: 0x200260
 | 
			
		||||
# CHECK-NEXT:    Offset: 0x260
 | 
			
		||||
# CHECK-NEXT:    Size: 80
 | 
			
		||||
# CHECK-NEXT:    Link: 2
 | 
			
		||||
# CHECK-NEXT:    Info: 2
 | 
			
		||||
# CHECK-NEXT:    AddressAlignment: 4
 | 
			
		||||
# CHECK-NEXT:    EntrySize: 0
 | 
			
		||||
 | 
			
		||||
# CHECK:      DynamicSymbols [
 | 
			
		||||
# CHECK-NEXT:   Symbol {
 | 
			
		||||
# CHECK-NEXT:     Name: @
 | 
			
		||||
| 
						 | 
				
			
			@ -114,14 +111,14 @@
 | 
			
		|||
# CHECK-NEXT:   }
 | 
			
		||||
# CHECK-NEXT: ]
 | 
			
		||||
 | 
			
		||||
# CHECK:      0x000000006FFFFFF0 VERSYM               0x200258
 | 
			
		||||
# CHECK-NEXT: 0x000000006FFFFFFE VERNEED              0x200260
 | 
			
		||||
# CHECK:      0x000000006FFFFFF0 VERSYM               0x200228
 | 
			
		||||
# CHECK-NEXT: 0x000000006FFFFFFE VERNEED              0x200230
 | 
			
		||||
# CHECK-NEXT: 0x000000006FFFFFFF VERNEEDNUM           2
 | 
			
		||||
 | 
			
		||||
# CHECK:      Version symbols {
 | 
			
		||||
# CHECK-NEXT:    Section Name: .gnu.version
 | 
			
		||||
# CHECK-NEXT:    Address: 0x200258
 | 
			
		||||
# CHECK-NEXT:    Offset: 0x258
 | 
			
		||||
# CHECK-NEXT:    Address: 0x200228
 | 
			
		||||
# CHECK-NEXT:    Offset: 0x228
 | 
			
		||||
# CHECK-NEXT:    Link: 1
 | 
			
		||||
# CHECK-NEXT:    Symbols [
 | 
			
		||||
# CHECK-NEXT:      Symbol {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,8 +68,8 @@
 | 
			
		|||
# DSO-NEXT:  ]
 | 
			
		||||
# DSO-NEXT:  Version symbols {
 | 
			
		||||
# DSO-NEXT:    Section Name: .gnu.version
 | 
			
		||||
# DSO-NEXT:    Address: 0x312
 | 
			
		||||
# DSO-NEXT:    Offset: 0x312
 | 
			
		||||
# DSO-NEXT:    Address: 0x258
 | 
			
		||||
# DSO-NEXT:    Offset: 0x258
 | 
			
		||||
# DSO-NEXT:    Link: 1
 | 
			
		||||
# DSO-NEXT:    Symbols [
 | 
			
		||||
# DSO-NEXT:      Symbol {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,8 +14,8 @@
 | 
			
		|||
 | 
			
		||||
// CHECK:      Disassembly of section .plt:
 | 
			
		||||
// CHECK-NEXT: .plt:
 | 
			
		||||
// CHECK-NEXT: 10:       ff 35 ea 00 00 00       pushq   234(%rip)
 | 
			
		||||
// CHECK-NEXT: 16:       4c 8b 1d eb 00 00 00    movq    235(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 10:       ff 35 4a 01 00 00       pushq   330(%rip)
 | 
			
		||||
// CHECK-NEXT: 16:       4c 8b 1d 4b 01 00 00    movq    331(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 1d:       e8 0e 00 00 00  callq   14 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 22:       f3 90   pause
 | 
			
		||||
// CHECK-NEXT: 24:       0f ae e8        lfence
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,7 @@
 | 
			
		|||
// CHECK-NEXT: 3d:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 3e:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 3f:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 40:       4c 8b 1d c9 00 00 00    movq    201(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 40:       4c 8b 1d 29 01 00 00    movq    297(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 47:       e8 e4 ff ff ff  callq   -28 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 4c:       e9 d1 ff ff ff  jmp     -47 <.plt+0x12>
 | 
			
		||||
// CHECK-NEXT: 51:       68 00 00 00 00  pushq   $0
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +50,7 @@
 | 
			
		|||
// CHECK-NEXT: 5d:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 5e:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 5f:       cc      int3
 | 
			
		||||
// CHECK-NEXT: 60:       4c 8b 1d b1 00 00 00    movq    177(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 60:       4c 8b 1d 11 01 00 00    movq    273(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 67:       e8 c4 ff ff ff  callq   -60 <.plt+0x20>
 | 
			
		||||
// CHECK-NEXT: 6c:       e9 b1 ff ff ff  jmp     -79 <.plt+0x12>
 | 
			
		||||
// CHECK-NEXT: 71:       68 01 00 00 00  pushq   $1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,13 +35,13 @@
 | 
			
		|||
// CHECK-NEXT: 2d:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 2e:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 2f:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 30:	4c 8b 1d a9 00 00 00 	movq	169(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 30:	4c 8b 1d 09 01 00 00 	movq	265(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 37:	e9 d4 ff ff ff 	jmp	-44 <.plt>
 | 
			
		||||
// CHECK-NEXT: 3c:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 3d:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 3e:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 3f:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 40:      4c 8b 1d a1 00 00 00 	movq	161(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 40: 4c 8b 1d 01 01 00 00 	movq	257(%rip), %r11
 | 
			
		||||
// CHECK-NEXT: 47:	e9 c4 ff ff ff 	jmp	-60 <.plt>
 | 
			
		||||
// CHECK-NEXT: 4c:	cc 	int3
 | 
			
		||||
// CHECK-NEXT: 4d:	cc 	int3
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue