mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 04:29:49 +00:00
bfd/
* elf.c (assign_file_positions_for_load_sections): Use header_size to avoid moving the load address of file headers. (assign_file_positions_for_load_sections): Set header_size for segments containing the file header. include/elf/ * internal.h (struct elf_segment_map): Add header_size field.
This commit is contained in:
parent
4bc2510145
commit
2b0bc0884c
@ -1,3 +1,10 @@
|
|||||||
|
2008-11-14 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
|
* elf.c (assign_file_positions_for_load_sections): Use header_size
|
||||||
|
to avoid moving the load address of file headers.
|
||||||
|
(assign_file_positions_for_load_sections): Set header_size for
|
||||||
|
segments containing the file header.
|
||||||
|
|
||||||
2008-11-14 Tristan Gingold <gingold@adacore.com>
|
2008-11-14 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
* configure.com: Handle bfd_default_target_size, BFD_HOST_LONG_LONG,
|
* configure.com: Handle bfd_default_target_size, BFD_HOST_LONG_LONG,
|
||||||
|
19
bfd/elf.c
19
bfd/elf.c
@ -4158,6 +4158,7 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
bfd_size_type maxpagesize;
|
bfd_size_type maxpagesize;
|
||||||
unsigned int alloc;
|
unsigned int alloc;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
|
bfd_vma header_pad = 0;
|
||||||
|
|
||||||
if (link_info == NULL
|
if (link_info == NULL
|
||||||
&& !_bfd_elf_map_sections_to_segments (abfd, link_info))
|
&& !_bfd_elf_map_sections_to_segments (abfd, link_info))
|
||||||
@ -4165,7 +4166,11 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
|
|
||||||
alloc = 0;
|
alloc = 0;
|
||||||
for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
|
for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
|
||||||
|
{
|
||||||
++alloc;
|
++alloc;
|
||||||
|
if (m->header_size)
|
||||||
|
header_pad = m->header_size;
|
||||||
|
}
|
||||||
|
|
||||||
elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
|
elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
|
||||||
elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
|
elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
|
||||||
@ -4208,6 +4213,11 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
|
|
||||||
off = bed->s->sizeof_ehdr;
|
off = bed->s->sizeof_ehdr;
|
||||||
off += alloc * bed->s->sizeof_phdr;
|
off += alloc * bed->s->sizeof_phdr;
|
||||||
|
if (header_pad < (bfd_vma) off)
|
||||||
|
header_pad = 0;
|
||||||
|
else
|
||||||
|
header_pad -= off;
|
||||||
|
off += header_pad;
|
||||||
|
|
||||||
for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0;
|
for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0;
|
||||||
m != NULL;
|
m != NULL;
|
||||||
@ -4395,6 +4405,11 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
|
|
||||||
p->p_filesz += alloc * bed->s->sizeof_phdr;
|
p->p_filesz += alloc * bed->s->sizeof_phdr;
|
||||||
p->p_memsz += alloc * bed->s->sizeof_phdr;
|
p->p_memsz += alloc * bed->s->sizeof_phdr;
|
||||||
|
if (m->count)
|
||||||
|
{
|
||||||
|
p->p_filesz += header_pad;
|
||||||
|
p->p_memsz += header_pad;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->p_type == PT_LOAD
|
if (p->p_type == PT_LOAD
|
||||||
@ -5877,6 +5892,10 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
|
|||||||
phdr_included = TRUE;
|
phdr_included = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (map->includes_filehdr && first_section)
|
||||||
|
/* We need to keep the space used by the headers fixed. */
|
||||||
|
map->header_size = first_section->vma - segment->p_vaddr;
|
||||||
|
|
||||||
if (!map->includes_phdrs
|
if (!map->includes_phdrs
|
||||||
&& !map->includes_filehdr
|
&& !map->includes_filehdr
|
||||||
&& map->p_paddr_valid)
|
&& map->p_paddr_valid)
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2008-11-14 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
|
* internal.h (struct elf_segment_map): Add header_size field.
|
||||||
|
|
||||||
2008-10-13 Ulrich Weigand <uweigand@de.ibm.com>
|
2008-10-13 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
* common.h (AT_BASE_PLATFORM, AT_EXECFN): Define.
|
* common.h (AT_BASE_PLATFORM, AT_EXECFN): Define.
|
||||||
|
@ -266,6 +266,8 @@ struct elf_segment_map
|
|||||||
bfd_vma p_align;
|
bfd_vma p_align;
|
||||||
/* Segment size in file and memory */
|
/* Segment size in file and memory */
|
||||||
bfd_vma p_size;
|
bfd_vma p_size;
|
||||||
|
/* Required size of filehdr + phdrs, if non-zero */
|
||||||
|
bfd_vma header_size;
|
||||||
/* Whether the p_flags field is valid; if not, the flags are based
|
/* Whether the p_flags field is valid; if not, the flags are based
|
||||||
on the section flags. */
|
on the section flags. */
|
||||||
unsigned int p_flags_valid : 1;
|
unsigned int p_flags_valid : 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user