Fix all unexpected failures in gas testsuite for pdp11-aout.
These failures were caused by the PDP11's mix of little-endian octets in shorts but shorts in big endian order for long or quad so regexps did not match. Also tests used addresses as values in .long which required BRD_RELOC_32 that was not implemented. * gas/config/tc-pdp11.c (md_number_to_chars): Implement .quad * gas/testsuite/gas/all/gas.exp: Select alternate test scripts for pdp11, skip octa test completely. * gas/testsuite/gas/all/eqv-dot-pdp11.s: Identical to eqv-dot.s * gas/testsuite/gas/all/eqv-dot-pdp11.d: Match different octet order. * gas/testsuite/gas/all/cond-pdp11.l: Match different octet order. * bfd/pdp11.c: Implement BRD_RELOC_32 to relocate the low 16 bits of addreses in .long (used in testsuites) and .stab values.
This commit is contained in:
parent
4ad2c6a03e
commit
66e3eb08a5
|
@ -1,3 +1,8 @@
|
||||||
|
2020-05-28 Stephen Casner <casner@acm.org>
|
||||||
|
|
||||||
|
* pdp11.c: Implement BRD_RELOC_32 to relocate the low 16 bits of
|
||||||
|
addreses in .long (used in testsuites) and .stab values.
|
||||||
|
|
||||||
2020-05-27 H.J. Lu <hongjiu.lu@intel.com>
|
2020-05-27 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/22909
|
PR ld/22909
|
||||||
|
|
|
@ -255,6 +255,7 @@ reloc_howto_type howto_table_pdp11[] =
|
||||||
/* type rs size bsz pcrel bitpos ovrf sf name part_inpl readmask setmask pcdone */
|
/* type rs size bsz pcrel bitpos ovrf sf name part_inpl readmask setmask pcdone */
|
||||||
HOWTO( 0, 0, 1, 16, FALSE, 0, complain_overflow_signed,0,"16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
|
HOWTO( 0, 0, 1, 16, FALSE, 0, complain_overflow_signed,0,"16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
|
||||||
HOWTO( 1, 0, 1, 16, TRUE, 0, complain_overflow_signed,0,"DISP16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
|
HOWTO( 1, 0, 1, 16, TRUE, 0, complain_overflow_signed,0,"DISP16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
|
||||||
|
HOWTO( 2, 0, 2, 32, FALSE, 0, complain_overflow_signed,0,"32", TRUE, 0x0000ffff,0x0000ffff, FALSE),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TABLE_SIZE(TABLE) (sizeof(TABLE)/sizeof(TABLE[0]))
|
#define TABLE_SIZE(TABLE) (sizeof(TABLE)/sizeof(TABLE[0]))
|
||||||
|
@ -276,6 +277,8 @@ NAME (aout, reloc_type_lookup) (bfd * abfd ATTRIBUTE_UNUSED,
|
||||||
return &howto_table_pdp11[0];
|
return &howto_table_pdp11[0];
|
||||||
case BFD_RELOC_16_PCREL:
|
case BFD_RELOC_16_PCREL:
|
||||||
return &howto_table_pdp11[1];
|
return &howto_table_pdp11[1];
|
||||||
|
case BFD_RELOC_32:
|
||||||
|
return &howto_table_pdp11[2];
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,16 @@
|
||||||
|
2020-05-28 Stephen Casner <casner@acm.org>
|
||||||
|
|
||||||
|
Fix unexpected failures in gas testsuite for pdp11-aout target.
|
||||||
|
These are caused by the PDP11's mix of little-endian octets in
|
||||||
|
shorts but shorts in big endian order for long or quad.
|
||||||
|
|
||||||
|
* config/tc-pdp11.c (md_number_to_chars): Implement .quad
|
||||||
|
* testsuite/gas/all/gas.exp: Select alternate test scripts for
|
||||||
|
pdp11, skip octa test completely.
|
||||||
|
* testsuite/gas/all/eqv-dot-pdp11.s: Identical to eqv-dot.s
|
||||||
|
* testsuite/gas/all/eqv-dot-pdp11.d: Match different octet order.
|
||||||
|
* testsuite/gas/all/cond-pdp11.l: Match different octet order.
|
||||||
|
|
||||||
2020-05-28 Alex Coplan <alex.coplan@arm.com>
|
2020-05-28 Alex Coplan <alex.coplan@arm.com>
|
||||||
|
|
||||||
* frags.c (frag_grow): Fix comment.
|
* frags.c (frag_grow): Fix comment.
|
||||||
|
|
|
@ -222,6 +222,16 @@ md_number_to_chars (char con[], valueT value, int nbytes)
|
||||||
con[2] = value & 0xff;
|
con[2] = value & 0xff;
|
||||||
con[3] = (value >> 8) & 0xff;
|
con[3] = (value >> 8) & 0xff;
|
||||||
break;
|
break;
|
||||||
|
case 8:
|
||||||
|
con[0] = (value >> 48) & 0xff;
|
||||||
|
con[1] = (value >> 56) & 0xff;
|
||||||
|
con[2] = (value >> 32) & 0xff;
|
||||||
|
con[3] = (value >> 40) & 0xff;
|
||||||
|
con[4] = (value >> 16) & 0xff;
|
||||||
|
con[5] = (value >> 24) & 0xff;
|
||||||
|
con[6] = value & 0xff;
|
||||||
|
con[7] = (value >> 8) & 0xff;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
BAD_CASE (nbytes);
|
BAD_CASE (nbytes);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
# This should match the output of gas -alc cond.s.
|
||||||
|
|
||||||
|
.*cond.s.*
|
||||||
|
|
||||||
|
|
||||||
|
1[ ]+.if 0
|
||||||
|
8[ ]+.else
|
||||||
|
9[ ]+.if 1
|
||||||
|
10[ ]+.endc
|
||||||
|
11 0000 00 ?00 ?02 ?00[ ]+.long[ ]+2
|
||||||
|
12[ ]+.if 0
|
||||||
|
14[ ]+.else
|
||||||
|
15 0004 00 ?00 ?04 ?00[ ]+.long[ ]+4
|
||||||
|
16[ ]+.endc
|
||||||
|
17[ ]+.endc
|
||||||
|
18[ ]+
|
||||||
|
19[ ]+.if 0
|
||||||
|
21[ ]+.elseif 1
|
||||||
|
22[ ]+.if 0
|
||||||
|
24[ ]+.elseif 1
|
||||||
|
25 0008 00 ?00 ?07 ?00[ ]+.long[ ]+7
|
||||||
|
26[ ]+.endif
|
||||||
|
27[ ]+.elseif 1
|
||||||
|
29[ ]+.else
|
||||||
|
31[ ]+.endif
|
||||||
|
[ ]*[1-9][0-9]*[ ]+
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.comm[ ]+v_c,[ ]*1[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.ifndef[ ]+v_c[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+x[ ]*<>[ ]*x[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.equiv[ ]+y,[ ]*x[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.ifndef[ ]+y[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+x[ ]*<>[ ]*y[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.equiv[ ]+z,[ ]*x[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+y[ ]*<>[ ]*z[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.equiv[ ]+v_a,[ ]*y[ ]*\+[ ]*1[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.equiv[ ]+v_b,[ ]*z[ ]*-[ ]*1[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+v_a[ ]*==[ ]*x[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+v_a[ ]*-[ ]*1[ ]*<>[ ]*x[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+v_a[ ]*<>[ ]*v_b[ ]*\+[ ]*2[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+v_a[ ]*-[ ]*v_b[ ]*<>[ ]*2[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.equiv[ ]+x,[ ]*0[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+y[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.elseif[ ]+y[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.macro[ ]+m[ ]+x,[ ]*y[ ]*
|
||||||
|
#...
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endm[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+[0-9a-f]+[048c] FF ?FF ?FF ?FF[ ]+m[ ]+,[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+FF ?FF ?FF ?FF[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+[0-9a-f]+[048c] FF ?FF ?FF ?FF[ ]+m[ ]+,[ ]*10[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+00 ?00 ?0A ?00[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+[0-9a-f]+[048c] 00 ?00 ?0B ?00[ ]+m[ ]+11,[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+FF ?FF ?FF ?FF[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+[0-9a-f]+[048c] 00 ?00 ?0C ?00[ ]+m[ ]+12,[ ]*13[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+00 ?00 ?0D ?00[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.if[ ]+0[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+\.endif[ ]*
|
||||||
|
[ ]*[1-9][0-9]*[ ]+
|
||||||
|
[ ]*[1-9][0-9]*[ ]+.*\.p2align 5,0
|
||||||
|
#pass
|
|
@ -0,0 +1,12 @@
|
||||||
|
#objdump: -s -j .data
|
||||||
|
#name: eqv involving dot (PDP11)
|
||||||
|
# Special for PDP11 which is little-endian for octets in shorts
|
||||||
|
# but big-endian for shorts in longs per register assignments for
|
||||||
|
# mul/div and in by convention in memory (at least for Unix).
|
||||||
|
|
||||||
|
.*: .*
|
||||||
|
|
||||||
|
Contents of section \.data:
|
||||||
|
0000 0+0000 0+0100 0+0200 0+0c00 .*
|
||||||
|
0010 0+1000 140+ 0+1000 1c0+ .*
|
||||||
|
#pass
|
|
@ -0,0 +1,8 @@
|
||||||
|
.data
|
||||||
|
x: .long 0, 1, 2, . - x
|
||||||
|
y = . - x
|
||||||
|
z == . - x
|
||||||
|
.long y
|
||||||
|
.long z
|
||||||
|
.long y
|
||||||
|
.long z
|
|
@ -91,7 +91,11 @@ switch -glob $target_triplet {
|
||||||
|
|
||||||
gas_test "eqv-ok.s" "" "" ".eqv support"
|
gas_test "eqv-ok.s" "" "" ".eqv support"
|
||||||
gas_test_error "eqv-bad.s" "" ".eqv for symbol already set"
|
gas_test_error "eqv-bad.s" "" ".eqv for symbol already set"
|
||||||
run_dump_test eqv-dot
|
if { [istarget "pdp11-*-*"] } then {
|
||||||
|
run_dump_test eqv-dot-pdp11
|
||||||
|
} else {
|
||||||
|
run_dump_test eqv-dot
|
||||||
|
}
|
||||||
|
|
||||||
if { ![istarget "bfin-*-*"] } then {
|
if { ![istarget "bfin-*-*"] } then {
|
||||||
gas_test "assign-ok.s" "" "" "== assignment support"
|
gas_test "assign-ok.s" "" "" "== assignment support"
|
||||||
|
@ -326,12 +330,17 @@ proc test_cond {} {
|
||||||
global subdir
|
global subdir
|
||||||
|
|
||||||
set testname "conditional listings"
|
set testname "conditional listings"
|
||||||
|
if { [istarget "pdp11-*-*"] } then {
|
||||||
|
set listing "cond-pdp11.l"
|
||||||
|
} else {
|
||||||
|
set listing "cond.l"
|
||||||
|
}
|
||||||
gas_run cond.s "-alc" ">dump.out"
|
gas_run cond.s "-alc" ">dump.out"
|
||||||
if ![string match "" $comp_output] {
|
if ![string match "" $comp_output] {
|
||||||
send_log "$comp_output\n"
|
send_log "$comp_output\n"
|
||||||
fail $testname
|
fail $testname
|
||||||
} else {
|
} else {
|
||||||
if { [regexp_diff dump.out $srcdir/$subdir/cond.l] } {
|
if { [regexp_diff dump.out $srcdir/$subdir/$listing] } {
|
||||||
fail $testname
|
fail $testname
|
||||||
} else {
|
} else {
|
||||||
pass $testname
|
pass $testname
|
||||||
|
@ -392,7 +401,11 @@ if { ![istarget "powerpc*-*-*"] && ![istarget "rs6000*-*-*"] && ![istarget "s390
|
||||||
}
|
}
|
||||||
|
|
||||||
run_dump_test quad
|
run_dump_test quad
|
||||||
run_dump_test octa
|
|
||||||
|
# poor little PDP-11 can't handle 16-byte values
|
||||||
|
if { ![istarget "pdp11-*-*"] } {
|
||||||
|
run_dump_test octa
|
||||||
|
}
|
||||||
|
|
||||||
# .set works differently on some targets.
|
# .set works differently on some targets.
|
||||||
switch -glob $target_triplet {
|
switch -glob $target_triplet {
|
||||||
|
|
Loading…
Reference in New Issue