2 // RUN
: llvm-mc
-filetype
=obj
-triple
=i686-pc-freebsd
%S
/Inputs
/shared2-x86-
64.s -o %t1.o
3 // RUN
: ld.lld
%t1.o
--shared
--soname
=t.so
-o
%t.so
4 // RUN
: llvm-mc
-filetype
=obj
-triple
=i686-pc-freebsd
%s
-o
%t.o
5 // RUN
: ld.lld
-z ifunc-noplt
-z notext
--hash-style
=sysv
%t.so
%t.o
-o
%tout
6 // RUN
: llvm-objdump
-d
--no-show-raw-insn
--print-imm-hex
%tout | FileCheck
%s
--check-prefix
=DISASM
7 // RUN
: llvm-readobj
-r
--dynamic-table
%tout | FileCheck
%s
9 // Check that we emitted relocations for the ifunc calls
10 // CHECK
: Relocations
[
11 // CHECK-NEXT
: Section
(4) .rel.dyn {
12 // CHECK-NEXT
: 0x4011EF R_386_PLT32 foo
13 // CHECK-NEXT
: 0x4011F4 R_386_PLT32 bar
15 // CHECK-NEXT
: Section
(5) .rel.plt {
16 // CHECK-NEXT
: 0x4032D4 R_386_JUMP_SLOT bar2
17 // CHECK-NEXT
: 0x4032D8 R_386_JUMP_SLOT zed2
20 // Check that ifunc call sites still require relocation
21 // DISASM
: Disassembly of section
.text:
23 // DISASM-NEXT
: 004011ec
<foo
>:
26 // DISASM-NEXT
: 004011ed
<bar
>:
29 // DISASM-NEXT
: 004011ee
<_start
>:
30 // DISASM-NEXT
: calll
0x4011ef <_start+
0x1>
31 // DISASM-NEXT
: calll
0x4011f4 <_start+
0x6>
32 // DISASM-NEXT
: calll
0x401220 <bar2@plt
>
33 // DISASM-NEXT
: calll
0x401230 <zed2@plt
>
35 // DISASM-NEXT
: Disassembly of section
.plt:
37 // DISASM-NEXT
: 00401210 <.plt>:
38 // DISASM-NEXT
: pushl
0x4032cc
39 // DISASM-NEXT
: jmpl
*0x4032d0
45 // DISASM-NEXT
: 00401220 <bar2@plt
>:
46 // DISASM-NEXT
: jmpl
*0x4032d4
47 // DISASM-NEXT
: pushl $
0x0
48 // DISASM-NEXT
: jmp
0x401210 <.plt>
50 // DISASM-NEXT
: 00401230 <zed2@plt
>:
51 // DISASM-NEXT
: jmpl
*0x4032d8
52 // DISASM-NEXT
: pushl $
0x8
53 // DISASM-NEXT
: jmp
0x401210 <.plt>
56 .type foo STT_GNU_IFUNC
61 .type bar STT_GNU_IFUNC