aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2013-06-13 08:53:35 +0000
committerNick Clifton <nickc@redhat.com>2013-06-13 08:53:35 +0000
commit909c7f9cbf0b6c33f14a68be54723c89cfbadf8c (patch)
treeb1fabf099649cd60c6f0992894c3ec7c7352cf19
parent479a1f0a6f2b84bceb69def3372e3dc7992f0301 (diff)
downloadgdb-909c7f9cbf0b6c33f14a68be54723c89cfbadf8c.zip
gdb-909c7f9cbf0b6c33f14a68be54723c89cfbadf8c.tar.gz
gdb-909c7f9cbf0b6c33f14a68be54723c89cfbadf8c.tar.bz2
PR gas/15602
* config/tc-m68k.h (TC_CHECK_ADJUSTED_BROKEN_DOT_WORD): Define. * config/tc-m68k.c (tc_m68k_check_adjusted_broken_word): New function. Generates an error if the adjusted offset is out of a 16-bit range.
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/config/tc-m68k.c14
-rw-r--r--gas/config/tc-m68k.h6
3 files changed, 28 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 8c5165b..2113356 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,11 @@
+2013-06-13 Nick Clifton <nickc@redhat.com>
+
+ PR gas/15602
+ * config/tc-m68k.h (TC_CHECK_ADJUSTED_BROKEN_DOT_WORD): Define.
+ * config/tc-m68k.c (tc_m68k_check_adjusted_broken_word): New
+ function. Generates an error if the adjusted offset is out of a
+ 16-bit range.
+
2013-06-12 Sandra Loosemore <sandra@codesourcery.com>
* config/tc-nios2.c (md_apply_fix): Mask constant
diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c
index ea47ba4..d16b5d9 100644
--- a/gas/config/tc-m68k.c
+++ b/gas/config/tc-m68k.c
@@ -8133,3 +8133,17 @@ tc_m68k_frame_initial_instructions (void)
cfi_add_CFA_def_cfa (sp_regno, -DWARF2_CIE_DATA_ALIGNMENT);
cfi_add_CFA_offset (DWARF2_DEFAULT_RETURN_COLUMN, DWARF2_CIE_DATA_ALIGNMENT);
}
+
+/* Check and emit error if broken-word handling has failed to fix up a
+ case-table. This is called from write.c, after doing everything it
+ knows about how to handle broken words. */
+
+void
+tc_m68k_check_adjusted_broken_word (offsetT new_offset, struct broken_word *brokwP)
+{
+ if (new_offset > 32767 || new_offset < -32768)
+ as_bad_where (brokwP->frag->fr_file, brokwP->frag->fr_line,
+ _("Adjusted signed .word (%#lx) overflows: `switch'-statement too large."),
+ (long) new_offset);
+}
+
diff --git a/gas/config/tc-m68k.h b/gas/config/tc-m68k.h
index bcf4607..bf938f2 100644
--- a/gas/config/tc-m68k.h
+++ b/gas/config/tc-m68k.h
@@ -188,3 +188,9 @@ extern void tc_m68k_frame_initial_instructions (void);
/* However, follow compiler's guidance when it specifies encoding for LSDA. */
# define CFI_DIFF_LSDA_OK 1
#endif
+
+struct broken_word;
+#define TC_CHECK_ADJUSTED_BROKEN_DOT_WORD(new_offset, brokw) \
+ tc_m68k_check_adjusted_broken_word ((offsetT) (new_offset), (brokw))
+extern void tc_m68k_check_adjusted_broken_word (offsetT,
+ struct broken_word *);