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>
|
2020-03-09 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* wasm-module.c (wasm_scan): Sanity check file name length
|
* wasm-module.c (wasm_scan): Sanity check file name length
|
||||||
|
@ -811,16 +811,15 @@ ihex_write_object_contents (bfd *abfd)
|
|||||||
if (count > CHUNK)
|
if (count > CHUNK)
|
||||||
now = CHUNK;
|
now = CHUNK;
|
||||||
|
|
||||||
if (where > segbase + extbase + 0xffff)
|
if (where < extbase
|
||||||
|
|| where - extbase < segbase
|
||||||
|
|| where - extbase - segbase > 0xffff)
|
||||||
{
|
{
|
||||||
bfd_byte addr[2];
|
bfd_byte addr[2];
|
||||||
|
|
||||||
/* We need a new base address. */
|
/* 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;
|
segbase = where & 0xf0000;
|
||||||
addr[0] = (bfd_byte)(segbase >> 12) & 0xff;
|
addr[0] = (bfd_byte)(segbase >> 12) & 0xff;
|
||||||
addr[1] = (bfd_byte)(segbase >> 4) & 0xff;
|
addr[1] = (bfd_byte)(segbase >> 4) & 0xff;
|
||||||
|
Loading…
Reference in New Issue
Block a user