diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-mn10300.c | 19 | ||||
-rw-r--r-- | gas/config/tc-mn10300.h | 13 |
3 files changed, 27 insertions, 12 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 3b640e7..06fd9d1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2007-11-13 Nick Clifton <nickc@redhat.com> + + * config/tc-mn10300.c (mn10300_force_relocation): Force a reloc to + be generated for alignment fixups. + * config/tc-mn10300.h (TC_FORCE_RELOCATION): Call + mn10300_force_relocation. + 2007-11-12 Nick Clifton <nickc@redhat.com> PR gas/5269 diff --git a/gas/config/tc-mn10300.c b/gas/config/tc-mn10300.c index e16a764..5d21cb5 100644 --- a/gas/config/tc-mn10300.c +++ b/gas/config/tc-mn10300.c @@ -2571,11 +2571,9 @@ mn10300_allow_local_subtract (expressionS * left, expressionS * right, segT sect void mn10300_handle_align (fragS *frag) { - if (! linkrelax) - return; - - if ((frag->fr_type == rs_align - || frag->fr_type == rs_align_code) + if (linkrelax + && (frag->fr_type == rs_align + || frag->fr_type == rs_align_code) && frag->fr_address + frag->fr_fix > 0 && frag->fr_offset > 1 && now_seg != bss_section @@ -2590,3 +2588,14 @@ mn10300_handle_align (fragS *frag) fix_new (frag, frag->fr_fix, 0, & abs_symbol, frag->fr_offset, FALSE, BFD_RELOC_MN10300_ALIGN); } + +bfd_boolean +mn10300_force_relocation (struct fix * fixp) +{ + if (linkrelax + && (fixp->fx_pcrel + || fixp->fx_r_type == BFD_RELOC_MN10300_ALIGN)) + return TRUE; + + return generic_force_reloc (fixp); +} diff --git a/gas/config/tc-mn10300.h b/gas/config/tc-mn10300.h index ca51eda..63ca74a 100644 --- a/gas/config/tc-mn10300.h +++ b/gas/config/tc-mn10300.h @@ -26,8 +26,8 @@ #define DIFF_EXPR_OK #define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_" -#define TC_FORCE_RELOCATION(FIX) \ - (generic_force_reloc (FIX)) +#define TC_FORCE_RELOCATION(FIX) mn10300_force_relocation (FIX) +extern bfd_boolean mn10300_force_relocation (struct fix *); #define TC_FORCE_RELOCATION_LOCAL(FIX) \ (!(FIX)->fx_pcrel \ @@ -36,14 +36,13 @@ || (FIX)->fx_r_type == BFD_RELOC_32_GOT_PCREL \ || TC_FORCE_RELOCATION (FIX)) -#define md_parse_name(name, exprP, mode, nextcharP) \ - mn10300_parse_name ((name), (exprP), (mode), (nextcharP)) -int mn10300_parse_name PARAMS ((char const *, expressionS *, - enum expr_mode, char *)); +#define md_parse_name(NAME, EXPRP, MODE, NEXTCHARP) \ + mn10300_parse_name ((NAME), (EXPRP), (MODE), (NEXTCHARP)) +int mn10300_parse_name (char const *, expressionS *, enum expr_mode, char *); #define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \ mn10300_cons_fix_new ((FRAG), (OFF), (LEN), (EXP)) -void mn10300_cons_fix_new PARAMS ((fragS *, int, int, expressionS *)); +void mn10300_cons_fix_new (fragS *, int, int, expressionS *); /* This is used to construct expressions out of @GOTOFF, @PLT and @GOT symbols. The relocation type is stored in X_md. */ |