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>
|
||||
|
||||
* 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
|
||||
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
|
||||
|
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))
|
||||
*failedptr = TRUE;
|
||||
|
||||
if (sh_type == SHT_NOBITS
|
||||
&& elf_elfheader (abfd)->e_phnum == 0)
|
||||
if (sh_type == SHT_NOBITS && asect->size != 0)
|
||||
{
|
||||
/* 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;
|
||||
}
|
||||
|
||||
@ -6039,13 +6038,9 @@ _bfd_elf_init_private_section_data (bfd *ibfd,
|
||||
output BFD section flags have been set to something different.
|
||||
elf_fake_sections will set ELF section type based on BFD
|
||||
section flags. */
|
||||
if (osec->flags == isec->flags || !osec->flags)
|
||||
{
|
||||
BFD_ASSERT (osec->flags == isec->flags
|
||||
|| (!osec->flags
|
||||
&& elf_section_type (osec) == SHT_NULL));
|
||||
elf_section_type (osec) = elf_section_type (isec);
|
||||
}
|
||||
if (elf_section_type (osec) == SHT_NULL
|
||||
&& (osec->flags == isec->flags || !osec->flags))
|
||||
elf_section_type (osec) = elf_section_type (isec);
|
||||
|
||||
/* FIXME: Is this correct for all OS/PROC specific flags? */
|
||||
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>
|
||||
|
||||
* 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. */
|
||||
bfd_map_over_sections (ibfd, setup_section, obfd);
|
||||
|
||||
/* Don't copy headers when creating an ELF format debug info file. */
|
||||
if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
|
||||
&& strip_symbols == STRIP_NONDEBUG)
|
||||
;
|
||||
else
|
||||
setup_bfd_headers (ibfd, obfd);
|
||||
setup_bfd_headers (ibfd, obfd);
|
||||
|
||||
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
|
||||
permit the routine to look at the filtered symbol table, which is
|
||||
important for the ECOFF code at least. */
|
||||
if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
|
||||
&& 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))
|
||||
if (! bfd_copy_private_bfd_data (ibfd, obfd))
|
||||
{
|
||||
non_fatal (_("%s: error copying private BFD data: %s"),
|
||||
bfd_get_filename (obfd),
|
||||
@ -2206,7 +2196,9 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
|
||||
|
||||
if (p != NULL && p->set_flags)
|
||||
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);
|
||||
|
||||
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
|
||||
from the input section to the output section. */
|
||||
if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
|
||||
&& 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))
|
||||
if (!bfd_copy_private_section_data (ibfd, isection, obfd, osection))
|
||||
{
|
||||
err = _("private data");
|
||||
goto loser;
|
||||
|
@ -3516,6 +3516,9 @@ process_program_headers (FILE *file)
|
||||
break;
|
||||
}
|
||||
|
||||
if (sec->sh_type == SHT_NOBITS)
|
||||
break;
|
||||
|
||||
dynamic_addr = sec->sh_offset;
|
||||
dynamic_size = sec->sh_size;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user