diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf.c | 36 |
2 files changed, 41 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 51f9a90..107403d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2002-06-06 David Heine <dlheine@tensilica.com> + + * elf.c (assign_file_positions_for_segments): Remove unallocated + sections from the section to segment mapping for PT_LOAD segments. + Update comment about empty loadable segments. + 2002-06-06 Richard Sandiford <rsandifo@redhat.com> * stabs.c (_bfd_link_section_stabs): Check that the symbol offset @@ -44,7 +50,7 @@ * elf64-sh64.c (sh_elf64_get_relocated_section_contents): Likewise. * elfxx-ia64.c (elfNN_ia64_relax_section): Likewise. -Wed Jun 5 20:43:27 2002 J"orn Rennecke <joern.rennecke@superh.com> +2002-06-05 J"orn Rennecke <joern.rennecke@superh.com> * config.bfd (sh64l*-*-elf*, shl*-*-elf*): New configurations. @@ -3455,6 +3455,37 @@ assign_file_positions_for_segments (abfd) if (! map_sections_to_segments (abfd)) return false; } + else + { + /* The placement algorithm assumes that non allocated sections are + not in PT_LOAD segments. We ensure this here by removing such + sections from the segment map. */ + for (m = elf_tdata (abfd)->segment_map; + m != NULL; + m = m->next) + { + unsigned int new_count; + unsigned int i; + + if (m->p_type != PT_LOAD) + continue; + + new_count = 0; + for (i = 0; i < m->count; i ++) + { + if ((m->sections[i]->flags & SEC_ALLOC) != 0) + { + if (i != new_count) + m->sections[new_count] = m->sections[i]; + + new_count ++; + } + } + + if (new_count != m->count) + m->count = new_count; + } + } if (bed->elf_backend_modify_segment_map) { @@ -4610,10 +4641,11 @@ copy_private_bfd_data (ibfd, obfd) { /* Special segments, such as the PT_PHDR segment, may contain no sections, but ordinary, loadable segments should contain - something. */ + something. They are allowed by the ELF spec however, so only + a warning is produced. */ if (segment->p_type == PT_LOAD) (*_bfd_error_handler) - (_("%s: warning: Empty loadable segment detected\n"), + (_("%s: warning: Empty loadable segment detected, is this intentional ?\n"), bfd_archive_filename (ibfd)); map->count = 0; |