From 510bd85a5065e0c41704ddc25708d5ffe4da599e Mon Sep 17 00:00:00 2001 From: herengui Date: Mon, 28 Aug 2023 13:35:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=BE=99=E8=8A=AF=E5=92=8C?= =?UTF-8?q?=E7=94=B3=E5=A8=81=E6=9E=B6=E6=9E=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: herengui (cherry picked from commit e2c6e44753f21d6000a54610c857e97e69777c16) --- ...ngarch-support-not-upstream-modified.patch | 92 ++++++++ add-sw_64-support-not-upstream-modified.patch | 215 ++++++++++++++++++ gc.spec | 11 +- 3 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 add-loongarch-support-not-upstream-modified.patch create mode 100644 add-sw_64-support-not-upstream-modified.patch diff --git a/add-loongarch-support-not-upstream-modified.patch b/add-loongarch-support-not-upstream-modified.patch new file mode 100644 index 0000000..ec17dd8 --- /dev/null +++ b/add-loongarch-support-not-upstream-modified.patch @@ -0,0 +1,92 @@ +From 6ade473e440b2da11e6ecf6a69c4f1b309ab7624 Mon Sep 17 00:00:00 2001 +From: wang--ge +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 + diff --git a/add-sw_64-support-not-upstream-modified.patch b/add-sw_64-support-not-upstream-modified.patch new file mode 100644 index 0000000..69831c8 --- /dev/null +++ b/add-sw_64-support-not-upstream-modified.patch @@ -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 diff --git a/gc.spec b/gc.spec index 63af1aa..4a2a47a 100644 --- a/gc.spec +++ b/gc.spec @@ -1,6 +1,6 @@ Name: gc Version: 8.0.6 -Release: 3 +Release: 4 Summary: A garbage collector for C and C++ License: BSD and GPLv1+ 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 +Patch1000: add-sw_64-support-not-upstream-modified.patch +Patch1001: add-loongarch-support-not-upstream-modified.patch + BuildRequires: gcc gcc-c++ libtool %description @@ -74,6 +77,12 @@ make check %changelog +* Mon Aug 28 2023 herengui - 8.0.6-4 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:add support for sw_64 and loongarch64 + * Wed Oct 26 2022 Liu Zixian - 8.0.6-3 - Type:cleancode - ID:NA -- Gitee