From e82f7aff60f562122fd0a8216cc07975da135af5 Mon Sep 17 00:00:00 2001 From: huchangqi Date: Sat, 11 Jan 2025 18:49:09 +0800 Subject: [PATCH] fix build error --- deps/easy/src/include/easy_atomic.h | 8 ++++++-- deps/easy/src/io/easy_ssl.c | 1 - deps/easy/src/io/ev.c | 2 ++ deps/easy/src/util/easy_time.c | 22 +++++++++++++++++++--- deps/easy/src/util/easy_util.h | 12 +++++++++++- deps/oblib/src/lib/utility/utility.h | 2 +- src/sql/parser/sql_parser_mysql_mode.y | 8 ++++---- 7 files changed, 43 insertions(+), 12 deletions(-) diff --git a/deps/easy/src/include/easy_atomic.h b/deps/easy/src/include/easy_atomic.h index ca949040d..c8a4cd9f5 100644 --- a/deps/easy/src/include/easy_atomic.h +++ b/deps/easy/src/include/easy_atomic.h @@ -87,8 +87,8 @@ static __inline__ void easy_spin_lock(easy_atomic_t *lock) __asm__ (".byte 0xf3, 0x90"); #elif defined(__aarch64__) __asm__ ("yield"); // for ARM -#elif defined(__loongarch_lp64) - __asm__ ("ibar 0"); // for ARM +#elif defined(__loongarch__) + __asm__ ("ibar 0"); // for LOONGARCH #else #error arch unsupported #endif @@ -148,6 +148,8 @@ static __inline__ int easy_spinrwlock_rdlock(easy_spinrwlock_t *lock) asm("pause"); #elif defined(__aarch64__) asm("yield"); // for ARM +#elif defined(__loongarch__) + asm("ibar 0"); // loongarch #else #error arch unsupported #endif @@ -189,6 +191,8 @@ static __inline__ int easy_spinrwlock_wrlock(easy_spinrwlock_t *lock) asm("pause"); #elif defined(__aarch64__) asm("yield"); // for ARM +#elif defined(__loongarch__) + asm("ibar 0"); // loongarch #else #error arch unsupported #endif diff --git a/deps/easy/src/io/easy_ssl.c b/deps/easy/src/io/easy_ssl.c index 68d2a4a43..a5b33ff3a 100644 --- a/deps/easy/src/io/easy_ssl.c +++ b/deps/easy/src/io/easy_ssl.c @@ -451,7 +451,6 @@ static int easy_ssl_handshake(easy_connection_t *c) return EASY_OK; } -#endif sslerr = SSL_get_error(c->sc->connection, n); easy_debug_log("SSL_get_error: %d %s errno=%d", sslerr, easy_connection_str(c), errno); diff --git a/deps/easy/src/io/ev.c b/deps/easy/src/io/ev.c index 93a7b4a59..10a59a2cd 100644 --- a/deps/easy/src/io/ev.c +++ b/deps/easy/src/io/ev.c @@ -531,6 +531,8 @@ EV_CPP(extern "C" { #define ev_mb() __asm__ __volatile ("mfence" ::: "memory") #elif defined(__aarch64__) #define ev_mb() __asm__ __volatile ("dsb sy" ::: "memory") //for ARM +#elif defined(__loongarch__) + #define ev_mb() __asm__ __volatile ("dbar 0" :: : "memory") //for loongarch #else #error arch unsupported #endif diff --git a/deps/easy/src/util/easy_time.c b/deps/easy/src/util/easy_time.c index 89ab1d548..3977955a8 100644 --- a/deps/easy/src/util/easy_time.c +++ b/deps/easy/src/util/easy_time.c @@ -135,7 +135,7 @@ static __inline__ uint64_t rdtscp() __asm__ __volatile__("rdtscp" : "=a"(rax), "=d"(rdx) :: "%rcx"); return (rdx << 32) + rax; } -#else +#elif defined(__aarch64__) static __inline__ uint64_t rdtscp() { int64_t virtual_timer_value; @@ -147,9 +147,21 @@ static __inline__ uint64_t rdtsc() return rdtscp(); } +#elif defined(__loongarch__) +static __inline__ uint64_t rdtscp() +{ + uint64_t count; + asm volatile("rdtime.d %[cycles], $zero\n" : [cycles] "=r" (count) ::); + return count; +} +static __inline__ uint64_t rdtsc() +{ + return rdtscp(); +} + #endif -#if defined(__x86_64__) +#if defined(__x86_64__) || defined(__loongarch__) // 读取cpu频率 uint64_t get_cpufreq_khz() { @@ -172,13 +184,17 @@ uint64_t get_cpufreq_khz() return freq_khz; } -#else +#elif defined(__aarch64__) uint64_t get_cpufreq_khz(void) { uint64_t timer_frequency; asm volatile("mrs %0, cntfrq_el0":"=r"(timer_frequency)); return timer_frequency / 1000; } +//#elif defined(__loongarch__) +//uint64_t get_cpufreq_khz(void) +//{ +//} #endif // 初始化tsc时钟 diff --git a/deps/easy/src/util/easy_util.h b/deps/easy/src/util/easy_util.h index 25ee0cafd..b2cb5a4e7 100644 --- a/deps/easy/src/util/easy_util.h +++ b/deps/easy/src/util/easy_util.h @@ -19,7 +19,17 @@ static inline cycles_t easy_get_cycles() return val; } -#else +#elif defined(__loongarch__) + +static inline cycles_t easy_get_cycles() +{ + + uint64_t count; + asm volatile("rdtime.d %[cycles], $zero\n" : [cycles] "=r" (count) ::); + return count; +} + +#elif defined(__aarch64__) static inline uint64_t easy_rdtscp() { diff --git a/deps/oblib/src/lib/utility/utility.h b/deps/oblib/src/lib/utility/utility.h index c3e4045de..79d6a6605 100644 --- a/deps/oblib/src/lib/utility/utility.h +++ b/deps/oblib/src/lib/utility/utility.h @@ -568,7 +568,7 @@ inline bool is_cpu_support_sse42() : "a"(1) :); return 0 != (data & CPUID_STD_SSE4_2); - #elif defined(__aarch64__) + #elif defined(__aarch64__) || defined(__loongarch__) return 0; #else #error arch unsupported diff --git a/src/sql/parser/sql_parser_mysql_mode.y b/src/sql/parser/sql_parser_mysql_mode.y index 2d45ccc8f..9c48c319a 100644 --- a/src/sql/parser/sql_parser_mysql_mode.y +++ b/src/sql/parser/sql_parser_mysql_mode.y @@ -56,7 +56,7 @@ extern int easy_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) %} %destructor {destroy_tree($$);} -%destructor {oceanbase::common::ob_free($$);} +//%destructor {oceanbase::common::ob_free($$);} %token NAME_OB %token STRING_VALUE @@ -124,7 +124,7 @@ extern int easy_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) %left AND AND_OP %left BETWEEN CASE WHEN THEN ELSE %nonassoc LOWER_THAN_COMP -%left COMP_EQ COM P_NSEQ COMP_GE COMP_GT COMP_LE COMP_LT COMP_NE IS LIKE IN REGEXP SOUNDS +%left COMP_EQ COMP_NSEQ COMP_GE COMP_GT COMP_LE COMP_LT COMP_NE IS LIKE IN REGEXP SOUNDS %nonassoc STRING_VALUE %right ESCAPE /*for conflict for escape*/ %left '|' @@ -11271,11 +11271,11 @@ NAME_OB { $$ = $1; } -| name_list NAME_OB %prec COMMA +| name_list NAME_OB %prec LOWER_COMMA { malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, $1, $2); } -| name_list ',' NAME_OB %prec COMMA +| name_list ',' NAME_OB %prec LOWER_COMMA { malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, $1, $3); }