mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-01 01:45:51 +08:00
* elf.c (write_zeros): New function.
(assign_file_positions_for_load_sections): Allocate file space for NOBITS sections that are followed by PROGBITS sections in a segment.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2009-12-08 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* elf.c (write_zeros): New function.
|
||||||
|
(assign_file_positions_for_load_sections): Allocate file space for
|
||||||
|
NOBITS sections that are followed by PROGBITS sections in a segment.
|
||||||
|
|
||||||
2009-12-03 Tristan Gingold <gingold@adacore.com>
|
2009-12-03 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
* mach-o.c (bfd_mach_o_make_bfd_section): Force debug flags for
|
* mach-o.c (bfd_mach_o_make_bfd_section): Force debug flags for
|
||||||
|
25
bfd/elf.c
25
bfd/elf.c
@ -4127,6 +4127,22 @@ print_segment_map (const struct elf_segment_map *m)
|
|||||||
putc ('\n',stderr);
|
putc ('\n',stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
|
||||||
|
{
|
||||||
|
void *buf;
|
||||||
|
bfd_boolean ret;
|
||||||
|
|
||||||
|
if (bfd_seek (abfd, pos, SEEK_SET) != 0)
|
||||||
|
return FALSE;
|
||||||
|
buf = bfd_zmalloc (len);
|
||||||
|
if (buf == NULL)
|
||||||
|
return FALSE;
|
||||||
|
ret = bfd_bwrite (buf, len, abfd) == len;
|
||||||
|
free (buf);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Assign file positions to the sections based on the mapping from
|
/* Assign file positions to the sections based on the mapping from
|
||||||
sections to segments. This function also sets up some fields in
|
sections to segments. This function also sets up some fields in
|
||||||
the file header. */
|
the file header. */
|
||||||
@ -4448,6 +4464,15 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
|
|
||||||
if (this_hdr->sh_type != SHT_NOBITS)
|
if (this_hdr->sh_type != SHT_NOBITS)
|
||||||
{
|
{
|
||||||
|
if (p->p_filesz + adjust < p->p_memsz)
|
||||||
|
{
|
||||||
|
/* We have a PROGBITS section following NOBITS ones.
|
||||||
|
Allocate file space for the NOBITS section(s) and
|
||||||
|
zero it. */
|
||||||
|
adjust = p->p_memsz - p->p_filesz;
|
||||||
|
if (!write_zeros (abfd, off, adjust))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
off += adjust;
|
off += adjust;
|
||||||
p->p_filesz += adjust;
|
p->p_filesz += adjust;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user