添加龙芯和申威架构支持
Signed-off-by: herengui <herengui@kylinsec.com.cn> (cherry picked from commit e2c6e44753f21d6000a54610c857e97e69777c16)
This commit is contained in:
parent
58f1736beb
commit
510bd85a50
92
add-loongarch-support-not-upstream-modified.patch
Normal file
92
add-loongarch-support-not-upstream-modified.patch
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
From 6ade473e440b2da11e6ecf6a69c4f1b309ab7624 Mon Sep 17 00:00:00 2001
|
||||||
|
From: wang--ge <wang__ge@126.com>
|
||||||
|
Date: Tue, 12 Apr 2022 19:47:14 +0800
|
||||||
|
Subject: [PATCH] add loongarch architecture
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 2 +-
|
||||||
|
include/private/gcconfig.h | 27 +++++++++++++++++++++++++++
|
||||||
|
os_dep.c | 2 +-
|
||||||
|
3 files changed, 29 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 3b38e6f..8adfb3d 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -201,7 +201,7 @@ case "$THREADS" in
|
||||||
|
*-*-aix* | *-*-android* | *-*-cygwin* | *-*-darwin* | *-*-dragonfly* | \
|
||||||
|
*-*-freebsd* | *-*-haiku* | *-*-hpux11* | *-*-irix* | \
|
||||||
|
*-*-kfreebsd*-gnu | *-*-gnu* | *-*-*linux* | *-*-msys* | *-*-nacl* | \
|
||||||
|
- *-*-netbsd* | *-*-openbsd* | *-*-osf* | *-*-solaris*)
|
||||||
|
+ *-*-netbsd* | *-*-openbsd* | *-*-osf* | *-*-solaris* | loongarch*)
|
||||||
|
AC_DEFINE(GC_THREADS)
|
||||||
|
AC_DEFINE([_REENTRANT], [1],
|
||||||
|
[Required define if using POSIX threads.])
|
||||||
|
diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h
|
||||||
|
index 1b6f46c..d765474 100644
|
||||||
|
--- a/include/private/gcconfig.h
|
||||||
|
+++ b/include/private/gcconfig.h
|
||||||
|
@@ -238,6 +238,10 @@ EXTERN_C_BEGIN
|
||||||
|
# define VAX
|
||||||
|
# define mach_type_known
|
||||||
|
# endif
|
||||||
|
+# if defined(__loongarch64)
|
||||||
|
+# define LOONGARCH64
|
||||||
|
+# define mach_type_known
|
||||||
|
+# endif
|
||||||
|
# if defined(mips) || defined(__mips) || defined(_mips)
|
||||||
|
# define MIPS
|
||||||
|
# if defined(nec_ews) || defined(_nec_ews)
|
||||||
|
@@ -522,6 +526,10 @@ EXTERN_C_BEGIN
|
||||||
|
# define AARCH64
|
||||||
|
# define mach_type_known
|
||||||
|
# endif
|
||||||
|
+# if defined(FREEBSD) && (defined(__loongarch64) )
|
||||||
|
+# define LOONGARCH64
|
||||||
|
+# define mach_type_known
|
||||||
|
+# endif
|
||||||
|
# if defined(FREEBSD) && (defined(mips) || defined(__mips) || defined(_mips))
|
||||||
|
# define MIPS
|
||||||
|
# define mach_type_known
|
||||||
|
@@ -1740,6 +1748,25 @@ EXTERN_C_BEGIN
|
||||||
|
# define STACKBOTTOM ((ptr_t)0xfffff000) /* for Encore */
|
||||||
|
# endif
|
||||||
|
|
||||||
|
+# ifdef LOONGARCH64
|
||||||
|
+# define MACH_TYPE "LOONGARCH64"
|
||||||
|
+# ifdef LINUX
|
||||||
|
+# define OS_TYPE "LINUX"
|
||||||
|
+# define DYNAMIC_LOADING
|
||||||
|
+ extern int _end[];
|
||||||
|
+# pragma weak __data_start
|
||||||
|
+ extern int __data_start[];
|
||||||
|
+# define DATASTART ((ptr_t)(__data_start))
|
||||||
|
+# define DATAEND ((ptr_t)(_end))
|
||||||
|
+# define CPP_WORDSZ 64
|
||||||
|
+# define ALIGNMENT (64/8)
|
||||||
|
+# ifndef HBLKSIZE
|
||||||
|
+# define HBLKSIZE 4096
|
||||||
|
+# endif
|
||||||
|
+# define LINUX_STACKBOTTOM
|
||||||
|
+# endif
|
||||||
|
+# endif
|
||||||
|
+
|
||||||
|
# ifdef MIPS
|
||||||
|
# define MACH_TYPE "MIPS"
|
||||||
|
# ifdef LINUX
|
||||||
|
diff --git a/os_dep.c b/os_dep.c
|
||||||
|
index b183423..e18c9b9 100644
|
||||||
|
--- a/os_dep.c
|
||||||
|
+++ b/os_dep.c
|
||||||
|
@@ -3144,7 +3144,7 @@ GC_API GC_push_other_roots_proc GC_CALL GC_get_push_other_roots(void)
|
||||||
|
# ifndef SEGV_ACCERR
|
||||||
|
# define SEGV_ACCERR 2
|
||||||
|
# endif
|
||||||
|
-# if defined(AARCH64) || defined(ARM32) || defined(MIPS) \
|
||||||
|
+# if defined(AARCH64) || defined(ARM32) || defined(MIPS) || defined(LOONGARCH64) \
|
||||||
|
|| __FreeBSD__ >= 7
|
||||||
|
# define CODE_OK (si -> si_code == SEGV_ACCERR)
|
||||||
|
# elif defined(POWERPC)
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
||||||
215
add-sw_64-support-not-upstream-modified.patch
Normal file
215
add-sw_64-support-not-upstream-modified.patch
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
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
|
||||||
|
@@ -891,6 +891,14 @@
|
||||||
|
UNAME_MACHINE=aarch64_be
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
|
exit ;;
|
||||||
|
+ 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
|
||||||
|
+ echo ${UNAME_MACHINE}-sunway-linux-${LIBC}
|
||||||
|
+ exit ;;
|
||||||
|
alpha:Linux:*:*)
|
||||||
|
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` 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
|
||||||
|
@@ -248,6 +248,7 @@
|
||||||
|
# Some are omitted here because they have special meanings below.
|
||||||
|
1750a | 580 \
|
||||||
|
| a29k \
|
||||||
|
+ | sw_64 \
|
||||||
|
| aarch64 | aarch64_be \
|
||||||
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||||
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||||
|
@@ -370,6 +371,7 @@
|
||||||
|
# Recognize the basic CPU types with company name.
|
||||||
|
580-* \
|
||||||
|
| a29k-* \
|
||||||
|
+ | sw_64-* \
|
||||||
|
| aarch64-* | aarch64_be-* \
|
||||||
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||||
|
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[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
|
||||||
|
@@ -149,6 +149,9 @@
|
||||||
|
#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;
|
||||||
|
@@ -158,6 +161,9 @@
|
||||||
|
#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
|
||||||
|
@@ -95,7 +95,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
|
||||||
|
@@ -851,7 +851,7 @@
|
||||||
|
/* 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_ORBIS) || defined(SN_TARGET_PSP2)
|
||||||
|
# define CPP_LOG_HBLKSIZE 16 /* page size is set to 64K */
|
||||||
|
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
|
||||||
|
@@ -411,6 +411,14 @@
|
||||||
|
# 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) \
|
||||||
|
@@ -1994,6 +2002,100 @@
|
||||||
|
# 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
|
||||||
11
gc.spec
11
gc.spec
@ -1,6 +1,6 @@
|
|||||||
Name: gc
|
Name: gc
|
||||||
Version: 8.0.6
|
Version: 8.0.6
|
||||||
Release: 3
|
Release: 4
|
||||||
Summary: A garbage collector for C and C++
|
Summary: A garbage collector for C and C++
|
||||||
License: BSD and GPLv1+
|
License: BSD and GPLv1+
|
||||||
Url: http://www.hboehm.info/gc/
|
Url: http://www.hboehm.info/gc/
|
||||||
@ -8,6 +8,9 @@ Source0: http://www.hboehm.info/gc/gc_source/gc-%{version}.tar.gz
|
|||||||
|
|
||||||
Patch0: Fix-typo-in-GC_malloc_explicitly_typed-comment.patch
|
Patch0: Fix-typo-in-GC_malloc_explicitly_typed-comment.patch
|
||||||
|
|
||||||
|
Patch1000: add-sw_64-support-not-upstream-modified.patch
|
||||||
|
Patch1001: add-loongarch-support-not-upstream-modified.patch
|
||||||
|
|
||||||
BuildRequires: gcc gcc-c++ libtool
|
BuildRequires: gcc gcc-c++ libtool
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -74,6 +77,12 @@ make check
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Aug 28 2023 herengui <herengui@kylinsec.com.cn> - 8.0.6-4
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add support for sw_64 and loongarch64
|
||||||
|
|
||||||
* Wed Oct 26 2022 Liu Zixian <liuzixian4@huawei.com> - 8.0.6-3
|
* Wed Oct 26 2022 Liu Zixian <liuzixian4@huawei.com> - 8.0.6-3
|
||||||
- Type:cleancode
|
- Type:cleancode
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user