This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Teach a few targets to resolve BFD_RELOC_8


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7553c869a9a9af813abd8cb4d445765d1a8a1cac

commit 7553c869a9a9af813abd8cb4d445765d1a8a1cac
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Mar 20 09:20:55 2019 +1030

    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.

Diff:
---
 gas/ChangeLog                   | 11 +++++++++++
 gas/config/tc-d10v.c            |  3 +++
 gas/config/tc-d30v.c            | 34 +++++++---------------------------
 gas/config/tc-pdp11.c           |  4 ++++
 gas/testsuite/gas/all/forward.d | 14 ++++++++++++--
 gas/testsuite/gas/all/gas.exp   | 18 +-----------------
 6 files changed, 38 insertions(+), 46 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 27db914..46a54f7 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/config/tc-d10v.c b/gas/config/tc-d10v.c
index c2e3a19..9f6c82e 100644
--- a/gas/config/tc-d10v.c
+++ b/gas/config/tc-d10v.c
@@ -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:
diff --git a/gas/config/tc-d30v.c b/gas/config/tc-d30v.c
index f11cc95..086215e 100644
--- a/gas/config/tc-d30v.c
+++ b/gas/config/tc-d30v.c
@@ -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:
diff --git a/gas/config/tc-pdp11.c b/gas/config/tc-pdp11.c
index f00fa0b..1be07ea 100644
--- a/gas/config/tc-pdp11.c
+++ b/gas/config/tc-pdp11.c
@@ -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;
diff --git a/gas/testsuite/gas/all/forward.d b/gas/testsuite/gas/all/forward.d
index 5a7f370..d921ec5 100644
--- a/gas/testsuite/gas/all/forward.d
+++ b/gas/testsuite/gas/all/forward.d
@@ -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-*-*
 
 .*: .*
 
diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp
index e771184..9ea95c6 100644
--- a/gas/testsuite/gas/all/gas.exp
+++ b/gas/testsuite/gas/all/gas.exp
@@ -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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]