bfd:
* elfxx-mips.c (mips_elf_calculate_relocation): Handle R_MIPS_TLS_DTPREL32 and R_MIPS_TLS_DTPREL64. * elf64-mips.c (mips_elf64_howto_table_rela): Support R_MIPS_TLS_DTPREL64. gas: * config/tc-mips.c (s_dtprelword, s_dtpreldword, s_dtprel_internal): New. (mips_pseudo_table): Add .dtprelword and .dtpreldword. (md_apply_fix): Handle BFD_RELOC_MIPS_TLS_DTPREL32 and BFD_RELOC_MIPS_TLS_DTPREL64.
This commit is contained in:
parent
e205a09915
commit
741d6ea85b
@ -1,3 +1,10 @@
|
||||
2007-07-02 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* elfxx-mips.c (mips_elf_calculate_relocation): Handle
|
||||
R_MIPS_TLS_DTPREL32 and R_MIPS_TLS_DTPREL64.
|
||||
* elf64-mips.c (mips_elf64_howto_table_rela): Support
|
||||
R_MIPS_TLS_DTPREL64.
|
||||
|
||||
2007-07-02 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* Makefile.am: Run "make dep-am".
|
||||
|
@ -1327,7 +1327,20 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
|
||||
EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
|
||||
|
||||
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 */
|
||||
|
@ -4355,6 +4355,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
break;
|
||||
|
||||
case R_MIPS_TLS_DTPREL_LO16:
|
||||
case R_MIPS_TLS_DTPREL32:
|
||||
case R_MIPS_TLS_DTPREL64:
|
||||
value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
|
||||
break;
|
||||
|
||||
|
@ -1,3 +1,11 @@
|
||||
2007-07-02 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/tc-mips.c (s_dtprelword, s_dtpreldword,
|
||||
s_dtprel_internal): New.
|
||||
(mips_pseudo_table): Add .dtprelword and .dtpreldword.
|
||||
(md_apply_fix): Handle BFD_RELOC_MIPS_TLS_DTPREL32 and
|
||||
BFD_RELOC_MIPS_TLS_DTPREL64.
|
||||
|
||||
2007-07-02 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* Makefile.am: Run "make dep-am".
|
||||
|
@ -1024,6 +1024,8 @@ static void s_cpsetup (int);
|
||||
static void s_cplocal (int);
|
||||
static void s_cprestore (int);
|
||||
static void s_cpreturn (int);
|
||||
static void s_dtprelword (int);
|
||||
static void s_dtpreldword (int);
|
||||
static void s_gpvalue (int);
|
||||
static void s_gpword (int);
|
||||
static void s_gpdword (int);
|
||||
@ -1097,6 +1099,8 @@ static const pseudo_typeS mips_pseudo_table[] =
|
||||
{"cplocal", s_cplocal, 0},
|
||||
{"cprestore", s_cprestore, 0},
|
||||
{"cpreturn", s_cpreturn, 0},
|
||||
{"dtprelword", s_dtprelword, 0},
|
||||
{"dtpreldword", s_dtpreldword, 0},
|
||||
{"gpvalue", s_gpvalue, 0},
|
||||
{"gpword", s_gpword, 0},
|
||||
{"gpdword", s_gpdword, 0},
|
||||
@ -11812,7 +11816,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
|| fixP->fx_r_type == BFD_RELOC_CTOR
|
||||
|| fixP->fx_r_type == BFD_RELOC_MIPS_SUB
|
||||
|| fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
|
||||
|| fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY);
|
||||
|| fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY
|
||||
|| fixP->fx_r_type == BFD_RELOC_MIPS_TLS_DTPREL64);
|
||||
|
||||
buf = (bfd_byte *) (fixP->fx_frag->fr_literal + fixP->fx_where);
|
||||
|
||||
@ -11835,6 +11840,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
{
|
||||
case BFD_RELOC_MIPS_TLS_GD:
|
||||
case BFD_RELOC_MIPS_TLS_LDM:
|
||||
case BFD_RELOC_MIPS_TLS_DTPREL32:
|
||||
case BFD_RELOC_MIPS_TLS_DTPREL64:
|
||||
case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
|
||||
case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
|
||||
case BFD_RELOC_MIPS_TLS_GOTTPREL:
|
||||
@ -12918,6 +12925,52 @@ s_cpreturn (int ignore ATTRIBUTE_UNUSED)
|
||||
demand_empty_rest_of_line ();
|
||||
}
|
||||
|
||||
/* Handle the .dtprelword and .dtpreldword pseudo-ops. They generate
|
||||
a 32-bit or 64-bit DTP-relative relocation (BYTES says which) for
|
||||
use in DWARF debug information. */
|
||||
|
||||
static void
|
||||
s_dtprel_internal (size_t bytes)
|
||||
{
|
||||
expressionS ex;
|
||||
char *p;
|
||||
|
||||
expression (&ex);
|
||||
|
||||
if (ex.X_op != O_symbol)
|
||||
{
|
||||
as_bad (_("Unsupported use of %s"), (bytes == 8
|
||||
? ".dtpreldword"
|
||||
: ".dtprelword"));
|
||||
ignore_rest_of_line ();
|
||||
}
|
||||
|
||||
p = frag_more (bytes);
|
||||
md_number_to_chars (p, 0, bytes);
|
||||
fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE,
|
||||
(bytes == 8
|
||||
? BFD_RELOC_MIPS_TLS_DTPREL64
|
||||
: BFD_RELOC_MIPS_TLS_DTPREL32));
|
||||
|
||||
demand_empty_rest_of_line ();
|
||||
}
|
||||
|
||||
/* Handle .dtprelword. */
|
||||
|
||||
static void
|
||||
s_dtprelword (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
s_dtprel_internal (4);
|
||||
}
|
||||
|
||||
/* Handle .dtpreldword. */
|
||||
|
||||
static void
|
||||
s_dtpreldword (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
s_dtprel_internal (8);
|
||||
}
|
||||
|
||||
/* Handle the .gpvalue pseudo-op. This is used when generating NewABI PIC
|
||||
code. It sets the offset to use in gp_rel relocations. */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user