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 _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils