bfd/
* elf.c (elf_fake_sections): Adjust test for SHT_NOBITS sections created by objcopy --only-keep-debug. (_bfd_elf_init_private_section_data): Only change elf_section_type if it is SHT_NULL. binutils/ * objcopy.c (copy_object): Revert 2007-05-11 change. Don't avoid calling bfd_copy_private_bfd_data for ELF STRIP_NONDEBUG. (setup_section): Don't modify flags, and don't avoid calling bfd_copy_private_section_data for ELF STRIP_NONDEBUG. * readelf.c (process_program_headers): Ignore .dynamic of type SHT_NOBITS.
This commit is contained in:
parent
02bf8d82b5
commit
42bb2e3317
@ -1,5 +1,10 @@
|
|||||||
2007-05-30 Alan Modra <amodra@bigpond.net.au>
|
2007-05-30 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* elf.c (elf_fake_sections): Adjust test for SHT_NOBITS sections
|
||||||
|
created by objcopy --only-keep-debug.
|
||||||
|
(_bfd_elf_init_private_section_data): Only change elf_section_type
|
||||||
|
if it is SHT_NULL.
|
||||||
|
|
||||||
* elf.c (assign_file_positions_for_load_sections): Correct sh_type
|
* elf.c (assign_file_positions_for_load_sections): Correct sh_type
|
||||||
to SHT_NOBITS earlier. Base actions in rest of function on sh_type
|
to SHT_NOBITS earlier. Base actions in rest of function on sh_type
|
||||||
and sh_flags instead of bfd section flags. Delete voff and code
|
and sh_flags instead of bfd section flags. Delete voff and code
|
||||||
|
15
bfd/elf.c
15
bfd/elf.c
@ -2907,11 +2907,10 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
|
|||||||
&& !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
|
&& !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
|
||||||
*failedptr = TRUE;
|
*failedptr = TRUE;
|
||||||
|
|
||||||
if (sh_type == SHT_NOBITS
|
if (sh_type == SHT_NOBITS && asect->size != 0)
|
||||||
&& elf_elfheader (abfd)->e_phnum == 0)
|
|
||||||
{
|
{
|
||||||
/* Don't change the header type from NOBITS if we are being
|
/* Don't change the header type from NOBITS if we are being
|
||||||
called for strip/objcopy --only-keep-debug. */
|
called for objcopy --only-keep-debug. */
|
||||||
this_hdr->sh_type = sh_type;
|
this_hdr->sh_type = sh_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6039,13 +6038,9 @@ _bfd_elf_init_private_section_data (bfd *ibfd,
|
|||||||
output BFD section flags have been set to something different.
|
output BFD section flags have been set to something different.
|
||||||
elf_fake_sections will set ELF section type based on BFD
|
elf_fake_sections will set ELF section type based on BFD
|
||||||
section flags. */
|
section flags. */
|
||||||
if (osec->flags == isec->flags || !osec->flags)
|
if (elf_section_type (osec) == SHT_NULL
|
||||||
{
|
&& (osec->flags == isec->flags || !osec->flags))
|
||||||
BFD_ASSERT (osec->flags == isec->flags
|
elf_section_type (osec) = elf_section_type (isec);
|
||||||
|| (!osec->flags
|
|
||||||
&& elf_section_type (osec) == SHT_NULL));
|
|
||||||
elf_section_type (osec) = elf_section_type (isec);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: Is this correct for all OS/PROC specific flags? */
|
/* FIXME: Is this correct for all OS/PROC specific flags? */
|
||||||
elf_section_flags (osec) |= (elf_section_flags (isec)
|
elf_section_flags (osec) |= (elf_section_flags (isec)
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2007-05-30 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* objcopy.c (copy_object): Revert 2007-05-11 change. Don't
|
||||||
|
avoid calling bfd_copy_private_bfd_data for ELF STRIP_NONDEBUG.
|
||||||
|
(setup_section): Don't modify flags, and don't avoid calling
|
||||||
|
bfd_copy_private_section_data for ELF STRIP_NONDEBUG.
|
||||||
|
* readelf.c (process_program_headers): Ignore .dynamic of type
|
||||||
|
SHT_NOBITS.
|
||||||
|
|
||||||
2007-05-29 Alan Modra <amodra@bigpond.net.au>
|
2007-05-29 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* embedspu.sh: Emit SPU ELF image to .data.rel.ro.speelf if
|
* embedspu.sh: Emit SPU ELF image to .data.rel.ro.speelf if
|
||||||
|
@ -1423,12 +1423,7 @@ copy_object (bfd *ibfd, bfd *obfd)
|
|||||||
any output is done. Thus, we traverse all sections multiple times. */
|
any output is done. Thus, we traverse all sections multiple times. */
|
||||||
bfd_map_over_sections (ibfd, setup_section, obfd);
|
bfd_map_over_sections (ibfd, setup_section, obfd);
|
||||||
|
|
||||||
/* Don't copy headers when creating an ELF format debug info file. */
|
setup_bfd_headers (ibfd, obfd);
|
||||||
if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
|
|
||||||
&& strip_symbols == STRIP_NONDEBUG)
|
|
||||||
;
|
|
||||||
else
|
|
||||||
setup_bfd_headers (ibfd, obfd);
|
|
||||||
|
|
||||||
if (add_sections != NULL)
|
if (add_sections != NULL)
|
||||||
{
|
{
|
||||||
@ -1771,12 +1766,7 @@ copy_object (bfd *ibfd, bfd *obfd)
|
|||||||
from the input BFD to the output BFD. This is done last to
|
from the input BFD to the output BFD. This is done last to
|
||||||
permit the routine to look at the filtered symbol table, which is
|
permit the routine to look at the filtered symbol table, which is
|
||||||
important for the ECOFF code at least. */
|
important for the ECOFF code at least. */
|
||||||
if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
|
if (! bfd_copy_private_bfd_data (ibfd, obfd))
|
||||||
&& strip_symbols == STRIP_NONDEBUG)
|
|
||||||
/* Do not copy the private data when creating an ELF format
|
|
||||||
debug info file. We do not want the program headers. */
|
|
||||||
;
|
|
||||||
else if (! bfd_copy_private_bfd_data (ibfd, obfd))
|
|
||||||
{
|
{
|
||||||
non_fatal (_("%s: error copying private BFD data: %s"),
|
non_fatal (_("%s: error copying private BFD data: %s"),
|
||||||
bfd_get_filename (obfd),
|
bfd_get_filename (obfd),
|
||||||
@ -2206,7 +2196,9 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
|
|||||||
|
|
||||||
if (p != NULL && p->set_flags)
|
if (p != NULL && p->set_flags)
|
||||||
flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
|
flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
|
||||||
else if (strip_symbols == STRIP_NONDEBUG && (flags & SEC_ALLOC) != 0)
|
else if (strip_symbols == STRIP_NONDEBUG
|
||||||
|
&& obfd->xvec->flavour != bfd_target_elf_flavour
|
||||||
|
&& (flags & SEC_ALLOC) != 0)
|
||||||
flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
|
flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
|
||||||
|
|
||||||
osection = bfd_make_section_anyway_with_flags (obfd, name, flags);
|
osection = bfd_make_section_anyway_with_flags (obfd, name, flags);
|
||||||
@ -2289,12 +2281,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
|
|||||||
|
|
||||||
/* Allow the BFD backend to copy any private data it understands
|
/* Allow the BFD backend to copy any private data it understands
|
||||||
from the input section to the output section. */
|
from the input section to the output section. */
|
||||||
if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
|
if (!bfd_copy_private_section_data (ibfd, isection, obfd, osection))
|
||||||
&& strip_symbols == STRIP_NONDEBUG)
|
|
||||||
/* Do not copy the private data when creating an ELF format
|
|
||||||
debug info file. We do not want the program headers. */
|
|
||||||
;
|
|
||||||
else if (!bfd_copy_private_section_data (ibfd, isection, obfd, osection))
|
|
||||||
{
|
{
|
||||||
err = _("private data");
|
err = _("private data");
|
||||||
goto loser;
|
goto loser;
|
||||||
|
@ -3516,6 +3516,9 @@ process_program_headers (FILE *file)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sec->sh_type == SHT_NOBITS)
|
||||||
|
break;
|
||||||
|
|
||||||
dynamic_addr = sec->sh_offset;
|
dynamic_addr = sec->sh_offset;
|
||||||
dynamic_size = sec->sh_size;
|
dynamic_size = sec->sh_size;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user