mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
* 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:
20
bfd/elf.c
20
bfd/elf.c
@ -1797,6 +1797,12 @@ assign_file_positions_for_segments (abfd)
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
asection **secpp;
|
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;
|
p->p_type = m->p_type;
|
||||||
|
|
||||||
if (m->p_flags_valid)
|
if (m->p_flags_valid)
|
||||||
@ -2019,6 +2025,17 @@ get_program_header_size (abfd)
|
|||||||
if (elf_tdata (abfd)->program_header_size != 0)
|
if (elf_tdata (abfd)->program_header_size != 0)
|
||||||
return elf_tdata (abfd)->program_header_size;
|
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
|
/* Assume we will need exactly two PT_LOAD segments: one for text
|
||||||
and one for data. */
|
and one for data. */
|
||||||
segs = 2;
|
segs = 2;
|
||||||
@ -2539,9 +2556,6 @@ copy_private_bfd_data (ibfd, obfd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
BFD_ASSERT (isec == csecs);
|
BFD_ASSERT (isec == csecs);
|
||||||
if (csecs > 0)
|
|
||||||
qsort (m->sections, (size_t) csecs, sizeof (asection *),
|
|
||||||
elf_sort_sections);
|
|
||||||
m->count = csecs;
|
m->count = csecs;
|
||||||
|
|
||||||
*pm = m;
|
*pm = m;
|
||||||
|
Reference in New Issue
Block a user