comparison lld/test/ELF/pre_init_fini_array.s @ 173:0572611fdcc8 llvm10 llvm12

reorgnization done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 11:55:54 +0900
parents 1d019706d866
children 2e18cbf3894f
comparison
equal deleted inserted replaced
172:9fbae9c8bf63 173:0572611fdcc8
1 // REQUIRES: x86 1 // REQUIRES: x86
2 // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t 2 // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
3 // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2 3 // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2
4 // RUN: ld.lld %t2 -o %t2.so -shared -soname=so 4 // RUN: ld.lld %t2 -o %t2.so -shared -soname=so
5 // RUN: ld.lld %t %t2.so -o %t2 5 // RUN: ld.lld %t %t2.so -o %t2
6 // RUN: llvm-readobj -r --symbols --sections --dynamic-table %t2 | FileCheck %s 6 // RUN: llvm-readelf -S -d -r -s %t2 | FileCheck %s
7 // RUN: llvm-objdump -d %t2 | FileCheck --check-prefix=DISASM %s 7 // RUN: llvm-objdump -d --syms %t2 | FileCheck --check-prefix=DISASM %s
8 8
9 .globl _start 9 .globl _start
10 _start: 10 _start:
11 call __preinit_array_start 11 call *__preinit_array_start
12 call __preinit_array_end 12 call *__preinit_array_end
13 call __init_array_start 13 call *__init_array_start
14 call __init_array_end 14 call *__init_array_end
15 call __fini_array_start 15 call *__fini_array_start
16 call __fini_array_end 16 call *__fini_array_end
17 17
18 18
19 .section .init_array,"aw",@init_array 19 .section .init_array,"aw",@init_array
20 .quad 0 20 .quad 0
21 21
25 25
26 .section .fini_array,"aw",@fini_array 26 .section .fini_array,"aw",@fini_array
27 .quad 0 27 .quad 0
28 .short 0 28 .short 0
29 29
30 // CHECK: Name: .init_array 30 // CHECK-LABEL: Section Headers:
31 // CHECK-NEXT: Type: SHT_INIT_ARRAY 31 // CHECK: Name Type Address Off Size ES Flg
32 // CHECK-NEXT: Flags [ 32 // CHECK: .init_array INIT_ARRAY [[# %x, INIT_ADDR:]] [[# %x,]] [[# %x, INIT_SIZE:]] 00 WA
33 // CHECK-NEXT: SHF_ALLOC 33 // CHECK-NEXT: .preinit_array PREINIT_ARRAY [[# %x, PREINIT_ADDR:]] [[# %x,]] [[# %x, PREINIT_SIZE:]] 00 WA
34 // CHECK-NEXT: SHF_WRITE 34 // CHECK-NEXT: .fini_array FINI_ARRAY [[# %x, FINI_ADDR:]] [[# %x,]] [[# %x, FINI_SIZE:]] 00 WA
35 // CHECK-NEXT: ]
36 // CHECK-NEXT: Address: [[INIT_ADDR:.*]]
37 // CHECK-NEXT: Offset:
38 // CHECK-NEXT: Size: [[INIT_SIZE:.*]]
39 35
36 // CHECK-LABEL: Dynamic section
37 // CHECK: (PREINIT_ARRAY) 0x[[# PREINIT_ADDR]]
38 // CHECK: (PREINIT_ARRAYSZ) [[# %u, PREINIT_SIZE]] (bytes)
39 // CHECK: (INIT_ARRAY) 0x[[# INIT_ADDR]]
40 // CHECK: (INIT_ARRAYSZ) [[# %u, INIT_SIZE]] (bytes)
41 // CHECK: (FINI_ARRAY) 0x[[# FINI_ADDR]]
42 // CHECK: (FINI_ARRAYSZ) [[# %u, FINI_SIZE]] (bytes)
40 43
41 // CHECK: Name: .preinit_array 44 // CHECK-LABEL: There are no relocations in this file.
42 // CHECK-NEXT: Type: SHT_PREINIT_ARRAY
43 // CHECK-NEXT: Flags [
44 // CHECK-NEXT: SHF_ALLOC
45 // CHECK-NEXT: SHF_WRITE
46 // CHECK-NEXT: ]
47 // CHECK-NEXT: Address: [[PREINIT_ADDR:.*]]
48 // CHECK-NEXT: Offset:
49 // CHECK-NEXT: Size: [[PREINIT_SIZE:.*]]
50 45
46 // CHECK-LABEL: Symbol table '.symtab'
47 // CHECK: Value Size Type Bind Vis Ndx Name
48 // CHECK: [[# FINI_ADDR + FINI_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __fini_array_end
49 // CHECK-NEXT: [[# FINI_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __fini_array_start
50 // CHECK-NEXT: [[# INIT_ADDR + INIT_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __init_array_end
51 // CHECK-NEXT: [[# INIT_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __init_array_start
52 // CHECK-NEXT: [[# PREINIT_ADDR + PREINIT_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __preinit_array_end
53 // CHECK-NEXT: [[# PREINIT_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __preinit_array_start
51 54
52 // CHECK: Name: .fini_array 55 // DISASM: SYMBOL TABLE:
53 // CHECK-NEXT: Type: SHT_FINI_ARRAY 56 // DISASM-DAG: {{0*}}[[# %x, PREINIT_ARRAY_START:]] l .preinit_array {{0+}} .hidden __preinit_array_start
54 // CHECK-NEXT: Flags [ 57 // DISASM-DAG: {{0*}}[[# %x, PREINIT_ARRAY_END:]] l .preinit_array {{0+}} .hidden __preinit_array_end
55 // CHECK-NEXT: SHF_ALLOC 58 // DISASM-DAG: {{0*}}[[# %x, INIT_ARRAY_START:]] l .init_array {{0+}} .hidden __init_array_start
56 // CHECK-NEXT: SHF_WRITE 59 // DISASM-DAG: {{0*}}[[# %x, INIT_ARRAY_END:]] l .init_array {{0+}} .hidden __init_array_end
57 // CHECK-NEXT: ] 60 // DISASM-DAG: {{0*}}[[# %x, FINI_ARRAY_START:]] l .fini_array {{0+}} .hidden __fini_array_start
58 // CHECK-NEXT: Address: [[FINI_ADDR:.*]] 61 // DISASM-DAG: {{0*}}[[# %x, FINI_ARRAY_END:]] l .fini_array {{0+}} .hidden __fini_array_end
59 // CHECK-NEXT: Offset:
60 // CHECK-NEXT: Size: [[FINI_SIZE:.*]]
61 62
62 // CHECK: Relocations [ 63 // DISASM: <_start>:
63 // CHECK-NEXT: ] 64 // DISASM-NEXT: callq *[[# %u, PREINIT_ARRAY_START]]
64 65 // DISASM-NEXT: callq *[[# %u, PREINIT_ARRAY_END]]
65 // CHECK: Name: __fini_array_end 66 // DISASM-NEXT: callq *[[# %u, INIT_ARRAY_START]]
66 // CHECK-NEXT: Value: 67 // DISASM-NEXT: callq *[[# %u, INIT_ARRAY_END]]
67 // CHECK-NEXT: Size: 0 68 // DISASM-NEXT: callq *[[# %u, FINI_ARRAY_START]]
68 // CHECK-NEXT: Binding: Local 69 // DISASM-NEXT: callq *[[# %u, FINI_ARRAY_END]]
69 // CHECK-NEXT: Type: None
70 // CHECK-NEXT: Other [
71 // CHECK-NEXT: STV_HIDDEN
72 // CHECK-NEXT: ]
73 // CHECK-NEXT: Section: .fini_array
74 // CHECK-NEXT: }
75 // CHECK-NEXT: Symbol {
76 // CHECK-NEXT: Name: __fini_array_start
77 // CHECK-NEXT: Value: [[FINI_ADDR]]
78 // CHECK-NEXT: Size: 0
79 // CHECK-NEXT: Binding: Local
80 // CHECK-NEXT: Type: None
81 // CHECK-NEXT: Other [
82 // CHECK-NEXT: STV_HIDDEN
83 // CHECK-NEXT: ]
84 // CHECK-NEXT: Section: .fini_array
85 // CHECK-NEXT: }
86 // CHECK-NEXT: Symbol {
87 // CHECK-NEXT: Name: __init_array_end
88 // CHECK-NEXT: Value:
89 // CHECK-NEXT: Size: 0
90 // CHECK-NEXT: Binding: Local
91 // CHECK-NEXT: Type: None
92 // CHECK-NEXT: Other [
93 // CHECK-NEXT: STV_HIDDEN
94 // CHECK-NEXT: ]
95 // CHECK-NEXT: Section: .init_array
96 // CHECK-NEXT: }
97 // CHECK-NEXT: Symbol {
98 // CHECK-NEXT: Name: __init_array_start
99 // CHECK-NEXT: Value: [[INIT_ADDR]]
100 // CHECK-NEXT: Size: 0
101 // CHECK-NEXT: Binding: Local
102 // CHECK-NEXT: Type: None
103 // CHECK-NEXT: Other [
104 // CHECK-NEXT: STV_HIDDEN
105 // CHECK-NEXT: ]
106 // CHECK-NEXT: Section: .init_array
107 // CHECK-NEXT: }
108 // CHECK-NEXT: Symbol {
109 // CHECK-NEXT: Name: __preinit_array_end
110 // CHECK-NEXT: Value:
111 // CHECK-NEXT: Size: 0
112 // CHECK-NEXT: Binding: Local
113 // CHECK-NEXT: Type: None
114 // CHECK-NEXT: Other [
115 // CHECK-NEXT: STV_HIDDEN
116 // CHECK-NEXT: ]
117 // CHECK-NEXT: Section: .preinit_array
118 // CHECK-NEXT: }
119 // CHECK-NEXT: Symbol {
120 // CHECK-NEXT: Name: __preinit_array_start
121 // CHECK-NEXT: Value: [[PREINIT_ADDR]]
122 // CHECK-NEXT: Size: 0
123 // CHECK-NEXT: Binding: Local
124 // CHECK-NEXT: Type: None
125 // CHECK-NEXT: Other [
126 // CHECK-NEXT: STV_HIDDEN
127 // CHECK-NEXT: ]
128 // CHECK-NEXT: Section: .preinit_array
129 // CHECK-NEXT: }
130
131 // CHECK: DynamicSection
132 // CHECK: PREINIT_ARRAY [[PREINIT_ADDR]]
133 // CHECK: PREINIT_ARRAYSZ [[PREINIT_SIZE]] (bytes)
134 // CHECK: INIT_ARRAY [[INIT_ADDR]]
135 // CHECK: INIT_ARRAYSZ [[INIT_SIZE]] (bytes)
136 // CHECK: FINI_ARRAY [[FINI_ADDR]]
137 // CHECK: FINI_ARRAYSZ [[FINI_SIZE]] (bytes)
138
139 // DISASM: _start:
140 // DISASM-NEXT: callq {{.*}} <__preinit_array_start>
141 // DISASM-NEXT: callq {{.*}} <__fini_array_start>
142 // DISASM-NEXT: callq {{.*}} <__init_array_start>
143 // DISASM-NEXT: callq {{.*}} <__preinit_array_start>
144 // DISASM-NEXT: callq {{.*}} <__fini_array_start>
145 // DISASM-NEXT: callq {{.*}} <__fini_array_end>