From e6c9b417dee38febf870197b4f1156de9b6fbb7c Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 15 Jul 2015 15:42:07 +0200 Subject: [PATCH] re PR target/58066 (__tls_get_addr is called with misaligned stack on x86-64) PR target/58066 * config/i386/i386.md (*tls_global_dynamic_64_): Depend on SP_REG. (*tls_local_dynamic_base_64_): Ditto. (*tls_local_dynamic_base_64_largepic): Ditto. (tls_global_dynamic_64_): Update expander pattern. (tls_local_dynamic_base_64_): Ditto. From-SVN: r225829 --- gcc/ChangeLog | 9 +++++++++ gcc/config/i386/i386.md | 17 ++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67508208735..244e81e82f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-07-15 Uros Bizjak + + PR target/58066 + * config/i386/i386.md (*tls_global_dynamic_64_): Depend on SP_REG. + (*tls_local_dynamic_base_64_): Ditto. + (*tls_local_dynamic_base_64_largepic): Ditto. + (tls_global_dynamic_64_): Update expander pattern. + (tls_local_dynamic_base_64_): Ditto. + 2015-07-15 Richard Biener * fold-const.c (fold_binary_loc): Move bool_var != 0 -> bool_var diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 354532a6f0e..b7b795ed267 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -13158,7 +13158,8 @@ (call:P (mem:QI (match_operand 2 "constant_call_address_operand" "Bz")) (match_operand 3))) - (unspec:P [(match_operand 1 "tls_symbolic_operand")] + (unspec:P [(match_operand 1 "tls_symbolic_operand") + (reg:P SP_REG)] UNSPEC_TLS_GD)] "TARGET_64BIT" { @@ -13182,8 +13183,9 @@ (mem:QI (plus:DI (match_operand:DI 2 "register_operand" "b") (match_operand:DI 3 "immediate_operand" "i"))) (match_operand 4))) - (unspec:DI [(match_operand 1 "tls_symbolic_operand")] - UNSPEC_TLS_GD)] + (unspec:DI [(match_operand 1 "tls_symbolic_operand") + (reg:DI SP_REG)] + UNSPEC_TLS_GD)] "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF && GET_CODE (operands[3]) == CONST && GET_CODE (XEXP (operands[3], 0)) == UNSPEC @@ -13204,7 +13206,8 @@ (call:P (mem:QI (match_operand 2)) (const_int 0))) - (unspec:P [(match_operand 1 "tls_symbolic_operand")] + (unspec:P [(match_operand 1 "tls_symbolic_operand") + (reg:P SP_REG)] UNSPEC_TLS_GD)])] "TARGET_64BIT" "ix86_tls_descriptor_calls_expanded_in_cfun = true;") @@ -13254,7 +13257,7 @@ (call:P (mem:QI (match_operand 1 "constant_call_address_operand" "Bz")) (match_operand 2))) - (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)] + (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)] "TARGET_64BIT" { output_asm_insn @@ -13272,7 +13275,7 @@ (mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b") (match_operand:DI 2 "immediate_operand" "i"))) (match_operand 3))) - (unspec:DI [(const_int 0)] UNSPEC_TLS_LD_BASE)] + (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)] "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF && GET_CODE (operands[2]) == CONST && GET_CODE (XEXP (operands[2], 0)) == UNSPEC @@ -13293,7 +13296,7 @@ (call:P (mem:QI (match_operand 1)) (const_int 0))) - (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)])] + (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)])] "TARGET_64BIT" "ix86_tls_descriptor_calls_expanded_in_cfun = true;") -- 2.30.2