diff options
author | Ian Lance Taylor <ian@airs.com> | 1997-01-03 17:14:02 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1997-01-03 17:14:02 +0000 |
commit | a78bc551965be8b006fcee34670ce0345ff1a374 (patch) | |
tree | 8624c6172560300f153702d11cef5a7711721e42 /gas/config/obj-coff.c | |
parent | de224d6a49136398b8d0d151b7079fd4b1ede8a3 (diff) | |
download | gdb-a78bc551965be8b006fcee34670ce0345ff1a374.zip gdb-a78bc551965be8b006fcee34670ce0345ff1a374.tar.gz gdb-a78bc551965be8b006fcee34670ce0345ff1a374.tar.bz2 |
* config/tc-m68k.c (m68k_ip): Accept 'B' as a size for an
immediate value.
(md_assemble): If the size is 'B', set fx_signed.
(md_apply_fix_2): Use fx_signed when checking for overflow.
* write.h (struct fix): Add fx_signed field.
* write.c (fix_new_internal): Initialize fx_no_overflow and
fx_signed fields.
(fixup_segment): Use fx_signed when checking for overflow.
* config/obj-coff.c (fixup_segment): Check fx_no_overflow and
fx_signed when checking for overflow.
Diffstat (limited to 'gas/config/obj-coff.c')
-rw-r--r-- | gas/config/obj-coff.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c index d06212e..695647a 100644 --- a/gas/config/obj-coff.c +++ b/gas/config/obj-coff.c @@ -1,5 +1,5 @@ /* coff object file format - Copyright (C) 1989, 90, 91, 92, 93, 94, 95, 1996 + Copyright (C) 1989, 90, 91, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GAS. @@ -4083,17 +4083,21 @@ fixup_segment (segP, this_segment_type) #endif } /* if pcrel */ - if (!fixP->fx_bit_fixP) + if (!fixP->fx_bit_fixP && ! fixP->fx_no_overflow) { #ifndef TC_M88K /* The m88k uses the offset field of the reloc to get around this problem. */ if ((size == 1 - && (add_number & ~0xFF) - && ((add_number & ~0xFF) != (-1 & ~0xFF))) + && ((add_number & ~0xFF) + || (fixP->fx_signed && (add_number & 0x80))) + && ((add_number & ~0xFF) != (-1 & ~0xFF) + || (fixP->fx_signed && (add_number & 0x80) == 0))) || (size == 2 - && (add_number & ~0xFFFF) - && ((add_number & ~0xFFFF) != (-1 & ~0xFFFF)))) + && ((add_number & ~0xFFFF) + || (fixP->fx_signed && (add_number & 0x8000))) + && ((add_number & ~0xFFFF) != (-1 & ~0xFFFF) + || (fixP->fx_signed && (add_number & 0x8000) == 0)))) { as_bad_where (fixP->fx_file, fixP->fx_line, "Value of %ld too large for field of %d bytes at 0x%lx", |