* 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.
This commit is contained in:
Ian Lance Taylor 1995-12-01 21:44:38 +00:00
parent ce0ee4bf49
commit 3b95078004
1 changed files with 17 additions and 3 deletions

View File

@ -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;