aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-sh.c
diff options
context:
space:
mode:
authorKaz Kojima <kkojima@rr.iij4u.or.jp>2002-10-11 14:34:46 +0000
committerKaz Kojima <kkojima@rr.iij4u.or.jp>2002-10-11 14:34:46 +0000
commit9efb3b7baf43f7a6e9f0508d532aa3f03b5b40e9 (patch)
tree27c513b34a9ff04e350915e22b0c5f241479063c /gas/config/tc-sh.c
parent3376eaf57788bb1487e6d96bd74c647612dd91c9 (diff)
downloadgdb-9efb3b7baf43f7a6e9f0508d532aa3f03b5b40e9.zip
gdb-9efb3b7baf43f7a6e9f0508d532aa3f03b5b40e9.tar.gz
gdb-9efb3b7baf43f7a6e9f0508d532aa3f03b5b40e9.tar.bz2
* 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.
Diffstat (limited to 'gas/config/tc-sh.c')
-rw-r--r--gas/config/tc-sh.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index 936faf9..664c269 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;