[racket-dev] support for arm64 / aarch64

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Dec 29 14:33:23 EST 2014

It looks like this patch was submitted for v6.1. Version 6.1.1 (the
current release), uses SGC instead of Boehm's GC during the build
process by default. So, it at least avoids this immediate problem.

I can't think of any other problem that would turn up in v6.1.1, but
I'm not sure it will work. We'd definitely welcome feedback on whether
Racket 6.1.1 builds on AArch64, or where it gets stuck if not.

Thanks!

At Mon, 29 Dec 2014 11:09:16 +0100, David Bremner wrote:
> 
> A user submitted the attached patch for partial support for arm64 on
> Debian/Ubuntu.  It only enables cgc, 3m still hangs during compilation.
> If the patch makes sense to you, perhaps you'd like to apply it
> upstream.
> 
> d
> 
> From 7b5acfba9a1df00f0427d1d2e1a92570da3ab2d1 Mon Sep 17 00:00:00 2001
> From: Yvan Roux <yvan.roux at linaro.org>
> Date: Wed, 23 Jan 2013 23:15:57 +0400
> Subject: [PATCH] Add AArch64 (64-bit ARM) target support
> 
> * include/private/gcconfig.h (AARCH64): New macro (defined only if
> __aarch64__).
> * include/private/gcconfig.h (mach_type_known): Update comment adding
> ARM AArch64 target.
> * include/private/gcconfig.h (NOSYS, mach_type_known, CPP_WORDSZ,
> MACH_TYPE, ALIGNMENT, HBLKSIZE, OS_TYPE, LINUX_STACKBOTTOM,
> DYNAMIC_LOADING, DATASTART, DATAEND, STACKBOTTOM): Define for AArch64.
> ---
>  include/private/gcconfig.h | 37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
> 
> --- a/src/racket/gc/include/private/gcconfig.h
> +++ b/src/racket/gc/include/private/gcconfig.h
> @@ -76,6 +76,13 @@
>  # endif
>  
>  /* Determine the machine type: */
> +# if defined(__aarch64__)
> +#    define AARCH64
> +#    if !defined(LINUX)
> +#      define NOSYS
> +#      define mach_type_known
> +#    endif
> +# endif
>  # if defined(__arm__) || defined(__thumb__)
>  #    define ARM32
>  #    if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD)
> @@ -249,6 +256,10 @@
>  #    define IA64
>  #    define mach_type_known
>  # endif
> +# if defined(LINUX) && defined(__aarch64__)
> +#    define AARCH64
> +#    define mach_type_known
> +# endif
>  # if defined(LINUX) && defined(__arm__)
>  #    define ARM32
>  #    define mach_type_known
> @@ -529,6 +540,7 @@
>  		    /* 			running Amdahl UTS4		*/
>                      /*             S390       ==> 390-like machine      */
>  		    /*                  running LINUX                   */
> +		    /*             AARCH64    ==> ARM AArch64           */
>  		    /* 		   ARM32      ==> Intel StrongARM	*/
>  		    /* 		   IA64	      ==> Intel IPF		*/
>  		    /*				  (e.g. Itanium)	*/
> @@ -1818,6 +1830,31 @@
>  #   endif
>  # endif
>  
> +# ifdef AARCH64
> +#   define CPP_WORDSZ 64
> +#   define MACH_TYPE "AARCH64"
> +#   define ALIGNMENT 8
> +#   ifndef HBLKSIZE
> +#     define HBLKSIZE 4096
> +#   endif
> +#   ifdef LINUX
> +#     define OS_TYPE "LINUX"
> +#     define LINUX_STACKBOTTOM
> +#     define DYNAMIC_LOADING
> +      extern int __data_start[];
> +#     define DATASTART ((ptr_t)__data_start)
> +      extern char _end[];
> +#     define DATAEND ((ptr_t)(&_end))
> +#   endif
> +#   ifdef NOSYS
> +      /* __data_start is usually defined in the target linker script.   */
> +      extern int __data_start[];
> +#     define DATASTART ((ptr_t)__data_start)
> +      extern void *__stack_base__;
> +#     define STACKBOTTOM ((ptr_t)__stack_base__)
> +#   endif
> +# endif
> +
>  # ifdef ARM32
>  #   define CPP_WORDSZ 32
>  #   define MACH_TYPE "ARM32"
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev

Posted on the dev mailing list.