Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
b6355e0d
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
b6355e0d
编写于
10月 14, 2019
作者:
A
alexey-milovidov
提交者:
GitHub
10月 14, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #7300 from amosbird/armbuild
Enable musl and jemalloc for arm.
上级
22dfc611
b0d4bacc
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
1041 addition
and
15 deletion
+1041
-15
CMakeLists.txt
CMakeLists.txt
+7
-7
cmake/arch.cmake
cmake/arch.cmake
+3
-0
contrib/jemalloc-cmake/CMakeLists.txt
contrib/jemalloc-cmake/CMakeLists.txt
+9
-3
contrib/jemalloc-cmake/include_linux_aarch64/README
contrib/jemalloc-cmake/include_linux_aarch64/README
+7
-0
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/internal/jemalloc_internal_defs.h
..._linux_aarch64/jemalloc/internal/jemalloc_internal_defs.h
+382
-0
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/internal/jemalloc_preamble.h
...clude_linux_aarch64/jemalloc/internal/jemalloc_preamble.h
+194
-0
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_defs.h
...lloc-cmake/include_linux_aarch64/jemalloc/jemalloc_defs.h
+43
-0
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_macros.h
...oc-cmake/include_linux_aarch64/jemalloc/jemalloc_macros.h
+123
-0
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_protos.h
...oc-cmake/include_linux_aarch64/jemalloc/jemalloc_protos.h
+66
-0
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_typedefs.h
...-cmake/include_linux_aarch64/jemalloc/jemalloc_typedefs.h
+77
-0
libs/libcommon/cmake/find_jemalloc.cmake
libs/libcommon/cmake/find_jemalloc.cmake
+3
-3
libs/libglibc-compatibility/CMakeLists.txt
libs/libglibc-compatibility/CMakeLists.txt
+10
-2
libs/libglibc-compatibility/musl/aarch64/atomic_arch.h
libs/libglibc-compatibility/musl/aarch64/atomic_arch.h
+82
-0
libs/libglibc-compatibility/musl/aarch64/longjmp.s
libs/libglibc-compatibility/musl/aarch64/longjmp.s
+21
-0
libs/libglibc-compatibility/musl/aarch64/syscall.s
libs/libglibc-compatibility/musl/aarch64/syscall.s
+14
-0
libs/libglibc-compatibility/musl/x86_64/atomic_arch.h
libs/libglibc-compatibility/musl/x86_64/atomic_arch.h
+0
-0
libs/libglibc-compatibility/musl/x86_64/longjmp.s
libs/libglibc-compatibility/musl/x86_64/longjmp.s
+0
-0
libs/libglibc-compatibility/musl/x86_64/syscall.s
libs/libglibc-compatibility/musl/x86_64/syscall.s
+0
-0
未找到文件。
CMakeLists.txt
浏览文件 @
b6355e0d
...
...
@@ -118,16 +118,16 @@ endif ()
option
(
ENABLE_TESTS
"Enables tests"
ON
)
if
(
CMAKE_SYSTEM_PROCESSOR MATCHES
"amd64|x86_64"
)
if
(
ARCH_AMD64
)
option
(
USE_INTERNAL_MEMCPY
"Use internal implementation of 'memcpy' function instead of provided by libc. Only for x86_64."
ON
)
endif
()
if
(
OS_LINUX AND NOT UNBUNDLED AND MAKE_STATIC_LIBRARIES AND NOT SPLIT_SHARED_LIBRARIES AND CMAKE_VERSION VERSION_GREATER
"3.9.0"
)
option
(
GLIBC_COMPATIBILITY
"Set to TRUE to enable compatibility with older glibc libraries. Only for x86_64, Linux. Implies USE_INTERNAL_MEMCPY."
ON
)
endif
()
if
(
OS_LINUX AND NOT UNBUNDLED AND MAKE_STATIC_LIBRARIES AND NOT SPLIT_SHARED_LIBRARIES AND CMAKE_VERSION VERSION_GREATER
"3.9.0"
)
option
(
GLIBC_COMPATIBILITY
"Set to TRUE to enable compatibility with older glibc libraries. Only for x86_64, Linux. Implies USE_INTERNAL_MEMCPY."
ON
)
endif
()
if
(
NOT CMAKE_VERSION VERSION_GREATER
"3.9.0"
)
message
(
WARNING
"CMake version must be greater than 3.9.0 for production builds."
)
endif
()
if
(
NOT CMAKE_VERSION VERSION_GREATER
"3.9.0"
)
message
(
WARNING
"CMake version must be greater than 3.9.0 for production builds."
)
endif
()
# Make sure the final executable has symbols exported
...
...
cmake/arch.cmake
浏览文件 @
b6355e0d
if
(
CMAKE_SYSTEM_PROCESSOR MATCHES
"amd64|x86_64"
)
set
(
ARCH_AMD64 1
)
endif
()
if
(
CMAKE_SYSTEM_PROCESSOR MATCHES
"^(aarch64.*|AARCH64.*)"
)
set
(
ARCH_AARCH64 1
)
endif
()
...
...
contrib/jemalloc-cmake/CMakeLists.txt
浏览文件 @
b6355e0d
...
...
@@ -45,9 +45,15 @@ endif ()
add_library
(
jemalloc STATIC
${
SRCS
}
)
target_include_directories
(
jemalloc PUBLIC
${
CMAKE_CURRENT_SOURCE_DIR
}
/include
${
CMAKE_CURRENT_SOURCE_DIR
}
/include_linux_x86_64
)
# jemalloc.h
target_include_directories
(
jemalloc PUBLIC
${
CMAKE_CURRENT_SOURCE_DIR
}
/include
)
if
(
ARCH_AMD64
)
target_include_directories
(
jemalloc PUBLIC
${
CMAKE_CURRENT_SOURCE_DIR
}
/include_linux_x86_64
)
elseif
(
ARCH_ARM
)
target_include_directories
(
jemalloc PUBLIC
${
CMAKE_CURRENT_SOURCE_DIR
}
/include_linux_aarch64
)
else
()
message
(
FATAL_ERROR
"jemalloc can only be used on x86_64 or aarch64."
)
endif
()
target_include_directories
(
jemalloc PRIVATE
${
JEMALLOC_SOURCE_DIR
}
/include
)
...
...
contrib/jemalloc-cmake/include_linux_aarch64/README
0 → 100644
浏览文件 @
b6355e0d
Here are pre-generated files from jemalloc on Linux aarch64.
You can obtain these files by running ./autogen.sh inside jemalloc source directory.
Added #define GNU_SOURCE
Added JEMALLOC_OVERRIDE___POSIX_MEMALIGN because why not.
Removed JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF because it's non standard.
Removed JEMALLOC_PURGE_MADVISE_FREE because it's available only from Linux 4.5.
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/internal/jemalloc_internal_defs.h
0 → 100644
浏览文件 @
b6355e0d
/* include/jemalloc/internal/jemalloc_internal_defs.h. Generated from jemalloc_internal_defs.h.in by configure. */
#ifndef JEMALLOC_INTERNAL_DEFS_H_
#define JEMALLOC_INTERNAL_DEFS_H_
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
/*
* If JEMALLOC_PREFIX is defined via --with-jemalloc-prefix, it will cause all
* public APIs to be prefixed. This makes it possible, with some care, to use
* multiple allocators simultaneously.
*/
/* #undef JEMALLOC_PREFIX */
/* #undef JEMALLOC_CPREFIX */
/*
* Define overrides for non-standard allocator-related functions if they are
* present on the system.
*/
#define JEMALLOC_OVERRIDE___LIBC_CALLOC
#define JEMALLOC_OVERRIDE___LIBC_FREE
#define JEMALLOC_OVERRIDE___LIBC_MALLOC
#define JEMALLOC_OVERRIDE___LIBC_MEMALIGN
#define JEMALLOC_OVERRIDE___LIBC_REALLOC
#define JEMALLOC_OVERRIDE___LIBC_VALLOC
#define JEMALLOC_OVERRIDE___POSIX_MEMALIGN
/*
* JEMALLOC_PRIVATE_NAMESPACE is used as a prefix for all library-private APIs.
* For shared libraries, symbol visibility mechanisms prevent these symbols
* from being exported, but for static libraries, naming collisions are a real
* possibility.
*/
#define JEMALLOC_PRIVATE_NAMESPACE je_
/*
* Hyper-threaded CPUs may need a special instruction inside spin loops in
* order to yield to another virtual CPU.
*/
#define CPU_SPINWAIT
/* 1 if CPU_SPINWAIT is defined, 0 otherwise. */
#define HAVE_CPU_SPINWAIT 0
/*
* Number of significant bits in virtual addresses. This may be less than the
* total number of bits in a pointer, e.g. on x64, for which the uppermost 16
* bits are the same as bit 47.
*/
#define LG_VADDR 48
/* Defined if C11 atomics are available. */
#define JEMALLOC_C11_ATOMICS 1
/* Defined if GCC __atomic atomics are available. */
#define JEMALLOC_GCC_ATOMIC_ATOMICS 1
/* Defined if GCC __sync atomics are available. */
#define JEMALLOC_GCC_SYNC_ATOMICS 1
/*
* Defined if __sync_add_and_fetch(uint32_t *, uint32_t) and
* __sync_sub_and_fetch(uint32_t *, uint32_t) are available, despite
* __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 not being defined (which means the
* functions are defined in libgcc instead of being inlines).
*/
/* #undef JE_FORCE_SYNC_COMPARE_AND_SWAP_4 */
/*
* Defined if __sync_add_and_fetch(uint64_t *, uint64_t) and
* __sync_sub_and_fetch(uint64_t *, uint64_t) are available, despite
* __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 not being defined (which means the
* functions are defined in libgcc instead of being inlines).
*/
/* #undef JE_FORCE_SYNC_COMPARE_AND_SWAP_8 */
/*
* Defined if __builtin_clz() and __builtin_clzl() are available.
*/
#define JEMALLOC_HAVE_BUILTIN_CLZ
/*
* Defined if os_unfair_lock_*() functions are available, as provided by Darwin.
*/
/* #undef JEMALLOC_OS_UNFAIR_LOCK */
/*
* Defined if OSSpin*() functions are available, as provided by Darwin, and
* documented in the spinlock(3) manual page.
*/
/* #undef JEMALLOC_OSSPIN */
/* Defined if syscall(2) is usable. */
#define JEMALLOC_USE_SYSCALL
/*
* Defined if secure_getenv(3) is available.
*/
#define JEMALLOC_HAVE_SECURE_GETENV
/*
* Defined if issetugid(2) is available.
*/
/* #undef JEMALLOC_HAVE_ISSETUGID */
/* Defined if pthread_atfork(3) is available. */
#define JEMALLOC_HAVE_PTHREAD_ATFORK
/* Defined if pthread_setname_np(3) is available. */
#define JEMALLOC_HAVE_PTHREAD_SETNAME_NP
/*
* Defined if clock_gettime(CLOCK_MONOTONIC_COARSE, ...) is available.
*/
#define JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE 1
/*
* Defined if clock_gettime(CLOCK_MONOTONIC, ...) is available.
*/
#define JEMALLOC_HAVE_CLOCK_MONOTONIC 1
/*
* Defined if mach_absolute_time() is available.
*/
/* #undef JEMALLOC_HAVE_MACH_ABSOLUTE_TIME */
/*
* Defined if _malloc_thread_cleanup() exists. At least in the case of
* FreeBSD, pthread_key_create() allocates, which if used during malloc
* bootstrapping will cause recursion into the pthreads library. Therefore, if
* _malloc_thread_cleanup() exists, use it as the basis for thread cleanup in
* malloc_tsd.
*/
/* #undef JEMALLOC_MALLOC_THREAD_CLEANUP */
/*
* Defined if threaded initialization is known to be safe on this platform.
* Among other things, it must be possible to initialize a mutex without
* triggering allocation in order for threaded allocation to be safe.
*/
#define JEMALLOC_THREADED_INIT
/*
* Defined if the pthreads implementation defines
* _pthread_mutex_init_calloc_cb(), in which case the function is used in order
* to avoid recursive allocation during mutex initialization.
*/
/* #undef JEMALLOC_MUTEX_INIT_CB */
/* Non-empty if the tls_model attribute is supported. */
#define JEMALLOC_TLS_MODEL __attribute__((tls_model("initial-exec")))
/*
* JEMALLOC_DEBUG enables assertions and other sanity checks, and disables
* inline functions.
*/
/* #undef JEMALLOC_DEBUG */
/* JEMALLOC_STATS enables statistics calculation. */
#define JEMALLOC_STATS
/* JEMALLOC_EXPERIMENTAL_SMALLOCX_API enables experimental smallocx API. */
/* #undef JEMALLOC_EXPERIMENTAL_SMALLOCX_API */
/* JEMALLOC_PROF enables allocation profiling. */
/* #undef JEMALLOC_PROF */
/* Use libunwind for profile backtracing if defined. */
/* #undef JEMALLOC_PROF_LIBUNWIND */
/* Use libgcc for profile backtracing if defined. */
/* #undef JEMALLOC_PROF_LIBGCC */
/* Use gcc intrinsics for profile backtracing if defined. */
/* #undef JEMALLOC_PROF_GCC */
/*
* JEMALLOC_DSS enables use of sbrk(2) to allocate extents from the data storage
* segment (DSS).
*/
#define JEMALLOC_DSS
/* Support memory filling (junk/zero). */
#define JEMALLOC_FILL
/* Support utrace(2)-based tracing. */
/* #undef JEMALLOC_UTRACE */
/* Support optional abort() on OOM. */
/* #undef JEMALLOC_XMALLOC */
/* Support lazy locking (avoid locking unless a second thread is launched). */
/* #undef JEMALLOC_LAZY_LOCK */
/*
* Minimum allocation alignment is 2^LG_QUANTUM bytes (ignoring tiny size
* classes).
*/
/* #undef LG_QUANTUM */
/* One page is 2^LG_PAGE bytes. */
#define LG_PAGE 16
/*
* One huge page is 2^LG_HUGEPAGE bytes. Note that this is defined even if the
* system does not explicitly support huge pages; system calls that require
* explicit huge page support are separately configured.
*/
#define LG_HUGEPAGE 29
/*
* If defined, adjacent virtual memory mappings with identical attributes
* automatically coalesce, and they fragment when changes are made to subranges.
* This is the normal order of things for mmap()/munmap(), but on Windows
* VirtualAlloc()/VirtualFree() operations must be precisely matched, i.e.
* mappings do *not* coalesce/fragment.
*/
#define JEMALLOC_MAPS_COALESCE
/*
* If defined, retain memory for later reuse by default rather than using e.g.
* munmap() to unmap freed extents. This is enabled on 64-bit Linux because
* common sequences of mmap()/munmap() calls will cause virtual memory map
* holes.
*/
#define JEMALLOC_RETAIN
/* TLS is used to map arenas and magazine caches to threads. */
#define JEMALLOC_TLS
/*
* Used to mark unreachable code to quiet "end of non-void" compiler warnings.
* Don't use this directly; instead use unreachable() from util.h
*/
#define JEMALLOC_INTERNAL_UNREACHABLE __builtin_unreachable
/*
* ffs*() functions to use for bitmapping. Don't use these directly; instead,
* use ffs_*() from util.h.
*/
#define JEMALLOC_INTERNAL_FFSLL __builtin_ffsll
#define JEMALLOC_INTERNAL_FFSL __builtin_ffsl
#define JEMALLOC_INTERNAL_FFS __builtin_ffs
/*
* If defined, explicitly attempt to more uniformly distribute large allocation
* pointer alignments across all cache indices.
*/
#define JEMALLOC_CACHE_OBLIVIOUS
/*
* If defined, enable logging facilities. We make this a configure option to
* avoid taking extra branches everywhere.
*/
/* #undef JEMALLOC_LOG */
/*
* If defined, use readlinkat() (instead of readlink()) to follow
* /etc/malloc_conf.
*/
/* #undef JEMALLOC_READLINKAT */
/*
* Darwin (OS X) uses zones to work around Mach-O symbol override shortcomings.
*/
/* #undef JEMALLOC_ZONE */
/*
* Methods for determining whether the OS overcommits.
* JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY: Linux's
* /proc/sys/vm.overcommit_memory file.
* JEMALLOC_SYSCTL_VM_OVERCOMMIT: FreeBSD's vm.overcommit sysctl.
*/
/* #undef JEMALLOC_SYSCTL_VM_OVERCOMMIT */
#define JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY
/* Defined if madvise(2) is available. */
#define JEMALLOC_HAVE_MADVISE
/*
* Defined if transparent huge pages are supported via the MADV_[NO]HUGEPAGE
* arguments to madvise(2).
*/
#define JEMALLOC_HAVE_MADVISE_HUGE
/*
* Methods for purging unused pages differ between operating systems.
*
* madvise(..., MADV_FREE) : This marks pages as being unused, such that they
* will be discarded rather than swapped out.
* madvise(..., MADV_DONTNEED) : If JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS is
* defined, this immediately discards pages,
* such that new pages will be demand-zeroed if
* the address region is later touched;
* otherwise this behaves similarly to
* MADV_FREE, though typically with higher
* system overhead.
*/
#define JEMALLOC_PURGE_MADVISE_FREE
#define JEMALLOC_PURGE_MADVISE_DONTNEED
#define JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS
/* Defined if madvise(2) is available but MADV_FREE is not (x86 Linux only). */
/* #undef JEMALLOC_DEFINE_MADVISE_FREE */
/*
* Defined if MADV_DO[NT]DUMP is supported as an argument to madvise.
*/
#define JEMALLOC_MADVISE_DONTDUMP
/*
* Defined if transparent huge pages (THPs) are supported via the
* MADV_[NO]HUGEPAGE arguments to madvise(2), and THP support is enabled.
*/
/* #undef JEMALLOC_THP */
/* Define if operating system has alloca.h header. */
#define JEMALLOC_HAS_ALLOCA_H 1
/* C99 restrict keyword supported. */
#define JEMALLOC_HAS_RESTRICT 1
/* For use by hash code. */
/* #undef JEMALLOC_BIG_ENDIAN */
/* sizeof(int) == 2^LG_SIZEOF_INT. */
#define LG_SIZEOF_INT 2
/* sizeof(long) == 2^LG_SIZEOF_LONG. */
#define LG_SIZEOF_LONG 3
/* sizeof(long long) == 2^LG_SIZEOF_LONG_LONG. */
#define LG_SIZEOF_LONG_LONG 3
/* sizeof(intmax_t) == 2^LG_SIZEOF_INTMAX_T. */
#define LG_SIZEOF_INTMAX_T 3
/* glibc malloc hooks (__malloc_hook, __realloc_hook, __free_hook). */
#define JEMALLOC_GLIBC_MALLOC_HOOK
/* glibc memalign hook. */
#define JEMALLOC_GLIBC_MEMALIGN_HOOK
/* pthread support */
#define JEMALLOC_HAVE_PTHREAD
/* dlsym() support */
#define JEMALLOC_HAVE_DLSYM
/* Adaptive mutex support in pthreads. */
#define JEMALLOC_HAVE_PTHREAD_MUTEX_ADAPTIVE_NP
/* GNU specific sched_getcpu support */
#define JEMALLOC_HAVE_SCHED_GETCPU
/* GNU specific sched_setaffinity support */
#define JEMALLOC_HAVE_SCHED_SETAFFINITY
/*
* If defined, all the features necessary for background threads are present.
*/
#define JEMALLOC_BACKGROUND_THREAD 1
/*
* If defined, jemalloc symbols are not exported (doesn't work when
* JEMALLOC_PREFIX is not defined).
*/
/* #undef JEMALLOC_EXPORT */
/* config.malloc_conf options string. */
#define JEMALLOC_CONFIG_MALLOC_CONF ""
/* If defined, jemalloc takes the malloc/free/etc. symbol names. */
#define JEMALLOC_IS_MALLOC 1
/*
* Defined if strerror_r returns char * if _GNU_SOURCE is defined.
*/
#define JEMALLOC_STRERROR_R_RETURNS_CHAR_WITH_GNU_SOURCE
#endif
/* JEMALLOC_INTERNAL_DEFS_H_ */
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/internal/jemalloc_preamble.h
0 → 100644
浏览文件 @
b6355e0d
#ifndef JEMALLOC_PREAMBLE_H
#define JEMALLOC_PREAMBLE_H
#include "jemalloc_internal_defs.h"
#include "jemalloc/internal/jemalloc_internal_decls.h"
#ifdef JEMALLOC_UTRACE
#include <sys/ktrace.h>
#endif
#define JEMALLOC_NO_DEMANGLE
#ifdef JEMALLOC_JET
# undef JEMALLOC_IS_MALLOC
# define JEMALLOC_N(n) jet_##n
# include "jemalloc/internal/public_namespace.h"
# define JEMALLOC_NO_RENAME
# include "jemalloc/jemalloc.h"
# undef JEMALLOC_NO_RENAME
#else
# define JEMALLOC_N(n) je_##n
# include "jemalloc/jemalloc.h"
#endif
#if (defined(JEMALLOC_OSATOMIC) || defined(JEMALLOC_OSSPIN))
#include <libkern/OSAtomic.h>
#endif
#ifdef JEMALLOC_ZONE
#include <mach/mach_error.h>
#include <mach/mach_init.h>
#include <mach/vm_map.h>
#endif
#include "jemalloc/internal/jemalloc_internal_macros.h"
/*
* Note that the ordering matters here; the hook itself is name-mangled. We
* want the inclusion of hooks to happen early, so that we hook as much as
* possible.
*/
#ifndef JEMALLOC_NO_PRIVATE_NAMESPACE
# ifndef JEMALLOC_JET
# include "jemalloc/internal/private_namespace.h"
# else
# include "jemalloc/internal/private_namespace_jet.h"
# endif
#endif
#include "jemalloc/internal/test_hooks.h"
#ifdef JEMALLOC_DEFINE_MADVISE_FREE
# define JEMALLOC_MADV_FREE 8
#endif
static
const
bool
config_debug
=
#ifdef JEMALLOC_DEBUG
true
#else
false
#endif
;
static
const
bool
have_dss
=
#ifdef JEMALLOC_DSS
true
#else
false
#endif
;
static
const
bool
have_madvise_huge
=
#ifdef JEMALLOC_HAVE_MADVISE_HUGE
true
#else
false
#endif
;
static
const
bool
config_fill
=
#ifdef JEMALLOC_FILL
true
#else
false
#endif
;
static
const
bool
config_lazy_lock
=
#ifdef JEMALLOC_LAZY_LOCK
true
#else
false
#endif
;
static
const
char
*
const
config_malloc_conf
=
JEMALLOC_CONFIG_MALLOC_CONF
;
static
const
bool
config_prof
=
#ifdef JEMALLOC_PROF
true
#else
false
#endif
;
static
const
bool
config_prof_libgcc
=
#ifdef JEMALLOC_PROF_LIBGCC
true
#else
false
#endif
;
static
const
bool
config_prof_libunwind
=
#ifdef JEMALLOC_PROF_LIBUNWIND
true
#else
false
#endif
;
static
const
bool
maps_coalesce
=
#ifdef JEMALLOC_MAPS_COALESCE
true
#else
false
#endif
;
static
const
bool
config_stats
=
#ifdef JEMALLOC_STATS
true
#else
false
#endif
;
static
const
bool
config_tls
=
#ifdef JEMALLOC_TLS
true
#else
false
#endif
;
static
const
bool
config_utrace
=
#ifdef JEMALLOC_UTRACE
true
#else
false
#endif
;
static
const
bool
config_xmalloc
=
#ifdef JEMALLOC_XMALLOC
true
#else
false
#endif
;
static
const
bool
config_cache_oblivious
=
#ifdef JEMALLOC_CACHE_OBLIVIOUS
true
#else
false
#endif
;
/*
* Undocumented, for jemalloc development use only at the moment. See the note
* in jemalloc/internal/log.h.
*/
static
const
bool
config_log
=
#ifdef JEMALLOC_LOG
true
#else
false
#endif
;
#ifdef JEMALLOC_HAVE_SCHED_GETCPU
/* Currently percpu_arena depends on sched_getcpu. */
#define JEMALLOC_PERCPU_ARENA
#endif
static
const
bool
have_percpu_arena
=
#ifdef JEMALLOC_PERCPU_ARENA
true
#else
false
#endif
;
/*
* Undocumented, and not recommended; the application should take full
* responsibility for tracking provenance.
*/
static
const
bool
force_ivsalloc
=
#ifdef JEMALLOC_FORCE_IVSALLOC
true
#else
false
#endif
;
static
const
bool
have_background_thread
=
#ifdef JEMALLOC_BACKGROUND_THREAD
true
#else
false
#endif
;
#endif
/* JEMALLOC_PREAMBLE_H */
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_defs.h
0 → 100644
浏览文件 @
b6355e0d
/* include/jemalloc/jemalloc_defs.h. Generated from jemalloc_defs.h.in by configure. */
/* Defined if __attribute__((...)) syntax is supported. */
#define JEMALLOC_HAVE_ATTR
/* Defined if alloc_size attribute is supported. */
#define JEMALLOC_HAVE_ATTR_ALLOC_SIZE
/* Defined if format(printf, ...) attribute is supported. */
#define JEMALLOC_HAVE_ATTR_FORMAT_PRINTF
/*
* Define overrides for non-standard allocator-related functions if they are
* present on the system.
*/
#define JEMALLOC_OVERRIDE_MEMALIGN
#define JEMALLOC_OVERRIDE_VALLOC
/*
* At least Linux omits the "const" in:
*
* size_t malloc_usable_size(const void *ptr);
*
* Match the operating system's prototype.
*/
#define JEMALLOC_USABLE_SIZE_CONST
/*
* If defined, specify throw() for the public function prototypes when compiling
* with C++. The only justification for this is to match the prototypes that
* glibc defines.
*/
#define JEMALLOC_USE_CXX_THROW
#ifdef _MSC_VER
# ifdef _WIN64
# define LG_SIZEOF_PTR_WIN 3
# else
# define LG_SIZEOF_PTR_WIN 2
# endif
#endif
/* sizeof(void *) == 2^LG_SIZEOF_PTR. */
#define LG_SIZEOF_PTR 3
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_macros.h
0 → 100644
浏览文件 @
b6355e0d
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
#include <limits.h>
#include <strings.h>
#define JEMALLOC_VERSION "5.1.0-97-gcd2931ad9bbd78208565716ab102e86d858c2fff"
#define JEMALLOC_VERSION_MAJOR 5
#define JEMALLOC_VERSION_MINOR 1
#define JEMALLOC_VERSION_BUGFIX 0
#define JEMALLOC_VERSION_NREV 97
#define JEMALLOC_VERSION_GID "cd2931ad9bbd78208565716ab102e86d858c2fff"
#define JEMALLOC_VERSION_GID_IDENT cd2931ad9bbd78208565716ab102e86d858c2fff
#define MALLOCX_LG_ALIGN(la) ((int)(la))
#if LG_SIZEOF_PTR == 2
# define MALLOCX_ALIGN(a) ((int)(ffs((int)(a))-1))
#else
# define MALLOCX_ALIGN(a) \
((int)(((size_t)(a) < (size_t)INT_MAX) ? ffs((int)(a))-1 : \
ffs((int)(((size_t)(a))>>32))+31))
#endif
#define MALLOCX_ZERO ((int)0x40)
/*
* Bias tcache index bits so that 0 encodes "automatic tcache management", and 1
* encodes MALLOCX_TCACHE_NONE.
*/
#define MALLOCX_TCACHE(tc) ((int)(((tc)+2) << 8))
#define MALLOCX_TCACHE_NONE MALLOCX_TCACHE(-1)
/*
* Bias arena index bits so that 0 encodes "use an automatically chosen arena".
*/
#define MALLOCX_ARENA(a) ((((int)(a))+1) << 20)
/*
* Use as arena index in "arena.<i>.{purge,decay,dss}" and
* "stats.arenas.<i>.*" mallctl interfaces to select all arenas. This
* definition is intentionally specified in raw decimal format to support
* cpp-based string concatenation, e.g.
*
* #define STRINGIFY_HELPER(x) #x
* #define STRINGIFY(x) STRINGIFY_HELPER(x)
*
* mallctl("arena." STRINGIFY(MALLCTL_ARENAS_ALL) ".purge", NULL, NULL, NULL,
* 0);
*/
#define MALLCTL_ARENAS_ALL 4096
/*
* Use as arena index in "stats.arenas.<i>.*" mallctl interfaces to select
* destroyed arenas.
*/
#define MALLCTL_ARENAS_DESTROYED 4097
#if defined(__cplusplus) && defined(JEMALLOC_USE_CXX_THROW)
# define JEMALLOC_CXX_THROW throw()
#else
# define JEMALLOC_CXX_THROW
#endif
#if defined(_MSC_VER)
# define JEMALLOC_ATTR(s)
# define JEMALLOC_ALIGNED(s) __declspec(align(s))
# define JEMALLOC_ALLOC_SIZE(s)
# define JEMALLOC_ALLOC_SIZE2(s1, s2)
# ifndef JEMALLOC_EXPORT
# ifdef DLLEXPORT
# define JEMALLOC_EXPORT __declspec(dllexport)
# else
# define JEMALLOC_EXPORT __declspec(dllimport)
# endif
# endif
# define JEMALLOC_FORMAT_PRINTF(s, i)
# define JEMALLOC_NOINLINE __declspec(noinline)
# ifdef __cplusplus
# define JEMALLOC_NOTHROW __declspec(nothrow)
# else
# define JEMALLOC_NOTHROW
# endif
# define JEMALLOC_SECTION(s) __declspec(allocate(s))
# define JEMALLOC_RESTRICT_RETURN __declspec(restrict)
# if _MSC_VER >= 1900 && !defined(__EDG__)
# define JEMALLOC_ALLOCATOR __declspec(allocator)
# else
# define JEMALLOC_ALLOCATOR
# endif
#elif defined(JEMALLOC_HAVE_ATTR)
# define JEMALLOC_ATTR(s) __attribute__((s))
# define JEMALLOC_ALIGNED(s) JEMALLOC_ATTR(aligned(s))
# ifdef JEMALLOC_HAVE_ATTR_ALLOC_SIZE
# define JEMALLOC_ALLOC_SIZE(s) JEMALLOC_ATTR(alloc_size(s))
# define JEMALLOC_ALLOC_SIZE2(s1, s2) JEMALLOC_ATTR(alloc_size(s1, s2))
# else
# define JEMALLOC_ALLOC_SIZE(s)
# define JEMALLOC_ALLOC_SIZE2(s1, s2)
# endif
# ifndef JEMALLOC_EXPORT
# define JEMALLOC_EXPORT JEMALLOC_ATTR(visibility("default"))
# endif
# ifdef JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF
# define JEMALLOC_FORMAT_PRINTF(s, i) JEMALLOC_ATTR(format(gnu_printf, s, i))
# elif defined(JEMALLOC_HAVE_ATTR_FORMAT_PRINTF)
# define JEMALLOC_FORMAT_PRINTF(s, i) JEMALLOC_ATTR(format(printf, s, i))
# else
# define JEMALLOC_FORMAT_PRINTF(s, i)
# endif
# define JEMALLOC_NOINLINE JEMALLOC_ATTR(noinline)
# define JEMALLOC_NOTHROW JEMALLOC_ATTR(nothrow)
# define JEMALLOC_SECTION(s) JEMALLOC_ATTR(section(s))
# define JEMALLOC_RESTRICT_RETURN
# define JEMALLOC_ALLOCATOR
#else
# define JEMALLOC_ATTR(s)
# define JEMALLOC_ALIGNED(s)
# define JEMALLOC_ALLOC_SIZE(s)
# define JEMALLOC_ALLOC_SIZE2(s1, s2)
# define JEMALLOC_EXPORT
# define JEMALLOC_FORMAT_PRINTF(s, i)
# define JEMALLOC_NOINLINE
# define JEMALLOC_NOTHROW
# define JEMALLOC_SECTION(s)
# define JEMALLOC_RESTRICT_RETURN
# define JEMALLOC_ALLOCATOR
#endif
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_protos.h
0 → 100644
浏览文件 @
b6355e0d
/*
* The je_ prefix on the following public symbol declarations is an artifact
* of namespace management, and should be omitted in application code unless
* JEMALLOC_NO_DEMANGLE is defined (see jemalloc_mangle.h).
*/
extern
JEMALLOC_EXPORT
const
char
*
je_malloc_conf
;
extern
JEMALLOC_EXPORT
void
(
*
je_malloc_message
)(
void
*
cbopaque
,
const
char
*
s
);
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_malloc
(
size_t
size
)
JEMALLOC_CXX_THROW
JEMALLOC_ATTR
(
malloc
)
JEMALLOC_ALLOC_SIZE
(
1
);
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_calloc
(
size_t
num
,
size_t
size
)
JEMALLOC_CXX_THROW
JEMALLOC_ATTR
(
malloc
)
JEMALLOC_ALLOC_SIZE2
(
1
,
2
);
JEMALLOC_EXPORT
int
JEMALLOC_NOTHROW
je_posix_memalign
(
void
**
memptr
,
size_t
alignment
,
size_t
size
)
JEMALLOC_CXX_THROW
JEMALLOC_ATTR
(
nonnull
(
1
));
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_aligned_alloc
(
size_t
alignment
,
size_t
size
)
JEMALLOC_CXX_THROW
JEMALLOC_ATTR
(
malloc
)
JEMALLOC_ALLOC_SIZE
(
2
);
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_realloc
(
void
*
ptr
,
size_t
size
)
JEMALLOC_CXX_THROW
JEMALLOC_ALLOC_SIZE
(
2
);
JEMALLOC_EXPORT
void
JEMALLOC_NOTHROW
je_free
(
void
*
ptr
)
JEMALLOC_CXX_THROW
;
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_mallocx
(
size_t
size
,
int
flags
)
JEMALLOC_ATTR
(
malloc
)
JEMALLOC_ALLOC_SIZE
(
1
);
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_rallocx
(
void
*
ptr
,
size_t
size
,
int
flags
)
JEMALLOC_ALLOC_SIZE
(
2
);
JEMALLOC_EXPORT
size_t
JEMALLOC_NOTHROW
je_xallocx
(
void
*
ptr
,
size_t
size
,
size_t
extra
,
int
flags
);
JEMALLOC_EXPORT
size_t
JEMALLOC_NOTHROW
je_sallocx
(
const
void
*
ptr
,
int
flags
)
JEMALLOC_ATTR
(
pure
);
JEMALLOC_EXPORT
void
JEMALLOC_NOTHROW
je_dallocx
(
void
*
ptr
,
int
flags
);
JEMALLOC_EXPORT
void
JEMALLOC_NOTHROW
je_sdallocx
(
void
*
ptr
,
size_t
size
,
int
flags
);
JEMALLOC_EXPORT
size_t
JEMALLOC_NOTHROW
je_nallocx
(
size_t
size
,
int
flags
)
JEMALLOC_ATTR
(
pure
);
JEMALLOC_EXPORT
int
JEMALLOC_NOTHROW
je_mallctl
(
const
char
*
name
,
void
*
oldp
,
size_t
*
oldlenp
,
void
*
newp
,
size_t
newlen
);
JEMALLOC_EXPORT
int
JEMALLOC_NOTHROW
je_mallctlnametomib
(
const
char
*
name
,
size_t
*
mibp
,
size_t
*
miblenp
);
JEMALLOC_EXPORT
int
JEMALLOC_NOTHROW
je_mallctlbymib
(
const
size_t
*
mib
,
size_t
miblen
,
void
*
oldp
,
size_t
*
oldlenp
,
void
*
newp
,
size_t
newlen
);
JEMALLOC_EXPORT
void
JEMALLOC_NOTHROW
je_malloc_stats_print
(
void
(
*
write_cb
)(
void
*
,
const
char
*
),
void
*
je_cbopaque
,
const
char
*
opts
);
JEMALLOC_EXPORT
size_t
JEMALLOC_NOTHROW
je_malloc_usable_size
(
JEMALLOC_USABLE_SIZE_CONST
void
*
ptr
)
JEMALLOC_CXX_THROW
;
#ifdef JEMALLOC_OVERRIDE_MEMALIGN
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_memalign
(
size_t
alignment
,
size_t
size
)
JEMALLOC_CXX_THROW
JEMALLOC_ATTR
(
malloc
);
#endif
#ifdef JEMALLOC_OVERRIDE_VALLOC
JEMALLOC_EXPORT
JEMALLOC_ALLOCATOR
JEMALLOC_RESTRICT_RETURN
void
JEMALLOC_NOTHROW
*
je_valloc
(
size_t
size
)
JEMALLOC_CXX_THROW
JEMALLOC_ATTR
(
malloc
);
#endif
contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/jemalloc_typedefs.h
0 → 100644
浏览文件 @
b6355e0d
typedef
struct
extent_hooks_s
extent_hooks_t
;
/*
* void *
* extent_alloc(extent_hooks_t *extent_hooks, void *new_addr, size_t size,
* size_t alignment, bool *zero, bool *commit, unsigned arena_ind);
*/
typedef
void
*
(
extent_alloc_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
size_t
,
bool
*
,
bool
*
,
unsigned
);
/*
* bool
* extent_dalloc(extent_hooks_t *extent_hooks, void *addr, size_t size,
* bool committed, unsigned arena_ind);
*/
typedef
bool
(
extent_dalloc_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
bool
,
unsigned
);
/*
* void
* extent_destroy(extent_hooks_t *extent_hooks, void *addr, size_t size,
* bool committed, unsigned arena_ind);
*/
typedef
void
(
extent_destroy_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
bool
,
unsigned
);
/*
* bool
* extent_commit(extent_hooks_t *extent_hooks, void *addr, size_t size,
* size_t offset, size_t length, unsigned arena_ind);
*/
typedef
bool
(
extent_commit_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
size_t
,
size_t
,
unsigned
);
/*
* bool
* extent_decommit(extent_hooks_t *extent_hooks, void *addr, size_t size,
* size_t offset, size_t length, unsigned arena_ind);
*/
typedef
bool
(
extent_decommit_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
size_t
,
size_t
,
unsigned
);
/*
* bool
* extent_purge(extent_hooks_t *extent_hooks, void *addr, size_t size,
* size_t offset, size_t length, unsigned arena_ind);
*/
typedef
bool
(
extent_purge_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
size_t
,
size_t
,
unsigned
);
/*
* bool
* extent_split(extent_hooks_t *extent_hooks, void *addr, size_t size,
* size_t size_a, size_t size_b, bool committed, unsigned arena_ind);
*/
typedef
bool
(
extent_split_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
size_t
,
size_t
,
bool
,
unsigned
);
/*
* bool
* extent_merge(extent_hooks_t *extent_hooks, void *addr_a, size_t size_a,
* void *addr_b, size_t size_b, bool committed, unsigned arena_ind);
*/
typedef
bool
(
extent_merge_t
)(
extent_hooks_t
*
,
void
*
,
size_t
,
void
*
,
size_t
,
bool
,
unsigned
);
struct
extent_hooks_s
{
extent_alloc_t
*
alloc
;
extent_dalloc_t
*
dalloc
;
extent_destroy_t
*
destroy
;
extent_commit_t
*
commit
;
extent_decommit_t
*
decommit
;
extent_purge_t
*
purge_lazy
;
extent_purge_t
*
purge_forced
;
extent_split_t
*
split
;
extent_merge_t
*
merge
;
};
libs/libcommon/cmake/find_jemalloc.cmake
浏览文件 @
b6355e0d
if
(
OS_LINUX AND NOT SANITIZE AND NOT ARCH_
ARM AND NOT ARCH_
32 AND NOT ARCH_PPC64LE
)
if
(
OS_LINUX AND NOT SANITIZE AND NOT ARCH_32 AND NOT ARCH_PPC64LE
)
set
(
ENABLE_JEMALLOC_DEFAULT
${
ENABLE_LIBRARIES
}
)
else
()
set
(
ENABLE_JEMALLOC_DEFAULT 0
)
endif
()
option
(
ENABLE_JEMALLOC
"Set to TRUE to use jemalloc"
${
ENABLE_JEMALLOC_DEFAULT
}
)
if
(
OS_LINUX
AND NOT ARCH_ARM
)
if
(
OS_LINUX
)
option
(
USE_INTERNAL_JEMALLOC_LIBRARY
"Set to FALSE to use system jemalloc library instead of bundled"
${
NOT_UNBUNDLED
}
)
else
()
option
(
USE_INTERNAL_JEMALLOC_LIBRARY
"Set to FALSE to use system jemalloc library instead of bundled"
OFF
)
...
...
@@ -22,7 +22,7 @@ if (ENABLE_JEMALLOC)
find_package
(
JeMalloc
)
endif
()
if
((
NOT JEMALLOC_LIBRARIES OR NOT JEMALLOC_INCLUDE_DIR
)
AND NOT MISSING_INTERNAL_JEMALLOC_LIBRARY
AND NOT ARCH_ARM
)
if
((
NOT JEMALLOC_LIBRARIES OR NOT JEMALLOC_INCLUDE_DIR
)
AND NOT MISSING_INTERNAL_JEMALLOC_LIBRARY
)
set
(
JEMALLOC_LIBRARIES
"jemalloc"
)
set
(
JEMALLOC_INCLUDE_DIR
"
${
ClickHouse_SOURCE_DIR
}
/contrib/jemalloc-cmake/include"
"
${
ClickHouse_SOURCE_DIR
}
/contrib/jemalloc-cmake/include_linux_x86_64"
)
set
(
USE_INTERNAL_JEMALLOC_LIBRARY 1
)
...
...
libs/libglibc-compatibility/CMakeLists.txt
浏览文件 @
b6355e0d
...
...
@@ -12,7 +12,15 @@ if (GLIBC_COMPATIBILITY)
add_headers_and_sources
(
glibc_compatibility .
)
add_headers_and_sources
(
glibc_compatibility musl
)
list
(
APPEND glibc_compatibility_sources musl/syscall.s musl/longjmp.s
)
if
(
ARCH_ARM
)
list
(
APPEND glibc_compatibility_sources musl/aarch64/syscall.s musl/aarch64/longjmp.s
)
set
(
musl_arch_include_dir musl/aarch64
)
elseif
(
ARCH_AMD64
)
list
(
APPEND glibc_compatibility_sources musl/x86_64/syscall.s musl/x86_64/longjmp.s
)
set
(
musl_arch_include_dir musl/x86_64
)
else
()
message
(
FATAL_ERROR
"glibc_compatibility can only be used on x86_64 or aarch64."
)
endif
()
list
(
REMOVE_ITEM glibc_compatibility_sources musl/getentropy.c
)
if
(
HAVE_SYS_RANDOM_H
)
...
...
@@ -25,7 +33,7 @@ if (GLIBC_COMPATIBILITY)
add_library
(
glibc-compatibility STATIC
${
glibc_compatibility_sources
}
)
target_include_directories
(
glibc-compatibility PRIVATE libcxxabi
)
target_include_directories
(
glibc-compatibility PRIVATE libcxxabi
${
musl_arch_include_dir
}
)
if
(
NOT USE_STATIC_LIBRARIES AND NOT MAKE_STATIC_LIBRARIES
)
target_compile_options
(
glibc-compatibility PRIVATE -fPIC
)
...
...
libs/libglibc-compatibility/musl/aarch64/atomic_arch.h
0 → 100644
浏览文件 @
b6355e0d
#define a_ll a_ll
static
inline
int
a_ll
(
volatile
int
*
p
)
{
int
v
;
__asm__
__volatile__
(
"ldaxr %w0,%1"
:
"=r"
(
v
)
:
"Q"
(
*
p
));
return
v
;
}
#define a_sc a_sc
static
inline
int
a_sc
(
volatile
int
*
p
,
int
v
)
{
int
r
;
__asm__
__volatile__
(
"stlxr %w0,%w2,%1"
:
"=&r"
(
r
),
"=Q"
(
*
p
)
:
"r"
(
v
)
:
"memory"
);
return
!
r
;
}
#define a_barrier a_barrier
static
inline
void
a_barrier
()
{
__asm__
__volatile__
(
"dmb ish"
:
:
:
"memory"
);
}
#define a_cas a_cas
static
inline
int
a_cas
(
volatile
int
*
p
,
int
t
,
int
s
)
{
int
old
;
do
{
old
=
a_ll
(
p
);
if
(
old
!=
t
)
{
a_barrier
();
break
;
}
}
while
(
!
a_sc
(
p
,
s
));
return
old
;
}
#define a_ll_p a_ll_p
static
inline
void
*
a_ll_p
(
volatile
void
*
p
)
{
void
*
v
;
__asm__
__volatile__
(
"ldaxr %0, %1"
:
"=r"
(
v
)
:
"Q"
(
*
(
void
*
volatile
*
)
p
));
return
v
;
}
#define a_sc_p a_sc_p
static
inline
int
a_sc_p
(
volatile
int
*
p
,
void
*
v
)
{
int
r
;
__asm__
__volatile__
(
"stlxr %w0,%2,%1"
:
"=&r"
(
r
),
"=Q"
(
*
(
void
*
volatile
*
)
p
)
:
"r"
(
v
)
:
"memory"
);
return
!
r
;
}
#define a_cas_p a_cas_p
static
inline
void
*
a_cas_p
(
volatile
void
*
p
,
void
*
t
,
void
*
s
)
{
void
*
old
;
do
{
old
=
a_ll_p
(
p
);
if
(
old
!=
t
)
{
a_barrier
();
break
;
}
}
while
(
!
a_sc_p
(
p
,
s
));
return
old
;
}
#define a_ctz_64 a_ctz_64
static
inline
int
a_ctz_64
(
uint64_t
x
)
{
__asm__
(
" rbit %0, %1
\n
"
" clz %0, %0
\n
"
:
"=r"
(
x
)
:
"r"
(
x
));
return
x
;
}
#define a_clz_64 a_clz_64
static
inline
int
a_clz_64
(
uint64_t
x
)
{
__asm__
(
"clz %0, %1"
:
"=r"
(
x
)
:
"r"
(
x
));
return
x
;
}
libs/libglibc-compatibility/musl/aarch64/longjmp.s
0 → 100644
浏览文件 @
b6355e0d
.
global
musl_glibc_longjmp
.
type
musl_glibc_longjmp
,@
function
musl_glibc_longjmp
:
//
IHI0055B_aapcs64
.
pdf
5
.1.1
,
5
.1.2
callee
saved
registers
ldp
x19
,
x20
,
[
x0
,#
0
]
ldp
x21
,
x22
,
[
x0
,#
16
]
ldp
x23
,
x24
,
[
x0
,#
32
]
ldp
x25
,
x26
,
[
x0
,#
48
]
ldp
x27
,
x28
,
[
x0
,#
64
]
ldp
x29
,
x30
,
[
x0
,#
80
]
ldr
x2
,
[
x0
,#
104
]
mov
sp
,
x2
ldp
d8
,
d9
,
[
x0
,#
112
]
ldp
d10
,
d11
,
[
x0
,#
128
]
ldp
d12
,
d13
,
[
x0
,#
144
]
ldp
d14
,
d15
,
[
x0
,#
160
]
mov
x0
,
x1
cbnz
x1
,
1
f
mov
x0
,
#
1
1
:
br
x30
libs/libglibc-compatibility/musl/aarch64/syscall.s
0 → 100644
浏览文件 @
b6355e0d
.
global
__syscall
.
hidden
__syscall
.
type
__syscall
,%
function
__syscall
:
uxtw
x8
,
w0
mov
x0
,
x1
mov
x1
,
x2
mov
x2
,
x3
mov
x3
,
x4
mov
x4
,
x5
mov
x5
,
x6
mov
x6
,
x7
svc
0
ret
libs/libglibc-compatibility/musl/atomic_arch.h
→
libs/libglibc-compatibility/musl/
x86_64/
atomic_arch.h
浏览文件 @
b6355e0d
文件已移动
libs/libglibc-compatibility/musl/longjmp.s
→
libs/libglibc-compatibility/musl/
x86_64/
longjmp.s
浏览文件 @
b6355e0d
文件已移动
libs/libglibc-compatibility/musl/syscall.s
→
libs/libglibc-compatibility/musl/
x86_64/
syscall.s
浏览文件 @
b6355e0d
文件已移动
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录