From 9efb3b7baf43f7a6e9f0508d532aa3f03b5b40e9 Mon Sep 17 00:00:00 2001 From: Kaz Kojima Date: Fri, 11 Oct 2002 14:34:46 +0000 Subject: [PATCH] * config/tc-sh.c (sh_force_relocation): Make sure TLS relocs get emitted. (md_apply_fix3): Add TLS relocs. (sh_parse_name): Support @TLSGD, @TLSLDM, @GOTTPOFF, @TPOFF and @DTPOFF. --- gas/ChangeLog | 8 ++++++++ gas/config/tc-sh.c | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/gas/ChangeLog b/gas/ChangeLog index 46379a2d9d..3c13baf9db 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2002-10-11 Kaz Kojima + + * config/tc-sh.c (sh_force_relocation): Make sure TLS relocs get + emitted. + (md_apply_fix3): Add TLS relocs. + (sh_parse_name): Support @TLSGD, @TLSLDM, @GOTTPOFF, @TPOFF and + @DTPOFF. + 2002-10-11 Michel Six Alan Modra diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c index 936faf9e20..664c269493 100644 --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -3241,10 +3241,16 @@ sh_force_relocation (fix) if (sh_local_pcrel (fix)) return 0; + /* Make sure some relocations get emitted. */ if (fix->fx_r_type == BFD_RELOC_VTABLE_INHERIT || fix->fx_r_type == BFD_RELOC_VTABLE_ENTRY || fix->fx_r_type == BFD_RELOC_SH_LOOP_START || fix->fx_r_type == BFD_RELOC_SH_LOOP_END + || fix->fx_r_type == BFD_RELOC_SH_TLS_GD_32 + || fix->fx_r_type == BFD_RELOC_SH_TLS_LD_32 + || fix->fx_r_type == BFD_RELOC_SH_TLS_IE_32 + || fix->fx_r_type == BFD_RELOC_SH_TLS_LDO_32 + || fix->fx_r_type == BFD_RELOC_SH_TLS_LE_32 || S_FORCE_RELOC (fix->fx_addsy)) return 1; @@ -3546,11 +3552,16 @@ md_apply_fix3 (fixP, valP, seg) case BFD_RELOC_32_GOT_PCREL: case BFD_RELOC_SH_GOTPLT32: + case BFD_RELOC_SH_TLS_GD_32: + case BFD_RELOC_SH_TLS_LD_32: + case BFD_RELOC_SH_TLS_IE_32: * valP = 0; /* Fully resolved at runtime. No addend. */ md_number_to_chars (buf, 0, 4); break; case BFD_RELOC_32_GOTOFF: + case BFD_RELOC_SH_TLS_LDO_32: + case BFD_RELOC_SH_TLS_LE_32: md_number_to_chars (buf, val, 4); break; #endif @@ -4015,6 +4026,16 @@ sh_parse_name (name, exprP, nextcharP) reloc_type = BFD_RELOC_32_GOT_PCREL; else if ((next_end = sh_end_of_match (next + 1, "PLT"))) reloc_type = BFD_RELOC_32_PLT_PCREL; + else if ((next_end = sh_end_of_match (next + 1, "TLSGD"))) + reloc_type = BFD_RELOC_SH_TLS_GD_32; + else if ((next_end = sh_end_of_match (next + 1, "TLSLDM"))) + reloc_type = BFD_RELOC_SH_TLS_LD_32; + else if ((next_end = sh_end_of_match (next + 1, "GOTTPOFF"))) + reloc_type = BFD_RELOC_SH_TLS_IE_32; + else if ((next_end = sh_end_of_match (next + 1, "TPOFF"))) + reloc_type = BFD_RELOC_SH_TLS_LE_32; + else if ((next_end = sh_end_of_match (next + 1, "DTPOFF"))) + reloc_type = BFD_RELOC_SH_TLS_LDO_32; else goto no_suffix; -- 2.34.1