xtensa: gas: don't keep relocations for constants
authorMax Filippov <jcmvbkbc@gmail.com>
Sat, 26 Jan 2019 02:52:32 +0000 (18:52 -0800)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 28 Jan 2019 18:55:04 +0000 (10:55 -0800)
xtensa gas chokes on 8/16 bit data entries representing constant symbols
because it leaves BFD_RELOC_8/BFD_RELOC_16 fixups for which xtensa BFD
cannot emit relocations. Resolve fixups for constant symbols in
md_apply_fix.

gas/
2019-01-28  Max Filippov  <jcmvbkbc@gmail.com>

* config/tc-xtensa.c (md_apply_fix): Mark fixups for constant
symbols as done in md_apply_fix.
* testsuite/gas/all/forward.d: Don't XFAIL for xtensa.

gas/ChangeLog
gas/config/tc-xtensa.c
gas/testsuite/gas/all/forward.d

index da4154c536dbb0070fb52b99c3e7dc4944d01b07..5e2d81349102d8fc7c10455ae8bc71e678fa0111 100644 (file)
@@ -1,3 +1,9 @@
+2019-01-28  Max Filippov  <jcmvbkbc@gmail.com>
+
+       * config/tc-xtensa.c (md_apply_fix): Mark fixups for constant
+       symbols as done in md_apply_fix.
+       * testsuite/gas/all/forward.d: Don't XFAIL for xtensa.
+
 2019-01-28  Nick Clifton  <nickc@redhat.com>
 
        * po/fr.po: Updated French translation.
index 23bb2d291fc8b9e293732ad3fa0781f27e48682f..3bdbbc931cfc04906b9a94fd9e5658fe8b6ca6f7 100644 (file)
@@ -6019,6 +6019,12 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)
          val = *valP;
          fixP->fx_done = 1;
        }
+      else if (S_GET_SEGMENT (fixP->fx_addsy) == absolute_section)
+       {
+         val = S_GET_VALUE (fixP->fx_addsy) + fixP->fx_offset;
+         *valP = val;
+         fixP->fx_done = 1;
+       }
       /* fall through */
 
     case BFD_RELOC_XTENSA_PLT:
index 9750133e9efe22fe9026f971bdf98b7c5cfea839..5a7f370a17e213a684f7cb3fae7ecc22091d76b7 100644 (file)
@@ -1,7 +1,7 @@
 #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-*-* xtensa*-*-*
+#xfail: *c30-*-* *c4x-*-* d10v-*-* d30v-*-* pdp11-*-*
 
 .*: .*