struct elf_x86_lazy_plt_layout
{
- /* The first entry in an absolute lazy procedure linkage table looks
- like this. */
+ /* The first entry in a lazy procedure linkage table looks like this. */
const bfd_byte *plt0_entry;
unsigned int plt0_entry_size; /* Size of PLT0 entry. */
- /* Later entries in an absolute lazy procedure linkage table look
- like this. */
+ /* Later entries in a lazy procedure linkage table look like this. */
const bfd_byte *plt_entry;
unsigned int plt_entry_size; /* Size of each PLT entry. */
+ /* The TLSDESC entry in a lazy procedure linkage table looks like
+ this. This is for x86-64 only. */
+ const bfd_byte *plt_tlsdesc_entry;
+ unsigned int plt_tlsdesc_entry_size; /* Size of TLSDESC entry. */
+
+ /* Offsets into the TLSDESC entry that are to be replaced with
+ GOT+8 and GOT+TDG. These are for x86-64 only. */
+ unsigned int plt_tlsdesc_got1_offset;
+ unsigned int plt_tlsdesc_got2_offset;
+
+ /* Offset of the end of the PC-relative instructions containing
+ plt_tlsdesc_got1_offset and plt_tlsdesc_got2_offset. These
+ are for x86-64 only. */
+ unsigned int plt_tlsdesc_got1_insn_end;
+ unsigned int plt_tlsdesc_got2_insn_end;
+
/* Offsets into plt0_entry that are to be replaced with GOT[1] and
GOT[2]. */
unsigned int plt0_got1_offset;
struct elf_x86_non_lazy_plt_layout
{
- /* Entries in an absolute non-lazy procedure linkage table look like
- this. */
+ /* Entries in a non-lazy procedure linkage table look like this. */
const bfd_byte *plt_entry;
- /* Entries in a PIC non-lazy procedure linkage table look like this. */
+ /* Entries in a PIC non-lazy procedure linkage table look like this.
+ This is only used for i386 where absolute PLT and PIC PLT are
+ different. */
const bfd_byte *pic_plt_entry;
unsigned int plt_entry_size; /* Size of each PLT entry. */
struct elf_x86_plt_layout
{
- /* The first entry in a lazy procedure linkage table looks like this.
- This is only used for i386 where absolute PLT0 and PIC PLT0 are
- different. */
+ /* The first entry in a lazy procedure linkage table looks like this. */
const bfd_byte *plt0_entry;
/* Entries in a procedure linkage table look like this. */
const bfd_byte *plt_entry;
extern bfd_boolean _bfd_x86_elf_merge_gnu_properties
(struct bfd_link_info *, bfd *, elf_property *, elf_property *);
+extern void _bfd_x86_elf_link_fixup_gnu_properties
+ (struct bfd_link_info *, elf_property_list **);
+
extern bfd * _bfd_x86_elf_link_setup_gnu_properties
(struct bfd_link_info *, struct elf_x86_init_table *);
_bfd_x86_elf_parse_gnu_properties
#define elf_backend_merge_gnu_properties \
_bfd_x86_elf_merge_gnu_properties
+#define elf_backend_fixup_gnu_properties \
+ _bfd_x86_elf_link_fixup_gnu_properties