forked from Imagelibrary/binutils-gdb
* elf-bfd.h (struct elf_backend_data): Add default_execstack.
* elflink.c (bfd_elf_size_dynamic_sections): Heed default_execstack. * elfxx-target.h (elf_backend_default_execstack): Define to 1. (elfNN_bed): Init new field. * elf64-ppc.c (elf_backend_default_execstack): Define to 0.
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
2007-02-19 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* elf-bfd.h (struct elf_backend_data): Add default_execstack.
|
||||||
|
* elflink.c (bfd_elf_size_dynamic_sections): Heed default_execstack.
|
||||||
|
* elfxx-target.h (elf_backend_default_execstack): Define to 1.
|
||||||
|
(elfNN_bed): Init new field.
|
||||||
|
* elf64-ppc.c (elf_backend_default_execstack): Define to 0.
|
||||||
|
|
||||||
2007-02-17 Mark Mitchell <mark@codesourcery.com>
|
2007-02-17 Mark Mitchell <mark@codesourcery.com>
|
||||||
Nathan Sidwell <nathan@codesourcery.com>
|
Nathan Sidwell <nathan@codesourcery.com>
|
||||||
Vladimir Prus <vladimir@codesourcery.com
|
Vladimir Prus <vladimir@codesourcery.com
|
||||||
|
|||||||
@@ -1106,10 +1106,17 @@ struct elf_backend_data
|
|||||||
unsigned can_refcount : 1;
|
unsigned can_refcount : 1;
|
||||||
unsigned want_got_sym : 1;
|
unsigned want_got_sym : 1;
|
||||||
unsigned want_dynbss : 1;
|
unsigned want_dynbss : 1;
|
||||||
/* Targets which do not support physical addressing often require
|
|
||||||
that the p_paddr field in the section header to be set to zero.
|
/* Targets which do not support physical addressing often require
|
||||||
This field indicates whether this behavior is required. */
|
that the p_paddr field in the section header to be set to zero.
|
||||||
|
This field indicates whether this behavior is required. */
|
||||||
unsigned want_p_paddr_set_to_zero : 1;
|
unsigned want_p_paddr_set_to_zero : 1;
|
||||||
|
|
||||||
|
/* True if an object file lacking a .note.GNU-stack section
|
||||||
|
should be assumed to be requesting exec stack. At least one
|
||||||
|
other file in the link needs to have a .note.GNU-stack section
|
||||||
|
for a PT_GNU_STACK segment to be created. */
|
||||||
|
unsigned default_execstack : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Information stored for each BFD section in an ELF file. This
|
/* Information stored for each BFD section in an ELF file. This
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ static bfd_vma opd_entry_value
|
|||||||
#define elf_backend_can_gc_sections 1
|
#define elf_backend_can_gc_sections 1
|
||||||
#define elf_backend_can_refcount 1
|
#define elf_backend_can_refcount 1
|
||||||
#define elf_backend_rela_normal 1
|
#define elf_backend_rela_normal 1
|
||||||
|
#define elf_backend_default_execstack 0
|
||||||
|
|
||||||
#define bfd_elf64_mkobject ppc64_elf_mkobject
|
#define bfd_elf64_mkobject ppc64_elf_mkobject
|
||||||
#define bfd_elf64_bfd_reloc_type_lookup ppc64_elf_reloc_type_lookup
|
#define bfd_elf64_bfd_reloc_type_lookup ppc64_elf_reloc_type_lookup
|
||||||
@@ -1197,7 +1198,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
|
|||||||
|
|
||||||
/* Like R_PPC64_PLTGOT16, but for instructions with a DS field. */
|
/* Like R_PPC64_PLTGOT16, but for instructions with a DS field. */
|
||||||
/* FIXME: R_PPC64_PLTGOT16_DS not implemented. */
|
/* FIXME: R_PPC64_PLTGOT16_DS not implemented. */
|
||||||
HOWTO (R_PPC64_PLTGOT16_DS, /* type */
|
HOWTO (R_PPC64_PLTGOT16_DS, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
16, /* bitsize */
|
16, /* bitsize */
|
||||||
|
|||||||
@@ -5237,6 +5237,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|
|||||||
if (!is_elf_hash_table (info->hash))
|
if (!is_elf_hash_table (info->hash))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
bed = get_elf_backend_data (output_bfd);
|
||||||
elf_tdata (output_bfd)->relro = info->relro;
|
elf_tdata (output_bfd)->relro = info->relro;
|
||||||
if (info->execstack)
|
if (info->execstack)
|
||||||
elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
|
elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
|
||||||
@@ -5263,7 +5264,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|
|||||||
exec = PF_X;
|
exec = PF_X;
|
||||||
notesec = s;
|
notesec = s;
|
||||||
}
|
}
|
||||||
else
|
else if (bed->default_execstack)
|
||||||
exec = PF_X;
|
exec = PF_X;
|
||||||
}
|
}
|
||||||
if (notesec)
|
if (notesec)
|
||||||
@@ -5284,7 +5285,6 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|
|||||||
|
|
||||||
/* The backend may have to create some sections regardless of whether
|
/* The backend may have to create some sections regardless of whether
|
||||||
we're dynamic or not. */
|
we're dynamic or not. */
|
||||||
bed = get_elf_backend_data (output_bfd);
|
|
||||||
if (bed->elf_backend_always_size_sections
|
if (bed->elf_backend_always_size_sections
|
||||||
&& ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
|
&& ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
@@ -103,6 +103,9 @@
|
|||||||
#ifndef elf_backend_want_p_paddr_set_to_zero
|
#ifndef elf_backend_want_p_paddr_set_to_zero
|
||||||
#define elf_backend_want_p_paddr_set_to_zero 0
|
#define elf_backend_want_p_paddr_set_to_zero 0
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef elf_backend_default_execstack
|
||||||
|
#define elf_backend_default_execstack 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#define bfd_elfNN_bfd_debug_info_start bfd_void
|
#define bfd_elfNN_bfd_debug_info_start bfd_void
|
||||||
#define bfd_elfNN_bfd_debug_info_end bfd_void
|
#define bfd_elfNN_bfd_debug_info_end bfd_void
|
||||||
@@ -683,7 +686,8 @@ static struct elf_backend_data elfNN_bed =
|
|||||||
elf_backend_can_refcount,
|
elf_backend_can_refcount,
|
||||||
elf_backend_want_got_sym,
|
elf_backend_want_got_sym,
|
||||||
elf_backend_want_dynbss,
|
elf_backend_want_dynbss,
|
||||||
elf_backend_want_p_paddr_set_to_zero
|
elf_backend_want_p_paddr_set_to_zero,
|
||||||
|
elf_backend_default_execstack
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Forward declaration for use when initialising alternative_target field. */
|
/* Forward declaration for use when initialising alternative_target field. */
|
||||||
|
|||||||
Reference in New Issue
Block a user