* write.c (TC_FORCE_RELOCATION_SUB_LOCAL): Heed md_register_arithmetic.
[deliverable/binutils-gdb.git] / gas / config / tc-sh.h
index a3187b3d0a4b09d2731eeee02076942980531e20..51b656197f6dc7acb504f776fc702eda5dec8891 100644 (file)
@@ -83,8 +83,9 @@ extern int sh_force_relocation (struct fix *);
    || (sh_relax && SWITCH_TABLE (FIX)))
 
 /* Don't complain when we leave fx_subsy around.  */
-#define TC_VALIDATE_FIX_SUB(FIX)                       \
-  (sh_relax && SWITCH_TABLE (FIX))
+#define TC_VALIDATE_FIX_SUB(FIX, SEG)                  \
+  ((md_register_arithmetic || (SEG) != reg_section)    \
+   && sh_relax && SWITCH_TABLE (FIX))
 
 #define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
 extern long md_pcrel_from_section (struct fix *, segT);
@@ -207,7 +208,9 @@ extern bfd_boolean sh_fix_adjustable (struct fix *);
    || (FIX)->fx_r_type == BFD_RELOC_SH_GOTPC           \
    || TC_FORCE_RELOCATION (FIX))
 
-#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX) (sh_relax && SWITCH_TABLE (FIX))
+#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG)                \
+  ((!md_register_arithmetic && (SEG) == reg_section)   \
+   || (sh_relax && SWITCH_TABLE (FIX)))
 
 /* This keeps the subtracted symbol around, for use by PLT_PCREL
    relocs.  */
@@ -217,9 +220,10 @@ extern bfd_boolean sh_fix_adjustable (struct fix *);
 
 /* Don't complain when we leave fx_subsy around.  */
 #undef TC_VALIDATE_FIX_SUB
-#define TC_VALIDATE_FIX_SUB(FIX)                       \
-  ((FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL          \
-   || (sh_relax && SWITCH_TABLE (FIX)))
+#define TC_VALIDATE_FIX_SUB(FIX, SEG)                  \
+  ((md_register_arithmetic || (SEG) != reg_section)    \
+   && ((FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL      \
+       || (sh_relax && SWITCH_TABLE (FIX))))
 
 #define md_parse_name(name, exprP, mode, nextcharP) \
   sh_parse_name ((name), (exprP), (mode), (nextcharP))
This page took 0.024044 seconds and 4 git commands to generate.