* elfxx-mips.c (struct mips_got_entry): Add tls_type.
(struct mips_got_info): Add tls_gotno, tls_assigned_gotno, and tls_ldm_offset. (struct mips_elf_got_per_bfd_arg): Add global_count. (struct mips_elf_count_tls_arg): New. (struct mips_elf_hash_sort_data): Update comment for min_got_dynindx. (struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset. (GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE) (GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define. (TLS_RELOC_P): Define. (TP_OFFSET, DTP_OFFSET): Define. (dtprel_base, tprel_base): New functions. (mips_elf_link_hash_newfunc): Initialize tls_type. (mips_elf_got_entry_hash, mips_elf_got_entry_eq) (mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle TLS entries. (mips_tls_got_relocs, mips_elf_count_local_tls_relocs) (mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs) (mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots) (mips_tls_got_index): New functions. (mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE arguments. Pass them to mips_elf_create_local_got_entry. Use mips_tls_got_index. (mips_elf_global_got_index): Add new R_TYPE and INFO arguments. Handle TLS entries. (mips_elf_got_page, mips_elf_got16_entry): Update calls to mips_elf_create_local_got_entry. (mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE arguments. Handle TLS entries. (mips_elf_sort_hash_table_f): Add non-TLS assertions. (mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle TLS entries. (mips_elf_record_global_got_symbol): Likewise. (mips_elf_make_got_per_bfd): Initialize new mips_got_info members. Count TLS entries. (mips_elf_merge_gots): Handle TLS entries when merging. (mips_elf_initialize_tls_index): New function. (mips_elf_set_global_got_offset): Handle TLS entries. (mips_elf_adjust_gp): Handle TLS. (mips_elf_multi_got): Remove redundant call to mips_elf_resolve_final_got_entries. Initialize global_count. Correct a comment. Initialize new TLS members of mips_got_info. Assign TLS GOT indexes for new GOTs. (mips_elf_create_got_section): Initialize new TLS members of mips_got_info. (mips_elf_calculate_relocation): Handle TLS relocs. (_bfd_mips_elf_check_relocs): Likewise. Update calls to changed functions. (_bfd_mips_elf_always_size_sections): Handle TLS. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to changed functions. (_bfd_mips_elf_copy_indirect_symbol): Copy tls_type. (_bfd_mips_elf_hide_symbol): Handle TLS. * elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela) (mips_reloc_map): Add TLS relocs. * elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel) (mips_elf64_howto_table_rela, mips_reloc_map): Likewise. * reloc.c: Define new MIPS TLS relocations. * libbfd.h, bfd-in2.h: Regenerated.
This commit is contained in:
parent
f4e584bd00
commit
0f20cc3522
8 changed files with 1699 additions and 75 deletions
|
@ -1,3 +1,68 @@
|
|||
2005-03-02 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* elfxx-mips.c (struct mips_got_entry): Add tls_type.
|
||||
(struct mips_got_info): Add tls_gotno, tls_assigned_gotno,
|
||||
and tls_ldm_offset.
|
||||
(struct mips_elf_got_per_bfd_arg): Add global_count.
|
||||
(struct mips_elf_count_tls_arg): New.
|
||||
(struct mips_elf_hash_sort_data): Update comment for min_got_dynindx.
|
||||
(struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset.
|
||||
(GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE)
|
||||
(GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define.
|
||||
(TLS_RELOC_P): Define.
|
||||
(TP_OFFSET, DTP_OFFSET): Define.
|
||||
(dtprel_base, tprel_base): New functions.
|
||||
(mips_elf_link_hash_newfunc): Initialize tls_type.
|
||||
(mips_elf_got_entry_hash, mips_elf_got_entry_eq)
|
||||
(mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle
|
||||
TLS entries.
|
||||
(mips_tls_got_relocs, mips_elf_count_local_tls_relocs)
|
||||
(mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs)
|
||||
(mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots)
|
||||
(mips_tls_got_index): New functions.
|
||||
(mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE
|
||||
arguments. Pass them to mips_elf_create_local_got_entry. Use
|
||||
mips_tls_got_index.
|
||||
(mips_elf_global_got_index): Add new R_TYPE and INFO arguments.
|
||||
Handle TLS entries.
|
||||
(mips_elf_got_page, mips_elf_got16_entry): Update calls to
|
||||
mips_elf_create_local_got_entry.
|
||||
(mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE
|
||||
arguments. Handle TLS entries.
|
||||
(mips_elf_sort_hash_table_f): Add non-TLS assertions.
|
||||
(mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle
|
||||
TLS entries.
|
||||
(mips_elf_record_global_got_symbol): Likewise.
|
||||
(mips_elf_make_got_per_bfd): Initialize new mips_got_info members.
|
||||
Count TLS entries.
|
||||
(mips_elf_merge_gots): Handle TLS entries when merging.
|
||||
(mips_elf_initialize_tls_index): New function.
|
||||
(mips_elf_set_global_got_offset): Handle TLS entries.
|
||||
(mips_elf_adjust_gp): Handle TLS.
|
||||
(mips_elf_multi_got): Remove redundant call to
|
||||
mips_elf_resolve_final_got_entries. Initialize global_count.
|
||||
Correct a comment. Initialize new TLS members of mips_got_info.
|
||||
Assign TLS GOT indexes for new GOTs.
|
||||
(mips_elf_create_got_section): Initialize new TLS members of
|
||||
mips_got_info.
|
||||
(mips_elf_calculate_relocation): Handle TLS relocs.
|
||||
(_bfd_mips_elf_check_relocs): Likewise. Update calls to changed
|
||||
functions.
|
||||
(_bfd_mips_elf_always_size_sections): Handle TLS.
|
||||
(_bfd_mips_elf_size_dynamic_sections): Likewise.
|
||||
(_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to
|
||||
changed functions.
|
||||
(_bfd_mips_elf_copy_indirect_symbol): Copy tls_type.
|
||||
(_bfd_mips_elf_hide_symbol): Handle TLS.
|
||||
* elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela)
|
||||
(mips_reloc_map): Add TLS relocs.
|
||||
* elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise.
|
||||
* elf64-mips.c (mips_elf64_howto_table_rel)
|
||||
(mips_elf64_howto_table_rela, mips_reloc_map): Likewise.
|
||||
* reloc.c: Define new MIPS TLS relocations.
|
||||
* libbfd.h, bfd-in2.h: Regenerated.
|
||||
|
||||
2005-03-02 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* Makefile.am: Add dependency of cache.o on libiberty.h.
|
||||
|
|
|
@ -2388,6 +2388,19 @@ to compensate for the borrow when the low bits are added. */
|
|||
BFD_RELOC_MIPS_REL16,
|
||||
BFD_RELOC_MIPS_RELGOT,
|
||||
BFD_RELOC_MIPS_JALR,
|
||||
BFD_RELOC_MIPS_TLS_DTPMOD32,
|
||||
BFD_RELOC_MIPS_TLS_DTPREL32,
|
||||
BFD_RELOC_MIPS_TLS_DTPMOD64,
|
||||
BFD_RELOC_MIPS_TLS_DTPREL64,
|
||||
BFD_RELOC_MIPS_TLS_GD,
|
||||
BFD_RELOC_MIPS_TLS_LDM,
|
||||
BFD_RELOC_MIPS_TLS_DTPREL_HI16,
|
||||
BFD_RELOC_MIPS_TLS_DTPREL_LO16,
|
||||
BFD_RELOC_MIPS_TLS_GOTTPREL,
|
||||
BFD_RELOC_MIPS_TLS_TPREL32,
|
||||
BFD_RELOC_MIPS_TLS_TPREL64,
|
||||
BFD_RELOC_MIPS_TLS_TPREL_HI16,
|
||||
BFD_RELOC_MIPS_TLS_TPREL_LO16,
|
||||
|
||||
|
||||
/* Fujitsu Frv Relocations. */
|
||||
|
|
171
bfd/elf32-mips.c
171
bfd/elf32-mips.c
|
@ -1,6 +1,6 @@
|
|||
/* MIPS-specific support for 32-bit ELF
|
||||
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
2003, 2004 Free Software Foundation, Inc.
|
||||
2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
Most of the information added by Ian Lance Taylor, Cygnus Support,
|
||||
<ian@cygnus.com>.
|
||||
|
@ -545,6 +545,160 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
|
|||
0x00000000, /* src_mask */
|
||||
0x00000000, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS GD/LD dynamic relocations. */
|
||||
HOWTO (R_MIPS_TLS_DTPMOD32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPMOD32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_MIPS_TLS_DTPREL32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
|
||||
|
||||
/* TLS general dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_GD, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GD", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_LDM, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_LDM", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_GOTTPREL, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GOTTPREL", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS IE dynamic relocations. */
|
||||
HOWTO (R_MIPS_TLS_TPREL32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
};
|
||||
|
||||
/* The reloc used for BFD_RELOC_CTOR when doing a 64 bit link. This
|
||||
|
@ -1062,7 +1216,20 @@ static const struct elf_reloc_map mips_reloc_map[] =
|
|||
{ BFD_RELOC_MIPS_SUB, R_MIPS_SUB },
|
||||
{ BFD_RELOC_MIPS_GOT_PAGE, R_MIPS_GOT_PAGE },
|
||||
{ BFD_RELOC_MIPS_GOT_OFST, R_MIPS_GOT_OFST },
|
||||
{ BFD_RELOC_MIPS_GOT_DISP, R_MIPS_GOT_DISP }
|
||||
{ BFD_RELOC_MIPS_GOT_DISP, R_MIPS_GOT_DISP },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPMOD32, R_MIPS_TLS_DTPMOD32 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL32, R_MIPS_TLS_DTPREL32 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPMOD64, R_MIPS_TLS_DTPMOD64 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL64, R_MIPS_TLS_DTPREL64 },
|
||||
{ BFD_RELOC_MIPS_TLS_GD, R_MIPS_TLS_GD },
|
||||
{ BFD_RELOC_MIPS_TLS_LDM, R_MIPS_TLS_LDM },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL_HI16, R_MIPS_TLS_DTPREL_HI16 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL_LO16, R_MIPS_TLS_DTPREL_LO16 },
|
||||
{ BFD_RELOC_MIPS_TLS_GOTTPREL, R_MIPS_TLS_GOTTPREL },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL32, R_MIPS_TLS_TPREL32 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL64, R_MIPS_TLS_TPREL64 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL_HI16, R_MIPS_TLS_TPREL_HI16 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL_LO16, R_MIPS_TLS_TPREL_LO16 }
|
||||
};
|
||||
|
||||
static const struct elf_reloc_map mips16_reloc_map[] =
|
||||
|
|
285
bfd/elf64-mips.c
285
bfd/elf64-mips.c
|
@ -1,5 +1,5 @@
|
|||
/* MIPS-specific support for 64-bit ELF
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
Ian Lance Taylor, Cygnus Support
|
||||
Linker support added by Mark Mitchell, CodeSourcery, LLC.
|
||||
|
@ -635,6 +635,160 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
|
|||
0, /* src_mask */
|
||||
0x00000000, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS relocations. */
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
|
||||
|
||||
HOWTO (R_MIPS_TLS_DTPMOD64, /* type */
|
||||
0, /* rightshift */
|
||||
4, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
64, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPMOD64", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
MINUS_ONE, /* src_mask */
|
||||
MINUS_ONE, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_MIPS_TLS_DTPREL64, /* type */
|
||||
0, /* rightshift */
|
||||
4, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
64, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL64", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
MINUS_ONE, /* src_mask */
|
||||
MINUS_ONE, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS general dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_GD, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GD", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_LDM, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_LDM", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_GOTTPREL, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GOTTPREL", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS IE dynamic relocations. */
|
||||
EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
|
||||
|
||||
HOWTO (R_MIPS_TLS_TPREL64, /* type */
|
||||
0, /* rightshift */
|
||||
4, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
64, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL64", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
MINUS_ONE, /* src_mask */
|
||||
MINUS_ONE, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
};
|
||||
|
||||
/* The relocation table used for SHT_RELA sections. */
|
||||
|
@ -1151,6 +1305,120 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
|
|||
0, /* src_mask */
|
||||
0x00000000, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS relocations. */
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
|
||||
|
||||
/* TLS general dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_GD, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GD", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_LDM, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_LDM", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_GOTTPREL, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GOTTPREL", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
};
|
||||
|
||||
static reloc_howto_type mips16_elf64_howto_table_rel[] =
|
||||
|
@ -1893,7 +2161,20 @@ static const struct elf_reloc_map mips_reloc_map[] =
|
|||
{ BFD_RELOC_MIPS_REL16, R_MIPS_REL16 },
|
||||
/* Use of R_MIPS_ADD_IMMEDIATE and R_MIPS_PJUMP is deprecated. */
|
||||
{ BFD_RELOC_MIPS_RELGOT, R_MIPS_RELGOT },
|
||||
{ BFD_RELOC_MIPS_JALR, R_MIPS_JALR }
|
||||
{ BFD_RELOC_MIPS_JALR, R_MIPS_JALR },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPMOD32, R_MIPS_TLS_DTPMOD32 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL32, R_MIPS_TLS_DTPREL32 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPMOD64, R_MIPS_TLS_DTPMOD64 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL64, R_MIPS_TLS_DTPREL64 },
|
||||
{ BFD_RELOC_MIPS_TLS_GD, R_MIPS_TLS_GD },
|
||||
{ BFD_RELOC_MIPS_TLS_LDM, R_MIPS_TLS_LDM },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL_HI16, R_MIPS_TLS_DTPREL_HI16 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL_LO16, R_MIPS_TLS_DTPREL_LO16 },
|
||||
{ BFD_RELOC_MIPS_TLS_GOTTPREL, R_MIPS_TLS_GOTTPREL },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL32, R_MIPS_TLS_TPREL32 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL64, R_MIPS_TLS_TPREL64 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL_HI16, R_MIPS_TLS_TPREL_HI16 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL_LO16, R_MIPS_TLS_TPREL_LO16 }
|
||||
};
|
||||
|
||||
static const struct elf_reloc_map mips16_reloc_map[] =
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* MIPS-specific support for 32-bit ELF
|
||||
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
2003, 2004 Free Software Foundation, Inc.
|
||||
2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
Most of the information added by Ian Lance Taylor, Cygnus Support,
|
||||
<ian@cygnus.com>.
|
||||
|
@ -600,6 +600,160 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
|
|||
0x00000000, /* src_mask */
|
||||
0x00000000, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS GD/LD dynamic relocations. */
|
||||
HOWTO (R_MIPS_TLS_DTPMOD32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPMOD32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_MIPS_TLS_DTPREL32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
|
||||
|
||||
/* TLS general dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_GD, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GD", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_LDM, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_LDM", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_GOTTPREL, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GOTTPREL", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS IE dynamic relocations. */
|
||||
HOWTO (R_MIPS_TLS_TPREL32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
};
|
||||
|
||||
/* The relocation table used for SHT_RELA sections. */
|
||||
|
@ -1117,6 +1271,160 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
|
|||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS GD/LD dynamic relocations. */
|
||||
HOWTO (R_MIPS_TLS_DTPMOD32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPMOD32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_MIPS_TLS_DTPREL32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
|
||||
|
||||
/* TLS general dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_GD, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GD", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic variable reference. */
|
||||
HOWTO (R_MIPS_TLS_LDM, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_LDM", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS local dynamic offset. */
|
||||
HOWTO (R_MIPS_TLS_DTPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_DTPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_GOTTPREL, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_GOTTPREL", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS IE dynamic relocations. */
|
||||
HOWTO (R_MIPS_TLS_TPREL32, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL32", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_HI16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
/* TLS thread pointer offset. */
|
||||
HOWTO (R_MIPS_TLS_TPREL_LO16, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed, /* complain_on_overflow */
|
||||
_bfd_mips_elf_generic_reloc, /* special_function */
|
||||
"R_MIPS_TLS_TPREL_LO16", /* name */
|
||||
TRUE, /* partial_inplace */
|
||||
0x0000ffff, /* src_mask */
|
||||
0x0000ffff, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
};
|
||||
|
||||
static reloc_howto_type elf_mips16_howto_table_rel[] =
|
||||
|
@ -1701,7 +2009,20 @@ static const struct elf_reloc_map mips_reloc_map[] =
|
|||
{ BFD_RELOC_MIPS_REL16, R_MIPS_REL16 },
|
||||
/* Use of R_MIPS_ADD_IMMEDIATE and R_MIPS_PJUMP is deprecated. */
|
||||
{ BFD_RELOC_MIPS_RELGOT, R_MIPS_RELGOT },
|
||||
{ BFD_RELOC_MIPS_JALR, R_MIPS_JALR }
|
||||
{ BFD_RELOC_MIPS_JALR, R_MIPS_JALR },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPMOD32, R_MIPS_TLS_DTPMOD32 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL32, R_MIPS_TLS_DTPREL32 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPMOD64, R_MIPS_TLS_DTPMOD64 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL64, R_MIPS_TLS_DTPREL64 },
|
||||
{ BFD_RELOC_MIPS_TLS_GD, R_MIPS_TLS_GD },
|
||||
{ BFD_RELOC_MIPS_TLS_LDM, R_MIPS_TLS_LDM },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL_HI16, R_MIPS_TLS_DTPREL_HI16 },
|
||||
{ BFD_RELOC_MIPS_TLS_DTPREL_LO16, R_MIPS_TLS_DTPREL_LO16 },
|
||||
{ BFD_RELOC_MIPS_TLS_GOTTPREL, R_MIPS_TLS_GOTTPREL },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL32, R_MIPS_TLS_TPREL32 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL64, R_MIPS_TLS_TPREL64 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL_HI16, R_MIPS_TLS_TPREL_HI16 },
|
||||
{ BFD_RELOC_MIPS_TLS_TPREL_LO16, R_MIPS_TLS_TPREL_LO16 }
|
||||
};
|
||||
|
||||
static const struct elf_reloc_map mips16_reloc_map[] =
|
||||
|
|
840
bfd/elfxx-mips.c
840
bfd/elfxx-mips.c
File diff suppressed because it is too large
Load diff
13
bfd/libbfd.h
13
bfd/libbfd.h
|
@ -928,6 +928,19 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
|||
"BFD_RELOC_MIPS_REL16",
|
||||
"BFD_RELOC_MIPS_RELGOT",
|
||||
"BFD_RELOC_MIPS_JALR",
|
||||
"BFD_RELOC_MIPS_TLS_DTPMOD32",
|
||||
"BFD_RELOC_MIPS_TLS_DTPREL32",
|
||||
"BFD_RELOC_MIPS_TLS_DTPMOD64",
|
||||
"BFD_RELOC_MIPS_TLS_DTPREL64",
|
||||
"BFD_RELOC_MIPS_TLS_GD",
|
||||
"BFD_RELOC_MIPS_TLS_LDM",
|
||||
"BFD_RELOC_MIPS_TLS_DTPREL_HI16",
|
||||
"BFD_RELOC_MIPS_TLS_DTPREL_LO16",
|
||||
"BFD_RELOC_MIPS_TLS_GOTTPREL",
|
||||
"BFD_RELOC_MIPS_TLS_TPREL32",
|
||||
"BFD_RELOC_MIPS_TLS_TPREL64",
|
||||
"BFD_RELOC_MIPS_TLS_TPREL_HI16",
|
||||
"BFD_RELOC_MIPS_TLS_TPREL_LO16",
|
||||
|
||||
"BFD_RELOC_FRV_LABEL16",
|
||||
"BFD_RELOC_FRV_LABEL24",
|
||||
|
|
28
bfd/reloc.c
28
bfd/reloc.c
|
@ -1,6 +1,6 @@
|
|||
/* BFD support for handling relocation entries.
|
||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003, 2004
|
||||
2000, 2001, 2002, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
|
@ -2125,6 +2125,32 @@ ENUMX
|
|||
BFD_RELOC_MIPS_RELGOT
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_JALR
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_DTPMOD32
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_DTPREL32
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_DTPMOD64
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_DTPREL64
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_GD
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_LDM
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_DTPREL_HI16
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_DTPREL_LO16
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_GOTTPREL
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_TPREL32
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_TPREL64
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_TPREL_HI16
|
||||
ENUMX
|
||||
BFD_RELOC_MIPS_TLS_TPREL_LO16
|
||||
ENUMDOC
|
||||
MIPS ELF relocations.
|
||||
COMMENT
|
||||
|
|
Loading…
Reference in a new issue