This is a problem where we reject labels on a jump instruction because
they are invalid with pic for the 's' constraint. It seems that the
constraint wasn't checked in earlier versions of the compiler.
Fixed by adding a new constraint and using that instead.
Bernd
commit 432e3b7c5e3e47fdc9232805519d54f516c18008
Author: Bernd Schmidt <ber...@codesourcery.com>
Date: Fri Mar 27 13:32:31 2015 +0100
Fix c6x-uclinux build failure.
* config/c6x/constraints.md (S3): New constraint.
* config/c6x/c6x.md (real_jump): Use it.
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5cee0a5..8e4b6c1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-27 Bernd Schmidt <ber...@codesourcery.com>
+
+ PR target/65052
+ * config/c6x/constraints.md (S3): New constraint.
+ * config/c6x/c6x.md (real_jump): Use it.
+
2015-03-26 Jan Hubicka <hubi...@ucw.cz>
PR middle-end/65595
diff --git a/gcc/config/c6x/c6x.md b/gcc/config/c6x/c6x.md
index 892aac4..fafefa6 100644
--- a/gcc/config/c6x/c6x.md
+++ b/gcc/config/c6x/c6x.md
@@ -1519,7 +1519,7 @@
;; -------------------------------------------------------------------------
(define_insn "real_jump"
- [(unspec [(match_operand 0 "c6x_jump_operand" "a,b,s") (const_int 0)]
+ [(unspec [(match_operand 0 "c6x_jump_operand" "a,b,S3") (const_int 0)]
UNSPEC_REAL_JUMP)]
""
{
diff --git a/gcc/config/c6x/constraints.md b/gcc/config/c6x/constraints.md
index 9d88912..b8cdc0e 100644
--- a/gcc/config/c6x/constraints.md
+++ b/gcc/config/c6x/constraints.md
@@ -160,6 +160,11 @@ not C64X or higher).")
Any SYMBOL_REF or LABEL_REF."
(ior (match_code "symbol_ref") (match_code "label_ref")))
+(define_constraint "S3"
+ "Matches a symbolic integer constant, even if invalid for PIC."
+ (and (match_test "CONSTANT_P (op)")
+ (match_test "!CONST_SCALAR_INT_P (op)")))
+
(define_constraint "Si"
"@internal
Any immediate value, unless it matches the S0 constraint."