diff options
author | Hans-Peter Nilsson <hp@bitrange.com> | 2020-04-01 04:03:46 +0200 |
---|---|---|
committer | Hans-Peter Nilsson <hp@bitrange.com> | 2020-04-01 04:03:46 +0200 |
commit | 7b948a2580d34e7e93bef0527ca853e22515dec4 (patch) | |
tree | 7e880c1a825c9c4172eee617ebee9470796efcda /bfd/mmo.c | |
parent | 283b7aa1343c29d9c0cdee6312da3d5a61a03f15 (diff) | |
download | binutils-7b948a2580d34e7e93bef0527ca853e22515dec4.zip binutils-7b948a2580d34e7e93bef0527ca853e22515dec4.tar.gz binutils-7b948a2580d34e7e93bef0527ca853e22515dec4.tar.bz2 |
mmo.c: Fix ld testsuite regression "objcopy executable (pr25662)".
* mmo.c (mmo_scan): Create .text section only when needed, not
from the start.
For the test-case at hand, the .data section is created and output
first by the linker, but the mmo input-reader mmo_scan always creates
a .text section. Since sections are output in the order in which
they're created, it's output first, breaking the assumption that
obcopy without options (or with -p) creates output identical to its
input. The point of creating it at the top of mmo_scan is a trivial
default assignment for the current section variable "sec". Instead we
now defer the default, creating it only when needed and sec is NULL.
Diffstat (limited to 'bfd/mmo.c')
-rw-r--r-- | bfd/mmo.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -1588,7 +1588,7 @@ mmo_scan (bfd *abfd) unsigned int lineno = 1; bfd_boolean error = FALSE; bfd_vma vma = 0; - asection *sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME); + asection *sec = NULL; asection *non_spec_sec = NULL; bfd_vma non_spec_vma = 0; bfd_size_type nbytes_read = 0; @@ -1646,6 +1646,8 @@ mmo_scan (bfd *abfd) goto error_return; vma &= ~3; + if (sec == NULL) + sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME); mmo_xore_32 (sec, vma, bfd_get_32 (abfd, buf)); vma += 4; lineno++; @@ -2038,6 +2040,8 @@ mmo_scan (bfd *abfd) else { /* This wasn't a lopcode, so store it in the current section. */ + if (sec == NULL) + sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME); mmo_xore_32 (sec, vma & ~3, bfd_get_32 (abfd, buf)); vma += 4; vma &= ~3; |