diff options
author | Nick Clifton <nickc@redhat.com> | 2013-06-13 08:53:35 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-06-13 08:53:35 +0000 |
commit | 909c7f9cbf0b6c33f14a68be54723c89cfbadf8c (patch) | |
tree | b1fabf099649cd60c6f0992894c3ec7c7352cf19 | |
parent | 479a1f0a6f2b84bceb69def3372e3dc7992f0301 (diff) | |
download | gdb-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/ChangeLog | 8 | ||||
-rw-r--r-- | gas/config/tc-m68k.c | 14 | ||||
-rw-r--r-- | gas/config/tc-m68k.h | 6 |
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 *); |