[racket-dev] support for arm64 / aarch64

2014-12-29 Thread David Bremner

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.r...@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


Re: [racket-dev] support for arm64 / aarch64

2014-12-29 Thread Matthew Flatt
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.r...@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
_
  Racket Developers list:
  http://lists.racket-lang.org/dev