aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-mn10300.c19
-rw-r--r--gas/config/tc-mn10300.h13
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. */