1 // RUN: llvm-mc -filetype=obj -triple i386-pc-linux-gnu %s -o - | elf-dump | FileCheck %s
3 // Test that we produce the correct relocation types and that the relocations
4 // correctly point to the section or the symbol.
7 // CHECK: # Section 0x00000003
8 // CHECK-NEXT: (('sh_name', 0x0000000d) # '.bss'
10 // CHECK: # Symbol 0x00000001
11 // CHECK-NEXT: (('st_name', 0x00000005) # '.Lfoo'
14 // CHECK: # Symbol 0x00000004
15 // CHECK-NEXT: (('st_name', 0x00000035) # 'zed'
16 // CHECK-NEXT: ('st_value', 0x00000000)
17 // CHECK-NEXT: ('st_size', 0x00000000)
18 // CHECK-NEXT: ('st_bind', 0x00000000)
19 // CHECK-NEXT: ('st_type', 0x00000006)
20 // CHECK-NEXT: ('st_other', 0x00000000)
21 // CHECK-NEXT: ('st_shndx', 0x00000004)
23 // Symbol 7 is section 3
24 // CHECK: # Symbol 0x00000007
25 // CHECK-NEXT: (('st_name', 0x00000000) # ''
26 // CHECK-NEXT: ('st_value', 0x00000000)
27 // CHECK-NEXT: ('st_size', 0x00000000)
28 // CHECK-NEXT: ('st_bind', 0x00000000)
29 // CHECK-NEXT: ('st_type', 0x00000003)
30 // CHECK-NEXT: ('st_other', 0x00000000)
31 // CHECK-NEXT: ('st_shndx', 0x00000003)
33 // CHECK: # Relocation 0x00000000
34 // CHECK-NEXT: (('r_offset', 0x00000002)
35 // CHECK-NEXT: ('r_sym', 0x00000001)
36 // CHECK-NEXT: ('r_type', 0x00000009)
38 // CHECK-NEXT: # Relocation 0x00000001
39 // CHECK-NEXT: (('r_offset',
40 // CHECK-NEXT: ('r_sym',
41 // CHECK-NEXT: ('r_type', 0x00000004)
43 // CHECK-NEXT: # Relocation 0x00000002
44 // CHECK-NEXT: (('r_offset',
45 // CHECK-NEXT: ('r_sym',
46 // CHECK-NEXT: ('r_type', 0x0000000a)
49 // Relocation 3 (bar3@GOTOFF) is done with symbol 7 (bss)
50 // CHECK-NEXT: # Relocation 0x00000003
51 // CHECK-NEXT: (('r_offset',
52 // CHECK-NEXT: ('r_sym', 0x00000007
53 // CHECK-NEXT: ('r_type',
56 // Relocation 4 (bar2@GOT) is of type R_386_GOT32
57 // CHECK-NEXT: # Relocation 0x00000004
58 // CHECK-NEXT: (('r_offset',
59 // CHECK-NEXT: ('r_sym',
60 // CHECK-NEXT: ('r_type', 0x00000003
63 // Relocation 5 (foo@TLSGD) is of type R_386_TLS_GD
64 // CHECK-NEXT: # Relocation 0x00000005
65 // CHECK-NEXT: (('r_offset', 0x00000020)
66 // CHECK-NEXT: ('r_sym', 0x0000000d)
67 // CHECK-NEXT: ('r_type', 0x00000012)
70 // Relocation 6 ($foo@TPOFF) is of type R_386_TLS_LE_32
71 // CHECK-NEXT: # Relocation 0x00000006
72 // CHECK-NEXT: (('r_offset', 0x00000025)
73 // CHECK-NEXT: ('r_sym', 0x0000000d)
74 // CHECK-NEXT: ('r_type', 0x00000022)
77 // Relocation 7 (foo@INDNTPOFF) is of type R_386_TLS_IE
78 // CHECK-NEXT: # Relocation 0x00000007
79 // CHECK-NEXT: (('r_offset', 0x0000002b)
80 // CHECK-NEXT: ('r_sym', 0x0000000d)
81 // CHECK-NEXT: ('r_type', 0x0000000f)
84 // Relocation 8 (foo@NTPOFF) is of type R_386_TLS_LE
85 // CHECK-NEXT: # Relocation 0x00000008
86 // CHECK-NEXT: (('r_offset', 0x00000031)
87 // CHECK-NEXT: ('r_sym', 0x0000000d)
88 // CHECK-NEXT: ('r_type', 0x00000011)
91 // Relocation 9 (foo@GOTNTPOFF) is of type R_386_TLS_GOTIE
92 // CHECK-NEXT: # Relocation 0x00000009
93 // CHECK-NEXT: (('r_offset', 0x00000037)
94 // CHECK-NEXT: ('r_sym', 0x0000000d)
95 // CHECK-NEXT: ('r_type', 0x00000010)
98 // Relocation 10 (foo@TLSLDM) is of type R_386_TLS_LDM
99 // CHECK-NEXT: # Relocation 0x0000000a
100 // CHECK-NEXT: (('r_offset', 0x0000003d)
101 // CHECK-NEXT: ('r_sym', 0x0000000d)
102 // CHECK-NEXT: ('r_type', 0x00000013)
105 // Relocation 11 (foo@DTPOFF) is of type R_386_TLS_LDO_32
106 // CHECK-NEXT: # Relocation 0x0000000b
107 // CHECK-NEXT: (('r_offset', 0x00000043)
108 // CHECK-NEXT: ('r_sym', 0x0000000d)
109 // CHECK-NEXT: ('r_type', 0x00000020)
111 // Relocation 12 (calll 4096) is of type R_386_PC32
112 // CHECK-NEXT: # Relocation 0x0000000c
113 // CHECK-NEXT: (('r_offset', 0x00000048)
114 // CHECK-NEXT: ('r_sym', 0x00000000)
115 // CHECK-NEXT: ('r_type', 0x00000002)
117 // Relocation 13 (zed@NTPOFF) is of type R_386_TLS_LE and uses the symbol
118 // CHECK-NEXT: # Relocation 0x0000000d
119 // CHECK-NEXT: (('r_offset', 0x0000004e)
120 // CHECK-NEXT: ('r_sym', 0x00000004)
121 // CHECK-NEXT: ('r_type', 0x00000011)
126 leal .Lfoo@GOTOFF(%ebx), %eax
131 addl $_GLOBAL_OFFSET_TABLE_, %ebx
132 movb bar3@GOTOFF(%ebx), %al
138 movl bar2j@GOT(%eax), %eax
140 leal foo@TLSGD(, %ebx,1), %eax
141 movl $foo@TPOFF, %edx
142 movl foo@INDNTPOFF, %ecx
143 addl foo@NTPOFF(%eax), %eax
144 addl foo@GOTNTPOFF(%ebx), %ecx
145 leal foo@TLSLDM(%ebx), %eax
146 leal foo@DTPOFF(%eax), %edx
148 movl zed@NTPOFF(%eax), %eax
150 .section zedsec,"awT",@progbits
154 .section .rodata.str1.16,"aMS",@progbits,1
156 .asciz "bool llvm::llvm_start_multithreaded()"