+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
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:
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:
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;
#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-*-*
.*: .*
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