1790 lines
77 KiB
Diff
1790 lines
77 KiB
Diff
From 1d1ba5da4366f12a8bc020d5d0432030cd890db2 Mon Sep 17 00:00:00 2001
|
|
From: panchenbo <panchenbo@kylinsec.com.cn>
|
|
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 <sys/syscall.h>
|
|
+#include <sys/errno.h>
|
|
+#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 <arm_acle.h>
|
|
+#elif defined(__sw_64__)
|
|
#else
|
|
#include <nmmintrin.h>
|
|
#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 <atomic>
|
|
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
|
|
|