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.
This commit is contained in:
parent
283b7aa134
commit
7b948a2580
@ -1,3 +1,8 @@
|
||||
2020-04-01 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* mmo.c (mmo_scan): Create .text section only when needed, not
|
||||
from the start.
|
||||
|
||||
2020-03-31 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Correct bfd_bread
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user