From 586ec8c1d046b8f507c1df125c42ca7eba10e58e Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 2 Jul 2012 07:35:06 +0000 Subject: * write.c (fixup_segment): Only perform the subtraction of an fx_subsy symbol if MD_APPLY_SYM_VALUE allows it and the symbol is properly defined. * config/tc-msp430.h (MD_APPLY_SYM_VALUE): Define. --- gas/ChangeLog | 7 +++++++ gas/config/tc-msp430.h | 2 ++ gas/write.c | 11 +++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 57a6bcb..b1a5446 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2012-07-02 Nick Clifton + + * write.c (fixup_segment): Only perform the subtraction of an + fx_subsy symbol if MD_APPLY_SYM_VALUE allows it and the symbol is + properly defined. + * config/tc-msp430.h (MD_APPLY_SYM_VALUE): Define. + 2012-06-30 Alan Modra PR gas/14315 diff --git a/gas/config/tc-msp430.h b/gas/config/tc-msp430.h index 2f7aea2..118b46d 100644 --- a/gas/config/tc-msp430.h +++ b/gas/config/tc-msp430.h @@ -73,6 +73,8 @@ and define `md_create_long_jump' to create a long jump. */ #define MD_APPLY_FIX3 +/* Values passed to md_apply_fix don't include symbol values. */ +#define MD_APPLY_SYM_VALUE(FIX) 0 #define TC_HANDLES_FX_DONE diff --git a/gas/write.c b/gas/write.c index 7fb2e8b..a467147 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1004,12 +1004,7 @@ fixup_segment (fixS *fixP, segT this_segment) fixP->fx_subsy = NULL; fixP->fx_pcrel = 1; } - else if (TC_VALIDATE_FIX_SUB (fixP, add_symbol_segment)) - /* If the fix is valid, subtract fx_subsy here. The addition of - fx_addsy will be performed below. Doing this prevents bogus - warnings from the range check below. */ - add_number -= S_GET_VALUE (fixP->fx_subsy); - else + else if (!TC_VALIDATE_FIX_SUB (fixP, add_symbol_segment)) { if (!md_register_arithmetic && (add_symbol_segment == reg_section @@ -1024,6 +1019,10 @@ fixup_segment (fixS *fixP, segT this_segment) S_GET_NAME (fixP->fx_subsy), segment_name (sub_symbol_segment)); } + else if (sub_symbol_segment != undefined_section + && ! bfd_is_com_section (sub_symbol_segment) + && MD_APPLY_SYM_VALUE (fixP)) + add_number -= S_GET_VALUE (fixP->fx_subsy); } if (fixP->fx_addsy) -- cgit v1.1