forked from Imagelibrary/binutils-gdb
Teach a few targets to resolve BFD_RELOC_8
and tidy "forward" test. I've removed some checks in d30v md_apply_fix that have no business being there. Any symbol problems will be caught later in tc_gen_reloc, and overflow checking is done in gas/write.c. * config/tc-d10v.c (md_apply_fix): Apply BFD_RELOC_8. * config/tc-pdp11.c (md_apply_fix): Likewise. * config/tc-d30v.c (md_apply_fix): Don't emit errors for BFD_RELOC_8, BFD_RELOC_16, and BFD_RELOC_64. * testsuite/gas/all/gas.exp: Move target exclusions for forward test, but not cr16, to.. * testsuite/gas/all/forward.d: ..here, with explanation. Remove d10v, d30v, and pdp11 xfails.
This commit is contained in:
@@ -1,3 +1,14 @@
|
||||
2019-03-21 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* config/tc-d10v.c (md_apply_fix): Apply BFD_RELOC_8.
|
||||
* config/tc-pdp11.c (md_apply_fix): Likewise.
|
||||
* config/tc-d30v.c (md_apply_fix): Don't emit errors for BFD_RELOC_8,
|
||||
BFD_RELOC_16, and BFD_RELOC_64.
|
||||
* testsuite/gas/all/gas.exp: Move target exclusions for forward
|
||||
test, but not cr16, to..
|
||||
* testsuite/gas/all/forward.d: ..here, with explanation. Remove
|
||||
d10v, d30v, and pdp11 xfails.
|
||||
|
||||
2019-03-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/tc-i386.c (optimize_encoding): Don't check AVX for
|
||||
|
||||
@@ -1580,6 +1580,9 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_16:
|
||||
bfd_putb16 ((bfd_vma) value, (unsigned char *) where);
|
||||
break;
|
||||
case BFD_RELOC_8:
|
||||
*where = value;
|
||||
break;
|
||||
|
||||
case BFD_RELOC_VTABLE_INHERIT:
|
||||
case BFD_RELOC_VTABLE_ENTRY:
|
||||
|
||||
@@ -1918,37 +1918,17 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_8: /* Check for a bad .byte directive. */
|
||||
if (fixP->fx_addsy != NULL)
|
||||
as_bad (_("line %d: unable to place address of symbol '%s' into a byte"),
|
||||
fixP->fx_line, S_GET_NAME (fixP->fx_addsy));
|
||||
else if (((unsigned)value) > 0xff)
|
||||
as_bad (_("line %d: unable to place value %lx into a byte"),
|
||||
fixP->fx_line, value);
|
||||
else
|
||||
*(unsigned char *) where = value;
|
||||
case BFD_RELOC_8:
|
||||
*(unsigned char *) where = value;
|
||||
break;
|
||||
|
||||
case BFD_RELOC_16: /* Check for a bad .short directive. */
|
||||
if (fixP->fx_addsy != NULL)
|
||||
as_bad (_("line %d: unable to place address of symbol '%s' into a short"),
|
||||
fixP->fx_line, S_GET_NAME (fixP->fx_addsy));
|
||||
else if (((unsigned)value) > 0xffff)
|
||||
as_bad (_("line %d: unable to place value %lx into a short"),
|
||||
fixP->fx_line, value);
|
||||
else
|
||||
bfd_putb16 ((bfd_vma) value, (unsigned char *) where);
|
||||
case BFD_RELOC_16:
|
||||
bfd_putb16 ((bfd_vma) value, (unsigned char *) where);
|
||||
break;
|
||||
|
||||
case BFD_RELOC_64: /* Check for a bad .quad directive. */
|
||||
if (fixP->fx_addsy != NULL)
|
||||
as_bad (_("line %d: unable to place address of symbol '%s' into a quad"),
|
||||
fixP->fx_line, S_GET_NAME (fixP->fx_addsy));
|
||||
else
|
||||
{
|
||||
bfd_putb32 ((bfd_vma) value, (unsigned char *) where);
|
||||
bfd_putb32 (0, ((unsigned char *) where) + 4);
|
||||
}
|
||||
case BFD_RELOC_64:
|
||||
bfd_putb32 ((bfd_vma) value, (unsigned char *) where);
|
||||
bfd_putb32 (0, ((unsigned char *) where) + 4);
|
||||
break;
|
||||
|
||||
case BFD_RELOC_D30V_6:
|
||||
|
||||
@@ -248,6 +248,10 @@ md_apply_fix (fixS *fixP,
|
||||
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_8:
|
||||
mask = 0xff;
|
||||
shift = 0;
|
||||
break;
|
||||
case BFD_RELOC_16:
|
||||
case BFD_RELOC_16_PCREL:
|
||||
mask = 0xffff;
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
#objdump: -s -j .data
|
||||
#name: forward references
|
||||
# Some targets don't manage to resolve BFD_RELOC_8 for constants.
|
||||
#xfail: *c30-*-* *c4x-*-* d10v-*-* d30v-*-* pdp11-*-*
|
||||
# tic30 and tic4x have 4 octets per byte, tic54x has 2 octets per byte
|
||||
#notarget: *c30-*-* *c4x-*-* *c54x-*-*
|
||||
# hppa uses non-standard .equ syntax
|
||||
#notarget: hppa*-*-*
|
||||
# linkrelax targets should really resolve the relocs in this test but some
|
||||
# choose to emit them even though the relocs are in .data, leading to
|
||||
# "redefined symbol cannot be used on reloc".
|
||||
#xfail: am33*-*-* crx*-*-* h8300*-*-* mn10200*-*-* mn10300*-*-*
|
||||
# mep and microblaze use complex relocs and don't resolve the relocs.
|
||||
# one of the relocs references minus_one, which is a bug, but no one
|
||||
# seems bothered enough to fix this.
|
||||
#xfail: mep-*-* microblaze-*-*
|
||||
|
||||
.*: .*
|
||||
|
||||
|
||||
@@ -99,23 +99,7 @@ if { ![istarget "bfin-*-*"] } then {
|
||||
gas_test_error "assign-bad.s" "" "== assignment for symbol already set"
|
||||
|
||||
run_dump_test simple-forward
|
||||
|
||||
# .equ works differently on some targets.
|
||||
# linkrelax-ing prevents most forward references from working.
|
||||
case $target_triplet in {
|
||||
{ am3*-*-* } { }
|
||||
{ *c54x*-*-* } { }
|
||||
{ cr16*-*-* } { }
|
||||
{ crx*-*-* } { }
|
||||
{ h8300*-*-* } { }
|
||||
{ hppa*-*-* } { }
|
||||
{ mep-*-* } { }
|
||||
{ microblaze-*-* } { }
|
||||
{ mn10\[23\]00*-*-* } { }
|
||||
default {
|
||||
run_dump_test forward
|
||||
}
|
||||
}
|
||||
run_dump_test forward
|
||||
|
||||
# aout relocs are often weird, so is mep. don't bother testing
|
||||
# som doesn't use a .text section
|
||||
|
||||
Reference in New Issue
Block a user