summaryrefslogtreecommitdiff
path: root/gc-8.0.6-sw.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gc-8.0.6-sw.patch')
-rwxr-xr-xgc-8.0.6-sw.patch207
1 files changed, 207 insertions, 0 deletions
diff --git a/gc-8.0.6-sw.patch b/gc-8.0.6-sw.patch
new file mode 100755
index 0000000..35883ef
--- /dev/null
+++ b/gc-8.0.6-sw.patch
@@ -0,0 +1,207 @@
+diff -Naur gc-8.0.6.org/config.guess gc-8.0.6.sw/config.guess
+--- gc-8.0.6.org/config.guess 2022-02-14 09:01:19.450000000 +0000
++++ gc-8.0.6.sw/config.guess 2022-02-15 02:27:24.780000000 +0000
+@@ -973,6 +973,14 @@ EOF
+ UNAME_MACHINE=aarch64_be
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
++ sw_64:Linux:*:*)
++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
++ sw) UNAME_MACHINE=sw_64 ;;
++ esac
++ objdump --private-headers /bin/sh | grep -q ld.so.1
++ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
++ GUESS=${UNAME_MACHINE}-sunway-linux-${LIBC}
++ ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+diff -Naur gc-8.0.6.org/config.sub gc-8.0.6.sw/config.sub
+--- gc-8.0.6.org/config.sub 2022-02-14 09:01:19.450000000 +0000
++++ gc-8.0.6.sw/config.sub 2022-02-15 02:25:05.350000000 +0000
+@@ -1175,6 +1175,7 @@ case $cpu-$vendor in
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
++ | sw_64 \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+diff -Naur gc-8.0.6.org/extra/msvc_dbg.c gc-8.0.6.sw/extra/msvc_dbg.c
+--- gc-8.0.6.org/extra/msvc_dbg.c 2022-02-14 09:01:19.470000000 +0000
++++ gc-8.0.6.sw/extra/msvc_dbg.c 2022-02-15 02:32:56.220000000 +0000
+@@ -156,6 +156,9 @@ size_t GetStackFramesFromContext(HANDLE hProcess, HANDLE hThread,
+ #elif defined(_M_MRX000)
+ machineType = IMAGE_FILE_MACHINE_R4000;
+ stackFrame.AddrPC.Offset = context->Fir;
++#elif defined(_M_SW_64)
++ machineType = IMAGE_FILE_MACHINE_SW_64;
++ stackFrame.AddrPC.Offset = (unsigned long)context->Fir;
+ #elif defined(_M_ALPHA)
+ machineType = IMAGE_FILE_MACHINE_ALPHA;
+ stackFrame.AddrPC.Offset = (unsigned long)context->Fir;
+@@ -165,6 +168,9 @@ size_t GetStackFramesFromContext(HANDLE hProcess, HANDLE hThread,
+ #elif defined(_M_IA64)
+ machineType = IMAGE_FILE_MACHINE_IA64;
+ stackFrame.AddrPC.Offset = context->StIIP;
++#elif defined(_M_SW_6464)
++ machineType = IMAGE_FILE_MACHINE_SW_6464;
++ stackFrame.AddrPC.Offset = context->Fir;
+ #elif defined(_M_ALPHA64)
+ machineType = IMAGE_FILE_MACHINE_ALPHA64;
+ stackFrame.AddrPC.Offset = context->Fir;
+diff -Naur gc-8.0.6.org/include/gc_config_macros.h gc-8.0.6.sw/include/gc_config_macros.h
+--- gc-8.0.6.org/include/gc_config_macros.h 2022-02-14 09:01:19.450000000 +0000
++++ gc-8.0.6.sw/include/gc_config_macros.h 2022-02-15 02:37:26.990000000 +0000
+@@ -96,7 +96,7 @@
+ # define GC_FREEBSD_THREADS
+ # elif defined(__NetBSD__)
+ # define GC_NETBSD_THREADS
+-# elif defined(__alpha) || defined(__alpha__) /* && !Linux && !xBSD */
++# elif defined(__alpha) || defined(__alpha__) || defined(__sw_64) || defined(__sw_64__) /* && !Linux && !xBSD */
+ # define GC_OSF1_THREADS
+ # elif (defined(mips) || defined(__mips) || defined(_mips)) \
+ && !(defined(nec_ews) || defined(_nec_ews) \
+diff -Naur gc-8.0.6.org/include/gc_tiny_fl.h gc-8.0.6.sw/include/gc_tiny_fl.h
+--- gc-8.0.6.org/include/gc_tiny_fl.h 2022-02-14 09:01:19.440000000 +0000
++++ gc-8.0.6.sw/include/gc_tiny_fl.h 2022-02-15 02:38:20.270000000 +0000
+@@ -49,7 +49,7 @@
+ # if defined(__LP64__) || defined (_LP64) || defined(_WIN64) \
+ || defined(__s390x__) \
+ || (defined(__x86_64__) && !defined(__ILP32__)) \
+- || defined(__alpha__) || defined(__powerpc64__) \
++ || defined(__alpha__) || defined(__sw_64__) || defined(__powerpc64__) \
+ || defined(__arch64__)
+ # define GC_GRANULE_BYTES 16
+ # define GC_GRANULE_WORDS 2
+diff -Naur gc-8.0.6.org/include/private/gc_priv.h gc-8.0.6.sw/include/private/gc_priv.h
+--- gc-8.0.6.org/include/private/gc_priv.h 2022-02-14 09:01:19.440000000 +0000
++++ gc-8.0.6.sw/include/private/gc_priv.h 2022-02-15 02:40:15.270000000 +0000
+@@ -925,7 +925,7 @@ EXTERN_C_BEGIN
+ /* SMALL_CONFIG: Want less block-level fragmentation. */
+ #ifndef HBLKSIZE
+ # if defined(LARGE_CONFIG) || !defined(SMALL_CONFIG)
+-# ifdef ALPHA
++# if defined ALPHA || defined SW_64
+ # define CPP_LOG_HBLKSIZE 13
+ # elif defined(SN_TARGET_PSP2)
+ # define CPP_LOG_HBLKSIZE 16 /* page size is set to 64 KB */
+diff -Naur gc-8.0.6.org/include/private/gcconfig.h gc-8.0.6.sw/include/private/gcconfig.h
+--- gc-8.0.6.org/include/private/gcconfig.h 2022-02-14 09:01:19.440000000 +0000
++++ gc-8.0.6.sw/include/private/gcconfig.h 2022-02-15 02:45:28.230000000 +0000
+@@ -418,6 +418,14 @@ EXTERN_C_BEGIN
+ # define M32R
+ # define mach_type_known
+ # endif
++# if defined(__sw_64) || defined(__sw_64__)
++# define SW_64
++# if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD) \
++ && !defined(FREEBSD)
++# define OSF1 /* a.k.a Digital Unix */
++# endif
++# define mach_type_known
++# endif
+ # if defined(__alpha) || defined(__alpha__)
+ # define ALPHA
+ # if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD) \
+@@ -1924,6 +1932,100 @@ EXTERN_C_BEGIN
+ # endif
+ # endif /* HP_PA */
+
++# ifdef SW_64
++# define MACH_TYPE "SW_64"
++# define ALIGNMENT 8
++# define CPP_WORDSZ 64
++# ifdef NETBSD
++# define OS_TYPE "NETBSD"
++# define HEURISTIC2
++ extern ptr_t GC_data_start;
++# define DATASTART GC_data_start
++# define ELFCLASS32 32
++# define ELFCLASS64 64
++# define ELF_CLASS ELFCLASS64
++# define DYNAMIC_LOADING
++# endif
++# ifdef OPENBSD
++# define OS_TYPE "OPENBSD"
++# define ELF_CLASS ELFCLASS64
++# ifndef GC_OPENBSD_THREADS
++# define HEURISTIC2
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)__data_start)
++ extern int _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# endif
++# ifdef FREEBSD
++# define OS_TYPE "FREEBSD"
++/* MPROTECT_VDB is not yet supported at all on FreeBSD/sw_64. */
++# define SIG_SUSPEND SIGUSR1
++# define SIG_THR_RESTART SIGUSR2
++ /* SIGTSTP and SIGCONT could be used alternatively. */
++# define FREEBSD_STACKBOTTOM
++# ifdef __ELF__
++# define DYNAMIC_LOADING
++# endif
++/* Handle unmapped hole sw_64*-*-freebsd[45]* puts between etext and edata. */
++ extern char etext[];
++ extern char edata[];
++# if !defined(CPPCHECK)
++ extern char end[];
++# endif
++# define NEED_FIND_LIMIT
++# define DATASTART ((ptr_t)(&etext))
++ void * GC_find_limit(void *, int);
++# define DATAEND (ptr_t)GC_find_limit(DATASTART, TRUE)
++# define DATAEND_IS_FUNC
++# define GC_HAVE_DATAREGION2
++# define DATASTART2 ((ptr_t)(&edata))
++# define DATAEND2 ((ptr_t)(&end))
++# endif
++# ifdef OSF1
++# define OS_TYPE "OSF1"
++# define DATASTART ((ptr_t)0x140000000)
++ extern int _end[];
++# define DATAEND ((ptr_t)(&_end))
++ extern char ** environ;
++ /* round up from the value of environ to the nearest page boundary */
++ /* Probably breaks if putenv is called before collector */
++ /* initialization. */
++# define STACKBOTTOM ((ptr_t)(((word)(environ) | (getpagesize()-1))+1))
++/* # define HEURISTIC2 */
++ /* Normally HEURISTIC2 is too conservative, since */
++ /* the text segment immediately follows the stack. */
++ /* Hence we give an upper pound. */
++ /* This is currently unused, since we disabled HEURISTIC2 */
++ extern int __start[];
++# define HEURISTIC2_LIMIT ((ptr_t)((word)(__start) & ~(getpagesize()-1)))
++# ifndef GC_OSF1_THREADS
++ /* Unresolved signal issues with threads. */
++# define MPROTECT_VDB
++# endif
++# define DYNAMIC_LOADING
++# endif
++# ifdef LINUX
++# define OS_TYPE "LINUX"
++# define LINUX_STACKBOTTOM
++# define COUNT_UNMAPPED_REGIONS
++# ifdef __ELF__
++# define SEARCH_FOR_DATA_START
++# define DYNAMIC_LOADING
++# else
++# define DATASTART ((ptr_t)0x140000000)
++# endif
++ extern int _end[];
++# define DATAEND ((ptr_t)(_end))
++# if !defined(REDIRECT_MALLOC)
++# define MPROTECT_VDB
++ /* Has only been superficially tested. May not */
++ /* work on all versions. */
++# endif
++# endif
++# endif
++
+ # ifdef ALPHA
+ # define MACH_TYPE "ALPHA"
+ # define ALIGNMENT 8