bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: assertion failure with gas and broken syntax


From: Alan Modra
Subject: Re: assertion failure with gas and broken syntax
Date: Fri, 19 Sep 2008 08:40:22 +0930
User-agent: Mutt/1.5.9i

On Thu, Sep 18, 2008 at 07:19:15AM -0700, H.J. Lu wrote:
> I think it is another form of
> 
> http://sourceware.org/bugzilla/show_bug.cgi?id=5543
> 
> We fixed it in generic assembler. If we want to fix this
> one in x86 backend, should we revert the fix for PR 5543?

It's really a result of md_register_arithmetic being defined to 0 for
x86 and ia64.  Without that you'd get an error from fix_new_exp,
"register value used as expression".

Index: gas/write.c
===================================================================
RCS file: /cvs/src/src/gas/write.c,v
retrieving revision 1.118
diff -u -p -r1.118 write.c
--- gas/write.c 20 Aug 2008 13:43:32 -0000      1.118
+++ gas/write.c 15 Sep 2008 13:24:12 -0000
@@ -54,8 +54,13 @@
   (! SEG_NORMAL (SEG))
 #endif
 
+#ifndef md_register_arithmetic
+# define md_register_arithmetic 1
+#endif
+
 #ifndef TC_FORCE_RELOCATION_SUB_ABS
-#define TC_FORCE_RELOCATION_SUB_ABS(FIX)       0
+#define TC_FORCE_RELOCATION_SUB_ABS(FIX, SEG)  \
+  (!md_register_arithmetic && (SEG) == reg_section)
 #endif
 
 #ifndef TC_FORCE_RELOCATION_SUB_LOCAL
@@ -924,7 +929,7 @@ fixup_segment (fixS *fixP, segT this_seg
 #endif
            }
          else if (sub_symbol_segment == absolute_section
-                  && !TC_FORCE_RELOCATION_SUB_ABS (fixP))
+                  && !TC_FORCE_RELOCATION_SUB_ABS (fixP, add_symbol_segment))
            {
              add_number -= S_GET_VALUE (fixP->fx_subsy);
              fixP->fx_offset = add_number;
Index: gas/config/tc-sh.h
===================================================================
RCS file: /cvs/src/src/gas/config/tc-sh.h,v
retrieving revision 1.50
diff -u -p -r1.50 tc-sh.h
--- gas/config/tc-sh.h  6 Aug 2008 15:42:15 -0000       1.50
+++ gas/config/tc-sh.h  15 Sep 2008 13:24:13 -0000
@@ -211,8 +211,9 @@ extern bfd_boolean sh_fix_adjustable (st
 
 /* This keeps the subtracted symbol around, for use by PLT_PCREL
    relocs.  */
-#define TC_FORCE_RELOCATION_SUB_ABS(FIX)               \
-  ((FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL)
+#define TC_FORCE_RELOCATION_SUB_ABS(FIX, SEG)          \
+  ((FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL          \
+   || (!md_register_arithmetic && (SEG) == reg_section))
 
 /* Don't complain when we leave fx_subsy around.  */
 #undef TC_VALIDATE_FIX_SUB


-- 
Alan Modra
Australia Development Lab, IBM




reply via email to

[Prev in Thread] Current Thread [Next in Thread]