From 909c7f9cbf0b6c33f14a68be54723c89cfbadf8c Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 13 Jun 2013 08:53:35 +0000 Subject: [PATCH] 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. --- gas/ChangeLog | 8 ++++++++ gas/config/tc-m68k.c | 14 ++++++++++++++ gas/config/tc-m68k.h | 6 ++++++ 3 files changed, 28 insertions(+) diff --git a/gas/ChangeLog b/gas/ChangeLog index 8c5165bd8f6..21133563c60 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2013-06-13 Nick Clifton + + 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 * config/tc-nios2.c (md_apply_fix): Mask constant diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c index ea47ba402fd..d16b5d97d91 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 bcf4607ebeb..bf938f26762 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 *); -- 2.30.2