[JITLink][arm64] Support arm64e JIT'd code (initially enabled for MachO only).
[llvm-project.git] / lld / test / ELF / gnu-ifunc-i386.s
blob43b19b27ea4ec77f7b4f2c242322cac421c31092
1 // REQUIRES: x86
2 // RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
3 // RUN: ld.lld -static %t.o -o %tout
4 // RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %tout | FileCheck %s --check-prefix=DISASM
5 // RUN: llvm-readobj -r --symbols --sections %tout | FileCheck %s
7 // CHECK: Sections [
8 // CHECK: Section {
9 // CHECK: Index: 1
10 // CHECK-NEXT: Name: .rel.dyn
11 // CHECK-NEXT: Type: SHT_REL
12 // CHECK-NEXT: Flags [
13 // CHECK-NEXT: SHF_ALLOC
14 // CHECK-NEXT: ]
15 // CHECK-NEXT: Address: [[RELA:.*]]
16 // CHECK-NEXT: Offset: 0xD4
17 // CHECK-NEXT: Size: 16
18 // CHECK-NEXT: Link: 0
19 // CHECK-NEXT: Info: 0
20 // CHECK-NEXT: AddressAlignment: 4
21 // CHECK-NEXT: EntrySize: 8
22 // CHECK-NEXT: }
23 // CHECK: Relocations [
24 // CHECK-NEXT: Section ({{.*}}) .rel.dyn {
25 // CHECK-NEXT: 0x402120 R_386_IRELATIVE
26 // CHECK-NEXT: 0x402124 R_386_IRELATIVE
27 // CHECK-NEXT: }
28 // CHECK-NEXT: ]
30 // CHECK: Symbols [
31 // CHECK-NEXT: Symbol {
32 // CHECK-NEXT: Name:
33 // CHECK-NEXT: Value: 0x0
34 // CHECK-NEXT: Size: 0
35 // CHECK-NEXT: Binding: Local
36 // CHECK-NEXT: Type: None
37 // CHECK-NEXT: Other: 0
38 // CHECK-NEXT: Section: Undefined
39 // CHECK-NEXT: }
40 // CHECK-NEXT: Symbol {
41 // CHECK-NEXT: Name: __rel_iplt_start
42 // CHECK-NEXT: Value: [[RELA]]
43 // CHECK-NEXT: Size: 0
44 // CHECK-NEXT: Binding: Local
45 // CHECK-NEXT: Type: None
46 // CHECK-NEXT: Other [
47 // CHECK-NEXT: STV_HIDDEN
48 // CHECK-NEXT: ]
49 // CHECK-NEXT: Section: .rel.dyn
50 // CHECK-NEXT: }
51 // CHECK-NEXT: Symbol {
52 // CHECK-NEXT: Name: __rel_iplt_end
53 // CHECK-NEXT: Value: 0x4000E4
54 // CHECK-NEXT: Size: 0
55 // CHECK-NEXT: Binding: Local
56 // CHECK-NEXT: Type: None
57 // CHECK-NEXT: Other [
58 // CHECK-NEXT: STV_HIDDEN
59 // CHECK-NEXT: ]
60 // CHECK-NEXT: Section: .rel.dyn
61 // CHECK-NEXT: }
62 // CHECK-NEXT: Symbol {
63 // CHECK-NEXT: Name: bar
64 // CHECK-NEXT: Value: 0x401100
65 // CHECK-NEXT: Size: 0
66 // CHECK-NEXT: Binding: Global
67 // CHECK-NEXT: Type: Function
68 // CHECK-NEXT: Other: 0
69 // CHECK-NEXT: Section: .iplt
70 // CHECK-NEXT: }
71 // CHECK-NEXT: Symbol {
72 // CHECK-NEXT: Name: bar_resolver
73 // CHECK-NEXT: Value: 0x4010E4
74 // CHECK-NEXT: Size: 0
75 // CHECK-NEXT: Binding: Global
76 // CHECK-NEXT: Type: Function
77 // CHECK-NEXT: Other: 0
78 // CHECK-NEXT: Section: .text
79 // CHECK-NEXT: }
80 // CHECK-NEXT: Symbol {
81 // CHECK-NEXT: Name: foo
82 // CHECK-NEXT: Value: 0x401110
83 // CHECK-NEXT: Size: 0
84 // CHECK-NEXT: Binding: Global
85 // CHECK-NEXT: Type: Function
86 // CHECK-NEXT: Other: 0
87 // CHECK-NEXT: Section: .iplt
88 // CHECK-NEXT: }
89 // CHECK-NEXT: Symbol {
90 // CHECK-NEXT: Name: foo_resolver
91 // CHECK-NEXT: Value: 0x4010E5
92 // CHECK-NEXT: Size: 0
93 // CHECK-NEXT: Binding: Global
94 // CHECK-NEXT: Type: Function
95 // CHECK-NEXT: Other: 0
96 // CHECK-NEXT: Section: .text
97 // CHECK-NEXT: }
98 // CHECK-NEXT: Symbol {
99 // CHECK-NEXT: Name: _start
100 // CHECK-NEXT: Value: 0x4010E6
101 // CHECK-NEXT: Size: 0
102 // CHECK-NEXT: Binding: Global
103 // CHECK-NEXT: Type: None
104 // CHECK-NEXT: Other: 0
105 // CHECK-NEXT: Section: .text
106 // CHECK-NEXT: }
107 // CHECK-NEXT:]
109 // DISASM: Disassembly of section .text:
110 // DISASM-EMPTY:
111 // DISASM-NEXT: <bar_resolver>:
112 // DISASM-NEXT: 4010e4: retl
113 // DISASM: <foo_resolver>:
114 // DISASM-NEXT: 4010e5: retl
115 // DISASM: <_start>:
116 // DISASM-NEXT: 4010e6: calll 0x401110 <foo>
117 // DISASM-NEXT: calll 0x401100 <bar>
118 // DISASM-NEXT: movl $4194516, %edx
119 // DISASM-NEXT: movl $4194532, %edx
120 // DISASM-EMPTY:
121 // DISASM-NEXT: Disassembly of section .iplt:
122 // DISASM-EMPTY:
123 // DISASM-NEXT: <bar>:
124 // DISASM-NEXT: 401100: jmpl *4202784
125 // DISASM-NEXT: pushl $0
126 // DISASM-NEXT: jmp 0x0
127 // DISASM: <foo>:
128 // DISASM-NEXT: 401110: jmpl *4202788
129 // DISASM-NEXT: pushl $8
130 // DISASM-NEXT: jmp 0x0
132 .type bar STT_GNU_IFUNC
133 .globl bar
134 bar:
135 .type bar_resolver STT_FUNC
136 .globl bar_resolver
137 bar_resolver:
140 .text
141 .type foo STT_GNU_IFUNC
142 .globl foo
143 foo:
144 .type foo_resolver STT_FUNC
145 .globl foo_resolver
146 foo_resolver:
149 .globl _start
150 _start:
151 call foo
152 call bar
153 movl $__rel_iplt_start,%edx
154 movl $__rel_iplt_end,%edx