]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ELF/aarch64-gnu-ifunc.s
Vendor import of lld trunk r290819:
[FreeBSD/FreeBSD.git] / test / ELF / aarch64-gnu-ifunc.s
1 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux-gnu %s -o %t.o
2 // RUN: ld.lld -static %t.o -o %tout
3 // RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DISASM
4 // RUN: llvm-readobj -r -symbols -sections %tout | FileCheck %s
5 // REQUIRES: aarch64
6
7 // CHECK:      Sections [
8 // CHECK:       Section {
9 // CHECK:       Index: 1
10 // CHECK-NEXT:  Name: .rela.plt
11 // CHECK-NEXT:  Type: SHT_RELA
12 // CHECK-NEXT:  Flags [
13 // CHECK-NEXT:    SHF_ALLOC
14 // CHECK-NEXT:  ]
15 // CHECK-NEXT:  Address: [[RELA:.*]]
16 // CHECK-NEXT:  Offset: 0x158
17 // CHECK-NEXT:  Size: 48
18 // CHECK-NEXT:  Link: 6
19 // CHECK-NEXT:  Info: 0
20 // CHECK-NEXT:  AddressAlignment: 8
21 // CHECK-NEXT:  EntrySize: 24
22 // CHECK-NEXT: }
23 // CHECK:      Relocations [
24 // CHECK-NEXT:   Section ({{.*}}) .rela.plt {
25 // CHECK-NEXT:     0x30000 R_AARCH64_IRELATIVE
26 // CHECK-NEXT:     0x30008 R_AARCH64_IRELATIVE
27 // CHECK-NEXT:   }
28 // CHECK-NEXT: ]
29 // CHECK:      Symbols [
30 // CHECK-NEXT:  Symbol {
31 // CHECK-NEXT:    Name:
32 // CHECK-NEXT:    Value: 0x0
33 // CHECK-NEXT:    Size: 0
34 // CHECK-NEXT:    Binding: Local
35 // CHECK-NEXT:    Type: None
36 // CHECK-NEXT:    Other: 0
37 // CHECK-NEXT:    Section: Undefined
38 // CHECK-NEXT:  }
39 // CHECK-NEXT:  Symbol {
40 // CHECK-NEXT:    Name: $x.0
41 // CHECK-NEXT:    Value: 0x20000
42 // CHECK-NEXT:    Size: 0
43 // CHECK-NEXT:    Binding: Local
44 // CHECK-NEXT:    Type: None
45 // CHECK-NEXT:    Other: 0
46 // CHECK-NEXT:    Section: .text
47 // CHECK-NEXT:  }
48 // CHECK-NEXT:  Symbol {
49 // CHECK-NEXT:    Name: __rela_iplt_end
50 // CHECK-NEXT:    Value: 0x10188
51 // CHECK-NEXT:    Size: 0
52 // CHECK-NEXT:    Binding: Local
53 // CHECK-NEXT:    Type: None
54 // CHECK-NEXT:    Other [
55 // CHECK-NEXT:      STV_HIDDEN
56 // CHECK-NEXT:    ]
57 // CHECK-NEXT:    Section: .rela.plt
58 // CHECK-NEXT:  }
59 // CHECK-NEXT:  Symbol {
60 // CHECK-NEXT:    Name: __rela_iplt_start
61 // CHECK-NEXT:    Value: 0x10158
62 // CHECK-NEXT:    Size: 0
63 // CHECK-NEXT:    Binding: Local
64 // CHECK-NEXT:    Type: None
65 // CHECK-NEXT:    Other [
66 // CHECK-NEXT:      STV_HIDDEN
67 // CHECK-NEXT:    ]
68 // CHECK-NEXT:    Section: .rela.plt
69 // CHECK-NEXT:  }
70 // CHECK-NEXT:  Symbol {
71 // CHECK-NEXT:    Name: _start
72 // CHECK-NEXT:    Value: 0x20008
73 // CHECK-NEXT:    Size: 0
74 // CHECK-NEXT:    Binding: Global
75 // CHECK-NEXT:    Type: None
76 // CHECK-NEXT:    Other: 0
77 // CHECK-NEXT:    Section: .text
78 // CHECK-NEXT:  }
79 // CHECK-NEXT:  Symbol {
80 // CHECK-NEXT:    Name: bar
81 // CHECK-NEXT:    Value: 0x20004
82 // CHECK-NEXT:    Size: 0
83 // CHECK-NEXT:    Binding: Global
84 // CHECK-NEXT:    Type: GNU_IFunc
85 // CHECK-NEXT:    Other: 0
86 // CHECK-NEXT:    Section: .text
87 // CHECK-NEXT:  }
88 // CHECK-NEXT:  Symbol {
89 // CHECK-NEXT:    Name: foo
90 // CHECK-NEXT:    Value: 0x20000
91 // CHECK-NEXT:    Size: 0
92 // CHECK-NEXT:    Binding: Global
93 // CHECK-NEXT:    Type: GNU_IFunc
94 // CHECK-NEXT:    Other: 0
95 // CHECK-NEXT:    Section: .text
96 // CHECK-NEXT:  }
97 // CHECK-NEXT: ]
98
99 // 344 = 0x158
100 // 392 = 0x188
101
102 // DISASM: Disassembly of section .text:
103 // DISASM-NEXT: foo:
104 // DISASM-NEXT:  20000: c0 03 5f d6 ret
105 // DISASM: bar:
106 // DISASM-NEXT:  20004: c0 03 5f d6 ret
107 // DISASM:      _start:
108 // DISASM-NEXT:  20008: 06 00 00 94 bl #24
109 // DISASM-NEXT:  2000c: 09 00 00 94     bl      #36
110 // DISASM-NEXT:  20010: 42 60 05 91     add     x2, x2, #344
111 // DISASM-NEXT:  20014: 42 20 06 91     add     x2, x2, #392
112 // DISASM-NEXT: Disassembly of section .plt:
113 // DISASM-NEXT: .plt:
114 // DISASM-NEXT:  20020: 90 00 00 90 adrp x16, #65536
115 // DISASM-NEXT:  20024: 11 02 40 f9 ldr x17, [x16]
116 // DISASM-NEXT:  20028: 10 02 00 91 add x16, x16, #0
117 // DISASM-NEXT:  2002c: 20 02 1f d6 br x17
118 // DISASM-NEXT:  20030: 90 00 00 90 adrp x16, #65536
119 // DISASM-NEXT:  20034: 11 06 40 f9 ldr x17, [x16, #8]
120 // DISASM-NEXT:  20038: 10 22 00 91 add x16, x16, #8
121 // DISASM-NEXT:  2003c: 20 02 1f d6 br x17
122
123 .text
124 .type foo STT_GNU_IFUNC
125 .globl foo
126 foo:
127  ret
128
129 .type bar STT_GNU_IFUNC
130 .globl bar
131 bar:
132  ret
133
134 .globl _start
135 _start:
136  bl foo
137  bl bar
138  add x2, x2, :lo12:__rela_iplt_start
139  add x2, x2, :lo12:__rela_iplt_end