Stop corruption of ihex output shen addresses are sign extended.

PR 23699
	* ihex.c (ihex_write_object_contents): Check for sign extended
	addresses that cannot be supported in the ihex format.
This commit is contained in:
rhn 2018-11-09 14:09:44 +00:00 committed by Nick Clifton
parent dcd9adc5cb
commit d2eb0fb5a0
2 changed files with 24 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2018-11-09 rhn <sowaac.rhn@porcupinefactory.org>
PR 23699
* ihex.c (ihex_write_object_contents): Check for sign extended
addresses that cannot be supported in the ihex format.
2018-11-09 Claudiu Zissulescu <claziss@synopsys.com>
* arc-got.h (arc_get_local_got_ents): Revamp it; use

View File

@ -775,8 +775,26 @@ 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;
}
where &= 0xffffffff;
p = l->data;
count = l->size;