>From 2fe2661e581e8e3989e62b81db6ca37d2392f83d Mon Sep 17 00:00:00 2001
From: Olivier Hainque <hainque@adacore.com>
Date: Wed, 12 Dec 2018 07:05:23 -0800
Subject: [PATCH 3/4] Change static chain from r18 to r11 on aarch64

	gcc/
	* config/aarch64/aarch64.h (STATIC_CHAIN_REGNUM): Use R11 instead
	of R18.

	gcc/testsuite/
	* gcc.dg/cwsc1.c: Expect r11 as the static chain on aarch64.

	libffi/
	* src/aarch64/sysv.S (ffi_call_SYSV): Expect r11 as the static chain.
	(ffi_go_closure_SYSV): Likewise.
	* testsuite/libffi.go/static-chain.h: Likewise.
---
 gcc/config/aarch64/aarch64.h              | 2 +-
 gcc/testsuite/gcc.dg/cwsc1.c              | 2 +-
 libffi/src/aarch64/sysv.S                 | 6 +++---
 libffi/testsuite/libffi.go/static-chain.h | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 0c833a8..a8063c2 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -422,7 +422,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		R11_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..be22317 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  "x11"
 #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..12e7ec3 100644
--- a/libffi/src/aarch64/sysv.S
+++ b/libffi/src/aarch64/sysv.S
@@ -89,7 +89,7 @@ CNAME(ffi_call_SYSV):
 	mov	x9, x2			/* save fn */
 	mov	x8, x3			/* install structure return */
 #ifdef FFI_GO_CLOSURES
-	mov	x18, x5			/* install static chain */
+	mov	x11, x5			/* install static chain */
 #endif
 	stp	x3, x4, [x29, #16]	/* save 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), [x11, #PTR_SIZE]/* load cif, fn */
+	mov	x2, x11					/* 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..d22b037 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  "x11"
 #elif defined(__alpha__)
 # define STATIC_CHAIN_REG  "$1"
 #elif defined(__arm__)
-- 
1.9.1

