Handle use of r18 as a TCB pointer on aarch64-vxworks
authorOlivier Hainque <hainque@adacore.com>
Wed, 4 Nov 2020 08:05:06 +0000 (08:05 +0000)
committerOlivier Hainque <hainque@adacore.com>
Thu, 5 Nov 2020 18:31:28 +0000 (18:31 +0000)
Pick an alternate static chain regnum and document that
the port needs to be configured to issue -ffixed-r18 by
default.  The current definition of TARGET_OS_USES_R18 is
not honored by the common part of the back-end.

2020-11-04  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/aarch64/aarch64-vxworks.h (TARGET_OS_USES_R18):
Remove definition.
(STATIC_CHAIN_REGNUM): Redefine to 9.

gcc/config/aarch64/aarch64-vxworks.h

index e22f2f5..9e172c1 100644 (file)
@@ -60,12 +60,14 @@ along with GCC; see the file COPYING3.  If not see
 #undef STACK_CHECK_PROTECT
 #define STACK_CHECK_PROTECT 16384
 
-/* The VxWorks environment on aarch64 is llvm-based only, uses R18 as
-   a TCB pointer.  */
-
+/* The VxWorks environment on aarch64 is llvm-based.  */
 #undef VXWORKS_PERSONALITY
 #define VXWORKS_PERSONALITY "llvm"
 
-#undef  TARGET_OS_USES_R18
-#define TARGET_OS_USES_R18 1
+/* VxWorks uses R18 as a TCB pointer.  We must pick something else as
+   the static chain and R18 needs to be claimed "fixed".  Until we
+   arrange to override the common parts of the port family to
+   acknowledge the latter, configure --with-specs="-ffixed-r18".  */
+#undef  STATIC_CHAIN_REGNUM
+#define STATIC_CHAIN_REGNUM 9