diff options
author | Alan Modra <amodra@gmail.com> | 2014-10-14 13:36:20 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2014-10-14 14:36:35 +1030 |
commit | 65879393f04e14a9ab8797a8e66e0ec8d94108b5 (patch) | |
tree | 7f4300ec569ff44c6fd1c412f4ddad82d040477c /bfd/libbfd.c | |
parent | 9495b2e66f772783eb89cfa755e1e09641fa44eb (diff) | |
download | gdb-65879393f04e14a9ab8797a8e66e0ec8d94108b5.zip gdb-65879393f04e14a9ab8797a8e66e0ec8d94108b5.tar.gz gdb-65879393f04e14a9ab8797a8e66e0ec8d94108b5.tar.bz2 |
Avoid undefined behaviour with signed expressions
PR 17453
bfd/
* libbfd.c (COERCE16, COERCE32, COERCE64): Use unsigned types.
(EIGHT_GAZILLION): Delete.
binutils/
* dwarf.c (read_leb128): Avoid signed overflow.
(read_debug_line_header): Likewise.
gas/
* config/tc-i386.c (fits_in_signed_long): Use unsigned param and
expression to avoid signed overflow.
(fits_in_signed_byte, fits_in_unsigned_byte, fits_in_unsigned_word,
fits_in_signed_word, fits_in_unsigned_long): Similarly.
* expr.c (operand <'-'>): Avoid signed overflow.
* read.c (s_comm_internal): Likewise.
Diffstat (limited to 'bfd/libbfd.c')
-rw-r--r-- | bfd/libbfd.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 6676dff..d98a9d2 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -548,11 +548,10 @@ DESCRIPTION .*/ /* Sign extension to bfd_signed_vma. */ -#define COERCE16(x) (((bfd_signed_vma) (x) ^ 0x8000) - 0x8000) -#define COERCE32(x) (((bfd_signed_vma) (x) ^ 0x80000000) - 0x80000000) -#define EIGHT_GAZILLION ((bfd_int64_t) 1 << 63) +#define COERCE16(x) (((bfd_vma) (x) ^ 0x8000) - 0x8000) +#define COERCE32(x) (((bfd_vma) (x) ^ 0x80000000) - 0x80000000) #define COERCE64(x) \ - (((bfd_int64_t) (x) ^ EIGHT_GAZILLION) - EIGHT_GAZILLION) + (((bfd_uint64_t) (x) ^ ((bfd_uint64_t) 1 << 63)) - ((bfd_uint64_t) 1 << 63)) bfd_vma bfd_getb16 (const void *p) |