diff options
author | Kaz Kojima <kkojima@rr.iij4u.or.jp> | 2002-10-11 14:34:46 +0000 |
---|---|---|
committer | Kaz Kojima <kkojima@rr.iij4u.or.jp> | 2002-10-11 14:34:46 +0000 |
commit | 9efb3b7baf43f7a6e9f0508d532aa3f03b5b40e9 (patch) | |
tree | 27c513b34a9ff04e350915e22b0c5f241479063c /gas/config/tc-sh.c | |
parent | 3376eaf57788bb1487e6d96bd74c647612dd91c9 (diff) | |
download | gdb-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.c | 21 |
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; |