[Top][All Lists]
[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