2 // RUN
: llvm-mc
-filetype
=obj
-triple
=armv7a-none-linux-gnueabi
%s
-o
%t.o
3 // RUN
: ld.lld
%t.o
-o
%t
4 // RUN
: llvm-objdump
--no-print-imm-hex
--triple
=armv7a-none-linux-gnueabi
-d
--no-show-raw-insn
%t | FileCheck
%s
--check-prefix
=DISASM
5 // RUN
: llvm-readobj
-r
--symbols
--sections
%t | FileCheck
%s
9 .type foo STT_GNU_IFUNC
13 .type bar STT_GNU_IFUNC
21 movw
r0,:lower16
:__rel_iplt_start
22 movt
r0,:upper16
:__rel_iplt_start
23 movw
r0,:lower16
:__rel_iplt_end
24 movt
r0,:upper16
:__rel_iplt_end
29 // CHECK
: Name
: .rel.dyn
30 // CHECK-NEXT
: Type
: SHT_REL
31 // CHECK-NEXT
: Flags
[
32 // CHECK-NEXT
: SHF_ALLOC
34 // CHECK-NEXT
: Address
: 0x100F4
35 // CHECK-NEXT
: Offset
: 0xF4
36 // CHECK-NEXT
: Size
: 16
38 // CHECK-NEXT
: Info
: 0
40 // CHECK-NEXT
: Type
: SHT_PROGBITS
41 // CHECK-NEXT
: Flags
[
42 // CHECK-NEXT
: SHF_ALLOC
43 // CHECK-NEXT
: SHF_EXECINSTR
45 // CHECK-NEXT
: Address
: 0x20130
46 // CHECK-NEXT
: Offset
: 0x130
47 // CHECK-NEXT
: Size
: 32
49 // CHECK-NEXT
: Name
: .got
50 // CHECK-NEXT
: Type
: SHT_PROGBITS
51 // CHECK-NEXT
: Flags
[
52 // CHECK-NEXT
: SHF_ALLOC
53 // CHECK-NEXT
: SHF_WRITE
55 // CHECK-NEXT
: Address
: 0x30150
56 // CHECK-NEXT
: Offset
: 0x150
57 // CHECK-NEXT
: Size
: 8
58 // CHECK
: Relocations
[
59 // CHECK-NEXT
: Section
(1) .rel.dyn {
60 // CHECK-NEXT
: 0x30150 R_ARM_IRELATIVE
61 // CHECK-NEXT
: 0x30154 R_ARM_IRELATIVE
64 // CHECK
: Name
: __rel_iplt_start
65 // CHECK-NEXT
: Value
: 0x100F4
66 // CHECK-NEXT
: Size
: 0
67 // CHECK-NEXT
: Binding
: Local
68 // CHECK-NEXT
: Type
: None
69 // CHECK-NEXT
: Other
[
70 // CHECK-NEXT
: STV_HIDDEN
72 // CHECK-NEXT
: Section
: .rel.dyn
74 // CHECK-NEXT
: Symbol
{
75 // CHECK-NEXT
: Name
: __rel_iplt_end
76 // CHECK-NEXT
: Value
: 0x10104
77 // CHECK-NEXT
: Size
: 0
78 // CHECK-NEXT
: Binding
: Local
79 // CHECK-NEXT
: Type
: None
80 // CHECK-NEXT
: Other
[
81 // CHECK-NEXT
: STV_HIDDEN
83 // CHECK-NEXT
: Section
: .rel.dyn
85 // CHECK-NEXT
: Symbol
{
86 // CHECK-NEXT
: Name
: bar
87 // CHECK-NEXT
: Value
: 0x20108
88 // CHECK-NEXT
: Size
: 0
89 // CHECK-NEXT
: Binding
: Global
90 // CHECK-NEXT
: Type
: GNU_IFunc
91 // CHECK-NEXT
: Other
: 0
92 // CHECK-NEXT
: Section
: .text
94 // CHECK-NEXT
: Symbol
{
95 // CHECK-NEXT
: Name
: foo
96 // CHECK-NEXT
: Value
: 0x20104
97 // CHECK-NEXT
: Size
: 0
98 // CHECK-NEXT
: Binding
: Global
99 // CHECK-NEXT
: Type
: GNU_IFunc
100 // CHECK-NEXT
: Other
: 0
101 // CHECK-NEXT
: Section
: .text
103 // CHECK-NEXT
: Symbol
{
104 // CHECK-NEXT
: Name
: _start
105 // CHECK-NEXT
: Value
: 0x2010C
106 // CHECK-NEXT
: Size
: 0
107 // CHECK-NEXT
: Binding
: Global
108 // CHECK-NEXT
: Type
: None
109 // CHECK-NEXT
: Other
:
110 // CHECK-NEXT
: Section
: .text
113 // DISASM
: Disassembly of section
.text:
115 // DISASM-NEXT
: <foo
>:
116 // DISASM-NEXT
: 20104: bx
lr
118 // DISASM-NEXT
: 20108: bx
lr
120 // DISASM-NEXT
: 2010c
: bl 0x20140
121 // DISASM-NEXT
: 20110: bl 0x20130
122 // 1 * 65536 + 244 = 0x100f4 __rel_iplt_start
123 // DISASM-NEXT
: 20114: movw
r0, #244
124 // DISASM-NEXT
: 20118: movt
r0, #1
125 // 1 * 65536 + 260 = 0x10104 __rel_iplt_end
126 // DISASM-NEXT
: 2011c
: movw
r0, #260
127 // DISASM-NEXT
: 20120: movt
r0, #1
129 // DISASM-NEXT
: Disassembly of section
.iplt:
131 // DISASM-NEXT
: <.iplt>:
132 // DISASM-NEXT
: 20130: add r12, pc
, #0, #12
133 // DISASM-NEXT
: 20134: add r12, r12, #16
134 // DISASM-NEXT
: 20138: ldr pc
, [r12, #24]!
135 // DISASM-NEXT
: 2013c
: d4 d4 d4 d4
.word 0xd4d4d4d4
136 // DISASM-NEXT
: 20140: add r12, pc
, #0, #12
137 // DISASM-NEXT
: 20144: add r12, r12, #16
138 // DISASM-NEXT
: 20148: ldr pc
, [r12, #12]!
139 // DISASM-NEXT
: 2014c
: d4 d4 d4 d4
.word 0xd4d4d4d4