From 1cf711b2e5012d6ed238190e6f1834ff728cbd41 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Wed, 2 Mar 2005 21:23:33 +0000 Subject: [PATCH] * config/tc-mips.c (percent_op): Add %tlsgd, %tlsldm, %dtprel_hi, %dtprel_lo, %tprel_hi, %tprel_lo, and %gottprel. (parse_relocation): Check for a word break after a relocation operator. (md_apply_fix3): Handle TLS relocations, and mark thread-local symbols. --- gas/ChangeLog | 10 ++++++++++ gas/config/tc-mips.c | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/gas/ChangeLog b/gas/ChangeLog index d92dcbecb..c111a5c17 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2005-03-02 Daniel Jacobowitz + Joseph Myers + + * config/tc-mips.c (percent_op): Add %tlsgd, %tlsldm, %dtprel_hi, + %dtprel_lo, %tprel_hi, %tprel_lo, and %gottprel. + (parse_relocation): Check for a word break after a relocation + operator. + (md_apply_fix3): Handle TLS relocations, and mark thread-local + symbols. + 2005-03-02 Alan Modra * config/tc-ppc.c (ppc_fix_adjustable ): Remove bogus checks. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 02ff10af7..940dd8faf 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -9856,6 +9856,13 @@ static const struct percent_op_match mips_percent_op[] = {"%highest", BFD_RELOC_MIPS_HIGHEST}, {"%higher", BFD_RELOC_MIPS_HIGHER}, {"%neg", BFD_RELOC_MIPS_SUB}, + {"%tlsgd", BFD_RELOC_MIPS_TLS_GD}, + {"%tlsldm", BFD_RELOC_MIPS_TLS_LDM}, + {"%dtprel_hi", BFD_RELOC_MIPS_TLS_DTPREL_HI16}, + {"%dtprel_lo", BFD_RELOC_MIPS_TLS_DTPREL_LO16}, + {"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16}, + {"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16}, + {"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL}, #endif {"%hi", BFD_RELOC_HI16_S} }; @@ -9892,6 +9899,11 @@ parse_relocation (char **str, bfd_reloc_code_real_type *reloc) for (i = 0; i < limit; i++) if (strncasecmp (*str, percent_op[i].str, strlen (percent_op[i].str)) == 0) { + int len = strlen (percent_op[i].str); + + if (!ISSPACE ((*str)[len]) && (*str)[len] != '(') + continue; + *str += strlen (percent_op[i].str); *reloc = percent_op[i].reloc; @@ -11028,6 +11040,16 @@ md_apply_fix3 (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) switch (fixP->fx_r_type) { + case BFD_RELOC_MIPS_TLS_GD: + case BFD_RELOC_MIPS_TLS_LDM: + case BFD_RELOC_MIPS_TLS_DTPREL_HI16: + case BFD_RELOC_MIPS_TLS_DTPREL_LO16: + case BFD_RELOC_MIPS_TLS_GOTTPREL: + case BFD_RELOC_MIPS_TLS_TPREL_HI16: + case BFD_RELOC_MIPS_TLS_TPREL_LO16: + S_SET_THREAD_LOCAL (fixP->fx_addsy); + /* fall through */ + case BFD_RELOC_MIPS_JMP: case BFD_RELOC_MIPS_SHIFT5: case BFD_RELOC_MIPS_SHIFT6: -- 2.11.4.GIT