提交 a46986a8 编写于 作者: J jg0 提交者: LINGuanRen

fix libunwind coredump under arm os

上级 c7b59a9d
......@@ -7,7 +7,7 @@ repo=http://mirrors.aliyun.com/oceanbase/development-kit/el/7/aarch64/
devdeps-gtest-1.8.0-3.el7.aarch64.rpm
devdeps-isa-l-static-2.22.0-3.el7.aarch64.rpm
devdeps-libcurl-static-7.29.0-3.el7.aarch64.rpm
devdeps-libunwind-static-1.5.0-3.el7.aarch64.rpm
devdeps-libunwind-static-1.6.2-11.el7.aarch64.rpm
devdeps-mariadb-connector-c-3.1.12-3.el7.aarch64.rpm
devdeps-openssl-static-1.0.1e-3.el7.aarch64.rpm
devdeps-libaio-0.3.112-3.el7.aarch64.rpm
......
......@@ -7,7 +7,7 @@ repo=http://mirrors.aliyun.com/oceanbase/development-kit/el/7/x86_64/
devdeps-gtest-1.8.0-3.el7.x86_64.rpm
devdeps-isa-l-static-2.22.0-3.el7.x86_64.rpm
devdeps-libcurl-static-7.29.0-3.el7.x86_64.rpm
devdeps-libunwind-static-1.5.0-3.el7.x86_64.rpm
devdeps-libunwind-static-1.6.2-11.el7.x86_64.rpm
devdeps-mariadb-connector-c-3.1.12-3.el7.x86_64.rpm
devdeps-openssl-static-1.0.1e-3.el7.x86_64.rpm
devdeps-libaio-0.3.112-3.el7.x86_64.rpm
......
......@@ -7,7 +7,7 @@ repo=http://mirrors.aliyun.com/oceanbase/development-kit/el/8/x86_64/
devdeps-gtest-1.8.0-3.el8.x86_64.rpm
devdeps-isa-l-static-2.22.0-3.el8.x86_64.rpm
devdeps-libcurl-static-7.29.0-3.el8.x86_64.rpm
devdeps-libunwind-static-1.5.0-3.el8.x86_64.rpm
devdeps-libunwind-static-1.6.2-11.el8.x86_64.rpm
devdeps-mariadb-connector-c-3.1.12-3.el8.x86_64.rpm
devdeps-openssl-static-1.0.1e-3.el8.x86_64.rpm
devdeps-libaio-0.3.112-3.el8.x86_64.rpm
......
......@@ -11,6 +11,8 @@ ob_lib_add_target(oblib_lib_charset
charset/ob_ctype_utf8.c
charset/ob_dtoa.c
hash/xxhash.c
signal/safe_snprintf.c
signal/ob_libunwind.c
)
disable_pch(oblib_lib_charset)
......@@ -209,7 +211,6 @@ ob_set_subtarget(oblib_lib common
word_segment/ob_word_segment.cpp
encode/ob_base64_encode.cpp
signal/ob_memory_cutter.cpp
signal/safe_snprintf.cpp
signal/ob_signal_struct.cpp
signal/ob_signal_utils.cpp
signal/ob_signal_handlers.cpp
......
/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#include "lib/signal/ob_libunwind.h"
#include "lib/signal/safe_snprintf.h"
#define UNW_LOCAL_ONLY
#include <libunwind.h>
static const int MAX_BT_ADDRESS_CNT = 100;
static int safe_backtrace_(unw_context_t *context, char *buf, int64_t len, int64_t *pos);
static ssize_t get_stack_trace_inplace(
unw_context_t *context, unw_cursor_t *cursor, uintptr_t *addresses, size_t max_addresses);
static int8_t get_frame_info(unw_cursor_t *cursor, uintptr_t *ip);
int safe_backtrace(char *buf, int64_t len, int64_t *pos)
{
int ret = 0;
unw_context_t context;
if (unw_getcontext(&context) < 0) {
ret = -1;
} else {
ret = safe_backtrace_(&context, buf, len, pos);
}
return ret;
}
static int safe_backtrace_(unw_context_t *context, char *buf, int64_t len, int64_t *pos)
{
int ret = 0;
unw_cursor_t cursor;
uintptr_t addrs[MAX_BT_ADDRESS_CNT];
int n = get_stack_trace_inplace(context, &cursor, addrs, sizeof(addrs) / sizeof(addrs[0]));
*pos = 0;
if (n < 0) {
ret = -1;
} else {
for (int i = 0; i < n; i++) {
int count = safe_snprintf(buf + *pos, len - *pos, "0x%lx", addrs[i]);
count++; // for space
if (count > 0 && *pos + count < len) {
*pos += count;
buf[*pos - 1] = ' ';
} else {
// buf not enough
break;
}
}
--*pos;
}
buf[*pos] = '\0';
return ret;
}
ssize_t get_stack_trace_inplace(
unw_context_t *context, unw_cursor_t *cursor, uintptr_t *addresses, size_t max_addresses)
{
if (max_addresses == 0) {
return 0;
}
if (unw_init_local(cursor, context) < 0) {
return -1;
}
if (!get_frame_info(cursor, addresses)) {
return -1;
}
++addresses;
size_t count = 1;
for (; count != max_addresses; ++count, ++addresses) {
int r = unw_step(cursor);
if (r < 0) {
return -1;
}
if (r == 0) {
break;
}
if (!get_frame_info(cursor, addresses)) {
return -1;
}
}
return count;
}
int8_t get_frame_info(unw_cursor_t *cursor, uintptr_t *ip)
{
unw_word_t uip;
if (unw_get_reg(cursor, UNW_REG_IP, &uip) < 0) {
return 0;
}
int r = unw_is_signal_frame(cursor);
if (r < 0) {
return 0;
}
// Use previous instruction in normal (call) frames (because the
// return address might not be in the same function for noreturn functions)
// but not in signal frames.
*ip = uip - (r == 0);
return 1;
}
/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#ifndef OCEANBASE_LIBUNWIND_BT_H_
#define OCEANBASE_LIBUNWIND_BT_H_
#include <inttypes.h>
#include "lib/utility/ob_macro_utils.h"
EXTERN_C_BEGIN
extern int safe_backtrace(char *buf, int64_t len, int64_t *pos);
EXTERN_C_END
#endif
......@@ -16,6 +16,7 @@
#include <sys/prctl.h>
#include "lib/profile/ob_trace_id.h"
#include "lib/utility/utility.h"
#include "lib/signal/ob_libunwind.h"
#include "lib/signal/ob_signal_struct.h"
#include "lib/signal/ob_signal_utils.h"
#include "lib/signal/ob_memory_cutter.h"
......@@ -80,7 +81,7 @@ void coredump_cb(int sig, siginfo_t* si)
// backtrace
char bt[256];
int64_t len = 0;
safe_backtrace(bt, sizeof(bt) - 1, len);
safe_backtrace(bt, sizeof(bt) - 1, &len);
bt[len++] = '\0';
// trace_id
const uint64_t* trace_id = ObCurTraceId::get();
......
......@@ -50,12 +50,10 @@ int ObSigBTOnlyProcessor::prepare()
int64_t tid = syscall(SYS_gettid);
char tname[16];
prctl(PR_GET_NAME, tname);
unw_context_t uctx;
unw_getcontext(&uctx);
int64_t count = 0;
count = safe_snprintf(buf_ + pos_, len - pos_, "tid: %ld, tname: %s, lbt: ", tid, tname);
pos_ += count;
safe_backtrace(uctx, buf_ + pos_, len - pos_, count);
safe_backtrace(buf_ + pos_, len - pos_, &count);
pos_ += count;
buf_[pos_++] = '\n';
return ret;
......
......@@ -18,6 +18,7 @@
#include "lib/ob_errno.h"
#include "lib/utility/ob_macro_utils.h"
#include "lib/charset/ob_mysql_global.h"
#include "lib/signal/ob_libunwind.h"
namespace oceanbase {
namespace common {
......@@ -33,94 +34,6 @@ void safe_sleep_micros(int64_t usec)
nanosleep(&ts, nullptr);
}
bool get_frame_info(unw_cursor_t* cursor, uintptr_t& ip)
{
unw_word_t uip;
if (unw_get_reg(cursor, UNW_REG_IP, &uip) < 0) {
return false;
}
int r = unw_is_signal_frame(cursor);
if (r < 0) {
return false;
}
// Use previous instruction in normal (call) frames (because the
// return address might not be in the same function for noreturn functions)
// but not in signal frames.
ip = uip - (r == 0);
return true;
}
/* From facebook-folly */
ssize_t get_stack_trace_inplace(
unw_context_t& context, unw_cursor_t& cursor, uintptr_t* addresses, size_t max_addresses)
{
if (max_addresses == 0) {
return 0;
}
if (unw_init_local(&cursor, &context) < 0) {
return -1;
}
if (!get_frame_info(&cursor, *addresses)) {
return -1;
}
++addresses;
size_t count = 1;
for (; count != max_addresses; ++count, ++addresses) {
int r = unw_step(&cursor);
if (r < 0) {
return -1;
}
if (r == 0) {
break;
}
if (!get_frame_info(&cursor, *addresses)) {
return -1;
}
}
return count;
}
int safe_backtrace(char* buf, int64_t len, int64_t& pos)
{
int ret = OB_SUCCESS;
unw_context_t context;
if (unw_getcontext(&context) < 0) {
ret = OB_ERROR;
} else {
ret = safe_backtrace(context, buf, len, pos);
}
return ret;
}
static const int MAX_BT_ADDRESS_CNT = 100;
int safe_backtrace(unw_context_t& context, char* buf, int64_t len, int64_t& pos)
{
int ret = OB_SUCCESS;
unw_cursor_t cursor;
uintptr_t addrs[MAX_BT_ADDRESS_CNT];
int n = get_stack_trace_inplace(context, cursor, addrs, ARRAYSIZEOF(addrs));
pos = 0;
if (n < 0) {
ret = OB_ERROR;
} else {
for (int i = 0; i < n; i++) {
int count = safe_snprintf(buf + pos, len - pos, "0x%lx", addrs[i]);
count++; // for space
if (count > 0 && pos + count < len) {
pos += count;
buf[pos - 1] = ' ';
} else {
// buf not enough
break;
}
}
pos--;
}
buf[pos] = '\0';
return ret;
}
__thread ObJumpBuf* g_jmp = nullptr;
void crash_restore_handler(int sig, siginfo_t* s, void* p)
......
......@@ -21,8 +21,6 @@
#include <poll.h>
#include <sys/syscall.h>
#include <fcntl.h>
#define UNW_LOCAL_ONLY
#include <libunwind.h>
#include "lib/signal/ob_signal_struct.h"
#include "lib/signal/safe_snprintf.h"
#include "lib/utility/ob_macro_utils.h"
......@@ -33,8 +31,6 @@
namespace oceanbase {
namespace common {
void safe_sleep_micros(int64_t usec);
int safe_backtrace(unw_context_t& context, char* buf, int64_t len, int64_t& pos);
int safe_backtrace(char* buf, int64_t len, int64_t& pos);
struct DLogLevel {
enum DLogLevelEnum { DEBUG, INFO, WARN, ERROR };
......
/*
* twemcache - Twitter memcached.
* Copyright (c) 2012, Twitter, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Twitter nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#include "lib/signal/safe_snprintf.h"
namespace oceanbase {
namespace common {
static const char HEX[] = "0123456789abcdef";
static char* safe_utoa(int _base, uint64_t val, char* buf)
......@@ -129,14 +110,14 @@ static char* safe_itoa(int base, int64_t val, char* buf)
static const char* safe_check_longlong(const char* fmt, int32_t* have_longlong)
{
*have_longlong = false;
*have_longlong = 0;
if (*fmt == 'l') {
fmt++;
if (*fmt != 'l') {
*have_longlong = (sizeof(long) == sizeof(int64_t));
} else {
fmt++;
*have_longlong = true;
*have_longlong = 1;
}
}
return fmt;
......@@ -147,7 +128,7 @@ int _safe_vsnprintf(char* to, size_t size, const char* format, va_list ap)
char* start = to;
char* end = start + size - 1;
for (; *format; ++format) {
int32_t have_longlong = false;
int32_t have_longlong = 0;
if (*format != '%') {
if (to == end) { /* end of buffer */
break;
......@@ -228,5 +209,3 @@ int _safe_snprintf(char* to, size_t n, const char* fmt, ...)
va_end(args);
return result;
}
} // namespace common
} // namespace oceanbase
......@@ -17,11 +17,11 @@
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
namespace oceanbase {
namespace common {
#include <sys/types.h>
#include <stdarg.h>
#include "lib/utility/ob_macro_utils.h"
EXTERN_C_BEGIN
/**
A (very) limited version of snprintf.
......@@ -41,6 +41,6 @@ int _safe_snprintf(char* to, size_t n, const char* fmt, ...);
#define safe_vsnprintf(_s, _n, _f, _a) _safe_vsnprintf((char*)(_s), (size_t)(_n), _f, _a)
} // namespace common
} // namespace oceanbase
EXTERN_C_END
#endif // OCEANBASE_SAFE_SNPRINTF_H_
[target]
os=7
arch=aarch64
[deps]
ob-lua-5.4.3-20210419222527.alios7.aarch64.rpm=current
ob-ncurses-6.2-20200624000532.alios7.aarch64.rpm=test
ob-elfutils-0.181-20201030224029.alios7.aarch64.rpm
keyutils-libs-devel-1.5.8-3.3.alios7.aarch64
libcom_err-devel-1.42.9-7.2.alios7.aarch64
libselinux-devel-2.2.2-6.3.alios7.aarch64
libsepol-devel-2.1.9-3.3.alios7.aarch64
libverto-devel-0.2.5-4.3.alios7.aarch64
pcre-devel-8.32-15.2.alios7.aarch64
krb5-devel-1.13.2-10.2.alios7.aarch64
babassl-ob-8.1.3-1900607.alios7.aarch64.rpm=test
libcurl-devel-7.29.0-25.2.alios7.aarch64.rpm
libcurl-7.29.0-25.2.alios7.aarch64.rpm
openldap-devel-2.4.40-8.2.alios7.aarch64.rpm
openldap-2.4.40-8.2.alios7.aarch64.rpm
libaio-devel-0.3.109-13.2.alios7.aarch64.rpm
t-ant-light-drcmessage-for-bt-1.0.0-20210712071538.alios7.aarch64.rpm=test
ob-rocksdb-6.22.1-20210805175734.alios7.aarch64.rpm
obclient-1.2.3-20210701163349.el7.alios7.aarch64.rpm
ob-apr-1.6.5-20200217230442.alios7.aarch64.rpm=test
ob-mxml-2.12.0-20200219103712.alios7.aarch64.rpm=test
ob-oss-c-sdk-3.9.2-20200729160751.alios7.aarch64.rpm=test
gcc52-5.2.0-1.alios7.aarch64.rpm
expat-2.1.0-8.3.alios7.aarch64.rpm
expat-devel-2.1.0-8.3.alios7.aarch64.rpm
ali-dds-aliws-1.4.0.2-1862830.alios7.aarch64.rpm=test
t-midware-vipserver-c-client-arm-1.0.14.3-20191125213454.alios7.aarch64.rpm
ob-boost-1.53.0-20200218205728.alios7.aarch64.rpm=test
zlib-devel-1.2.7-15.2.alios7.aarch64.rpm
zlib-1.2.7-15.2.alios7.aarch64.rpm
ob-rapidjson-1.1.0-20211015163659.alios7.aarch64.rpm
#second level requires analysis:
binutils-2.27-9.base.alios7.aarch64.rpm
binutils-devel-2.27-9.base.alios7.aarch64.rpm
isal-2.22.0-20200623101955.alios7.aarch64.rpm=test
ob-llvm2-6.0.1-20200220185349.alios7.aarch64.rpm=test
obs-libunwind-1.0.3-20220121155402.alios7.aarch64.rpm=test
# compatible with el6
ob-cmake3-3.22.1-20211230145243.alios7.aarch64=test
ob-clang11-11.1.0-20220110114534.alios7.aarch64=test
ob-lld11-11.0.0-20210106153627.alios7.aarch64.rpm
ob-gtest-1.8.2-20200214192053.alios7.aarch64.rpm=test
# ofs
ob-ofs-devel-1.1.0-20210812171031.el7.aarch64.rpm=current
ob-libevent-2.1.10-20200303195414.alios7.aarch64.rpm=test
ob-jemalloc-5.2.1-20201013165401.alios7.aarch64.rpm=test
[target]
os=7
arch=x86_64
[deps]
ob-lua-5.4.3-20210419222527.alios7.x86_64.rpm=current
ob-ncurses-6.2-20200624000532.alios7.x86_64.rpm=test
ob-elfutils-0.181-20201030224029.alios7.x86_64.rpm
keyutils-libs-devel-1.5.8-3.1.alios7.x86_64
libcom_err-devel-1.42.9-7.1.alios7.x86_64
libselinux-devel-2.2.2-6.1.alios7.x86_64
libsepol-devel-2.1.9-3.1.alios7.x86_64
libverto-devel-0.2.5-4.1.alios7.x86_64
pcre-devel-8.32-15.1.alios7.x86_64
krb5-devel-1.13.2-10.1.alios7.x86_64
babassl-ob-8.1.3-1900407.alios7.x86_64.rpm=test
libcurl-devel-7.29.0-25.1.alios7.x86_64.rpm
libcurl-7.29.0-25.1.alios7.x86_64.rpm
openldap-devel-2.4.40-8.1.alios7.x86_64.rpm
openldap-2.4.40-8.1.alios7.x86_64.rpm
libaio-devel-0.3.109-13.1.alios7.x86_64.rpm
t-ant-light-drcmessage-for-bt-1.0.0-20210712071538.alios7.x86_64.rpm=test
ob-rocksdb-6.22.1-20210805175734.alios7.x86_64.rpm
obclient-1.2.3-20210701163349.el7.alios7.x86_64.rpm
ob-apr-1.6.5-20200217230442.alios7.x86_64.rpm=test
ob-mxml-2.12.0-20200219103712.alios7.x86_64.rpm=test
ob-oss-c-sdk-3.9.2-20200729160751.alios7.x86_64.rpm=test
gcc52-5.2.0-445134.el7.x86_64.rpm=current
expat-2.1.0-8.1.alios7.x86_64.rpm
expat-devel-2.1.0-8.1.alios7.x86_64.rpm
ali-dds-aliws-1.4.0.1-638651.el7.x86_64
t-midware-vipserver-cpp-client-1.0.14.6-20210304162233.alios7.x86_64
ob-boost-1.53.0-20210225114205.alios7.x86_64.rpm=test
zlib-devel-1.2.7-16.2.alios7.x86_64.rpm
zlib-1.2.7-16.2.alios7.x86_64.rpm
ob-rapidjson-1.1.0-20211015163659.alios7.x86_64.rpm
#second level requires analysis:
binutils-2.30-20180325160334.alios7.x86_64
ob-binutils-devel2-2.29.1-20200218233710.alios7.x86_64.rpm=test
isal-2.22.0-20200623101955.alios7.x86_64.rpm=test
ob-llvm-6.0.1-5.x86_64.rpm=test
obs-libunwind-1.0.3-20220121155402.alios7.x86_64.rpm=test
# compatible with el6
ob-cmake3-3.22.1-20211230145243.alios7.x86_64.rpm=test
ob-clang11-11.1.0-20220110114534.alios7.x86_64.rpm=test
ob-lld11-11.0.0-20210106153627.alios7.x86_64.rpm
ob-gtest-1.8.0-1.x86_64
# ofs
ob-ofs-devel-1.1.0-20210812171031.el7.x86_64.rpm=current
ob-libevent-2.1.10-20190605211727.alios7.x86_64.rpm=test
ob-jemalloc-5.2.1-20201013165401.alios7.x86_64.rpm=test
[target]
os=6
arch=x86_64
[deps]
ob-lua-5.4.3-20210419222527.alios6.x86_64.rpm=current
ob-ncurses-6.2-20200624000532.alios6.x86_64.rpm=test
libaio-devel-0.3.107-10.1.alios6.x86_64
babassl-ob-8.1.3-1900407.alios6.x86_64.rpm=test
isal-2.22.0-20200623101955.alios6.x86_64.rpm=test
t-ant-light-drcmessage-for-bt-1.0.0-20210611161024.alios6.x86_64.rpm=test
ob-rocksdb-6.22.1-20210805175734.alios6.x86_64.rpm
curl-7.29.0-1.el6.x86_64
obclient-1.2.3-20210701163349.el6.alios6.x86_64.rpm
ob-apr-1.6.5-20200217230442.alios6.x86_64.rpm=test
ob-mxml-2.12.0-20200219103712.alios6.x86_64.rpm=test
ob-oss-c-sdk-3.9.2-20200729160751.alios6.x86_64.rpm=test
gcc52-5.2.0-224921.alios6.x86_64.rpm=current
expat-2.0.1-9.1.1.alios6.x86_64
expat-devel-2.0.1-9.1.1.alios6.x86_64
ali-dds-aliws-1.4.0.0-563776.alios6.x86_64
binutils-2.29.1-20180327141620.alios6.x86_64
ob-binutils-devel2-2.29.1-20200218233710.alios6.x86_64.rpm=test
obs-libunwind-1.0.3-20220121155402.alios6.x86_64.rpm=test
ob-rapidjson-1.1.0-20211015163659.alios6.x86_64.rpm
# follows used by jit
ob-llvm-6.0.1-3.el6.x86_64
ob-cmake3-3.22.1-20211230145243.alios6.x86_64=test
ob-clang11-11.1.0-20220110114534.alios6.x86_64.rpm=test
ob-lld-7.1.0-2.el6.x86_64
ob-gtest-1.8.1-2.el6.x86_64
# ofs
ob-ofs-devel-1.1.0-20210812171031.el6.x86_64.rpm=current
ob-libevent-2.1.10-20190605211727.alios6.x86_64.rpm=test
ob-jemalloc-5.2.1-20201013165401.alios6.x86_64.rpm=test
t-midware-vipserver-cpp-client-1.0.14.6-20210304162233.alios6.x86_64
ob-boost-1.53.0-20210225114205.alios6.x86_64.rpm=test
#second level requires analysis:
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册