annotate lld/test/ELF/gnu-ifunc-plt.s @ 192:d7606dcf6fce

Added tag llvm10 for changeset 0572611fdcc8
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2020 18:01:34 +0900
parents 0572611fdcc8
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // REQUIRES: x86
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 /// For non-preemptable ifunc, place ifunc PLT entries after regular PLT entries.
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/shared2-x86-64.s -o %t1.o
anatofuz
parents:
diff changeset
6 // RUN: ld.lld %t1.o --shared -soname=so -o %t.so
anatofuz
parents:
diff changeset
7 // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
anatofuz
parents:
diff changeset
8 // RUN: ld.lld --hash-style=sysv %t.so %t.o -o %tout
anatofuz
parents:
diff changeset
9 // RUN: llvm-objdump -d --no-show-raw-insn %tout | FileCheck %s --check-prefix=DISASM
anatofuz
parents:
diff changeset
10 // RUN: llvm-objdump -s %tout | FileCheck %s --check-prefix=GOTPLT
anatofuz
parents:
diff changeset
11 // RUN: llvm-readobj -r --dynamic-table %tout | FileCheck %s
anatofuz
parents:
diff changeset
12
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
13 /// Check that the PLTRELSZ tag does not include the IRELATIVE relocations
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
14 // CHECK: DynamicSection [
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
15 // CHECK: 0x0000000000000008 RELASZ 48 (bytes)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
16 // CHECK: 0x0000000000000002 PLTRELSZ 48 (bytes)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
17
150
anatofuz
parents:
diff changeset
18 // Check that the IRELATIVE relocations are after the JUMP_SLOT in the plt
anatofuz
parents:
diff changeset
19 // CHECK: Relocations [
anatofuz
parents:
diff changeset
20 // CHECK-NEXT: Section (4) .rela.dyn {
anatofuz
parents:
diff changeset
21 // CHECK-NEXT: 0x203458 R_X86_64_IRELATIVE - 0x2012D8
anatofuz
parents:
diff changeset
22 // CHECK-NEXT: 0x203460 R_X86_64_IRELATIVE - 0x2012D9
anatofuz
parents:
diff changeset
23 // CHECK-NEXT: }
anatofuz
parents:
diff changeset
24 // CHECK-NEXT: Section (5) .rela.plt {
anatofuz
parents:
diff changeset
25 // CHECK-NEXT: 0x203448 R_X86_64_JUMP_SLOT bar2 0x0
anatofuz
parents:
diff changeset
26 // CHECK-NEXT: 0x203450 R_X86_64_JUMP_SLOT zed2 0x0
anatofuz
parents:
diff changeset
27 // CHECK-NEXT: }
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 // Check that .got.plt entries point back to PLT header
anatofuz
parents:
diff changeset
30 // GOTPLT: Contents of section .got.plt:
anatofuz
parents:
diff changeset
31 // GOTPLT-NEXT: 203430 40232000 00000000 00000000 00000000
anatofuz
parents:
diff changeset
32 // GOTPLT-NEXT: 203440 00000000 00000000 06132000 00000000
anatofuz
parents:
diff changeset
33 // GOTPLT-NEXT: 203450 16132000 00000000 00000000 00000000
anatofuz
parents:
diff changeset
34 // GOTPLT-NEXT: 203460 00000000 00000000
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 // Check that a PLT header is written and the ifunc entries appear last
anatofuz
parents:
diff changeset
37 // DISASM: Disassembly of section .text:
anatofuz
parents:
diff changeset
38 // DISASM-EMPTY:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
39 // DISASM-NEXT: <foo>:
150
anatofuz
parents:
diff changeset
40 // DISASM-NEXT: 2012d8: retq
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
41 // DISASM: <bar>:
150
anatofuz
parents:
diff changeset
42 // DISASM-NEXT: 2012d9: retq
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
43 // DISASM: <_start>:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
44 // DISASM-NEXT: 2012da: callq 0x201320
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
45 // DISASM-NEXT: 2012df: callq 0x201330
150
anatofuz
parents:
diff changeset
46 // DISASM-NEXT: callq {{.*}} <bar2@plt>
anatofuz
parents:
diff changeset
47 // DISASM-NEXT: callq {{.*}} <zed2@plt>
anatofuz
parents:
diff changeset
48 // DISASM-EMPTY:
anatofuz
parents:
diff changeset
49 // DISASM-NEXT: Disassembly of section .plt:
anatofuz
parents:
diff changeset
50 // DISASM-EMPTY:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
51 // DISASM-NEXT: <.plt>:
150
anatofuz
parents:
diff changeset
52 // DISASM-NEXT: 2012f0: pushq 8514(%rip)
anatofuz
parents:
diff changeset
53 // DISASM-NEXT: 2012f6: jmpq *8516(%rip)
anatofuz
parents:
diff changeset
54 // DISASM-NEXT: 2012fc: nopl (%rax)
anatofuz
parents:
diff changeset
55 // DISASM-EMPTY:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
56 // DISASM-NEXT: <bar2@plt>:
150
anatofuz
parents:
diff changeset
57 // DISASM-NEXT: 201300: jmpq *8514(%rip)
anatofuz
parents:
diff changeset
58 // DISASM-NEXT: 201306: pushq $0
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
59 // DISASM-NEXT: 20130b: jmp 0x2012f0 <.plt>
150
anatofuz
parents:
diff changeset
60 // DISASM-EMPTY:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
61 // DISASM-NEXT: <zed2@plt>:
150
anatofuz
parents:
diff changeset
62 // DISASM-NEXT: 201310: jmpq *8506(%rip)
anatofuz
parents:
diff changeset
63 // DISASM-NEXT: 201316: pushq $1
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
64 // DISASM-NEXT: 20131b: jmp 0x2012f0 <.plt>
150
anatofuz
parents:
diff changeset
65 // DISASM-EMPTY:
anatofuz
parents:
diff changeset
66 // DISASM-NEXT: Disassembly of section .iplt:
anatofuz
parents:
diff changeset
67 // DISASM-EMPTY:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
68 // DISASM-NEXT: <.iplt>:
150
anatofuz
parents:
diff changeset
69 // DISASM-NEXT: 201320: jmpq *8498(%rip)
anatofuz
parents:
diff changeset
70 // DISASM-NEXT: 201326: pushq $0
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
71 // DISASM-NEXT: 20132b: jmp 0x2012f0 <.plt>
150
anatofuz
parents:
diff changeset
72 // DISASM-NEXT: 201330: jmpq *8490(%rip)
anatofuz
parents:
diff changeset
73 // DISASM-NEXT: 201336: pushq $1
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
74 // DISASM-NEXT: 20133b: jmp 0x2012f0 <.plt>
150
anatofuz
parents:
diff changeset
75
anatofuz
parents:
diff changeset
76 .text
anatofuz
parents:
diff changeset
77 .type foo STT_GNU_IFUNC
anatofuz
parents:
diff changeset
78 .globl foo
anatofuz
parents:
diff changeset
79 foo:
anatofuz
parents:
diff changeset
80 ret
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 .type bar STT_GNU_IFUNC
anatofuz
parents:
diff changeset
83 .globl bar
anatofuz
parents:
diff changeset
84 bar:
anatofuz
parents:
diff changeset
85 ret
anatofuz
parents:
diff changeset
86
anatofuz
parents:
diff changeset
87 .globl _start
anatofuz
parents:
diff changeset
88 _start:
anatofuz
parents:
diff changeset
89 call foo
anatofuz
parents:
diff changeset
90 call bar
anatofuz
parents:
diff changeset
91 call bar2
anatofuz
parents:
diff changeset
92 call zed2