diff options
author | Nick Clifton <nickc@redhat.com> | 2002-06-06 10:03:38 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2002-06-06 10:03:38 +0000 |
commit | 1ed89aa92ed7b3fc5a12f8d670392e5ce67c31b4 (patch) | |
tree | 6083d580dacb1504fcaa3539065d2495f987b82b /bfd/elf.c | |
parent | df3513d4be3a102ad1d7cd73fa15f4bff5434562 (diff) | |
download | gdb-1ed89aa92ed7b3fc5a12f8d670392e5ce67c31b4.zip gdb-1ed89aa92ed7b3fc5a12f8d670392e5ce67c31b4.tar.gz gdb-1ed89aa92ed7b3fc5a12f8d670392e5ce67c31b4.tar.bz2 |
Do not include empty sections in loadable segments.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r-- | bfd/elf.c | 36 |
1 files changed, 34 insertions, 2 deletions
@@ -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; |