diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 51a06358b89..ce38f1879c1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-02-20 Angel Nunez Mencias + + * config/s390/s390.c (legitimize_pic_address): Assertions checking + for non tls symbols added. + (legitimize_address): Do nothing for PLUS expressions if one of the + addends is a tls symbol reference. + 2006-02-20 Paolo Bonzini PR bootstrap/25476 diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index bdf15125541..3eeb4acb0b6 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -2821,6 +2821,8 @@ legitimize_pic_address (rtx orig, rtx reg) rtx new = orig; rtx base; + gcc_assert (!TLS_SYMBOLIC_CONST (addr)); + if (GET_CODE (addr) == LABEL_REF || (GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_LOCAL_P (addr))) { @@ -2973,6 +2975,10 @@ legitimize_pic_address (rtx orig, rtx reg) if (GET_CODE (addr) == PLUS) { rtx op0 = XEXP (addr, 0), op1 = XEXP (addr, 1); + + gcc_assert (!TLS_SYMBOLIC_CONST (op0)); + gcc_assert (!TLS_SYMBOLIC_CONST (op1)); + /* Check first to see if this is a constant offset from a local symbol reference. */ if ((GET_CODE (op0) == LABEL_REF @@ -3345,6 +3351,12 @@ legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED, if (legitimate_address_p (mode, x, FALSE)) return x; } + else if (GET_CODE (x) == PLUS + && (TLS_SYMBOLIC_CONST (XEXP (x, 0)) + || TLS_SYMBOLIC_CONST (XEXP (x, 1)))) + { + return x; + } else if (flag_pic) { if (SYMBOLIC_CONST (x)