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:
parent
dcd9adc5cb
commit
d2eb0fb5a0
@ -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
|
||||
|
18
bfd/ihex.c
18
bfd/ihex.c
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user