PR25648, objcopy SIGSEGV in ihex_write_record
ihex_set_section_contents sorts records stored on the tdata.ihex_data list by address, but ihex_write_object_contents went too far in assuming they were not overlapping. This patch fixes the problem by not assuming anything about addresses in ihex_write_object_contents. PR 25648 * ihex.c (ihex_write_object_contents): Don't assume ordering of addresses here. Remove dead code.
This commit is contained in:
parent
384f368958
commit
6b5e16ffd3
|
@ -1,3 +1,9 @@
|
|||
2020-03-10 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 25648
|
||||
* ihex.c (ihex_write_object_contents): Don't assume ordering of
|
||||
addresses here.
|
||||
|
||||
2020-03-09 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* wasm-module.c (wasm_scan): Sanity check file name length
|
||||
|
|
|
@ -811,16 +811,15 @@ ihex_write_object_contents (bfd *abfd)
|
|||
if (count > CHUNK)
|
||||
now = CHUNK;
|
||||
|
||||
if (where > segbase + extbase + 0xffff)
|
||||
if (where < extbase
|
||||
|| where - extbase < segbase
|
||||
|| where - extbase - segbase > 0xffff)
|
||||
{
|
||||
bfd_byte addr[2];
|
||||
|
||||
/* We need a new base address. */
|
||||
if (where <= 0xfffff)
|
||||
if (extbase == 0 && where <= 0xfffff)
|
||||
{
|
||||
/* The addresses should be sorted. */
|
||||
BFD_ASSERT (extbase == 0);
|
||||
|
||||
segbase = where & 0xf0000;
|
||||
addr[0] = (bfd_byte)(segbase >> 12) & 0xff;
|
||||
addr[1] = (bfd_byte)(segbase >> 4) & 0xff;
|
||||
|
|
Loading…
Reference in New Issue