From bd76990b9710ac00f2e5746a077e2674ebf2942d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E4=BB=B2=E4=BC=9F?= Date: Fri, 6 Dec 2024 18:03:18 +0800 Subject: [PATCH] fix: %patchN is deprecated (7 usages found), use %patch N (or %patch -P N);remove useless patch --- 3000-add-sw_64-support.patch | 1789 ---------------------------------- opengauss-server.spec | 19 +- 2 files changed, 11 insertions(+), 1797 deletions(-) delete mode 100644 3000-add-sw_64-support.patch diff --git a/3000-add-sw_64-support.patch b/3000-add-sw_64-support.patch deleted file mode 100644 index c3522c7..0000000 --- a/3000-add-sw_64-support.patch +++ /dev/null @@ -1,1789 +0,0 @@ -From 1d1ba5da4366f12a8bc020d5d0432030cd890db2 Mon Sep 17 00:00:00 2001 -From: panchenbo -Date: Sun, 25 Jun 2023 14:48:59 +0800 -Subject: [PATCH] add sw_64 support - ---- - .../cmake/src/build_options.cmake | 2 +- - openGauss-server-2.1.0/config/config.guess | 3 + - openGauss-server-2.1.0/config/config.sub | 2 + - openGauss-server-2.1.0/configure | 10 +- - .../contrib/pgcrypto/crypt-blowfish.cpp | 2 +- - openGauss-server-2.1.0/src/Makefile.global.in | 2 +- - .../src/bin/initdb/Makefile | 3 +- - .../src/bin/initdb/initdb.cpp | 31 ++-- - .../src/bin/pg_probackup/atomics.h | 2 + - .../src/bin/pg_probackup/atomics/arch-sw_64.h | 17 +++ - .../src/common/port/Makefile | 10 ++ - .../src/common/port/exec.cpp | 1 - - .../src/common/port/pg_crc32c_choose.cpp | 1 + - .../src/gausskernel/CMakeLists.txt | 4 +- - .../src/gausskernel/bootstrap/bootstrap.cpp | 4 +- - .../src/gausskernel/cbb/bbox/bbox_atomic.h | 4 + - .../gausskernel/cbb/bbox/bbox_atomic_sw_64.h | 124 ++++++++++++++++ - .../gausskernel/cbb/bbox/bbox_elf_dump.cpp | 6 +- - .../src/gausskernel/cbb/bbox/bbox_elf_dump.h | 94 +++++++++++- - .../gausskernel/cbb/bbox/bbox_syscall_SW_64.h | 136 ++++++++++++++++++ - .../cbb/bbox/bbox_syscall_support.cpp | 89 ++++++++++++ - .../cbb/bbox/bbox_syscall_support.h | 38 ++++- - .../src/gausskernel/process/main/main.cpp | 3 +- - .../process/postmaster/postmaster.cpp | 2 +- - .../runtime/executor/instrument.cpp | 6 + - .../vecexecutor/vectorsonic/vsonichash.cpp | 9 +- - .../access/transam/extreme_rto/page_redo.cpp | 10 +- - .../storage/access/transam/xlog.cpp | 45 +++--- - .../storage/mot/core/Makefile.local | 9 +- - .../mot/core/infra/synchronization/cycles.h | 12 ++ - .../infra/synchronization/mot_atomic_ops.h | 2 +- - .../src/include/access/double_write_basic.h | 2 + - .../include/access/extreme_rto/dispatcher.h | 2 +- - .../include/access/extreme_rto/page_redo.h | 2 +- - .../access/parallel_recovery/page_redo.h | 2 +- - .../communication/commproxy_interface.h | 10 ++ - .../src/include/gtm/gtm_atomic.h | 12 ++ - .../src/include/gtm/gtm_slock.h | 39 +++++ - .../src/include/storage/lock/s_lock.h | 41 +++++- - .../src/include/utils/atomic.h | 3 + - .../src/test/regress/pg_regress.cpp | 4 + - protobuf-3.11.3/cmake/CMakeLists.txt | 3 +- - .../kokoro/release/protoc/linux/build.sh | 2 + - .../protoc-artifacts/build-protoc.sh | 6 + - .../google/protobuf/stubs/platform_macros.h | 3 + - zlib-1.2.11/configure | 14 +- - 46 files changed, 744 insertions(+), 84 deletions(-) - create mode 100644 openGauss-server-2.1.0/src/bin/pg_probackup/atomics/arch-sw_64.h - create mode 100644 openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic_sw_64.h - create mode 100644 openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_SW_64.h - -diff --git a/openGauss-server-2.1.0/cmake/src/build_options.cmake b/openGauss-server-2.1.0/cmake/src/build_options.cmake -index 0ef180f..bb7e974 100755 ---- a/openGauss-server-2.1.0/cmake/src/build_options.cmake -+++ b/openGauss-server-2.1.0/cmake/src/build_options.cmake -@@ -237,7 +237,7 @@ endif() - - - if(${USE_PROTOBUF}) -- set(LIBS "${LIBS} -lprotobuf -lgrpc++ -lgrpc -lgpr") -+ set(LIBS "${LIBS} -lprotobuf -latomic -lgrpc++ -lgrpc -lgpr") - set(GAUSSDB_CONFIGURE "${GAUSSDB_CONFIGURE} -DUSE_PROTOBUF") - endif() - add_definitions(-Wno-builtin-macro-redefined) -diff --git a/openGauss-server-2.1.0/config/config.guess b/openGauss-server-2.1.0/config/config.guess -index d622a44..0ed97fe 100644 ---- a/openGauss-server-2.1.0/config/config.guess -+++ b/openGauss-server-2.1.0/config/config.guess -@@ -868,6 +868,9 @@ EOF - UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; -+ sw_64:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; -diff --git a/openGauss-server-2.1.0/config/config.sub b/openGauss-server-2.1.0/config/config.sub -index 02df9f8..4e99ea1 100644 ---- a/openGauss-server-2.1.0/config/config.sub -+++ b/openGauss-server-2.1.0/config/config.sub -@@ -256,6 +256,7 @@ case $basic_machine in - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ -+ | sw_64 \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ -@@ -368,6 +369,7 @@ case $basic_machine in - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ -+ | sw_64-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ -diff --git a/openGauss-server-2.1.0/configure b/openGauss-server-2.1.0/configure -index 8446431..5937920 100755 ---- a/openGauss-server-2.1.0/configure -+++ b/openGauss-server-2.1.0/configure -@@ -4713,7 +4713,7 @@ fi - # but has its own. Also check other compiler-specific flags here. - - if test "$GCC" = yes -a "$ICC" = no; then -- CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wno-write-strings -fnon-call-exceptions -fno-common -freg-struct-return -pipe" -+ CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wno-write-strings -latomic -fnon-call-exceptions -fno-common -freg-struct-return -pipe" - if test "$autodepend" = yes; then - CFLAGS="$CFLAGS -fPIC" - fi -@@ -28510,7 +28510,7 @@ if test x"$USE_SSE42_CRC32C" = x"" && test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHEC - else - # fall back to slicing-by-8 algorithm which doesn't require any special CPU support. USE_SLICING_BY_8_CRC32C=1 - # but we need runtime check, so need support special CRC instructions for calculating CRC-32C at compile. -- USE_ARM_CRC32C=1 -+ USE_SW_64_CRC32C=1 - fi - fi - fi -@@ -28533,11 +28533,11 @@ $as_echo "#define USE_SSE42_CRC32C_WITH_RUNTIME_CHECK 1" >>confdefs.h - PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sb8.o pg_crc32c_choose.o" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE 4.2 with runtime check" >&5 - $as_echo "SSE 4.2 with runtime check" >&6; } -- elif test x"$USE_ARM_CRC32C" = x"1"; then -+ elif test x"$USE_SW_64_CRC32C" = x"1"; then - - PG_CRC32C_OBJS="pg_crc32c_choose.o" -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ARM CRC32C" >&5 --$as_echo "ARM CRC32C" >&6; } -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: SW_64 CRC32C" >&5 -+$as_echo "SW_64 CRC32C" >&6; } - else - - $as_echo "#define USE_SLICING_BY_8_CRC32C 1" >>confdefs.h -diff --git a/openGauss-server-2.1.0/contrib/pgcrypto/crypt-blowfish.cpp b/openGauss-server-2.1.0/contrib/pgcrypto/crypt-blowfish.cpp -index b9f7bfe..1c1e1a9 100644 ---- a/openGauss-server-2.1.0/contrib/pgcrypto/crypt-blowfish.cpp -+++ b/openGauss-server-2.1.0/contrib/pgcrypto/crypt-blowfish.cpp -@@ -40,7 +40,7 @@ - #ifdef __i386__ - #define BF_ASM 0 /* 1 */ - #define BF_SCALE 1 --#elif defined(__x86_64__) || defined(__alpha__) || defined(__hppa__) -+#elif defined(__x86_64__) || defined(__alpha__) || defined(__hppa__) || defined(__sw_64__) - #define BF_ASM 0 - #define BF_SCALE 1 - #else -diff --git a/openGauss-server-2.1.0/src/Makefile.global.in b/openGauss-server-2.1.0/src/Makefile.global.in -index ab8bea3..ff6687a 100644 ---- a/openGauss-server-2.1.0/src/Makefile.global.in -+++ b/openGauss-server-2.1.0/src/Makefile.global.in -@@ -546,7 +546,7 @@ CJSON_LIB_PATH = $(CJSON_HOME)/lib - # protobuf component - ############################################################################# - PROTOBUF_INCLUDE_PATH = $(PROTOBUF_HOME)/include --PROTOBUF_LIB_PATH = $(PROTOBUF_HOME)/lib64 -+PROTOBUF_LIB_PATH = $(PROTOBUF_HOME)/lib - - ############################################################################# - # kerberos component -diff --git a/openGauss-server-2.1.0/src/bin/initdb/Makefile b/openGauss-server-2.1.0/src/bin/initdb/Makefile -index 0712306..3c92440 100644 ---- a/openGauss-server-2.1.0/src/bin/initdb/Makefile -+++ b/openGauss-server-2.1.0/src/bin/initdb/Makefile -@@ -30,7 +30,8 @@ ifneq "$(MAKECMDGOALS)" "clean" - endif - endif - endif --OBJS= initdb.o findtimezone.o localtime.o encnames.o pqsignal.o $(WIN32RES) $(top_builddir)/src/lib/elog/elog.a -+#OBJS= initdb.o findtimezone.o localtime.o encnames.o pqsignal.o $(WIN32RES) $(top_builddir)/src/lib/elog/elog.a -+OBJS= initdb.o findtimezone.o localtime.o encnames.o pqsignal.o $(top_builddir)/src/lib/elog/elog.a - all: gs_initdb - - gs_initdb: $(OBJS) | submake-libpgport -diff --git a/openGauss-server-2.1.0/src/bin/initdb/initdb.cpp b/openGauss-server-2.1.0/src/bin/initdb/initdb.cpp -index 05ae64e..0dfbf57 100644 ---- a/openGauss-server-2.1.0/src/bin/initdb/initdb.cpp -+++ b/openGauss-server-2.1.0/src/bin/initdb/initdb.cpp -@@ -344,15 +344,18 @@ static void InitUndoSubsystemMeta(); - exit_nicely(); /* message already printed by popen_check */ \ - } while (0) - --#define PG_CMD_CLOSE \ -+#define PG_CMD_CLOSE \ - do { \ - if (pclose_check(cmdfd)) \ - exit_nicely(); /* message already printed by pclose_check */ \ - } while (0) - --#define PG_CMD_PUTS(line) \ -- do { \ -- if (fputs((line), cmdfd) < 0 || fflush(cmdfd) < 0) \ -+#define PG_CMD_PUTS(line) \ -+ do { \ -+ if (fputs((line), cmdfd) < 0) \ -+ output_failed = true, output_errno = errno; \ -+ } while (0) -+ //if (fputs((line), cmdfd) < 0 || fflush(cmdfd) < 0) \ - output_failed = true, output_errno = errno; \ - } while (0) - -@@ -1060,7 +1063,6 @@ static void test_config_settings(void) - - printf(_("selecting default max_connections ... ")); - (void)fflush(stdout); -- - for (i = 0; i < connslen; i++) { - test_conns = trial_conns[i]; - test_buffs = MIN_BUFS_FOR_CONNS(test_conns); -@@ -1088,11 +1090,10 @@ static void test_config_settings(void) - if (i >= connslen) { - i = connslen - 1; - } -- -+ - n_connections = trial_conns[i]; - - printf("%d\n", n_connections); -- - printf(_("selecting default shared_buffers ... ")); - (void)fflush(stdout); - -@@ -1384,14 +1385,11 @@ static void bootstrap_template1(void) - char* buf_ctype = NULL; - - printf(_("creating template1 database in %s/base/1 ... "), pg_data); -- - (void)fflush(stdout); -- - if (debug) - talkargs = "-d 5"; - - bki_lines = readfile(bki_file); -- - /* Check that bki file appears to be of the right version */ - - nRet = snprintf_s(headerline, sizeof(headerline), sizeof(headerline) - 1, "# PostgreSQL %s\n", PG_MAJORVERSION); -@@ -1406,7 +1404,7 @@ static void bootstrap_template1(void) - PG_VERSION); - exit_nicely(); - } -- -+ - /* Substitute for various symbols used in the BKI file */ - - nRet = sprintf_s(buf, BUF_LENGTH, "%d", NAMEDATALEN); -@@ -1478,18 +1476,17 @@ static void bootstrap_template1(void) - (void)unsetenv("PGCLIENTENCODING"); - - nRet = snprintf_s( -- cmd, sizeof(cmd), sizeof(cmd) - 1, "\"%s\" --boot -x1 %s %s 2>&1", backend_exec, boot_options, talkargs); -+ cmd, sizeof(cmd), sizeof(cmd) - 1, "\"%s\" --boot -x1 %s %s 2>&1", backend_exec, boot_options, talkargs); - securec_check_ss_c(nRet, "\0", "\0"); -- -+ //exit(1);//zmk - PG_CMD_OPEN; -- - for (line = bki_lines; *line != NULL; line++) { -- PG_CMD_PUTS(*line); -+ printf(*line); -+ PG_CMD_PUTS(*line); - FREE_AND_RESET(*line); - } -- - PG_CMD_CLOSE; -- -+ - FREE_AND_RESET(bki_lines); - - check_ok(); -diff --git a/openGauss-server-2.1.0/src/bin/pg_probackup/atomics.h b/openGauss-server-2.1.0/src/bin/pg_probackup/atomics.h -index f28d7d0..89037dd 100644 ---- a/openGauss-server-2.1.0/src/bin/pg_probackup/atomics.h -+++ b/openGauss-server-2.1.0/src/bin/pg_probackup/atomics.h -@@ -67,6 +67,8 @@ - #if defined(__arm__) || defined(__arm) || \ - defined(__aarch64__) || defined(__aarch64) - #include "atomics/arch-arm.h" -+#elif defined(__sw_64__) //modify by yjy -+#include "atomics/arch-sw_64.h" - #elif defined(__i386__) || defined(__i386) || defined(__x86_64__) - #include "atomics/arch-x86.h" - #elif defined(__ia64__) || defined(__ia64) -diff --git a/openGauss-server-2.1.0/src/bin/pg_probackup/atomics/arch-sw_64.h b/openGauss-server-2.1.0/src/bin/pg_probackup/atomics/arch-sw_64.h -new file mode 100644 -index 0000000..060ae4e ---- /dev/null -+++ b/openGauss-server-2.1.0/src/bin/pg_probackup/atomics/arch-sw_64.h -@@ -0,0 +1,17 @@ -+/*------------------------------------------------------------------------- -+ * -+ * arch-sw_64.h -+ * src/include/port/atomics/arch-sw_64.h -+ * -+ *------------------------------------------------------------------------- -+ */ -+ -+#if defined(__GNUC__) -+ -+#define pg_memory_barrier_impl() __asm__ __volatile__ ("memb" : : : "memory") -+#define pg_read_barrier_impl() __asm__ __volatile__ ("memb" : : : "memory") -+#define pg_write_barrier_impl() __asm__ __volatile__ ("memb" : : : "memory") -+#endif -+ -+/* per architecture manual doubleword accesses have single copy atomicity */ -+#define PG_HAVE_8BYTE_SINGLE_COPY_ATOMICITY -diff --git a/openGauss-server-2.1.0/src/common/port/Makefile b/openGauss-server-2.1.0/src/common/port/Makefile -index 51767b7..be606c2 100644 ---- a/openGauss-server-2.1.0/src/common/port/Makefile -+++ b/openGauss-server-2.1.0/src/common/port/Makefile -@@ -60,6 +60,16 @@ OBJS = $(LIBOBJS) pg_crc32c_choose.o chklocale.o dirmod.o erand48.o exec.o fls.o - gs_system.o \ - cipher.o - endif -+#modify bu yjy -+ifeq "${host_cpu}" "sw_64" -+OBJS = $(LIBOBJS) pg_crc32c_sb8.o pg_crc32c_choose.o chklocale.o dirmod.o erand48.o exec.o fls.o inet_net_ntop.o \ -+ noblock.o path.o pgcheckdir.o pgmkdirp.o pgsleep.o \ -+ pgstrcasecmp.o qsort.o qsort_arg.o sprompt.o thread.o flock.o pgstrcasestr.o\ -+ gs_thread.o gs_env_r.o gs_getopt_r.o \ -+ gs_readdir.o gs_strerror.o gs_syscall_lock.o \ -+ gs_system.o \ -+ cipher.o -+endif - # foo_srv.o and foo.o are both built from foo.c, but only foo.o has -DFRONTEND - OBJS_SRV = $(OBJS:%.o=%_srv.o) - -diff --git a/openGauss-server-2.1.0/src/common/port/exec.cpp b/openGauss-server-2.1.0/src/common/port/exec.cpp -index 0ba9bf3..f73a9b4 100644 ---- a/openGauss-server-2.1.0/src/common/port/exec.cpp -+++ b/openGauss-server-2.1.0/src/common/port/exec.cpp -@@ -518,7 +518,6 @@ static char* pipe_read_line(const char* cmd, char* line, int maxsize) - int pclose_check(FILE* stream) - { - int exitstatus = pclose(stream); -- - if (exitstatus == 0) { - return 0; /* all is well */ - } -diff --git a/openGauss-server-2.1.0/src/common/port/pg_crc32c_choose.cpp b/openGauss-server-2.1.0/src/common/port/pg_crc32c_choose.cpp -index 3e62f46..c01d55b 100644 ---- a/openGauss-server-2.1.0/src/common/port/pg_crc32c_choose.cpp -+++ b/openGauss-server-2.1.0/src/common/port/pg_crc32c_choose.cpp -@@ -47,6 +47,7 @@ uint32 pg_crc32c_hardware(uint32 crc, const void* data, Size len) - } - #endif - -+#elif defined(__sw_64__)//modify by yjy - #else - - static bool pg_crc32c_sse42_available(void) -diff --git a/openGauss-server-2.1.0/src/gausskernel/CMakeLists.txt b/openGauss-server-2.1.0/src/gausskernel/CMakeLists.txt -index 16aabb7..bfba84c 100755 ---- a/openGauss-server-2.1.0/src/gausskernel/CMakeLists.txt -+++ b/openGauss-server-2.1.0/src/gausskernel/CMakeLists.txt -@@ -268,9 +268,9 @@ if(${ENABLE_MEMORY_CHECK}) - endif() - - if(NOT "${ENABLE_LITE_MODE}" STREQUAL "ON") -- list(APPEND gaussdb_LINK_LIBS -lz -lminiunz -leSDKOBS -leSDKLogAPI -lpcre -liconv -lnghttp2 -llog4cpp -lcurl -llz4 -lcjson -l${JEMALLOC_LIB_NAME} -lcgroup -lorc -lparquet -larrow -lthrift -lsnappy -lzstd -lprotobuf -lcom_err_gauss -lgssapi_krb5_gauss -lkrb5_gauss -lgssrpc_gauss -lk5crypto_gauss -lkadm5clnt_mit -lkadm5srv_mit -lkdb5 -lkrb5support_gauss -lstdc++ -lboost_thread -lboost_chrono -lboost_system -lboost_atomic -lxml2 -laio -lncurses -ltinfo) -+ list(APPEND gaussdb_LINK_LIBS -lz -lminiunz -leSDKOBS -leSDKLogAPI -lpcre -liconv -lnghttp2 -llog4cpp -lcurl -llz4 -lcjson -l${JEMALLOC_LIB_NAME} -lcgroup -lorc -lparquet -larrow -lthrift -lsnappy -lzstd -lprotobuf -lcom_err_gauss -lgssapi_krb5_gauss -lkrb5_gauss -lgssrpc_gauss -lk5crypto_gauss -lkadm5clnt_mit -lkadm5srv_mit -lkdb5 -lkrb5support_gauss -lstdc++ -lboost_thread -lboost_chrono -lboost_system -lboost_atomic -lxml2 -laio -lncurses -ltinfo -latomic) - else() -- list(APPEND gaussdb_LINK_LIBS -lz -lminiunz -lcurl -llz4 -lcjson -l${JEMALLOC_LIB_NAME} -lcgroup -lzstd -lprotobuf -laio -lncurses -ltinfo) -+ list(APPEND gaussdb_LINK_LIBS -lz -lminiunz -lcurl -llz4 -lcjson -l${JEMALLOC_LIB_NAME} -lcgroup -lzstd -lprotobuf -laio -lncurses -ltinfo -latomic) - endif() - - include_directories( -diff --git a/openGauss-server-2.1.0/src/gausskernel/bootstrap/bootstrap.cpp b/openGauss-server-2.1.0/src/gausskernel/bootstrap/bootstrap.cpp -index 622b6b6..9559872 100755 ---- a/openGauss-server-2.1.0/src/gausskernel/bootstrap/bootstrap.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/bootstrap/bootstrap.cpp -@@ -341,7 +341,6 @@ void BootStrapProcessMain(int argc, char* argv[]) - * XLOG operations - */ - SetProcessingMode(NormalProcessing); -- - switch (t_thrd.bootstrap_cxt.MyAuxProcType) { - case CheckerProcess: - /* don't set signals, they're useless here */ -@@ -350,7 +349,7 @@ void BootStrapProcessMain(int argc, char* argv[]) - - case BootstrapProcess: - bootstrap_signals(); -- BootStrapXLOG(); -+ //BootStrapXLOG(); - MemoryContextUnSeal(t_thrd.top_mem_cxt); - BootstrapModeMain(); - MemoryContextSeal(t_thrd.top_mem_cxt); -@@ -383,7 +382,6 @@ static void CheckerModeMain(void) - static void BootstrapModeMain(void) - { - int i; -- - Assert(!IsUnderPostmaster); - - SetProcessingMode(BootstrapProcessing); -diff --git a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic.h b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic.h -index 8a0e5c1..3f376ff 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic.h -+++ b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic.h -@@ -38,6 +38,10 @@ - - #elif defined(__aarch64__) - #include "bbox_atomic_arm64.h" -+/* modify by yjy */ -+#elif defined(__sw_64__) -+#include "bbox_atomic_sw_64.h" -+/* end */ - #endif - - #endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic_sw_64.h b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic_sw_64.h -new file mode 100644 -index 0000000..0948fcc ---- /dev/null -+++ b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_atomic_sw_64.h -@@ -0,0 +1,124 @@ -+/* bbox_atomic_sw_64.h -+ * -+ * IDENTIFICATION -+ * src/gausskernel/cbb/bbox/bbox_atomic_sw_64.h -+ * modify by yjy -+ * ------------------------------------------------------------------------- -+ */ -+ -+#ifndef BBOX_ATOMIC_SW_64_H -+#define BBOX_ATOMIC_SW_64_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+#define barrier() __asm__ __volatile__("memb" : : : "memory") -+#define smp_mb() barrier() -+ -+typedef struct { -+ volatile int counter; -+} BBOX_ATOMIC_STRU; -+ -+/* -+ init the automic variable. -+ */ -+#define BBOX_ATOMIC_INIT(i) \ -+ { \ -+ (i) \ -+ } -+ -+/* -+ read the atomic variable atomically. -+ */ -+#define BBOX_AtomicRead(v) ((v)->counter) -+ -+/* -+ set the value of atomic variable to i atomically. -+ */ -+#define BBOX_AtomicSet(v, i) (((v)->counter) = (i)) -+ -+/* -+ add i to the atomic variable atomically. -+ */ -+static inline void BBOX_AtomicAdd(int i, BBOX_ATOMIC_STRU* v) -+{ -+ unsigned long tmp; -+ int result,cmp; -+ -+ __asm__ __volatile__( -+ " ldi %1, %4 \n" -+ "1: lldw %0,0(%1)\n" -+ " ldi %2,1 \n" -+ " wr_f %2 \n" -+ " addw %0,%3,%0\n" -+ " lstw %0,0(%1)\n" -+ " rd_f %2 \n" -+ " beq %2, 1b \n" -+ : "=&r"(result), "=&r"(tmp), "=&r"(cmp) -+ : "Ir"(i),"m"(v->counter)); -+} -+ -+/* -+ add i to the atomic variable atomically and return new value. -+ */ -+static inline int BBOX_AtomicAddReturn(int i, BBOX_ATOMIC_STRU* v) -+{ -+ unsigned long tmp; -+ int result,cmp; -+ -+ __asm__ __volatile__( -+ " ldi %1, %4 \n" -+ "1: lldw %0,0(%1)\n" -+ " ldi %2,1 \n" -+ " wr_f %2 \n" -+ " addw %0,%3,%0\n" -+ " lstw %0,0(%1)\n" -+ " rd_f %2 \n" -+ " beq %2, 1b \n" -+ : "=&r"(result), "=&r"(tmp), "=&r"(cmp) -+ : "Ir"(i),"m"(v->counter) -+ : "memory"); -+ -+ smp_mb(); -+ return result; -+} -+ -+#define BBOX_AtomicIncReturn(v) BBOX_AtomicAddReturn(1, (v)) -+ -+/* -+ sub i of the value of atomic variable atomically. -+ */ -+static inline void BBOX_AtomicSub(int i, BBOX_ATOMIC_STRU* v) -+{ -+ unsigned long tmp; -+ int result,cmp; -+ -+ __asm__ __volatile__( -+ " ldi %1, %4 \n" -+ "1: lldw %0,0(%1)\n" -+ " ldi %2,1 \n" -+ " wr_f %2 \n" -+ " subw %0,%3,%0\n" -+ " lstw %0,0(%1)\n" -+ " rd_f %2 \n" -+ " beq %2, 1b \n" -+ : "=&r"(result), "=&r"(tmp), "=&r"(cmp) -+ : "Ir"(i),"m"(v->counter)); -+} -+ -+/* -+ add l to the atomic variable atomically. -+ */ -+#define BBOX_AtomicInc(v) BBOX_AtomicAdd(1, v) -+ -+/* -+ sub l of the value of atomic variable atomically. -+ */ -+#define BBOX_AtomicDec(v) BBOX_AtomicSub(1, v) -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.cpp b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.cpp -index 4a9b209..68c204d 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.cpp -@@ -1177,7 +1177,7 @@ static int BBOX_FillPrPsInfo(struct BBOX_ELF_PRPSINFO* pstPrPsInfo, pid_t tMainP - - pstPrPsInfo->cSname = 'R'; - pstPrPsInfo->cNice = (signed char)sys_getpriority(PRIO_PROCESS, 0); --#if (defined(__x86_64__)) || (defined(__aarch64__)) -+#if (defined(__x86_64__)) || (defined(__aarch64__))|| (defined(__sw_64__)) //add sw_64 modify by yjy - pstPrPsInfo->tUid = (uint32_t)sys_geteuid(); - pstPrPsInfo->tGid = (uint32_t)sys_getegid(); - #elif (defined(__i386__)) || (defined(__ARM_ARCH_5TE__)) || (defined(__ARM_ARCH_7A__)) -@@ -1741,7 +1741,7 @@ static int BBOX_FillEhdr(BBOX_EHDR* pstEhdr, int iPhdrSum) - #if (defined(__i386__)) - pstEhdr->e_phnum = (Elf32_Half)(iPhdrSum + 1); /* Number of memory address space segments plus note segments */ - pstEhdr->e_shnum = (Elf32_Half)(BBOX_SECTION_NUM); --#elif (defined(__x86_64__)) || (defined(__ARM_ARCH_5TE__)) || (defined(__ARM_ARCH_7A__)) || (defined(__aarch64__)) -+#elif (defined(__x86_64__)) || (defined(__ARM_ARCH_5TE__)) || (defined(__ARM_ARCH_7A__)) || (defined(__aarch64__))|| (defined(__sw_64__)) //add sw_64 modify by yjy - pstEhdr->e_phnum = (Elf64_Half)(iPhdrSum + 1); /* Number of memory address space segments plus note segments */ - pstEhdr->e_shnum = (Elf64_Half)(BBOX_SECTION_NUM); - #endif -@@ -2301,7 +2301,7 @@ static int BBOX_WritePrPsStatusToFile(struct BBOX_ELF_PRPSSTATUS* pstPrPsStatusI - static int BBOX_WriteFpRegistersToFile(struct BBOX_FPREGSET* pstFpRegisters, struct BBOX_WRITE_FDS* pstFileFds) - { - /* since ptrace() doesn't support to obtain float registers' context in aarch64, don't dump it out. */ --#if !defined(__aarch64__) -+#if !defined(__aarch64__) || !defined(__sw_64__) //add sw_64 modify by yjy - BBOX_NHDR stElfNhdr; - - if (NULL == pstFpRegisters || NULL == pstFileFds) { -diff --git a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.h b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.h -index 9b6f751..543a6a6 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.h -+++ b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_elf_dump.h -@@ -142,6 +142,10 @@ extern "C" { - #define ELF_ARCH EM_ARM - #elif defined(__aarch64__) - #define ELF_ARCH EM_AARCH64 -+/* modify by yjy */ -+#elif defined(__sw_64__) -+#define ELF_ARCH EM_SW_64 -+/* end */ - #endif - - #ifndef AT_SYSINFO_EHDR -@@ -233,6 +237,83 @@ typedef struct Frame { - (f).uregs.gs_base = (r).gs_base; \ - (r) = (f).uregs; \ - } while (0) -+ -+/* modify by yjy */ -+#elif (defined(__sw_64__)) -+/* member variable are named by register. */ -+struct sw_64_regs { -+ #define BP fp -+ #define SP sp -+ #define IP pc -+ uint64_t r0, r1, r2, r3, r4, r5, r6,r7,r8; //Tmp registers -+ uint64_t r9, r10,r11,r12,r13,r14,r15; //save registers -+ uint64_t r16, r17, r18, r19,r20,r21; //Parm regsiters -+ uint64_t r22,r23,r24,r25; //Tmp registers -+ uint64_t r26; //Returen register -+ uint64_t r27; -+ uint64_t r28; -+}; -+ -+/* 64 CPU */ -+#define CPURegs sw_64_regs -+ -+typedef struct Frame { -+ struct CPURegs uregs; -+ int errno_; -+ pid_t tid; -+} Frame; -+ -+/* save call frame */ -+#define FRAME(fm) \ -+ Frame fm; \ -+ do { \ -+ fm.errno_ = errno; \ -+ fm.tid = sys_gettid(); \ -+ __asm__ volatile("stl $0,0(%0) \n" \ -+ "stl $1,8(%0) \n" \ -+ "stl $2,16(%0) \n" \ -+ "stl $3,24(%0) \n" \ -+ "stl $4,32(%0) \n" \ -+ "stl $5,40(%0) \n" \ -+ "stl $6,48(%0) \n" \ -+ "stl $7,56(%0) \n" \ -+ "stl $8,64(%0) \n" \ -+ "stl $9,72(%0) \n" \ -+ "stl $10,80(%0) \n" \ -+ "stl $11,88(%0) \n" \ -+ "stl $12,96(%0) \n" \ -+ "stl $13,104(%0) \n" \ -+ "stl $14,112(%0) \n" \ -+ "stl $15,120(%0) \n" \ -+ "stl $16,128(%0) \n" \ -+ "stl $17,136(%0) \n" \ -+ "stl $18,144(%0) \n" \ -+ "stl $19,152(%0) \n" \ -+ "stl $20,160(%0) \n" \ -+ "stl $21,168(%0) \n" \ -+ "stl $22,176(%0) \n" \ -+ "stl $23,184(%0) \n" \ -+ "stl $24,192(%0) \n" \ -+ "stl $25,200(%0) \n" \ -+ "stl $26,208(%0) \n" \ -+ "stl $27,216(%0) \n" \ -+ "stl $28,224(%0) \n" \ -+ "stl $29,232(%0) \n" \ -+ "stl $30,240(%0) \n" \ -+ "mov $sp,$10 \n" \ -+ "stl $10,248(%0) \n" \ -+ "1:" \ -+ : \ -+ : "a"(&fm) \ -+ : "memory"); \ -+ } while (0) -+ -+#define SET_FRAME(f, r) \ -+ do { \ -+ errno = (f).errno_; \ -+ (r) = (f).uregs; \ -+ } while (0) -+/* end */ - - #elif (defined(__i386__)) - /* member variable are named by register. */ -@@ -420,7 +501,7 @@ struct BBOX_ELF_PRPSINFO { /* Information about process */ - unsigned char ucZomb; /* Zombie */ - signed char cNice; /* Nice val */ - unsigned long ulLlag; /* Flags */ --#if (defined(__x86_64__)) || (defined(__aarch64__)) -+#if (defined(__x86_64__)) || (defined(__aarch64__)) || (defined(__sw_64)) //add sw_64 modify by yjy - uint32_t tUid; /* User ID */ - uint32_t tGid; /* Group ID */ - #else -@@ -517,6 +598,17 @@ struct BBOX_FPXREGSET { /* x86-64 stores FPU registers in SSE struct */ - struct BBOX_FPREGSET { /* FPU registers */ - /* nothing */ - }; -+* modify by yjy */ -+#elif defined(__sw_64__) -+struct BBOX_FPXREGSET { /* sw-64 stores FPU */ -+ /* nothing */ -+}; -+ -+/* member variable are named by register. */ -+struct BBOX_FPREGSET { /* FPU registers */ -+ /* nothing */ -+}; -+/* end */ - #endif - - struct BBOX_ELF_PRPSSTATUS { /* Information about thread; includes CPU reg */ -diff --git a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_SW_64.h b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_SW_64.h -new file mode 100644 -index 0000000..14438b9 ---- /dev/null -+++ b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_SW_64.h -@@ -0,0 +1,136 @@ -+/* bbox_syscall_SW_64.h -+ * -+ * IDENTIFICATION -+ * src/gausskernel/cbb/bbox/bbox_syscall_SW_64.h -+ * modify by yjy -+ * ------------------------------------------------------------------------- -+ */ -+#ifndef __BBOX_SYSCALL_SW_64_H_ -+#define __BBOX_SYSCALL_SW_64_H_ -+ -+#include -+#include -+#define SYS_NAME(name) sys_##name -+#define SYS_CODE(syscall_code) (__NR_##syscall_code) -+ -+#define ___syscall_return(type, ___res) \ -+ do { \ -+ if ((unsigned long)(___res) >= (unsigned long)(-4095)) { \ -+ errno = -(___res); \ -+ ___res = -1; \ -+ } \ -+ return (type)(___res); \ -+ } while (0) -+ -+#define __syscall0(type, name) \ -+ type SYS_NAME(name)() \ -+ { \ -+ long ___res; \ -+ register long _r0 asm("$0")= SYS_CODE(name); \ -+ asm("sys_call 0x83 \n" \ -+ :"=r"(_r0) \ -+ :"r"(_r0) \ -+ : "memory"); \ -+ ___res=_r0; \ -+ ___syscall_return(type,___res); \ -+ } -+ -+#define __syscall1(type, name, type1, arg1) \ -+ type SYS_NAME(name)(type1 arg1) \ -+ { \ -+ long ___res; \ -+ register long _r0 asm("$0") = SYS_CODE(name);\ -+ register long _r16 asm("$16")= (long)arg1; \ -+ asm("sys_call 0x83 \n" \ -+ :"=r"(_r0) \ -+ :"r"(_r0),"r"(_r16) \ -+ : "memory"); \ -+ ___res=_r0; \ -+ ___syscall_return(type,___res); \ -+ } -+ -+#define __syscall2(type, name, type1, arg1, type2, arg2) \ -+ type SYS_NAME(name)(type1 arg1, type2 arg2) \ -+ { \ -+ long ___res; \ -+ register long _r0 asm("$0") = SYS_CODE(name); \ -+ register long _r16 asm("$16")= (long)arg1; \ -+ register long _r17 asm("$17")= (long)arg2; \ -+ asm("sys_call 0x83 \n" \ -+ :"=r"(_r0) \ -+ :"r"(_r0),"r"(_r16),"r"(_r17) \ -+ : "memory"); \ -+ ___res=_r0; \ -+ ___syscall_return(type,___res); \ -+ } -+ -+#define __syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ -+ type SYS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) \ -+ { \ -+ long ___res; \ -+ register long _r0 asm("$0") = SYS_CODE(name); \ -+ register long _r16 asm("$16")= (long)arg1; \ -+ register long _r17 asm("$17")= (long)arg2; \ -+ register long _r18 asm("$18")= (long)arg3; \ -+ asm("sys_call 0x83 \n" \ -+ :"=r"(_r0) \ -+ :"r"(_r0),"r"(_r16),"r"(_r17),"r"(_r18) \ -+ : "memory"); \ -+ ___res=_r0; \ -+ ___syscall_return(type,___res); \ -+ } -+ -+#define __syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \ -+ type SYS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ -+ { \ -+ long ___res; \ -+ register long _r0 asm("$0") = SYS_CODE(name); \ -+ register long _r16 asm("$16")= (long)arg1; \ -+ register long _r17 asm("$17")= (long)arg2; \ -+ register long _r18 asm("$18")= (long)arg3; \ -+ register long _r19 asm("$19")= (long)arg4; \ -+ asm("sys_call 0x83 \n" \ -+ :"=r"(_r0) \ -+ :"r"(_r0),"r"(_r16),"r"(_r17),"r"(_r18),"r"(_r19) \ -+ : "memory"); \ -+ ___res=_r0; \ -+ ___syscall_return(type,___res); \ -+ } -+ -+#define __syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5) \ -+ type SYS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ -+ { \ -+ long ___res; \ -+ register long _r0 asm("$0") = SYS_CODE(name); \ -+ register long _r16 asm("$16")= (long)arg1; \ -+ register long _r17 asm("$17")= (long)arg2; \ -+ register long _r18 asm("$18")= (long)arg3; \ -+ register long _r19 asm("$19")= (long)arg4; \ -+ register long _r20 asm("$20")= (long)arg5; \ -+ asm("sys_call 0x83 \n" \ -+ :"=r"(_r0) \ -+ :"r"(_r0),"r"(_r16),"r"(_r17),"r"(_r18),"r"(_r19),"r"(_r20) \ -+ : "memory"); \ -+ ___res=_r0; \ -+ ___syscall_return(type,___res); \ -+ } -+ -+#define __syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5, type6, arg6) \ -+ type SYS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ -+ { \ -+ long ___res; \ -+ register long _r0 asm("$0") = SYS_CODE(name); \ -+ register long _r16 asm("$16")= (long)arg1; \ -+ register long _r17 asm("$17")= (long)arg2; \ -+ register long _r18 asm("$18")= (long)arg3; \ -+ register long _r19 asm("$19")= (long)arg4; \ -+ register long _r20 asm("$20")= (long)arg5; \ -+ register long _r21 asm("$21")= (long)arg6; \ -+ asm("sys_call 0x83 \n" \ -+ :"=r"(_r0) \ -+ :"r"(_r0),"r"(_r16),"r"(_r17),"r"(_r18),"r"(_r19),"r"(_r20),"r"(_r21) \ -+ : "memory"); \ -+ ___res=_r0; \ -+ ___syscall_return(type,___res); \ -+ } -+#endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.cpp b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.cpp -index 86398ec..462a029 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.cpp -@@ -595,5 +595,94 @@ long SYS_NAME(_clone)( - ___res = __res_x0; - ___syscall_return(int, ___res); - } -+/* modify by yjy */ -+#elif (defined(__sw_64__)) -+__syscall3(long, socket, int, family, int, type, int, protocol); -+ -+long SYS_NAME(waitpid)(pid_t pid, int* status, int options) -+{ -+ return SYS_NAME(wait4)(pid, status, options, 0); -+} -+ -+long SYS_NAME(signal)(int __signum, void (*handler)(int)) -+{ -+ struct kernel_sigaction _sa; -+ struct kernel_sigaction old; - -+ errno_t rc = memset_s(&_sa, sizeof(_sa), 0, sizeof(_sa)); -+ securec_check_c(rc, "\0", "\0"); -+ sys_sigfillset(&_sa.sa_mask); -+ _sa.sa_flags |= SA_RESTORER | SA_RESTART; -+ _sa.handle.sa_handler_ = handler; -+ -+ return SYS_NAME(rt_sigaction)(__signum, &_sa, &old, (KERNEL_NSIG + 7) / 8); -+} -+ -+long SYS_NAME(_clone)( -+ int (*fn)(void*), void* child_stack, int flags, void* arg, int* parent_tidptr, void* newtls, int* child_tidptr) -+{ -+ register long result_r0 __asm__("$0"); -+ long ___res; -+ int tmp = 0; -+ { -+ register int (*fn_tmp)(void*) __asm__("$16") = fn; -+ register void* stack_tmp __asm__("$17") = child_stack; -+ register int flags_tmp __asm__("$18") = flags; -+ register void* arg_tmp __asm__("$19") = arg; -+ register int* ptid_tmp __asm__("$20") = parent_tidptr; -+ register void* tls_tmp __asm__("$21") = newtls; -+ register int* ctid_tmp __asm__("$22") = child_tidptr; -+ -+ __asm__ __volatile__( -+ -+ /*if (fn == NULL || child_stack == NULL) return -EINVAL; */ -+ "beq $16,1f\n" -+ "beq $17,1f\n" -+ -+ "ldi $17,-16($17)\n" -+ "stl $16,0($17) \n" -+ "stl $19,8($17) \n" -+ -+ "mov $18,$16 \n" /* flags */ -+ "mov $20,$18 \n" /* ptid */ -+ "mov $21,$19 \n" /* tls */ -+ "mov $22,$20 \n" /* ctid */ -+ "mov %9,$0 \n" /* save __NR_clone into $0 register */ -+ "sys_call 0x83\n" -+ -+ /* example: if (%r0 != 0) return %r0; */ -+ "cmpeq $0,0,%11\n" -+ "beq %11,2f\n" -+ -+ /* In the child, now. Call "fn(arg)". -+ */ -+ "ldl $16, 0($sp)\n" -+ "ldl $17, 8($sp)\n" -+ "mov $17, $27 \n" -+ "call $31, ($27),0x0\n" -+ /* example: Call _exit(%r0). -+ */ -+ "mov %10, $0 \n" /*save __NR_exit into $0 register*/ -+ "sys_call 0x83\n" -+ "1: \n" -+ "mov %1, $0 \n" -+ "2: \n" -+ : "=r"(result_r0) -+ : "i"(-EINVAL), -+ "r"(fn_tmp), -+ "r"(stack_tmp), -+ "r"(flags_tmp), -+ "r"(arg_tmp), -+ "r"(ptid_tmp), -+ "r"(tls_tmp), -+ "r"(ctid_tmp), -+ "i"(__NR_clone), -+ "i"(__NR_exit), -+ "r"(tmp) -+ : "$26", "memory"); -+ } -+ ___res = result_r0; -+ ___syscall_return(int, ___res); -+} -+/* end */ - #endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.h b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.h -index c131a57..5938ef0 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.h -+++ b/openGauss-server-2.1.0/src/gausskernel/cbb/bbox/bbox_syscall_support.h -@@ -73,11 +73,16 @@ - #include "bbox_syscall_ARM.h" - #elif (defined(__aarch64__)) - #include "bbox_syscall_ARM64.h" -+/* modify by yjy */ -+#elif (defined(__sw_64__)) -+#include "bbox_syscall_SW_64.h" -+/*end*/ - #endif - - #define SA_RESTORER 0x04000000 - #define KERNEL_NSIG 64 --#define EM_AARCH64 183 -+#define EM_AARCH64 183 -+#define EM_SW_64 0x9916//modify by yjy - - #if (defined(__aarch64__)) - struct linux_dirent { -@@ -197,6 +202,29 @@ struct kernel_stat { - unsigned int __unused4; - unsigned int __unused5; - }; -+/* modify by yjy */ -+#elif (defined(__sw_64__)) -+struct kernel_stat { -+ unsigned long st_dev; -+ unsigned long st_ino; -+ unsigned long st_rdev; -+ long st_size; -+ unsigned long st_blocks; -+ unsigned int st_mode; -+ unsigned int st_nlink; -+ unsigned int st_uid; -+ unsigned int st_gid; -+ unsigned int st_blksize; -+ unsigned int __pad0; -+ unsigned long st_atime_; -+ unsigned long st_atime_nsec_; -+ unsigned long st_mtime_; -+ unsigned long st_mtime_nsec_; -+ unsigned long st_ctime_; -+ unsigned long st_ctime_nsec_; -+ long __unused[3]; -+}; -+/* end */ - #endif - - extern long SYS_NAME(gettid)(void); -@@ -295,5 +323,13 @@ extern long SYS_NAME(signal)(int _signum, void (*handler)(int)); - extern long SYS_NAME(socket)(int domain, int type, int protocol); - extern long SYS_NAME(_clone)( - int (*fn)(void*), void* child_stack, int flags, void* arg, int* parent_tidptr, void* newtls, int* child_tidptr); -+/* modify by yjy */ -+#elif (defined(__sw_64__)) -+extern long SYS_NAME(waitpid)(pid_t pid, int* status, int options); -+extern long SYS_NAME(signal)(int _signum, void (*handler)(int)); -+extern long SYS_NAME(socket)(int domain, int type, int protocol); -+extern long SYS_NAME(_clone)( -+ int (*fn)(void*), void* child_stack, int flags, void* arg, int* parent_tidptr, void* newtls, int* child_tidptr); -+/* end */ - #endif - #endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/process/main/main.cpp b/openGauss-server-2.1.0/src/gausskernel/process/main/main.cpp -index 02eb5f1..4a19a47 100755 ---- a/openGauss-server-2.1.0/src/gausskernel/process/main/main.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/process/main/main.cpp -@@ -78,7 +78,6 @@ int main(int argc, char* argv[]) - { - char* mmap_env = NULL; - syscall_lock_init(); -- - mmap_env = gs_getenv_r("GAUSS_MMAP_THRESHOLD"); - if (mmap_env != NULL) { - check_backend_env(mmap_env); -@@ -322,7 +321,7 @@ static void startup_hacks(const char* progname) - */ - #ifdef NOFIXADE - --#if defined(__alpha) /* no __alpha__ ? */ -+#if defined(__alpha) || defined(__sw_64) /* no __alpha__ ? */ - { - int buffer[] = {SSIN_UACPROC, UAC_SIGBUS | UAC_NOPRINT}; - -diff --git a/openGauss-server-2.1.0/src/gausskernel/process/postmaster/postmaster.cpp b/openGauss-server-2.1.0/src/gausskernel/process/postmaster/postmaster.cpp -index 2407ef8..9231dfa 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/process/postmaster/postmaster.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/process/postmaster/postmaster.cpp -@@ -844,7 +844,7 @@ void get_coredump_pattern_path(char* path, Size len) - - if (0 != stat(path, &stat_buf) || !S_ISDIR(stat_buf.st_mode) || 0 != access(path, W_OK)) { - write_stderr("The core dump path is an invalid directory\n"); -- *path = '\0'; -+ *path = '\0'; - return; - } - } -diff --git a/openGauss-server-2.1.0/src/gausskernel/runtime/executor/instrument.cpp b/openGauss-server-2.1.0/src/gausskernel/runtime/executor/instrument.cpp -index 24be0e6..72a6a6e 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/runtime/executor/instrument.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/runtime/executor/instrument.cpp -@@ -86,6 +86,12 @@ static inline uint64 rdtsc(void) - asm volatile("isb; mrs %0, cntvct_el0" : "=r"(cval) : : "memory"); - - return cval; -+/* modify by yjy */ -+#elif defined(__sw_64__) -+ unsigned long time_val = 0; -+ __asm__ __volatile__("rtc %0" : "=r"(time_val) : : "memory"); -+ return time_val; -+/* end */ - #else - uint32 hi = 0; - uint32 lo = 0; -diff --git a/openGauss-server-2.1.0/src/gausskernel/runtime/vecexecutor/vectorsonic/vsonichash.cpp b/openGauss-server-2.1.0/src/gausskernel/runtime/vecexecutor/vectorsonic/vsonichash.cpp -index cc14674..3b45dbb 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/runtime/vecexecutor/vectorsonic/vsonichash.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/runtime/vecexecutor/vectorsonic/vsonichash.cpp -@@ -30,6 +30,7 @@ - #include "utils/dynahash.h" - #ifdef __aarch64__ - #include -+#elif defined(__sw_64__) - #else - #include - #endif -@@ -40,8 +41,10 @@ extern bool anls_opt_is_on(AnalysisOpt dfx_opt); - #define HASH_RANDOM_2 1.1131347 - #define HASH_RANDOM_3 1.0132677 - --#ifdef __aarch64__ -+#if defined __aarch64__ - #define HASH_INT32_CRC(c, k) __crc32cw(c, k) -+#elif defined(__sw_64__) -+#define HASH_INT32_CRC(c, k) c - #else - #define HASH_INT32_CRC(c, k) _mm_crc32_u32(c, k) - #endif -@@ -58,7 +61,7 @@ uint32 hashquickany(uint32 seed, register const unsigned char* data, register in - - uint32 crc = seed; - --#ifdef __aarch64__ -+#if defined __aarch64__ - while (p + 8 <= pend) { - crc = (uint32)__crc32d(crc, *((const uint64*)p)); - p += 8; -@@ -75,6 +78,8 @@ uint32 hashquickany(uint32 seed, register const unsigned char* data, register in - crc = __crc32cb(crc, *p); - p++; - } -+#elif defined(__sw_64__) -+ return crc; - #else - while (p + 8 <= pend) { - crc = (uint32)_mm_crc32_u64(crc, *((const uint64*)p)); -diff --git a/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp b/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp -index ceda891..e5c6379 100755 ---- a/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp -@@ -207,7 +207,7 @@ PageRedoWorker *CreateWorker(uint32 id) - PosixSemaphoreInit(&worker->phaseMarker, 0); - worker->oldCtx = NULL; - worker->fullSyncFlag = 0; --#if (!defined __x86_64__) && (!defined __aarch64__) -+#if (!defined __x86_64__) && (!defined __aarch64__) && (!defined __sw_64__) - SpinLockInit(&worker->ptrLck); - #endif - worker->parseManager.memctl.isInit = false; -@@ -236,7 +236,7 @@ void DestroyPageRedoWorker(PageRedoWorker *worker) - void SetCompletedReadEndPtr(PageRedoWorker *worker, XLogRecPtr readPtr, XLogRecPtr endPtr) - { - volatile PageRedoWorker *tmpWk = worker; --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint128_u exchange; - uint128_u current; - uint128_u compare = atomic_compare_and_swap_u128((uint128_u *)&tmpWk->lastReplayedReadRecPtr); -@@ -258,14 +258,14 @@ loop: - tmpWk->lastReplayedReadRecPtr = readPtr; - tmpWk->lastReplayedEndRecPtr = endPtr; - SpinLockRelease(&tmpWk->ptrLck); --#endif /* __x86_64__ || __aarch64__ */ -+#endif /* __x86_64__ || __aarch64__ || __sw_64__*/ - } - - /* automic write for lastReplayedReadRecPtr and lastReplayedEndRecPtr */ - void GetCompletedReadEndPtr(PageRedoWorker *worker, XLogRecPtr *readPtr, XLogRecPtr *endPtr) - { - volatile PageRedoWorker *tmpWk = worker; --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint128_u compare = atomic_compare_and_swap_u128((uint128_u *)&tmpWk->lastReplayedReadRecPtr); - Assert(sizeof(tmpWk->lastReplayedReadRecPtr) == 8); - Assert(sizeof(tmpWk->lastReplayedEndRecPtr) == 8); -@@ -277,7 +277,7 @@ void GetCompletedReadEndPtr(PageRedoWorker *worker, XLogRecPtr *readPtr, XLogRec - *readPtr = tmpWk->lastReplayedReadRecPtr; - *endPtr = tmpWk->lastReplayedEndRecPtr; - SpinLockRelease(&tmpWk->ptrLck); --#endif /* __x86_64__ || __aarch64__ */ -+#endif /* __x86_64__ || __aarch64__ || __sw_64__ */ - } - - /* Run from both the dispatcher and the worker thread. */ -diff --git a/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/xlog.cpp b/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/xlog.cpp -index cb9f91e..21a72e1 100755 ---- a/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/xlog.cpp -+++ b/openGauss-server-2.1.0/src/gausskernel/storage/access/transam/xlog.cpp -@@ -13,6 +13,7 @@ - * - * ------------------------------------------------------------------------- - */ -+//#ifndef __sw_64__ - #include "postgres.h" - #include "knl/knl_variable.h" - -@@ -259,7 +260,7 @@ TransactionId OldestXidAfterRecovery; - */ - typedef struct { - LWLock lock; --#ifdef __aarch64__ -+#if defined(__aarch64__) || defined(__sw_64__) - pg_atomic_uint32 xlogGroupFirst; - #endif - XLogRecPtr insertingAt; -@@ -292,7 +293,7 @@ typedef struct XLogCtlInsert { - uint32 PrevByteSize; - int32 CurrLRC; - --#if (!defined __x86_64__) && (!defined __aarch64__) -+#if (!defined __x86_64__) && (!defined __aarch64__) && (!defined __sw_64__ ) - slock_t insertpos_lck; /* protects CurrBytePos and PrevBytePos */ - #endif - /* -@@ -669,7 +670,7 @@ bool mpfl_pread_file(int fd, void *buf, int32 size, int64 offset); - int ParallelXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, XLogRecPtr targetRecPtr, - TimeLineID *readTLI); - --#ifdef __aarch64__ -+#if defined(__aarch64__) - static XLogRecPtr XLogInsertRecordGroup(XLogRecData *rdata, XLogRecPtr fpw_lsn); - - static void XLogInsertRecordNolock(XLogRecData *rdata, PGPROC *proc, XLogRecPtr StartPos, XLogRecPtr EndPos, -@@ -1091,7 +1092,7 @@ static void ReserveXLogInsertByteLocation(uint32 size, uint32 lastRecordSize, ui - * because the usable byte position doesn't include any headers, reserving - * X bytes from WAL is almost as simple as "CurrBytePos += X". - */ --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - union Union128 compare; - union Union128 exchange; - union Union128 current; -@@ -1622,7 +1623,7 @@ static void ReserveXLogInsertLocation(uint32 size, XLogRecPtr* StartPos, XLogRec - * because the usable byte position doesn't include any headers, reserving - * X bytes from WAL is almost as simple as "CurrBytePos += X". - */ --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - union Union128 compare; - union Union128 exchange; - union Union128 current; -@@ -1709,7 +1710,7 @@ static bool ReserveXLogSwitch(XLogRecPtr *StartPos, XLogRecPtr *EndPos, XLogRecP - * are no other inserters competing for it. GetXLogInsertRecPtr() does - * compete for it, but that's not called very frequently. - */ --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint128_u exchange; - uint128_u current; - uint128_u compare = atomic_compare_and_swap_u128((uint128_u*)&Insert->CurrBytePos); -@@ -2623,7 +2624,7 @@ static void AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic, PGPROC *p - XLogwrtResult *LogwrtResultPtr = NULL; - TimeLineID xlogTimeLineID = 0; - --#ifdef __aarch64__ -+#if defined __aarch64__ - if (isGroupInsert) { - LogwrtResultPtr = (XLogwrtResult *)proc->xlogGroupLogwrtResult; - xlogTimeLineID = proc->xlogGroupTimeLineID; -@@ -6314,6 +6315,7 @@ static void WriteControlFile(void) - COMP_CRC32C(t_thrd.shemem_ptr_cxt.ControlFile->crc, (char *)t_thrd.shemem_ptr_cxt.ControlFile, - offsetof(ControlFileData, crc)); - FIN_CRC32C(t_thrd.shemem_ptr_cxt.ControlFile->crc); -+ - - /* - * We write out PG_CONTROL_SIZE bytes into pg_control, zero-padding the -@@ -6331,6 +6333,7 @@ static void WriteControlFile(void) - - errorno = memcpy_s(buffer, PG_CONTROL_SIZE, t_thrd.shemem_ptr_cxt.ControlFile, sizeof(ControlFileData)); - securec_check(errorno, "", ""); -+ securec_check(errorno, "", ""); - - #ifdef USE_ASSERT_CHECKING - #define MAX_SIZE 1024 -@@ -6938,7 +6941,7 @@ void XLOGShmemInit(void) - LWLockInitialize(&t_thrd.shemem_ptr_cxt.GlobalWALInsertLocks[processorIndex][i].l.lock, - LWTRANCHE_WAL_INSERT); - t_thrd.shemem_ptr_cxt.GlobalWALInsertLocks[processorIndex][i].l.insertingAt = InvalidXLogRecPtr; --#ifdef __aarch64__ -+#if defined __aarch64__ || defined __sw_64__ - pg_atomic_init_u32(&t_thrd.shemem_ptr_cxt.GlobalWALInsertLocks[processorIndex][i].l.xlogGroupFirst, - INVALID_PGPROCNO); - #endif -@@ -6974,7 +6977,7 @@ void XLOGShmemInit(void) - t_thrd.shemem_ptr_cxt.XLogCtl->lastRemovedSegNo = GetOldestXLOGSegNo(t_thrd.proc_cxt.DataDir); - } - --#if (!defined __x86_64__) && (!defined __aarch64__) -+#if (!defined __x86_64__) && (!defined __aarch64__) && (!defined __sw_64__) - SpinLockInit(&t_thrd.shemem_ptr_cxt.XLogCtl->Insert.insertpos_lck); - #endif - SpinLockInit(&t_thrd.shemem_ptr_cxt.XLogCtl->info_lck); -@@ -7136,7 +7139,6 @@ void BootStrapXLOG(void) - page = (XLogPageHeader)TYPEALIGN(XLOG_BLCKSZ, buffer); - ret = memset_s(page, XLOG_BLCKSZ, 0, XLOG_BLCKSZ); - securec_check(ret, "", ""); -- - /* - * Set up information for the initial checkpoint record - * -@@ -7287,6 +7289,7 @@ void BootStrapXLOG(void) - - /* Bootstrap the commit log, too */ - BootStrapCLOG(); -+ BootStrapCLOG(); - BootStrapCSNLOG(); - BootStrapMultiXact(); - -@@ -14978,7 +14981,7 @@ XLogRecPtr do_roach_stop_backup(const char *backupidstr) - stoppoint = t_thrd.shemem_ptr_cxt.ControlFile->minRecoveryPoint; - LWLockRelease(ControlFileLock); - } else { --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - current_bytepos = pg_atomic_barrier_read_u64((uint64*)&Insert->CurrBytePos); - stoppoint = XLogBytePosToEndRecPtr(current_bytepos); - #else -@@ -15228,7 +15231,7 @@ XLogRecPtr enable_delay_ddl_recycle(void) - - LWLockAcquire(CBMParseXlogLock, LW_EXCLUSIVE); - --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint64 current_bytepos = pg_atomic_barrier_read_u64((uint64*)&Insert->CurrBytePos); - curDelayRange.startLSN = XLogBytePosToEndRecPtr(current_bytepos); - #else -@@ -15362,7 +15365,7 @@ void disable_delay_ddl_recycle(XLogRecPtr barrierLSN, bool isForce, XLogRecPtr * - */ - LWLockAcquire(RelfilenodeReuseLock, LW_EXCLUSIVE); - --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint64 current_bytepos = pg_atomic_barrier_read_u64((uint64*)&Insert->CurrBytePos); - delayRange.endLSN = XLogBytePosToEndRecPtr(current_bytepos); - #else -@@ -15444,7 +15447,7 @@ XLogRecPtr enable_delay_ddl_recycle_with_slot(const char* slotname) - /* hold this lock to push cbm parse exact to the ddl stop position */ - LWLockAcquire(CBMParseXlogLock, LW_EXCLUSIVE); - --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint64 current_bytepos = pg_atomic_barrier_read_u64((uint64*)&Insert->CurrBytePos); - delay_start_lsn = XLogBytePosToEndRecPtr(current_bytepos); - #else -@@ -15510,7 +15513,7 @@ void disable_delay_ddl_recycle_with_slot(const char* slotname, XLogRecPtr *start - */ - LWLockAcquire(RelfilenodeReuseLock, LW_EXCLUSIVE); - --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint64 current_bytepos = pg_atomic_barrier_read_u64((uint64*)&Insert->CurrBytePos); - delay_end_lsn = XLogBytePosToEndRecPtr(current_bytepos); - #else -@@ -15928,7 +15931,7 @@ XLogRecPtr GetXLogInsertRecPtr(void) - volatile XLogCtlInsert *Insert = &t_thrd.shemem_ptr_cxt.XLogCtl->Insert; - uint64 current_bytepos; - --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - current_bytepos = pg_atomic_barrier_read_u64((uint64*)&Insert->CurrBytePos); - #else - SpinLockAcquire(&Insert->insertpos_lck); -@@ -15950,7 +15953,7 @@ XLogRecPtr GetXLogInsertEndRecPtr(void) - volatile XLogCtlInsert *Insert = &t_thrd.shemem_ptr_cxt.XLogCtl->Insert; - uint64 current_bytepos; - --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - current_bytepos = pg_atomic_barrier_read_u64((uint64*)&Insert->CurrBytePos); - #else - SpinLockAcquire(&Insert->insertpos_lck); -@@ -18432,7 +18435,7 @@ bool IsRoachRestore(void) - } - - const uint UPDATE_REC_XLOG_NUM = 4; --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - bool atomic_update_dirty_page_queue_rec_lsn(XLogRecPtr current_insert_lsn, bool need_immediately_update) - { - XLogRecPtr cur_rec_lsn = InvalidXLogRecPtr; -@@ -18490,7 +18493,7 @@ void update_dirty_page_queue_rec_lsn(XLogRecPtr current_insert_lsn, bool need_im - } - } - --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - is_update = atomic_update_dirty_page_queue_rec_lsn(current_insert_lsn, need_immediately_update); - #else - SpinLockAcquire(&g_instance.ckpt_cxt_ctl->queue_lock); -@@ -18515,7 +18518,7 @@ void update_dirty_page_queue_rec_lsn(XLogRecPtr current_insert_lsn, bool need_im - uint64 get_dirty_page_queue_rec_lsn() - { - uint64 dirty_page_queue_rec_lsn = 0; --#if defined(__x86_64__) || defined(__aarch64__) -+#if defined(__x86_64__) || defined(__aarch64__) || defined(__sw_64__) - uint128_u compare; - compare = atomic_compare_and_swap_u128((uint128_u*)&g_instance.ckpt_cxt_ctl->dirty_page_queue_reclsn); - dirty_page_queue_rec_lsn = compare.u64[0]; -@@ -18956,4 +18959,4 @@ void InitXlogStatuEntryTblSize() - g_instance.attr.attr_storage.wal_insert_status_entries_power = MIN_WAL_INSERT_STATUS_ENTRY_POW; - } - } -- -+//#endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/Makefile.local b/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/Makefile.local -index 5cdaaff..74daee4 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/Makefile.local -+++ b/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/Makefile.local -@@ -73,9 +73,10 @@ PLATFORM_ARCH = $(shell uname -p) - ifeq ($(PLATFORM_ARCH),aarch64) - #CFLAGS += -std=gnu++11 -march=armv8-a+crc -Wall -Wextra -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC - CFLAGS += -std=gnu++11 -march=armv8-a+crc -w -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC --else -- #CFLAGS += -std=gnu++11 -march=native -mcx16 -Wall -Wextra -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC -- CFLAGS += -std=gnu++11 -mcx16 -w -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC -+else ifeq($(PLATFORM_ARCH),sw_64) -+ CFLAGS += -std=gnu++11 -march=native -Wall -Wextra -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC -+else -+ CFLAGS += -std=gnu++11 -march=native -mcx16 -Wall -Wextra -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC - endif - - CFLAGS += $(INCLUDE) -@@ -93,6 +94,8 @@ ifeq ($(UNDERPG), no) - ifeq ($(BUILD),Release) - ifeq ($(PLATFORM_ARCH),aarch64) - CFLAGS += -O2 -DNDEBUG -D_FORTIFY_SOURCE=2 -+ else ifeq ($(PLATFORM_ARCH),sw_64) -+ CFLAGS += -O2 -DNDEBUG -D_FORTIFY_SOURCE=2 - else - CFLAGS += -Werror -O2 -DNDEBUG -mcx16 -D_FORTIFY_SOURCE=2 - endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/cycles.h b/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/cycles.h -index 559ce1d..e42465d 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/cycles.h -+++ b/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/cycles.h -@@ -55,6 +55,12 @@ public: - unsigned long cval = 0; - asm volatile("isb; mrs %0, cntvct_el0" : "=r"(cval) : : "memory"); - return cval; -+/* modify by yjy */ -+#elif defined(__sw_64__) -+ unsigned long time_val = 0; -+ __asm__ __volatile__("rtc %0" : "=r"(time_val) : : "memory"); -+ return time_val; -+/* end */ - #else - #error "Unsupported CPU architecture or compiler." - #endif -@@ -75,6 +81,12 @@ public: - unsigned long cval = 0; - asm volatile("isb; mrs %0, cntvct_el0" : "=r"(cval) : : "memory"); - return cval; -+/* modify by yjy */ -+#elif defined(__sw_64__) -+ unsigned long time_val = 0; -+ __asm__ volatile("rtc %0" : "=r"(time_val) : : "memory"); -+ return time_val; -+/* end */ - #else - #error "Unsupported CPU architecture or compiler." - #endif -diff --git a/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/mot_atomic_ops.h b/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/mot_atomic_ops.h -index 2c57cbf..7c628e3 100644 ---- a/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/mot_atomic_ops.h -+++ b/openGauss-server-2.1.0/src/gausskernel/storage/mot/core/infra/synchronization/mot_atomic_ops.h -@@ -65,4 +65,4 @@ - /** @define Atomic compare-and-swap. Performs the operation "if (v == curr_value) then v = new_value". */ - #define MOT_ATOMIC_CAS(v, curr_value, new_value) __sync_bool_compare_and_swap(&v, curr_value, new_value) - --#endif /* MM_ATOMIC_OPS_H */ -\ No newline at end of file -+#endif /* MM_ATOMIC_OPS_H */ -diff --git a/openGauss-server-2.1.0/src/include/access/double_write_basic.h b/openGauss-server-2.1.0/src/include/access/double_write_basic.h -index 0543ca2..7b1f55d 100644 ---- a/openGauss-server-2.1.0/src/include/access/double_write_basic.h -+++ b/openGauss-server-2.1.0/src/include/access/double_write_basic.h -@@ -109,6 +109,8 @@ typedef unsigned char slock_t; - - #if defined(__aarch64__) || defined(__aarch64) - typedef int slock_t; -+#elif defined(__sw_64__) //modify by yjy -+typedef unsigned long slock_t; - #endif - - typedef uintptr_t Datum; -diff --git a/openGauss-server-2.1.0/src/include/access/extreme_rto/dispatcher.h b/openGauss-server-2.1.0/src/include/access/extreme_rto/dispatcher.h -index 5890af2..41eb8fa 100644 ---- a/openGauss-server-2.1.0/src/include/access/extreme_rto/dispatcher.h -+++ b/openGauss-server-2.1.0/src/include/access/extreme_rto/dispatcher.h -@@ -105,7 +105,7 @@ typedef struct RecordBufferAarray { - typedef struct { - uint64 curPosition; - XLogRecPtr curLsn; --#if (!defined __x86_64__) && (!defined __aarch64__) -+#if (!defined __x86_64__) && (!defined __aarch64__) && (!defined __sw_64__) //add sw_64 modify bu yjy - /* protects lastReplayedReadRecPtr and lastReplayedEndRecPtr */ - slock_t ptrLck; - #endif -diff --git a/openGauss-server-2.1.0/src/include/access/extreme_rto/page_redo.h b/openGauss-server-2.1.0/src/include/access/extreme_rto/page_redo.h -index 6dc938a..8bbf855 100644 ---- a/openGauss-server-2.1.0/src/include/access/extreme_rto/page_redo.h -+++ b/openGauss-server-2.1.0/src/include/access/extreme_rto/page_redo.h -@@ -65,7 +65,7 @@ struct PageRedoWorker { - */ - XLogRecPtr lastReplayedReadRecPtr; - XLogRecPtr lastReplayedEndRecPtr; --#if (!defined __x86_64__) && (!defined __aarch64__) -+#if (!defined __x86_64__) && (!defined __aarch64__) && (!defined __sw_64__) //add sw_64 modify by yjy - /* protects lastReplayedReadRecPtr and lastReplayedEndRecPtr */ - slock_t ptrLck; - #endif -diff --git a/openGauss-server-2.1.0/src/include/access/parallel_recovery/page_redo.h b/openGauss-server-2.1.0/src/include/access/parallel_recovery/page_redo.h -index 3e0a720..eccef33 100644 ---- a/openGauss-server-2.1.0/src/include/access/parallel_recovery/page_redo.h -+++ b/openGauss-server-2.1.0/src/include/access/parallel_recovery/page_redo.h -@@ -61,7 +61,7 @@ struct PageRedoWorker { - */ - XLogRecPtr lastReplayedReadRecPtr; - XLogRecPtr lastReplayedEndRecPtr; --#if (!defined __x86_64__) && (!defined __aarch64__) -+#if (!defined __x86_64__) && (!defined __aarch64__) //add sw_64 modify by yjy - /* protects lastReplayedReadRecPtr and lastReplayedEndRecPtr */ - slock_t ptrLck; - #endif -diff --git a/openGauss-server-2.1.0/src/include/communication/commproxy_interface.h b/openGauss-server-2.1.0/src/include/communication/commproxy_interface.h -index c42cc43..7a1beb6 100644 ---- a/openGauss-server-2.1.0/src/include/communication/commproxy_interface.h -+++ b/openGauss-server-2.1.0/src/include/communication/commproxy_interface.h -@@ -416,7 +416,17 @@ extern bool comm_compare_and_swap_32(volatile int32* dest, int32 oldval, int32 n - - #define gaussdb_numa_memory_bind(i) - #define gaussdb_numa_memory_unbind() -+/* modify by yjy */ -+#elif defined(__sw_64__) -+#define gaussdb_memory_barrier() \ -+ __asm__ __volatile__ ("memb" : : : "memory") -+ -+#define gaussdb_read_barrier() gaussdb_memory_barrier() -+#define gaussdb_write_barrier() gaussdb_memory_barrier() - -+#define gaussdb_numa_memory_bind(i) -+#define gaussdb_numa_memory_unbind() -+/* end */ - #elif defined(__i386__) - #define gaussdb_memory_barrier() \ - __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory") -diff --git a/openGauss-server-2.1.0/src/include/gtm/gtm_atomic.h b/openGauss-server-2.1.0/src/include/gtm/gtm_atomic.h -index 35e8fb9..affb5e6 100644 ---- a/openGauss-server-2.1.0/src/include/gtm/gtm_atomic.h -+++ b/openGauss-server-2.1.0/src/include/gtm/gtm_atomic.h -@@ -169,6 +169,10 @@ static inline void GTM_loadStoreFence() - #ifdef __aarch64__ - - __asm__ __volatile__("DMB ish" ::: "memory"); -+/* modify by yjy */ -+#elif defined(__sw_64__) -+ __asm__ __volatile__("memb" ::: "memory"); -+/* end */ - #else - __asm__ __volatile__("lfence" ::: "memory"); - __asm__ __volatile__("sfence" ::: "memory"); -@@ -177,11 +181,19 @@ static inline void GTM_loadStoreFence() - - static inline void GTM_loadFence() - { -+/* modify */ -+#ifndef __sw_64__ - __asm__ __volatile__("lfence" ::: "memory"); -+#endif -+/* end */ - } - - static inline void GTM_StoreFence() - { -+/* modify */ -+#ifndef __sw_64__ - __asm__ __volatile__("sfence" ::: "memory"); -+#endif -+/* end */ - } - #endif /* CODE_SRC_INCLUDE_GTM_GTM_ATOMIC_H_ */ -diff --git a/openGauss-server-2.1.0/src/include/gtm/gtm_slock.h b/openGauss-server-2.1.0/src/include/gtm/gtm_slock.h -index 1ba3e64..207b71e 100644 ---- a/openGauss-server-2.1.0/src/include/gtm/gtm_slock.h -+++ b/openGauss-server-2.1.0/src/include/gtm/gtm_slock.h -@@ -585,6 +585,45 @@ static __inline__ int tas(volatile slock_t* lock) - - #endif /* __ns32k__ */ - -+/* modify by yjy */ -+#if defined(__sw_64__) -+#define HAS_TEST_AND_SET -+typedef unsigned long slock_t; -+#define TAS(lock) tas(lock) -+ -+static __inline__ int tas(volatile slock_t* lock) -+{ -+ register slock_t _res; -+ unsigned long tmp; -+ __asm__ __volatile__( -+ " ldl $0, %1 \n" -+ " bne $0, 2f \n" -+ " lldl %0, %1 \n" -+ " cmpeq %0, 0,%2\n" -+ " wr_f %2 \n" -+ " mov %2, $0 \n" -+ " lstl $0, %1 \n" -+ " rd_f $0 \n" -+ " beq %2, 2f \n" -+ " beq $0, 2f \n" -+ " memb \n" -+ " br 3f \n" -+ "2: mov 1, %0 \n" -+ "3: \n" -+ :"=&r"(_res), "+m"(*lock),"=&r"(tmp) -+ : -+ :"memory", "0"); -+ return (int)_res; -+} -+ -+#define S_UNLOCK(lock) \ -+ do { \ -+ __asm__ __volatile__("memb \n"); \ -+ *((volatile slock_t*)(lock)) = 0; \ -+ } while (0) -+#endif -+/* end */ -+ - #if defined(__alpha) || defined(__alpha__) /* Alpha */ - /* - * Correct multi-processor locking methods are explained in section 5.5.3 -diff --git a/openGauss-server-2.1.0/src/include/storage/lock/s_lock.h b/openGauss-server-2.1.0/src/include/storage/lock/s_lock.h -index 6a64c9d..929fec9 100644 ---- a/openGauss-server-2.1.0/src/include/storage/lock/s_lock.h -+++ b/openGauss-server-2.1.0/src/include/storage/lock/s_lock.h -@@ -97,7 +97,7 @@ - - #include "storage/lock/pg_sema.h" - --#if !defined(ENABLE_THREAD_CHECK) || defined(__aarch64__) -+#if !defined(ENABLE_THREAD_CHECK) || defined(__aarch64__) || defined(__sw_64__) - - #ifdef HAVE_SPINLOCKS /* skip spinlocks if requested */ - -@@ -606,6 +606,45 @@ static __inline__ int tas(volatile slock_t* lock) - - #endif /* __ns32k__ */ - -+/* modify by yjy */ -+#if defined(__sw_64) || defined(__sw_64__) -+#define HAS_TEST_AND_SET -+typedef unsigned long slock_t; -+#define TAS(lock) tas(lock) -+ -+static __inline__ int tas(volatile slock_t* lock) -+{ -+ register slock_t _res; -+ unsigned long tmp; -+ __asm__ __volatile__( -+ " ldl $0, %1 \n" -+ " bne $0, 2f \n" -+ " lldl %0, %1 \n" -+ " cmpeq %0, 0,%2\n" -+ " wr_f %2 \n" -+ " mov %2, $0 \n" -+ " lstl $0, %1 \n" -+ " rd_f $0 \n" -+ " beq %2, 2f \n" -+ " beq $0, 2f \n" -+ " memb \n" -+ " br 3f \n" -+ "2: mov 1, %0 \n" -+ "3: \n" -+ :"=&r"(_res), "+m"(*lock),"=&r"(tmp) -+ : -+ :"memory", "0"); -+ return (int)_res; -+} -+ -+#define S_UNLOCK(lock) \ -+ do { \ -+ __asm__ __volatile__("memb \n"); \ -+ *((volatile slock_t*)(lock)) = 0; \ -+ } while (0) -+#endif -+/* end */ -+ - #if defined(__alpha) || defined(__alpha__) /* Alpha */ - /* - * Correct multi-processor locking methods are explained in section 5.5.3 -diff --git a/openGauss-server-2.1.0/src/include/utils/atomic.h b/openGauss-server-2.1.0/src/include/utils/atomic.h -index 510a695..c64ec40 100644 ---- a/openGauss-server-2.1.0/src/include/utils/atomic.h -+++ b/openGauss-server-2.1.0/src/include/utils/atomic.h -@@ -504,6 +504,9 @@ static inline uint128_u atomic_compare_and_swap_u128( - { - #ifdef __aarch64__ - return arm_compare_and_swap_u128(ptr, oldval, newval); -+#elif defined(__sw_64__) -+ uint128_u ret; -+ return ret; - #else - uint128_u ret; - ret.u128 = __sync_val_compare_and_swap(&ptr->u128, oldval.u128, newval.u128); -diff --git a/openGauss-server-2.1.0/src/test/regress/pg_regress.cpp b/openGauss-server-2.1.0/src/test/regress/pg_regress.cpp -index 859d430..42f0590 100644 ---- a/openGauss-server-2.1.0/src/test/regress/pg_regress.cpp -+++ b/openGauss-server-2.1.0/src/test/regress/pg_regress.cpp -@@ -6589,6 +6589,10 @@ int regression_main(int argc, char* argv[], init_function ifunc, test_function t - (void)snprintf(pgbenchdir, MAXPGPATH, "%s/%s", ".", "data/pgbench/x86_64"); - #elif defined (__aarch64__) - (void)snprintf(pgbenchdir, MAXPGPATH, "%s/%s", ".", "data/pgbench/aarch64"); -+/* modify by yjy */ -+#elif defined (__sw_64__) -+ (void)snprintf(pgbenchdir, MAXPGPATH, "%s/%s", ".", "data/pgbench/sw_64"); -+/* endif */ - #endif - - /* Check thread local varieble's num */ -diff --git a/protobuf-3.11.3/cmake/CMakeLists.txt b/protobuf-3.11.3/cmake/CMakeLists.txt -index 8e5e680..f3b7046 100644 ---- a/protobuf-3.11.3/cmake/CMakeLists.txt -+++ b/protobuf-3.11.3/cmake/CMakeLists.txt -@@ -138,7 +138,8 @@ set(protobuf_LINK_LIBATOMIC false) - if (NOT MSVC) - include(CheckCXXSourceCompiles) - set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) -- set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -std=c++11) -+ #set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -std=c++11) -+ set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -std=gnu++11) - check_cxx_source_compiles(" - #include - int main() { -diff --git a/protobuf-3.11.3/kokoro/release/protoc/linux/build.sh b/protobuf-3.11.3/kokoro/release/protoc/linux/build.sh -index d165a89..cf13b49 100755 ---- a/protobuf-3.11.3/kokoro/release/protoc/linux/build.sh -+++ b/protobuf-3.11.3/kokoro/release/protoc/linux/build.sh -@@ -19,6 +19,8 @@ git submodule update --init --recursive - sudo apt install -y g++-aarch64-linux-gnu - protoc-artifacts/build-protoc.sh linux aarch_64 protoc - -+protoc-artifacts/build-protoc.sh linux sw_64 protoc -+ - sudo apt install -y g++-powerpc64le-linux-gnu - protoc-artifacts/build-protoc.sh linux ppcle_64 protoc - -diff --git a/protobuf-3.11.3/protoc-artifacts/build-protoc.sh b/protobuf-3.11.3/protoc-artifacts/build-protoc.sh -index 6ad2ea1..268a3e3 100755 ---- a/protobuf-3.11.3/protoc-artifacts/build-protoc.sh -+++ b/protobuf-3.11.3/protoc-artifacts/build-protoc.sh -@@ -11,6 +11,7 @@ - # cygwin windows x86_32 Requires: i686-w64-mingw32-gcc - # cygwin windows x86_64 Requires: x86_64-w64-mingw32-gcc - # linux linux aarch_64 Requires: g++-aarch64-linux-gnu -+# linux linux sw_64 - # linux linux x86_32 - # linux linux x86_64 - # linux windows x86_32 Requires: i686-w64-mingw32-gcc -@@ -162,6 +163,9 @@ checkDependencies () - elif [[ "$ARCH" == aarch_64 ]]; then - dump_cmd='objdump -p '"$1"' | grep NEEDED' - white_list="libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux-aarch64\.so\.1" -+ elif [[ "$ARCH" == sw_64 ]]; then -+ dump_cmd='objdump -p '"$1"' | grep NEEDED' -+ white_list="libpthread\.so\.0\|libm\.so\.6\.1\|libc\.so\.6\.1\|ld-linux\.so\.2" - fi - elif [[ "$OS" == osx ]]; then - dump_cmd='otool -L '"$1"' | fgrep dylib' -@@ -223,6 +227,8 @@ elif [[ "$(uname)" == Linux* ]]; then - CXXFLAGS="$CXXFLAGS -m32" - elif [[ "$ARCH" == aarch_64 ]]; then - CONFIGURE_ARGS="$CONFIGURE_ARGS --host=aarch64-linux-gnu" -+ elif [[ "$ARCH" == sw_64 ]]; then -+ CONFIGURE_ARGS="$CONFIGURE_ARGS --host=sw_64-linux-gnu" - elif [[ "$ARCH" == ppcle_64 ]]; then - CXXFLAGS="$CXXFLAGS -m64" - CONFIGURE_ARGS="$CONFIGURE_ARGS --host=powerpc64le-linux-gnu" -diff --git a/protobuf-3.11.3/src/google/protobuf/stubs/platform_macros.h b/protobuf-3.11.3/src/google/protobuf/stubs/platform_macros.h -index ce1b1e3..fd482f9 100644 ---- a/protobuf-3.11.3/src/google/protobuf/stubs/platform_macros.h -+++ b/protobuf-3.11.3/src/google/protobuf/stubs/platform_macros.h -@@ -56,6 +56,9 @@ - #elif defined(__aarch64__) - #define GOOGLE_PROTOBUF_ARCH_AARCH64 1 - #define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -+#elif defined(__sw_64__) -+#define GOOGLE_PROTOBUF_ARCH_SW_64 1 -+#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 - #elif defined(__mips__) - #if defined(__LP64__) - #define GOOGLE_PROTOBUF_ARCH_MIPS64 1 -diff --git a/zlib-1.2.11/configure b/zlib-1.2.11/configure -index e974d1f..027ba8c 100755 ---- a/zlib-1.2.11/configure -+++ b/zlib-1.2.11/configure -@@ -391,13 +391,13 @@ tryboth() - cat > $test.c << EOF - int foo() { return 0; } - EOF --echo "Checking for obsessive-compulsive compiler options..." >> configure.log --if try $CC -c $CFLAGS $test.c; then -- : --else -- echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log -- leave 1 --fi -+#echo "Checking for obsessive-compulsive compiler options..." >> configure.log -+#if try $CC -c $CFLAGS $test.c; then -+# : -+#else -+# echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log -+# leave 1 -+#fi - - echo >> configure.log - --- -2.27.0 - diff --git a/opengauss-server.spec b/opengauss-server.spec index 86d2e69..74b5462 100755 --- a/opengauss-server.spec +++ b/opengauss-server.spec @@ -11,7 +11,7 @@ Name: opengauss Version: 5.0.1 -Release: 15 +Release: 16 Summary: openGauss is an open source relational database management system License: MulanPSL-2.0 and MIT and BSD and zlib and TCL and Apache-2.0 and BSL-1.0 URL: https://gitee.com/opengauss/openGauss-server @@ -70,16 +70,16 @@ openGauss kernel : openGauss is an open source relational database management sy pushd openGauss-server-%{version} -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 +%patch -P 0 -p1 +%patch -P 1 -p1 +%patch -P 2 -p1 +%patch -P 3 -p1 +%patch -P 4 -p1 popd pushd %{zlib_name}-%{zlib_version} -%patch20 -p1 -%patch21 -p1 +%patch -P 20 -p1 +%patch -P 21 -p1 popd %build @@ -434,6 +434,9 @@ fi %changelog +* Fri Dec 06 2024 shenzhongwei - 5.0.1-16 +- fix: %patchN is deprecated (7 usages found), use %patch N (or %patch -P N) + * Thu Jun 20 2024 liuheng - 5.0.1-15 - Fix bugs: Initialize Remove Password -- Gitee