1# Copyright (C) 1993-2017 Free Software Foundation, Inc.
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program; if not, write to the Free Software
15# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
16
17# Please email any bugs, comments, and/or additions to this file to:
18# dejagnu@gnu.org
19
20# Written by the Center for Software Science at the University of Utah
21# and by Cygnus Support.
22
23proc do_ble_relocation_test {} {
24    set testname "blebug.s: Test for proper relocation for BLE (part 2)"
25    set x 0
26
27    if [gas_test_old "blebug.s" "" "Proper relocation for BLE (part 1)"] then {
28	objdump_start_no_subdir "a.out" "-r"
29
30        if {[istarget hppa*64*-*-*]
31	    || [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
32	    # At one time both versions of the assembler would incorrectly use
33	    # a PC-relative relocation for a BLE instruction.
34	    while 1 {
35		expect {
36		    -re "^0+\[^\n\]*DIR21L\[^\n\]*\n"	{ set x 1 }
37		    -re "^0+4\[^\n\]*DIR17R\[^\n\]*\n"	{ set x 1 }
38		    -re "\[^\n\]*\n"				{ }
39		    timeout			{ perror "timeout\n"; break }
40		    eof				{ break }
41		}
42	    }
43	} else {
44	    # At one time both versions of the assembler would incorrectly use
45	    # a PC-relative relocation for a BLE instruction.
46	    while 1 {
47		expect {
48		    -re "^0+4\[^\n\]*ABS_CALL\[^\n\]*\n"	{ set x 1 }
49		    -re "\[^\n\]*\n"				{ }
50		    timeout			{ perror "timeout\n"; break }
51		    eof				{ break }
52		}
53	    }
54	}
55    }
56
57    # This was intended to do any cleanup necessary.  It kinda looks like it
58    # isn't needed, but just in case, please keep it in for now.
59    objdump_finish
60
61    # Did we find what we were looking for?  If not, flunk it.
62    if [expr $x==1] then { pass $testname } else { fail $testname }
63}
64
65proc do_relocation_reduction_tests {} {
66    set testname "reduce.s: Test relocation reductions (part 2)"
67    set x 0
68
69    if {[istarget hppa*64*-*-*]
70        || [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
71      return
72    }
73
74    if [gas_test_old "reduce.s" "" "Relocation reductions (part1)"] then {
75	objdump_start_no_subdir "a.out" "-r"
76
77	# Check to make sure relocations involving procedure labels
78	# are not reduced to a relocation involving some other symbol.
79	# Doing so makes generating parameter relocation stubs impossible.
80	while 1 {
81	    expect {
82		-re "^0+4\[^\n\]*PLABEL\[^\n\]*foo\[^\n\]*\n"
83		    { set x [expr $x+1] }
84		-re "^0+14\[^\n\]*PCREL\[^\n\]*foo\[^\n\]*\n"
85		    { set x [expr $x+1] }
86		-re "\[^\n\]*\n"		{ }
87		timeout				{ perror "timeout\n"; break }
88		eof				{ break }
89            }
90	}
91    }
92
93    # This was intended to do any cleanup necessary.  It kinda looks like it
94    # isn't needed, but just in case, please keep it in for now.
95    objdump_finish
96
97    # Did we find what we were looking for?  If not, flunk it.
98    if [expr $x==2] then { pass $testname } else { fail $testname }
99
100    set testname "reduce2.s: More relocation reduction tests (part 2)"
101    set x 0
102
103    if [gas_test_old "reduce2.s" "" "More relocation  reductions (part1)"] then {
104	objdump_start_no_subdir "a.out" "-r"
105
106	# Check to make sure DLT relative relocs are not reduced to sym+addend
107	# Doing so doesn't work as one might expect
108	while 1 {
109	    expect {
110		-re "^0+4\[^\n\]*DLT\[^\n\]*L.C0000\[^\n\]*\n"
111		    { set x [expr $x+1] }
112		-re "^0+1c\[^\n\]*DLT\[^\n\]*L.C0000\[^\n\]*\n"
113		    { set x [expr $x+1] }
114		-re "^0+30\[^\n\]*DLT\[^\n\]*L.C0001\[^\n\]*\n"
115		    { set x [expr $x+1] }
116		-re "^0+48\[^\n\]*DLT\[^\n\]*L.C0001\[^\n\]*\n"
117		    { set x [expr $x+1] }
118		-re "\[^\n\]*\n"		{ }
119		timeout				{ perror "timeout\n"; break }
120		eof				{ break }
121            }
122	}
123    }
124
125    # This was intended to do any cleanup necessary.  It kinda looks like it
126    # isn't needed, but just in case, please keep it in for now.
127    objdump_finish
128
129    # Did we find what we were looking for?  If not, flunk it.
130    if [expr $x==2] then { pass $testname } else { fail $testname }
131
132    set testname "reduce3.s: Test even more relocation reductions (part 2)"
133    set x 0
134
135    if [gas_test_old "reduce3.s" "" "Even more relocation reductions (part1)"] then {
136	objdump_start_no_subdir "a.out" "-r"
137
138	# Check to make sure relocations involving procedure labels
139	# are not reduced to a relocation involving some other symbol.
140	# Doing so makes generating parameter relocation stubs impossible.
141	while 1 {
142	    expect {
143		-re "^0+c\[^\n\]*yabba\[^\n\+\]*\n"
144		    { set x [expr $x+1] }
145		-re "^0+c\[^\n\]*yabba\+\[^\n\]*\n"
146		    { set x 0; break }
147		-re "^0+10\[^\n\]*yabba\[^\n\+\]*\n"
148		    { set x [expr $x+1] }
149		-re "^0+10\[^\n\]*yabba\+\[^\n\]*\n"
150		    { set x 0; break }
151		-re "\[^\n\]*\n"		{ }
152		timeout				{ perror "timeout\n"; break }
153		eof				{ break }
154            }
155	}
156    }
157
158    # This was intended to do any cleanup necessary.  It kinda looks like it
159    # isn't needed, but just in case, please keep it in for now.
160    objdump_finish
161
162    # Did we find what we were looking for?  If not, flunk it.
163    if [expr $x==2] then { pass $testname } else { fail $testname }
164}
165
166proc do_ble_mode_selector_test {} {
167    set testname "blebug2.s: blebug2"
168    set x 0
169
170    gas_start "blebug2.s" "-al"
171
172    # GAS uses too many bits on the BLE instruction.
173    while 1 {
174	expect {
175	    -re "^ +\[0-9\]+ 0000 20202801\[^\n\]*\n"	{ set x [expr $x+1] }
176	    -re "^ +\[0-9\]+ 0004 E420E008\[^\n\]*\n"	{ set x [expr $x+1] }
177	    -re "\[^\n\]*\n"				{ }
178	    timeout				{ perror "timeout\n"; break }
179	    eof					{ break }
180	}
181    }
182
183    # This was intended to do any cleanup necessary.  It kinda looks like it
184    # isn't needed, but just in case, please keep it in for now.
185    gas_finish
186
187    # Did we find what we were looking for?  If not, flunk it.
188    if [expr $x==2] then { pass $testname } else { fail $testname }
189}
190
191proc do_ble_relocation_test {} {
192    set testname "blebug3.s: blebug3"
193    set x 0
194
195    gas_start "blebug3.s" "-al"
196
197    while 1 {
198	expect {
199	    -re "^ +\[0-9\]+ 0000 E4002000\[^\n\]*\n"	{ set x [expr $x+1] }
200	    -re "\[^\n\]*\n"				{ }
201	    timeout				{ perror "timeout\n"; break }
202	    eof					{ break }
203	}
204    }
205
206    # This was intended to do any cleanup necessary.  It kinda looks like it
207    # isn't needed, but just in case, please keep it in for now.
208    gas_finish
209
210    # Did we find what we were looking for?  If not, flunk it.
211    if [expr $x==1] then { pass $testname } else { fail $testname }
212}
213
214proc do_plabel_relocation_test {} {
215    set testname "plabelbug.s: Old gas-1.36 plabel bug (part 2)"
216    set x 0
217
218    if [gas_test_old "plabelbug.s" "" "Old gas-1.36 plabel bug (part 1)"] {
219	objdump_start_no_subdir "a.out" "-r"
220
221	# Check that we make PLABEL relocation entries when they're needed.
222	while 1 {
223	    expect {
224		-re "^0+\[^\n\]*PLABEL\[^\n\]*\n"
225		    { set x [expr $x+1] }
226		-re "^0+4\[^\n\]*PLABEL\[^\n\]*\n"
227		    { set x [expr $x+1] }
228		-re "\[^\n\]*\n"			{ }
229		timeout				{ perror "timeout\n"; break }
230		eof				{ break }
231    	    }
232	}
233
234	# This was intended to do any cleanup necessary.  It kinda looks like it
235	# isn't needed, but just in case, please keep it in for now.
236	objdump_finish
237
238	# Did we find what we were looking for?  If not, flunk it.
239	if [expr $x==2] then { pass $testname } else { fail $testname }
240    }
241}
242
243proc do_selector_scope_test {} {
244    set testname "selectorbug.s: Test scope of field selector"
245    set x 0
246
247    if [istarget hppa*64*-*-*] then {
248      return
249    }
250
251    if [gas_test_old "selectorbug.s" "" "Test scope of field selector (part 1)"] {
252	objdump_start_no_subdir "a.out" "-r"
253
254	# Check to make sure the relocation entry after the plabel is correct.
255	# If an old field selector was incorrectly "carried" over, then
256	# this test will fail.
257        if {[istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
258	    while 1 {
259		expect {
260	            -re "^0+14\[^\n\]*DIR32\[^\n\]*\n"
261			{ set x 1 }
262		    -re "^0+14\[^\n\]*PLABEL\[^\n\]*foo\[^\n\]*\n"
263			{ set x 0 }
264	            -re "\[^\n\]*\n"		{ }
265	            timeout			{ perror "timeout\n"; break }
266	            eof				{ break }
267		}
268            }
269	} else {
270	    while 1 {
271		expect {
272	            -re "^0+14\[^\n\]*DATA_ONE\[^\n\]*\n"
273			{ set x 1 }
274		    -re "^0+14\[^\n\]*PLABEL\[^\n\]*foo\[^\n\]*\n"
275			{ set x 0 }
276	            -re "\[^\n\]*\n"		{ }
277	            timeout			{ perror "timeout\n"; break }
278	            eof				{ break }
279		}
280            }
281	}
282
283	# This was intended to do any cleanup necessary.  It kinda looks like it
284	# isn't needed, but just in case, please keep it in for now.
285	objdump_finish
286
287	# Did we find what we were looking for?  If not, flunk it.
288	if [expr $x==1] then { pass $testname } else { fail $testname }
289    }
290}
291
292proc do_local_label_as_operand_test {} {
293    set testname "labelopbug.s: Test local label as operand (non-branching)"
294    set x 0
295
296    if [gas_test_old "labelopbug.s" "" "Local label as operand (part 1)"] {
297	objdump_start_no_subdir "a.out" "-r"
298
299	# Check to make sure we handle difference of local labels as an operand
300	# to a non-branching instruction correctly.  On hppa elf targets, the
301	# R_PARISC_DIR21 and R_PARISC_DIR14R relocations are done with LR and
302	# RR selectors, respectively.  As a result, we can't reduce these to
303	# section offsets without risking incorrect rounding.  So, we just
304	# check to see if the label hasn't been reduced.
305	if {[istarget hppa*64*-*-*]
306	    || [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
307	    while 1 {
308		expect {
309	            -re "^0+2c\[^\n\]*L.0002\[^\n\]*\n"
310			{ set x [expr $x+1] }
311	            -re "^0+30\[^\n\]*L.0002\[^\n\]*\n"
312			{ set x [expr $x+1] }
313	            -re "\[^\n\]*\n"		{ }
314	            timeout			{ perror "timeout\n"; break }
315	            eof				{ break }
316		}
317	    }
318	} else {
319	    while 1 {
320		expect {
321	            -re "^0+2c\[^\n\]*0x0+24\[^\n\]*\n"
322			{ set x [expr $x+1] }
323	            -re "^0+30\[^\n\]*0x0+24\[^\n\]*\n"
324			{ set x [expr $x+1] }
325	            -re "\[^\n\]*\n"		{ }
326	            timeout			{ perror "timeout\n"; break }
327	            eof				{ break }
328		}
329	    }
330	}
331
332	# This was intended to do any cleanup necessary.  It kinda looks like it
333	# isn't needed, but just in case, please keep it in for now.
334	objdump_finish
335
336	# Did we find what we were looking for?  If not, flunk it.
337	if [expr $x==2] then { pass $testname } else { fail $testname }
338    }
339}
340
341proc do_exit_relocation_test {} {
342    set testname "exitbug.s: Test for bogus R_EXIT relocation (part 2)"
343    set x 0
344
345    # Elf (osf) does not use ENTRY/EXIT relocations.
346    # I guess we could look at the unwind subspaces it builds...
347    # Until then, make sure it still assembles.
348    if {[istarget hppa*64*-*-*]
349	|| [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
350	gas_test_old "exitbug.s" "" "Test for bogus R_EXIT relocation (part 1)"
351	return
352    }
353
354    if [gas_test_old "exitbug.s" "" "Test for bogus R_EXIT relocation (part 1)"] {
355	objdump_start_no_subdir "a.out" "-r"
356
357	# Note that a match here is really a FAILURE!
358	while 1 {
359	    expect {
360	        -re "^0+\[^\n\]*R_EXIT\[^\n\]*\n"
361		    { set x [expr $x+1] }
362	        -re "\[^\n\]*\n"		{ }
363	        timeout				{ perror "timeout\n"; break }
364	        eof				{ break }
365            }
366	}
367
368	# This was intended to do any cleanup necessary.  It kinda looks like it
369	# isn't needed, but just in case, please keep it in for now.
370	objdump_finish
371
372	# Did we find what we were looking for?  If not, flunk it.
373	if [expr $x==0] then { pass $testname } else { fail $testname }
374    }
375}
376
377proc do_cross_space_fixup_test_1 {} {
378    set testname "fixupbug.s: Test cross space jump/call fixup bug (part 2)"
379    set x 0
380
381    # ELF doesn't really handle extra sections too well...
382    if {[istarget hppa*64*-*-*]
383	|| [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
384	return
385    }
386
387    if [gas_test_old "fixupbug.s" "" "Test cross space jump/call fixup bug (part 1)"] {
388	objdump_start_no_subdir "a.out" "-r"
389
390	# Make sure GAS generated a fixup/relocation for the cross-space
391	# branch/call
392	while 1 {
393	    expect {
394	        -re "^0+\[^\n\]*PCREL_CALL\[^\n\]*\n"
395		    { set x [expr $x+1] }
396	        -re "\[^\n\]*\n"		{ }
397	        timeout				{ perror "timeout\n"; break }
398	        eof				{ break }
399            }
400	}
401
402	# This was intended to do any cleanup necessary.  It kinda looks like it
403	# isn't needed, but just in case, please keep it in for now.
404	objdump_finish
405
406	# Did we find what we were looking for?  If not, flunk it.
407	if [expr $x==1] then { pass $testname } else { fail $testname }
408    }
409}
410
411proc do_cross_space_fixup_test_2 {} {
412    set testname "fixupbug.s: Test cross space jump/call fixup bug (part 3)"
413    set x 0
414
415    # ELF doesn't really handle extra sections too well...
416    if {[istarget hppa*64*-*-*]
417	|| [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
418	return
419    }
420
421    gas_start "fixupbug.s" "-al"
422
423    while 1 {
424	expect {
425	    -re "^ +\[0-9\]+ 0000 E8000002\[^\n\]*\n"	{ set x [expr $x+1] }
426	    -re "\[^\n\]*\n"				{ }
427	    timeout				{ perror "timeout\n"; break }
428	    eof					{ break }
429	}
430    }
431
432    # This was intended to do any cleanup necessary.  It kinda looks like it
433    # isn't needed, but just in case, please keep it in for now.
434    gas_finish
435
436    # Did we find what we were looking for?  If not, flunk it.
437    if [expr $x==1] then { pass $testname } else { fail $testname }
438}
439
440proc do_round_mode_test {} {
441    set testname "roundmode.s: Test switching of rounding modes (part 2)"
442    set x 0
443
444    if [gas_test_old "roundmode.s" "" "Test switch of rounding modes(part 1)"] {
445	objdump_start_no_subdir "a.out" "-r"
446
447	# Make sure GAS generated correct relocations to switch rounding modes.
448	# Also make sure (for SOM) that redundant rounding mode relocations
449	# were eliminated.
450	if {[istarget hppa*64*-*-*]
451	    || [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
452	    while 1 {
453		expect {
454	            -re "^0+\[^\n\]*DIR21L\[^\n\]*\n"
455			{ set x [expr $x+1] }
456	            -re "^0+4\[^\n\]*DIR14R\[^\n\]*\n"
457			{ set x [expr $x+1] }
458	            -re "^0+8\[^\n\]*DIR21L\[^\n\]*\n"
459			{ set x [expr $x+1] }
460	            -re "^0+c\[^\n\]*DIR14R\[^\n\]*\n"
461			{ set x [expr $x+1] }
462	            -re "^0+10\[^\n\]*DIR21L\[^\n\]*\n"
463			{ set x [expr $x+1] }
464	            -re "^0+14\[^\n\]*DIR14R\[^\n\]*\n"
465			{ set x [expr $x+1] }
466	            -re "^0+18\[^\n\]*DIR21L\[^\n\]*\n"
467			{ set x [expr $x+1] }
468	            -re "^0+1c\[^\n\]*DIR14R\[^\n\]*\n"
469			{ set x [expr $x+1] }
470	            -re "\[^\n\]*\n"		{ }
471	        timeout				{ perror "timeout\n"; break }
472	        eof				{ break }
473		}
474            }
475	} else {
476	    while 1 {
477		expect {
478	            -re "^0+\[^\n\]*R_R_MODE\[^\n\]*\n"
479			{ set x [expr $x+1] }
480	            -re "^0+4\[^\n\]*R_R_MODE\[^\n\]*\n"
481			{ fail $testname }
482	            -re "^0+8\[^\n\]*R_N_MODE\[^\n\]*\n"
483			{ set x [expr $x+1] }
484	            -re "^0+c\[^\n\]*R_N_MODE\[^\n\]*\n"
485			{ fail $testname }
486	            -re "^0+10\[^\n\]*R_R_MODE\[^\n\]*\n"
487			{ set x [expr $x+1] }
488	            -re "^0+14\[^\n\]*R_R_MODE\[^\n\]*\n"
489			{ fail $testname }
490	            -re "^0+1c\[^\n\]*R_R_MODE\[^\n\]*\n"
491			{ fail $testname }
492	            -re "\[^\n\]*\n"		{ }
493	        timeout				{ perror "timeout\n"; break }
494	        eof				{ break }
495		}
496	    }
497	}
498
499	# This was intended to do any cleanup necessary.  It kinda looks like it
500	# isn't needed, but just in case, please keep it in for now.
501	objdump_finish
502
503	# Did we find what we were looking for?  If not, flunk it.
504	if {[istarget hppa*64*-*-*]
505	    || [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
506	    if [expr $x==8] then { pass $testname } else { fail $testname }
507	} else {
508	    if [expr $x==3] then { pass $testname } else { fail $testname }
509	}
510    }
511}
512
513proc do_function_reloc_bug {} {
514    set testname "funcrelocbug.s: Test for reloc bug in non-plabel function reference (part 2)"
515    set x 0
516
517    if [gas_test_old "funcrelocbug.s" "" "Test for reloc bug in non-plabel function reference (part 1)"] {
518	objdump_start_no_subdir "a.out" "-r"
519
520	# Make sure GAS generated a correct relocation for the reference.
521	# branch/call
522	while 1 {
523	    expect {
524	        -re "^0+cc\[^\n\]*f2___4\[^\n+\]*\n"
525		    { set x [expr $x+1] }
526	        -re "^0+d0\[^\n\]*f2___4\[^\n+\]*\n"
527		    { set x [expr $x+1] }
528	        -re "\[^\n\]*\n"		{ }
529	        timeout				{ perror "timeout\n"; break }
530	        eof				{ break }
531            }
532	}
533
534	# This was intended to do any cleanup necessary.  It kinda looks like it
535	# isn't needed, but just in case, please keep it in for now.
536	objdump_finish
537
538	# Did we find what we were looking for?  If not, flunk it.
539	if [expr $x==2] then { pass $testname } else { fail $testname }
540
541	set testname "funcrelocbug.s: Test for reloc bug in non-plabel function reference (part3)"
542	set x 0
543
544	objdump_start_no_subdir "a.out" "--prefix-addresses -d"
545	# Make sure we didn't put anything in the instruction itself!
546	while 1 {
547	    expect {
548	        -re "^0+cc\[^\n\]*ldil L%0,r20\[^\n\]*\n"
549		    { set x [expr $x+1] }
550	        -re "^0+d0\[^\n\]*ldo 0\[\(\]+r20\[\)\]+,r19\[^\n\]*\n"
551		    { set x [expr $x+1] }
552	        -re "\[^\n\]*\n"		{ }
553	        timeout				{ perror "timeout\n"; break }
554	        eof				{ break }
555	    }
556	}
557
558	# This was intended to do any cleanup necessary.  It kinda looks like it
559	# isn't needed, but just in case, please keep it in for now.
560	objdump_finish
561
562	# Did we find what we were looking for?  If not, flunk it.
563	if [expr $x==2] then { pass $testname } else { fail $testname }
564    }
565
566}
567
568proc do_r_no_reloc {} {
569    set testname "r_no_reloc.s: Test for reloc bug in 4-byte R_NO_RELCOATION fixups (part 2)"
570    set x 0
571
572    if [gas_test_old "r_no_reloc.s" "" "Test for reloc bug in 4-byte R_NO_RELOCATION fixups (part 1)"] {
573	objdump_start_no_subdir "a.out" "-r"
574
575	# Make sure GAS generated a correct relocation for the reference.
576	while 1 {
577	    expect {
578	        -re "^0+c0004\[^\n\]*PLABEL\[^\n]*g\[^\n\]*\n"
579		    { set x [expr $x+1] }
580	        -re "\[^\n\]*\n"		{ }
581	        timeout				{ perror "timeout\n"; break }
582	        eof				{ break }
583            }
584	}
585
586	# This was intended to do any cleanup necessary.  It kinda looks like it
587	# isn't needed, but just in case, please keep it in for now.
588	objdump_finish
589
590	# Did we find what we were looking for?  If not, flunk it.
591	if [expr $x==1] then { pass $testname } else { fail $testname }
592
593    }
594}
595
596proc do_pic_relocation_test {} {
597    set testname "picreloc.s: Test for proper PIC relocation (part 2)"
598    set x 0
599
600    # ELF doesn't really handle extra sections too well...
601    if {[istarget hppa*64*-*-*]
602	|| [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
603	return
604    }
605
606    gas_start "picreloc.s" "-al"
607
608    while 1 {
609	expect {
610	    -re "^ +\[0-9\]+ 0000 00000004\[^\n\]*\n"	{ set x [expr $x+1] }
611	    -re "\[^\n\]*\n"				{ }
612	    timeout				{ perror "timeout\n"; break }
613	    eof					{ break }
614	}
615    }
616
617    # This was intended to do any cleanup necessary.  It kinda looks like it
618    # isn't needed, but just in case, please keep it in for now.
619    gas_finish
620
621    # Did we find what we were looking for?  If not, flunk it.
622    if [expr $x==1] then { pass $testname } else { fail $testname }
623}
624
625proc do_apply_test {} {
626    set testname "applybug.s: Test for proper fixup application (part 2)"
627    set x 0
628
629    # ELF doesn't really handle extra sections too well...
630    if {[istarget hppa*64*-*-*]
631	|| [istarget hppa*-*-*elf*] || [istarget hppa*-*-linux*]} then {
632	return
633    }
634
635    gas_start "applybug.s" "-al"
636
637    while 1 {
638	expect {
639	    -re "^ +\[0-9\]+ 0000 00000044\[^\n\]*\n"	{ set x [expr $x+1] }
640	    -re "^ +\[0-9\]+ 0004 00000058\[^\n\]*\n"	{ set x [expr $x+1] }
641	    -re "^ +\[0-9\]+ 0008 0000006C\[^\n\]*\n"	{ set x [expr $x+1] }
642	    -re "\[^\n\]*\n"				{ }
643	    timeout				{ perror "timeout\n"; break }
644	    eof					{ break }
645	}
646    }
647
648    # This was intended to do any cleanup necessary.  It kinda looks like it
649    # isn't needed, but just in case, please keep it in for now.
650    gas_finish
651
652    # Did we find what we were looking for?  If not, flunk it.
653    if [expr $x==3] then { pass $testname } else { fail $testname }
654}
655
656if [istarget hppa*-*-*] then {
657    # Make sure we put the right relocation entry on a BLE instruction.
658    do_ble_relocation_test
659
660    # Make sure relocation reductions are not too aggressive about
661    # adjusting relocations against some symbols.
662    do_relocation_reduction_tests
663
664    # Check that mode selectors on a ble instruction actually work.
665    do_ble_mode_selector_test
666
667    # Check that we take the -8 adjustment into account when zeroing
668    # out the displacement field in a ble instruction with a reloc
669    do_ble_relocation_test
670
671    # 1.36 simply didn't generate all the plabels it should have.  Make
672    # sure gas-2 does.
673    do_plabel_relocation_test
674
675    # Make sure a field selector only effects the current instruction
676    # or assembler directive.
677    do_selector_scope_test
678
679    # This should really generate a relocation.  It would make life much
680    # easier on the optimizing linker.  Until then just make sure the
681    # difference is computed correctly.
682    do_local_label_as_operand_test
683
684    # GAS2 incorrectly generated R_EXIT relocations when .exit directives
685    # were not in the source code.
686    do_exit_relocation_test
687
688    # GAS2 incorrectly thought it could apply a fixup for a pc-relative
689    # branch/call which crossed different subspaces.
690    # Also check that the assembled instruction is correct
691    do_cross_space_fixup_test_1
692    do_cross_space_fixup_test_2
693
694    # Make sure we switch rounding modes correctly
695    do_round_mode_test
696
697    # Test for a bug found when a function was used in a non-branching
698    # instruction *without* a plabel (for portable runtime model)
699    do_function_reloc_bug
700
701    # Test for an off-by-one bug in the handling of 4-byte R_NO_RELOCATION
702    # fixups.
703    do_r_no_reloc
704
705    # Test a relocation problem which shows up when building shared
706    # libraries in SOM
707    do_pic_relocation_test
708
709    # Test a problem with md_apply_fix that was introduced when fixing
710    # the pic relocation test.
711    do_apply_test
712
713    # Make sure gas doesn't resolve long-calls which are to be fixed
714    # by the linker
715    gas_test "longcall.s" "" "" "Avoid resolving long-calls"
716}
717