diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/testsuite/gas/hppa/reloc/.Sanitize | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/hppa/reloc/picreloc.s | 13 | ||||
-rwxr-xr-x | gas/testsuite/gas/hppa/reloc/reloc.exp | 37 |
3 files changed, 48 insertions, 3 deletions
diff --git a/gas/testsuite/gas/hppa/reloc/.Sanitize b/gas/testsuite/gas/hppa/reloc/.Sanitize index 266f475..577c109 100644 --- a/gas/testsuite/gas/hppa/reloc/.Sanitize +++ b/gas/testsuite/gas/hppa/reloc/.Sanitize @@ -33,6 +33,7 @@ exitbug.s fixupbug.s funcrelocbug.s labelopbug.s +picreloc.s plabelbug.s reduce.s reduce2.s diff --git a/gas/testsuite/gas/hppa/reloc/picreloc.s b/gas/testsuite/gas/hppa/reloc/picreloc.s new file mode 100644 index 0000000..639a44c --- /dev/null +++ b/gas/testsuite/gas/hppa/reloc/picreloc.s @@ -0,0 +1,13 @@ + + .SPACE $TEXT$,SORT=8 + .SUBSPA $CODE$,QUAD=0,ALIGN=4,ACCESS=0x2c,CODE_ONLY,SORT=24 + .SPACE $PRIVATE$,SORT=16 + .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=16 +bogo + .ALIGN 8 + .WORD bogo+4 ; = 0x4 + .STRING "\x00\x00\x00{\x00\x00\x01\xC8\x00\x00\x03\x15" + .SPACE $PRIVATE$ + .SUBSPA $DATA$ + .EXPORT bogo + .END diff --git a/gas/testsuite/gas/hppa/reloc/reloc.exp b/gas/testsuite/gas/hppa/reloc/reloc.exp index 0026b20..1d00e41 100755 --- a/gas/testsuite/gas/hppa/reloc/reloc.exp +++ b/gas/testsuite/gas/hppa/reloc/reloc.exp @@ -215,9 +215,9 @@ proc do_plabel_relocation_test {} { # Check that we make PLABEL relocation entries when they're needed. while 1 { expect { - -re "^\[0c\]0000000\[^\n\]*PLABEL\[^\n\]*\n" + -re "^00000000\[^\n\]*PLABEL\[^\n\]*\n" { set x [expr $x+1] } - -re "^\[0c\]0000004\[^\n\]*PLABEL\[^\n\]*\n" + -re "^00000004\[^\n\]*PLABEL\[^\n\]*\n" { set x [expr $x+1] } -re "\[^\n\]*\n" { } timeout { perror "timeout\n"; break } @@ -541,7 +541,7 @@ proc do_r_no_reloc {} { # Make sure GAS generated a correct relocation for the reference. while 1 { expect { - -re "^\[0c\]00c0004\[^\n\]*PLABEL\[^\n]*g\[^\n\]*\n" + -re "^000c0004\[^\n\]*PLABEL\[^\n]*g\[^\n\]*\n" { set x [expr $x+1] } -re "\[^\n\]*\n" { } timeout { perror "timeout\n"; break } @@ -559,6 +559,33 @@ proc do_r_no_reloc {} { } } +proc do_pic_relocation_test {} { + set testname "picreloc.s: Test for proper PIC relocation (part 2)" + set x 0 + + # ELF (osf) doesn't really handle extra sections too well... + if [istarget hppa*-*-*elf*] then { + return; + } + + gas_start "picreloc.s" "-al" + + while 1 { + expect { + -re "^ +\[0-9\]+ 0000 00000004\[^\n\]*\n" { set x [expr $x+1] } + -re "\[^\n\]*\n" { } + timeout { perror "timeout\n"; break } + eof { break } + } + } + + # This was intended to do any cleanup necessary. It kinda looks like it + # isn't needed, but just in case, please keep it in for now. + gas_finish + + # Did we find what we were looking for? If not, flunk it. + if [expr $x==1] then { pass $testname } else { fail $testname } +} if [istarget hppa*-*-*] then { # Make sure we put the right relocation entry on a BLE instruction. do_ble_relocation_test @@ -607,4 +634,8 @@ if [istarget hppa*-*-*] then { # Test for an off-by-one bug in the handling of 4-byte R_NO_RELOCATION # fixups. do_r_no_reloc + + # Test a relocation problem which shows up when building shared + # libraries in SOM + do_pic_relocation_test } |