summaryrefslogtreecommitdiff
path: root/gc-8.0.6-sw.patch
blob: 35883ef209da8d26a2ba1001c8cc257a773054a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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