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 | |
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')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/config/tc-sh.c | 21 |
2 files changed, 29 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 46379a2..3c13baf 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2002-10-11 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * 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 <msix@ccr.jussieu.fr> Alan Modra <amodra@bigpond.net.au> 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; |