commit 40f08c3374d4a0ca6b703682263275f4c0477095
Author: Olivier Hainque <hainque@adacore.com>
Date:   Wed Dec 12 07:05:23 2018 -0800

    Change static chain from r18 to r9 on aarch64
    
    	gcc/
    	* config/aarch64/aarch64.h (STATIC_CHAIN_REGNUM): Use r9 instead
    	of r18.
    	* config/aarch64/aarch64.c (PROBE_STACK_FIRST_REG,
    	PROBE_STACK_SECOND_REG): Use r10/r11 instead r9/r10.
    
    	gcc/testsuite/
    	* gcc.dg/cwsc1.c: Expect r9 as the static chain on aarch64.
    
    	libffi/
    	* src/aarch64/sysv.S (ffi_call_SYSV): Expect r9 as the static chain.
    	(ffi_go_closure_SYSV): Likewise.
    	* testsuite/libffi.go/static-chain.h: Likewise.

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 1c45243..67ace48 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -4036,8 +4036,8 @@ aarch64_libgcc_cmp_return_mode (void)
 #endif
 
 /* The pair of scratch registers used for stack probing.  */
-#define PROBE_STACK_FIRST_REG  R9_REGNUM
-#define PROBE_STACK_SECOND_REG R10_REGNUM
+#define PROBE_STACK_FIRST_REG  R10_REGNUM
+#define PROBE_STACK_SECOND_REG R11_REGNUM
 
 /* Emit code to probe a range of stack addresses from FIRST to FIRST+POLY_SIZE,
    inclusive.  These are offsets from the current stack pointer.  */
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 2617a8c..77fd10c 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -416,7 +416,7 @@ extern unsigned aarch64_architecture_version;
    uses alloca.  */
 #define EXIT_IGNORE_STACK	(cfun->calls_alloca)
 
-#define STATIC_CHAIN_REGNUM		R18_REGNUM
+#define STATIC_CHAIN_REGNUM		R9_REGNUM
 #define HARD_FRAME_POINTER_REGNUM	R29_REGNUM
 #define FRAME_POINTER_REGNUM		SFP_REGNUM
 #define STACK_POINTER_REGNUM		SP_REGNUM
diff --git a/gcc/testsuite/gcc.dg/cwsc1.c b/gcc/testsuite/gcc.dg/cwsc1.c
index e793e26..6972110 100644
--- a/gcc/testsuite/gcc.dg/cwsc1.c
+++ b/gcc/testsuite/gcc.dg/cwsc1.c
@@ -6,7 +6,7 @@
 #elif defined(__i386__)
 # define CHAIN  "%ecx"
 #elif defined(__aarch64__)
-# define CHAIN  "x18"
+# define CHAIN  "x9"
 #elif defined(__alpha__)
 # define CHAIN  "$1"
 #elif defined(__arm__)
diff --git a/libffi/src/aarch64/sysv.S b/libffi/src/aarch64/sysv.S
index c1bf9b9..a20fee2 100644
--- a/libffi/src/aarch64/sysv.S
+++ b/libffi/src/aarch64/sysv.S
@@ -86,10 +86,10 @@ CNAME(ffi_call_SYSV):
 	cfi_rel_offset (x29, 0)
 	cfi_rel_offset (x30, 8)
 
-	mov	x9, x2			/* save fn */
+	mov	x10, x2			/* save fn */
 	mov	x8, x3			/* install structure return */
 #ifdef FFI_GO_CLOSURES
-	mov	x18, x5			/* install static chain */
+	mov	x9, x5			/* install static chain */
 #endif
 	stp	x3, x4, [x29, #16]	/* save rvalue and flags */
 
@@ -110,7 +110,7 @@ CNAME(ffi_call_SYSV):
 	/* Deallocate the context, leaving the stacked arguments.  */
 	add	sp, sp, #CALL_CONTEXT_SIZE
 
-	blr     x9			/* call fn */
+	blr     x10			/* call fn */
 
 	ldp	x3, x4, [x29, #16]	/* reload rvalue and flags */
 
@@ -415,8 +415,8 @@ CNAME(ffi_go_closure_SYSV):
 	stp     x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48]
 
 	/* Load ffi_closure_inner arguments.  */
-	ldp	PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */
-	mov	x2, x18					/* load user_data */
+	ldp	PTR_REG(0), PTR_REG(1), [x9, #PTR_SIZE]	/* load cif, fn */
+	mov	x2, x9					/* load user_data */
 	b	.Ldo_closure
 	cfi_endproc
 
diff --git a/libffi/testsuite/libffi.go/static-chain.h b/libffi/testsuite/libffi.go/static-chain.h
index e120eea..111cbe9 100644
--- a/libffi/testsuite/libffi.go/static-chain.h
+++ b/libffi/testsuite/libffi.go/static-chain.h
@@ -1,5 +1,5 @@
 #ifdef __aarch64__
-# define STATIC_CHAIN_REG  "x18"
+# define STATIC_CHAIN_REG  "x9"
 #elif defined(__alpha__)
 # define STATIC_CHAIN_REG  "$1"
 #elif defined(__arm__)
