diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2015-07-15 15:42:07 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2015-07-15 15:42:07 +0200 |
commit | e6c9b417dee38febf870197b4f1156de9b6fbb7c (patch) | |
tree | 66e95d77c976fd44aef1ef99d2bd7ee12cf3476d /gcc | |
parent | 28ef6a27c84e800fd56081cf653c6b17f896ac0f (diff) | |
download | gcc-e6c9b417dee38febf870197b4f1156de9b6fbb7c.zip gcc-e6c9b417dee38febf870197b4f1156de9b6fbb7c.tar.gz gcc-e6c9b417dee38febf870197b4f1156de9b6fbb7c.tar.bz2 |
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_<mode>): Depend on SP_REG.
(*tls_local_dynamic_base_64_<mode>): Ditto.
(*tls_local_dynamic_base_64_largepic): Ditto.
(tls_global_dynamic_64_<mode>): Update expander pattern.
(tls_local_dynamic_base_64_<mode>): Ditto.
From-SVN: r225829
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 17 |
2 files changed, 19 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6750820..244e81e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-07-15 Uros Bizjak <ubizjak@gmail.com> + + PR target/58066 + * config/i386/i386.md (*tls_global_dynamic_64_<mode>): Depend on SP_REG. + (*tls_local_dynamic_base_64_<mode>): Ditto. + (*tls_local_dynamic_base_64_largepic): Ditto. + (tls_global_dynamic_64_<mode>): Update expander pattern. + (tls_local_dynamic_base_64_<mode>): Ditto. + 2015-07-15 Richard Biener <rguenther@suse.de> * 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 354532a..b7b795e 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;") |