re PR target/36955 (TLS LIBCALL change breaks libstdc++ built with older binutils)
authorAlan Modra <amodra@bigpond.net.au>
Wed, 30 Jul 2008 02:43:05 +0000 (02:43 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Wed, 30 Jul 2008 02:43:05 +0000 (12:13 +0930)
PR target/36955
* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Add
a use of pic_offset_table_rtx for -msecure-plt __tls_get_addr calls.

From-SVN: r138291

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 4062342..5ad3bec 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-30  Alan Modra  <amodra@bigpond.net.au>
+
+       PR target/36955
+       * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Add
+       a use of pic_offset_table_rtx for -msecure-plt __tls_get_addr calls.
+
 2008-07-29  Jan Hubicka  <jh@suse.cz>
 
        * c-decl.c (merge_decls): Do not handle DECL_INLINE.
index 0e03be0..e67b1a7 100644 (file)
@@ -3948,6 +3948,8 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
          insn = emit_call_insn (insn);
          RTL_CONST_CALL_P (insn) = 1;
          use_reg (&CALL_INSN_FUNCTION_USAGE (insn), r3);
+         if (DEFAULT_ABI == ABI_V4 && TARGET_SECURE_PLT && flag_pic)
+           use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
          insn = get_insns ();
          end_sequence ();
          emit_libcall_block (insn, dest, r3, addr);
@@ -3970,6 +3972,8 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
          insn = emit_call_insn (insn);
          RTL_CONST_CALL_P (insn) = 1;
          use_reg (&CALL_INSN_FUNCTION_USAGE (insn), r3);
+         if (DEFAULT_ABI == ABI_V4 && TARGET_SECURE_PLT && flag_pic)
+           use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
          insn = get_insns ();
          end_sequence ();
          tmp1 = gen_reg_rtx (Pmode);