bfd/
* elf.c (_bfd_elf_map_sections_to_segments): Set INFO->user_phdrs. * elf-nacl.c (nacl_modify_segment_map): Do nothing if INFO->user_phdrs. (nacl_modify_program_headers): Likewise. include/ * bfdlink.h (struct bfd_link_info): Add new member user_phdrs.
This commit is contained in:
parent
fb57d4525b
commit
d324f6d66b
5 changed files with 35 additions and 8 deletions
|
@ -1,3 +1,9 @@
|
|||
2012-04-09 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* elf.c (_bfd_elf_map_sections_to_segments): Set INFO->user_phdrs.
|
||||
* elf-nacl.c (nacl_modify_segment_map): Do nothing if INFO->user_phdrs.
|
||||
(nacl_modify_program_headers): Likewise.
|
||||
|
||||
2012-04-03 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* elf-nacl.c: New file.
|
||||
|
|
|
@ -62,13 +62,18 @@ segment_nonexecutable_and_has_contents (struct elf_segment_map *seg)
|
|||
The first non-executable PT_LOAD segment appears first in the file
|
||||
and contains the ELF file header and phdrs. */
|
||||
bfd_boolean
|
||||
nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
|
||||
nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
|
||||
{
|
||||
struct elf_segment_map **m = &elf_tdata (abfd)->segment_map;
|
||||
struct elf_segment_map **first_load = NULL;
|
||||
struct elf_segment_map **last_load = NULL;
|
||||
bfd_boolean moved_headers = FALSE;
|
||||
|
||||
if (info != NULL && info->user_phdrs)
|
||||
/* The linker script used PHDRS explicitly, so don't change what the
|
||||
user asked for. */
|
||||
return TRUE;
|
||||
|
||||
while (*m != NULL)
|
||||
{
|
||||
struct elf_segment_map *seg = *m;
|
||||
|
@ -141,6 +146,11 @@ nacl_modify_program_headers (bfd *abfd,
|
|||
Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr;
|
||||
Elf_Internal_Phdr *p = phdr;
|
||||
|
||||
if (info != NULL && info->user_phdrs)
|
||||
/* The linker script used PHDRS explicitly, so don't change what the
|
||||
user asked for. */
|
||||
return TRUE;
|
||||
|
||||
/* Find the PT_LOAD that contains the headers (should be the first). */
|
||||
while (*m != NULL)
|
||||
{
|
||||
|
|
|
@ -3744,6 +3744,10 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
|
|||
bfd_boolean no_user_phdrs;
|
||||
|
||||
no_user_phdrs = elf_tdata (abfd)->segment_map == NULL;
|
||||
|
||||
if (info != NULL)
|
||||
info->user_phdrs = !no_user_phdrs;
|
||||
|
||||
if (no_user_phdrs && bfd_count_sections (abfd) != 0)
|
||||
{
|
||||
asection *s;
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2012-04-09 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* bfdlink.h (struct bfd_link_info): Add new member user_phdrs.
|
||||
|
||||
2012-03-15 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* dis-asm.h (disassemble_init_powerpc): Declare.
|
||||
|
|
|
@ -405,6 +405,9 @@ struct bfd_link_info
|
|||
/* TRUE if we should warn alternate ELF machine code. */
|
||||
unsigned int warn_alternate_em: 1;
|
||||
|
||||
/* TRUE if the linker script contained an explicit PHDRS command. */
|
||||
unsigned int user_phdrs: 1;
|
||||
|
||||
/* Char that may appear as the first char of a symbol, but should be
|
||||
skipped (like symbol_leading_char) when looking up symbols in
|
||||
wrap_hash. Used by PowerPC Linux for 'dot' symbols. */
|
||||
|
|
Loading…
Add table
Reference in a new issue