From 3b95078004bdd59e5381e9a8dd85d895deace44f Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 1 Dec 1995 21:44:38 +0000 Subject: [PATCH] * elf.c (assign_file_positions_for_segments): Sort the sections in each segment. (get_program_header_size): Return the right size if segment_map is not NULL. (copy_private_bfd_data): Don't bother to sort the sections. --- bfd/elf.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/bfd/elf.c b/bfd/elf.c index 87eaa94359..9da5010334 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -1797,6 +1797,12 @@ assign_file_positions_for_segments (abfd) unsigned int i; asection **secpp; + /* If elf_segment_map is not from map_sections_to_segments, the + sections may not be correctly ordered. */ + if (m->count > 0) + qsort (m->sections, (size_t) m->count, sizeof (asection *), + elf_sort_sections); + p->p_type = m->p_type; if (m->p_flags_valid) @@ -2019,6 +2025,17 @@ get_program_header_size (abfd) if (elf_tdata (abfd)->program_header_size != 0) return elf_tdata (abfd)->program_header_size; + if (elf_tdata (abfd)->segment_map != NULL) + { + struct elf_segment_map *m; + + segs = 0; + for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) + ++segs; + elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr; + return elf_tdata (abfd)->program_header_size; + } + /* Assume we will need exactly two PT_LOAD segments: one for text and one for data. */ segs = 2; @@ -2539,9 +2556,6 @@ copy_private_bfd_data (ibfd, obfd) } } BFD_ASSERT (isec == csecs); - if (csecs > 0) - qsort (m->sections, (size_t) csecs, sizeof (asection *), - elf_sort_sections); m->count = csecs; *pm = m;