OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [gas/] [testsuite/] [gas/] [hppa/] [reloc/] [reloc.exp] - Blame information for rev 38

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
# Copyright 1993, 1996, 1997, 2002, 2004, 2007 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
 
23
proc 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
 
65
proc 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
 
166
proc 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
 
191
proc 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
 
214
proc 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
 
243
proc 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
 
292
proc 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
 
341
proc 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
 
377
proc 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
 
411
proc 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
 
440
proc 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
 
513
proc 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
 
568
proc 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
 
596
proc 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
 
625
proc 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
 
656
if [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 agressive 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
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.