]>
Commit | Line | Data |
---|---|---|
241e64e3 | 1 | # Expect script for simple native Linux/x86 tests. |
250d07de | 2 | # Copyright (C) 2018-2021 Free Software Foundation, Inc. |
241e64e3 L |
3 | # |
4 | # This file is part of the GNU Binutils. | |
5 | # | |
6 | # This program is free software; you can redistribute it and/or modify | |
7 | # it under the terms of the GNU General Public License as published by | |
8 | # the Free Software Foundation; either version 3 of the License, or | |
9 | # (at your option) any later version. | |
10 | # | |
11 | # This program is distributed in the hope that it will be useful, | |
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | # GNU General Public License for more details. | |
15 | # | |
16 | # You should have received a copy of the GNU General Public License | |
17 | # along with this program; if not, write to the Free Software | |
18 | # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | |
19 | # MA 02110-1301, USA. | |
20 | # | |
21 | ||
74e10d17 L |
22 | # Linux/x86 tests. |
23 | if { ![istarget "i?86-*-linux*"] \ | |
24 | && ![istarget "x86_64-*-linux*"] \ | |
25 | && ![istarget "amd64-*-linux*"] } { | |
26 | return | |
27 | } | |
28 | ||
29 | run_ld_link_tests [list \ | |
30 | [list \ | |
31 | "Build pr24920.so" \ | |
32 | "-shared" \ | |
33 | "" \ | |
34 | "" \ | |
35 | {dummy.s} \ | |
36 | {} \ | |
37 | "pr24920.so" \ | |
38 | ] \ | |
39 | [list \ | |
40 | "Build pr24920" \ | |
41 | "-static " \ | |
42 | "-Bdynamic tmpdir/pr24920.so" \ | |
43 | "" \ | |
44 | {start.s} \ | |
45 | {{ld pr24920.err}} \ | |
46 | "pr24920" \ | |
47 | ] \ | |
48 | ] | |
49 | ||
241e64e3 | 50 | # Test very simple native Linux/x86 programs with linux-x86.S. |
241e64e3 L |
51 | run_ld_link_exec_tests [list \ |
52 | [list \ | |
53 | "Run PR ld/23428 test" \ | |
54 | "--no-dynamic-linker -z separate-code" \ | |
55 | "" \ | |
ab9e3428 | 56 | { linux-x86.S pr23428.c dummy.s } \ |
241e64e3 L |
57 | "pr23428" \ |
58 | "pass.out" \ | |
e062fcc8 | 59 | "$NOPIE_CFLAGS $NOSANITIZE_CFLAGS -fno-asynchronous-unwind-tables" \ |
241e64e3 L |
60 | "asm" \ |
61 | ] \ | |
62 | ] | |
8a6b075b L |
63 | |
64 | run_ld_link_tests [list \ | |
65 | [list \ | |
66 | "Build x86-feature-1" \ | |
67 | "-z separate-code -z shstk" \ | |
68 | "" \ | |
69 | "-mx86-used-note=yes" \ | |
70 | { start.s } \ | |
71 | {{readelf -n x86-feature-1a.rd}} \ | |
72 | "x86-feature-1" \ | |
73 | ] \ | |
74 | ] | |
75 | ||
76 | proc elfedit_test { options test output } { | |
77 | global ELFEDIT | |
78 | global READELF | |
79 | global srcdir | |
80 | global subdir | |
81 | ||
82 | set test_name "elfedit $options" | |
83 | send_log "$ELFEDIT $options tmpdir/$test\n" | |
84 | set got [remote_exec host "$ELFEDIT $options tmpdir/$test" "" "/dev/null"] | |
85 | if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { | |
86 | send_log "$got\n" | |
5b1f6c95 | 87 | fail "$test_name" |
8a6b075b L |
88 | } |
89 | send_log "$READELF -n $options tmpdir/$test > tmpdir/$output.out\n" | |
90 | set got [remote_exec host "$READELF -n tmpdir/$test" "" "/dev/null" "tmpdir/$output.out"] | |
91 | if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { | |
92 | send_log "$got\n" | |
5b1f6c95 | 93 | fail "$test_name" |
8a6b075b L |
94 | } |
95 | if { [regexp_diff tmpdir/$output.out $srcdir/$subdir/$output.rd] } then { | |
96 | fail "$test_name" | |
97 | } else { | |
98 | pass "$test_name" | |
99 | } | |
100 | } | |
101 | ||
102 | elfedit_test "--enable-x86-feature ibt --disable-x86-feature shstk" \ | |
103 | x86-feature-1 x86-feature-1b | |
104 | elfedit_test "--enable-x86-feature ibt" x86-feature-1 x86-feature-1b | |
105 | elfedit_test "--disable-x86-feature shstk" x86-feature-1 x86-feature-1c | |
106 | elfedit_test "--disable-x86-feature ibt" x86-feature-1 x86-feature-1d | |
107 | elfedit_test "--enable-x86-feature ibt --enable-x86-feature shstk" \ | |
108 | x86-feature-1 x86-feature-1e | |
382aae06 L |
109 | |
110 | proc check_pr25749a {testname srcfilea srcfileb cflags ldflags lderror} { | |
111 | global objcopy | |
112 | global srcdir | |
113 | global subdir | |
114 | ||
115 | if { [istarget "i?86-*-linux*"] } { | |
116 | set output_arch "i386:i386" | |
117 | set output_target "elf32-i386" | |
118 | } else { | |
119 | set output_arch "i386:x86-64" | |
120 | if {[istarget "x86_64-*-linux*-gnux32"]} { | |
121 | set output_target "elf32-x86-64" | |
122 | } else { | |
123 | set output_target "elf64-x86-64" | |
124 | } | |
125 | } | |
126 | ||
00401e65 L |
127 | # Suppress warning for unsupported attribute from older GCC. |
128 | append cflags " -w" | |
129 | ||
382aae06 | 130 | exec cp $srcdir/$subdir/$srcfilea $srcfilea |
bbd2d6bf | 131 | exec chmod +w $srcfilea |
382aae06 L |
132 | set pr25749_bin "$objcopy -B $output_arch -I binary -O $output_target $srcfilea tmpdir/pr25749-bin.o" |
133 | send_log "$pr25749_bin\n" | |
134 | set got [remote_exec host "$pr25749_bin"] | |
135 | if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { | |
136 | send_log "$got\n" | |
137 | fail "Convert $srcfilea to $output_target" | |
138 | return | |
139 | } | |
140 | ||
141 | if {"$lderror" == ""} { | |
142 | run_cc_link_tests [list \ | |
143 | [list \ | |
144 | "Build $testname ($ldflags $cflags)" \ | |
145 | "$ldflags tmpdir/pr25749-bin.o" \ | |
516231b7 | 146 | "$cflags -I../bfd" \ |
382aae06 L |
147 | [list $srcfilea $srcfileb]\ |
148 | {{readelf {-Wr} pr25749.rd}} \ | |
149 | "${testname}a" \ | |
150 | ] \ | |
151 | ] | |
152 | run_ld_link_exec_tests [list \ | |
153 | [list \ | |
154 | "Run ${testname}a ($ldflags $cflags)" \ | |
155 | "$ldflags tmpdir/pr25749-bin.o" \ | |
156 | "" \ | |
157 | [list $srcfilea $srcfileb]\ | |
158 | "${testname}a" \ | |
159 | "pass.out" \ | |
516231b7 | 160 | "$cflags -I../bfd" \ |
382aae06 L |
161 | ] \ |
162 | ] | |
163 | } else { | |
164 | run_cc_link_tests [list \ | |
165 | [list \ | |
166 | "Build $testname ($ldflags $cflags)" \ | |
167 | "$ldflags tmpdir/pr25749-bin.o" \ | |
516231b7 | 168 | "$cflags -I../bfd" \ |
382aae06 L |
169 | [list $srcfilea $srcfileb]\ |
170 | [list [list error_output $lderror]] \ | |
171 | "$testname" \ | |
172 | ] \ | |
173 | ] | |
174 | } | |
175 | } | |
176 | ||
177 | check_pr25749a "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
178 | check_pr25749a "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "-fPIE" "-pie" "" | |
179 | check_pr25749a "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
22aa1d51 | 180 | if { [istarget "i?86-*-linux*"] || ![at_least_gcc_version 5 1] } { |
382aae06 L |
181 | check_pr25749a "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "-fPIE" "-pie" "" |
182 | } else { | |
183 | check_pr25749a "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "-fPIE" "-pie" "pr25749-1b.err" | |
184 | } | |
185 | check_pr25749a "pr25749-1c" "pr25749-1.c" "pr25749-1c.c" "-fPIC" "-shared" "pr25749-1b.err" | |
186 | check_pr25749a "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
187 | check_pr25749a "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "-fPIE" "-pie" "" | |
188 | check_pr25749a "pr25749-2b" "pr25749-2.c" "pr25749-2b.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
189 | check_pr25749a "pr25749-2b" "pr25749-2.c" "pr25749-2b.s" "-fPIE" "-pie" "" | |
190 | check_pr25749a "pr25754-1a" "pr25754-1a.c" "pr25754-1b.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
191 | check_pr25749a "pr25754-1b" "pr25754-1a.c" "pr25754-1b.s" "-fPIE" "$NOPIE_LDFLAGS" "" | |
192 | check_pr25749a "pr25754-1c" "pr25754-1a.c" "pr25754-1b.s" "-fPIC" "$NOPIE_LDFLAGS" "" | |
193 | check_pr25749a "pr25754-1d" "pr25754-1a.c" "pr25754-1b.s" "-fPIC" "-pie" "" | |
194 | if { [istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*-gnux32"]} { | |
195 | check_pr25749a "pr25754-2a" "pr25754-2a.c" "pr25754-2b.s" "-fPIC" "$NOPIE_LDFLAGS" "" | |
196 | check_pr25749a "pr25754-2b" "pr25754-2a.c" "pr25754-2b.s" "-fPIC" "-pie" "" | |
197 | } else { | |
198 | check_pr25749a "pr25754-3a" "pr25754-3a.c" "pr25754-3b.s" "-fPIC" "$NOPIE_LDFLAGS" "" | |
199 | check_pr25749a "pr25754-3b" "pr25754-3a.c" "pr25754-3b.s" "-fPIC" "-pie" "" | |
200 | } | |
201 | if { [istarget "i?86-*-linux*"] } { | |
202 | check_pr25749a "pr25754-4a" "pr25754-4a.c" "pr25754-4b.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
203 | check_pr25749a "pr25754-4b" "pr25754-4a.c" "pr25754-4b.s" "-fpie" "-pie" "" | |
204 | check_pr25749a "pr25754-5a" "pr25754-5a.c" "pr25754-5b.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
205 | check_pr25749a "pr25754-5b" "pr25754-5a.c" "pr25754-5b.s" "-fpie" "-pie" "" | |
206 | } else { | |
207 | check_pr25749a "pr25754-4a" "pr25754-4a.c" "pr25754-4c.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
208 | check_pr25749a "pr25754-4b" "pr25754-4a.c" "pr25754-4c.s" "-fpie" "-pie" "" | |
209 | check_pr25749a "pr25754-5a" "pr25754-5a.c" "pr25754-5c.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
210 | check_pr25749a "pr25754-5b" "pr25754-5a.c" "pr25754-5c.s" "-fpie" "-pie" "" | |
211 | if { ![istarget "x86_64-*-linux*-gnux32"]} { | |
212 | check_pr25749a "pr25754-6a" "pr25754-6a.c" "pr25754-6b.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
213 | check_pr25749a "pr25754-6b" "pr25754-6a.c" "pr25754-6b.s" "-fpie" "-pie" "" | |
214 | } | |
215 | } | |
216 | ||
84df1f9d | 217 | proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags args} { |
382aae06 L |
218 | global objcopy |
219 | global srcdir | |
220 | global subdir | |
221 | ||
222 | if { [istarget "i?86-*-linux*"] } { | |
223 | set output_arch "i386:i386" | |
224 | set output_target "elf32-i386" | |
225 | } else { | |
226 | set output_arch "i386:x86-64" | |
227 | if {[istarget "x86_64-*-linux*-gnux32"]} { | |
228 | set output_target "elf32-x86-64" | |
229 | } else { | |
230 | set output_target "elf64-x86-64" | |
231 | } | |
232 | } | |
233 | ||
234 | exec cp $srcdir/$subdir/$srcfilea $srcfilea | |
bbd2d6bf | 235 | exec chmod +w $srcfilea |
382aae06 L |
236 | set pr25749_bin "$objcopy -B $output_arch -I binary -O $output_target $srcfilea tmpdir/pr25749-bin.o" |
237 | send_log "$pr25749_bin\n" | |
238 | set got [remote_exec host "$pr25749_bin"] | |
239 | if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { | |
240 | send_log "$got\n" | |
241 | fail "Convert $srcfilea to $output_target" | |
242 | return | |
243 | } | |
244 | ||
245 | run_cc_link_tests [list \ | |
246 | [list \ | |
247 | "Build lib${testname}.so ($dsoldflags)" \ | |
248 | "-shared $dsoldflags tmpdir/pr25749-bin.o" \ | |
516231b7 | 249 | "-fPIC -I../bfd" \ |
382aae06 L |
250 | [list $srcfileb] \ |
251 | {{readelf {-Wr} pr25749.rd}} \ | |
252 | "lib${testname}.so" \ | |
253 | ] \ | |
254 | ] | |
84df1f9d AM |
255 | |
256 | set pass "pass.out" | |
257 | if { [llength $args] > 0 } { | |
258 | set pass [lindex $args 0] | |
259 | } | |
260 | ||
382aae06 L |
261 | run_ld_link_exec_tests [list \ |
262 | [list \ | |
263 | "Run ${testname}b ($ldflags $cflags)" \ | |
264 | "$ldflags -Wl,--no-as-needed tmpdir/lib${testname}.so" \ | |
265 | "" \ | |
266 | [list $srcfilea]\ | |
267 | "${testname}b" \ | |
84df1f9d | 268 | "$pass" \ |
516231b7 | 269 | "$cflags -I../bfd" \ |
382aae06 L |
270 | ] \ |
271 | ] | |
272 | } | |
273 | ||
274 | check_pr25749b "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" | |
275 | check_pr25749b "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "-fPIE" "-pie" "" | |
276 | check_pr25749b "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "-fPIE" "-pie" "-Wl,-Bsymbolic" | |
84df1f9d AM |
277 | check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" "passall.out" |
278 | check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "-fPIE" "-pie" "" "passall.out" | |
382aae06 L |
279 | check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "-fPIE" "-pie" "-Wl,-Bsymbolic" |
280 | check_pr25749b "pr25749-1d" "pr25749-1.c" "pr25749-1d.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "-Wl,-defsym=_begin=0" | |
281 | check_pr25749b "pr25749-1d" "pr25749-1.c" "pr25749-1d.c" "-fPIE" "-pie" "-Wl,-defsym=_begin=0" | |
282 | check_pr25749b "pr25749-1d" "pr25749-1.c" "pr25749-1d.c" "-fPIE" "-pie" "-Wl,-Bsymbolic -Wl,-defsym=_begin=0" | |
84df1f9d AM |
283 | check_pr25749b "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" "passall.out" |
284 | check_pr25749b "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "-fPIE" "-pie" "" "passall.out" | |
382aae06 L |
285 | check_pr25749b "pr25749-2b" "pr25749-2.c" "pr25749-2b.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" |
286 | check_pr25749b "pr25749-2b" "pr25749-2.c" "pr25749-2b.s" "-fPIE" "-pie" "" |