From de16d65cc52ab10a99bb1d4dee1d75872b9ecdc6 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sat, 29 Oct 2011 21:28:57 +0000 Subject: [PATCH] re PR target/50691 (Incorrect argument evaluation in call with __thread argument) PR target/50691 * config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references. * config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references. From-SVN: r180664 --- gcc/ChangeLog | 7 +++++++ gcc/config/pa/pa.c | 5 +++++ gcc/config/pa/pa.h | 3 +++ 3 files changed, 15 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 68cf82f33066..6decb93352db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-10-29 John David Anglin + + PR target/50691 + * config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references. + * config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for + TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references. + 2011-10-23 Uros Bizjak PR target/50788 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 545187f1223b..3e5084c3d934 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -1686,6 +1686,11 @@ emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg) /* Handle the most common case: storing into a register. */ else if (register_operand (operand0, mode)) { + /* Legitimize TLS symbol references. This happens for references + that aren't a legitimate constant. */ + if (PA_SYMBOL_REF_TLS_P (operand1)) + operand1 = legitimize_tls_address (operand1); + if (register_operand (operand1, mode) || (GET_CODE (operand1) == CONST_INT && cint_ok_for_move (INTVAL (operand1))) diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 4d63c6fa1873..f5432ddd9718 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -891,6 +891,9 @@ extern int may_call_alloca; && (NEW_HP_ASSEMBLER \ || TARGET_GAS \ || GET_CODE (X) != LABEL_REF) \ + && (!PA_SYMBOL_REF_TLS_P (X) \ + || (SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_GLOBAL_DYNAMIC \ + && SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_LOCAL_DYNAMIC)) \ && (!TARGET_64BIT \ || GET_CODE (X) != CONST_DOUBLE) \ && (!TARGET_64BIT \ -- 2.47.2