X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bfd%2Fihex.c;h=101e0a76155fc48f95312c08307739cf9c1ee5eb;hb=9d1c2eb1b84fb4390148378278d111150b570d06;hp=b576ac72c5932e99cd40d4ad6ab93ecd642e054a;hpb=d2eb0fb5a04e2e2ad374f56c7107f2421cdd93c9;p=external%2Fbinutils.git diff --git a/bfd/ihex.c b/bfd/ihex.c index b576ac7..101e0a7 100644 --- a/bfd/ihex.c +++ b/bfd/ihex.c @@ -1,5 +1,5 @@ /* BFD back-end for Intel Hex objects. - Copyright (C) 1995-2018 Free Software Foundation, Inc. + Copyright (C) 1995-2019 Free Software Foundation, Inc. Written by Ian Lance Taylor of Cygnus Support . This file is part of BFD, the Binary File Descriptor library. @@ -775,25 +775,29 @@ ihex_write_object_contents (bfd *abfd) bfd_vma where; bfd_byte *p; bfd_size_type count; - const bfd_vma sign = (bfd_vma) 0xffffffff80000000ULL; - const bfd_vma top = (bfd_vma) 0xffffffff00000000ULL; where = l->where; - /* Check for unacceptable addresses sign extension. - See PR 23699 for more details. */ - if ((where & sign) == top - || ((where & top) != 0 && (where & top) != top)) - { - _bfd_error_handler - /* xgettext:c-format */ - (_("%pB 64-bit address %#" PRIx64 " out of range for Intel Hex file"), - abfd, (uint64_t) where); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - +#ifdef BFD64 + /* IHex only supports 32-bit addresses, and we want to check + that 64-bit addresses are in range. This isn't quite as + obvious as it may seem, since some targets have 32-bit + addresses that are sign extended to 64 bits. So complain + only if addresses overflow both unsigned and signed 32-bit + integers. */ + if (where > 0xffffffff + && where + 0x80000000 > 0xffffffff) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB 64-bit address %#" PRIx64 + " out of range for Intel Hex file"), + abfd, (uint64_t) where); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } where &= 0xffffffff; +#endif p = l->data; count = l->size;