From 5b3905f13af1f55f88b9aa056323ed2f866d4c12 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 22 May 2013 06:13:59 +0000 Subject: [PATCH] PR binutils/15474 * srec.c (srec_set_section_contents): Properly convert size and offset to address when octets_per_byte is not unity. --- bfd/ChangeLog | 6 ++++++ bfd/srec.c | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 49f3487d16b..5055dc46c24 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2013-05-22 Ralf Dreesen + + PR binutils/15474 + * srec.c (srec_set_section_contents): Properly convert size + and offset to address when octets_per_byte is not unity. + 2013-05-20 Maciej W. Rozycki * elf32-vax.c (elf_vax_instantiate_got_entries): Only set the diff --git a/bfd/srec.c b/bfd/srec.c index 62267733872..ded9e76ca28 100644 --- a/bfd/srec.c +++ b/bfd/srec.c @@ -870,6 +870,7 @@ srec_set_section_contents (bfd *abfd, file_ptr offset, bfd_size_type bytes_to_do) { + int opb = bfd_octets_per_byte (abfd); tdata_type *tdata = abfd->tdata.srec_data; srec_data_list_type *entry; @@ -892,16 +893,16 @@ srec_set_section_contents (bfd *abfd, regardless of the siez of the addresses. */ if (S3Forced) tdata->type = 3; - else if ((section->lma + offset + bytes_to_do - 1) <= 0xffff) + else if ((section->lma + (offset + bytes_to_do) / opb - 1) <= 0xffff) ; /* The default, S1, is OK. */ - else if ((section->lma + offset + bytes_to_do - 1) <= 0xffffff + else if ((section->lma + (offset + bytes_to_do) / opb - 1) <= 0xffffff && tdata->type <= 2) tdata->type = 2; else tdata->type = 3; entry->data = data; - entry->where = section->lma + offset; + entry->where = section->lma + offset / opb; entry->size = bytes_to_do; /* Sort the records by address. Optimize for the common case of -- 2.30.2