annotate lld/test/ELF/riscv-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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 # REQUIRES: riscv
anatofuz
parents:
diff changeset
2 # RUN: echo '.globl bar, weak; .type bar,@function; .type weak,@function; bar: weak:' > %t1.s
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 # RUN: llvm-mc -filetype=obj -triple=riscv32 %t1.s -o %t1.32.o
anatofuz
parents:
diff changeset
5 # RUN: ld.lld -shared %t1.32.o -soname=t1.32.so -o %t1.32.so
anatofuz
parents:
diff changeset
6 # RUN: llvm-mc -filetype=obj -triple=riscv32 %s -o %t.32.o
anatofuz
parents:
diff changeset
7 # RUN: ld.lld %t.32.o %t1.32.so -z separate-code -o %t.32
anatofuz
parents:
diff changeset
8 # RUN: llvm-readelf -S -s %t.32 | FileCheck --check-prefixes=SEC,NM %s
anatofuz
parents:
diff changeset
9 # RUN: llvm-readobj -r %t.32 | FileCheck --check-prefix=RELOC32 %s
anatofuz
parents:
diff changeset
10 # RUN: llvm-readelf -x .got.plt %t.32 | FileCheck --check-prefix=GOTPLT32 %s
anatofuz
parents:
diff changeset
11 # RUN: llvm-objdump -d --no-show-raw-insn %t.32 | FileCheck --check-prefixes=DIS,DIS32 %s
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 # RUN: llvm-mc -filetype=obj -triple=riscv64 %t1.s -o %t1.64.o
anatofuz
parents:
diff changeset
14 # RUN: ld.lld -shared %t1.64.o -soname=t1.64.so -o %t1.64.so
anatofuz
parents:
diff changeset
15 # RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.64.o
anatofuz
parents:
diff changeset
16 # RUN: ld.lld %t.64.o %t1.64.so -z separate-code -o %t.64
anatofuz
parents:
diff changeset
17 # RUN: llvm-readelf -S -s %t.64 | FileCheck --check-prefixes=SEC,NM %s
anatofuz
parents:
diff changeset
18 # RUN: llvm-readobj -r %t.64 | FileCheck --check-prefix=RELOC64 %s
anatofuz
parents:
diff changeset
19 # RUN: llvm-readelf -x .got.plt %t.64 | FileCheck --check-prefix=GOTPLT64 %s
anatofuz
parents:
diff changeset
20 # RUN: llvm-objdump -d --no-show-raw-insn %t.64 | FileCheck --check-prefixes=DIS,DIS64 %s
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 # SEC: .plt PROGBITS {{0*}}00011030
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 ## A canonical PLT has a non-zero st_value. bar and weak are called but their
anatofuz
parents:
diff changeset
25 ## addresses are not taken, so a canonical PLT is not necessary.
anatofuz
parents:
diff changeset
26 # NM: {{0*}}00000000 0 FUNC GLOBAL DEFAULT UND bar
anatofuz
parents:
diff changeset
27 # NM: {{0*}}00000000 0 FUNC WEAK DEFAULT UND weak
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 ## The .got.plt slots relocated by .rela.plt point to .plt
anatofuz
parents:
diff changeset
30 ## This is required by glibc.
anatofuz
parents:
diff changeset
31 # RELOC32: .rela.plt {
anatofuz
parents:
diff changeset
32 # RELOC32-NEXT: 0x13070 R_RISCV_JUMP_SLOT bar 0x0
anatofuz
parents:
diff changeset
33 # RELOC32-NEXT: 0x13074 R_RISCV_JUMP_SLOT weak 0x0
anatofuz
parents:
diff changeset
34 # RELOC32-NEXT: }
anatofuz
parents:
diff changeset
35 # GOTPLT32: section '.got.plt'
anatofuz
parents:
diff changeset
36 # GOTPLT32-NEXT: 0x00013068 00000000 00000000 30100100 30100100
anatofuz
parents:
diff changeset
37
anatofuz
parents:
diff changeset
38 # RELOC64: .rela.plt {
anatofuz
parents:
diff changeset
39 # RELOC64-NEXT: 0x130E0 R_RISCV_JUMP_SLOT bar 0x0
anatofuz
parents:
diff changeset
40 # RELOC64-NEXT: 0x130E8 R_RISCV_JUMP_SLOT weak 0x0
anatofuz
parents:
diff changeset
41 # RELOC64-NEXT: }
anatofuz
parents:
diff changeset
42 # GOTPLT64: section '.got.plt'
anatofuz
parents:
diff changeset
43 # GOTPLT64-NEXT: 0x000130d0 00000000 00000000 00000000 00000000
anatofuz
parents:
diff changeset
44 # GOTPLT64-NEXT: 0x000130e0 30100100 00000000 30100100 00000000
anatofuz
parents:
diff changeset
45
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
46 # DIS: <_start>:
150
anatofuz
parents:
diff changeset
47 ## Direct call
anatofuz
parents:
diff changeset
48 ## foo - . = 0x11020-0x11000 = 32
anatofuz
parents:
diff changeset
49 # DIS-NEXT: 11000: auipc ra, 0
anatofuz
parents:
diff changeset
50 # DIS-NEXT: jalr 32(ra)
anatofuz
parents:
diff changeset
51 ## bar@plt - . = 0x11050-0x11008 = 72
anatofuz
parents:
diff changeset
52 # DIS-NEXT: 11008: auipc ra, 0
anatofuz
parents:
diff changeset
53 # DIS-NEXT: jalr 72(ra)
anatofuz
parents:
diff changeset
54 ## bar@plt - . = 0x11050-0x11010 = 64
anatofuz
parents:
diff changeset
55 # DIS-NEXT: 11010: auipc ra, 0
anatofuz
parents:
diff changeset
56 # DIS-NEXT: jalr 64(ra)
anatofuz
parents:
diff changeset
57 ## weak@plt - . = 0x11060-0x11018 = 72
anatofuz
parents:
diff changeset
58 # DIS-NEXT: 11018: auipc ra, 0
anatofuz
parents:
diff changeset
59 # DIS-NEXT: jalr 72(ra)
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
60 # DIS: <foo>:
150
anatofuz
parents:
diff changeset
61 # DIS-NEXT: 11020:
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 # DIS: Disassembly of section .plt:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
64 # DIS: <.plt>:
150
anatofuz
parents:
diff changeset
65 # DIS-NEXT: auipc t2, 2
anatofuz
parents:
diff changeset
66 # DIS-NEXT: sub t1, t1, t3
anatofuz
parents:
diff changeset
67 ## .got.plt - .plt = 0x13068 - 0x11030 = 4096*2+56
anatofuz
parents:
diff changeset
68 # DIS32-NEXT: lw t3, 56(t2)
anatofuz
parents:
diff changeset
69 # DIS64-NEXT: ld t3, 160(t2)
anatofuz
parents:
diff changeset
70 # DIS-NEXT: addi t1, t1, -44
anatofuz
parents:
diff changeset
71 # DIS32-NEXT: addi t0, t2, 56
anatofuz
parents:
diff changeset
72 # DIS64-NEXT: addi t0, t2, 160
anatofuz
parents:
diff changeset
73 # DIS32-NEXT: srli t1, t1, 2
anatofuz
parents:
diff changeset
74 # DIS64-NEXT: srli t1, t1, 1
anatofuz
parents:
diff changeset
75 # DIS32-NEXT: lw t0, 4(t0)
anatofuz
parents:
diff changeset
76 # DIS64-NEXT: ld t0, 8(t0)
anatofuz
parents:
diff changeset
77 # DIS-NEXT: jr t3
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 ## 32-bit: &.got.plt[bar]-. = 0x13070-0x11050 = 4096*2+32
anatofuz
parents:
diff changeset
80 # DIS: 11050: auipc t3, 2
anatofuz
parents:
diff changeset
81 # DIS32-NEXT: lw t3, 32(t3)
anatofuz
parents:
diff changeset
82 # DIS64-NEXT: ld t3, 144(t3)
anatofuz
parents:
diff changeset
83 # DIS-NEXT: jalr t1, t3
anatofuz
parents:
diff changeset
84 # DIS-NEXT: nop
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 ## 32-bit: &.got.plt[weak]-. = 0x13074-0x11060 = 4096*2+20
anatofuz
parents:
diff changeset
87 # DIS: 11060: auipc t3, 2
anatofuz
parents:
diff changeset
88 # DIS32-NEXT: lw t3, 20(t3)
anatofuz
parents:
diff changeset
89 # DIS64-NEXT: ld t3, 136(t3)
anatofuz
parents:
diff changeset
90 # DIS-NEXT: jalr t1, t3
anatofuz
parents:
diff changeset
91 # DIS-NEXT: nop
anatofuz
parents:
diff changeset
92
anatofuz
parents:
diff changeset
93 .global _start, foo, bar
anatofuz
parents:
diff changeset
94 .weak weak
anatofuz
parents:
diff changeset
95
anatofuz
parents:
diff changeset
96 _start:
anatofuz
parents:
diff changeset
97 call foo
anatofuz
parents:
diff changeset
98 call bar
anatofuz
parents:
diff changeset
99 call bar@plt
anatofuz
parents:
diff changeset
100 call weak
anatofuz
parents:
diff changeset
101
anatofuz
parents:
diff changeset
102 ## foo is local and non-preemptale, no PLT is generated.
anatofuz
parents:
diff changeset
103 foo:
anatofuz
parents:
diff changeset
104 ret