Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
9836671d
T
Third Party Musl
项目概览
OpenHarmony
/
Third Party Musl
大约 1 年 前同步成功
通知
37
Star
125
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Musl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
9836671d
编写于
12月 29, 2022
作者:
O
openharmony_ci
提交者:
Gitee
12月 29, 2022
浏览文件
操作
浏览文件
下载
差异文件
!764 add dfx interfaces for jemalloc
Merge pull request !764 from 陈杰/je-dfx-trunk
上级
d7b1cb8c
0ed18374
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
68 addition
and
5 deletion
+68
-5
musl_config.gni
musl_config.gni
+1
-0
musl_template.gni
musl_template.gni
+3
-0
porting/linux/user/include/malloc.h
porting/linux/user/include/malloc.h
+11
-0
porting/linux/user/src/hook/malloc_common.c
porting/linux/user/src/hook/malloc_common.c
+10
-0
porting/linux/user/src/malloc/malloc.c
porting/linux/user/src/malloc/malloc.c
+23
-3
porting/linux/user/src/malloc/stats.c
porting/linux/user/src/malloc/stats.c
+20
-2
未找到文件。
musl_config.gni
浏览文件 @
9836671d
...
...
@@ -35,6 +35,7 @@ declare_args() {
"//prebuilts/clang/ohos/linux-x86_64/llvm/lib/clang/12.0.1/lib"
user_custom_libc = true
use_jemalloc = false
use_jemalloc_dfx_intf = false
musl_ported_dir = "intermidiates/${musl_target_os}/musl_src_ported"
musl_inc_out_dir = "usr/include/${musl_target_triple}"
uapi_dir = "//kernel/linux/patches/linux-5.10/prebuilts/usr/include"
...
...
musl_template.gni
浏览文件 @
9836671d
...
...
@@ -534,6 +534,9 @@ template("musl_libs") {
if (use_jemalloc) {
defines += [ "USE_JEMALLOC" ]
if (use_jemalloc_dfx_intf) {
defines += [ "USE_JEMALLOC_DFX_INTF" ]
}
include_dirs = [ "//third_party/jemalloc/include/jemalloc" ]
}
...
...
porting/linux/user/include/malloc.h
浏览文件 @
9836671d
...
...
@@ -49,6 +49,17 @@ void malloc_enable(void);
int
malloc_info
(
int
options
,
FILE
*
fp
);
void
malloc_stats_print
(
void
(
*
write_cb
)
(
void
*
,
const
char
*
),
void
*
cbopaque
,
const
char
*
opts
);
#define M_SET_THREAD_CACHE -1001
#define M_THREAD_CACHE_ENABLE 1
#define M_THREAD_CACHE_DISABLE 0
#define M_FLUSH_THREAD_CACHE -1002
#define M_DELAYED_FREE -1003
#define M_DELAYED_FREE_ENABLE 1
#define M_DELAYED_FREE_DISABLE 0
int
mallopt
(
int
param
,
int
value
);
ssize_t
malloc_backtrace
(
void
*
pointer
,
uintptr_t
*
frames
,
size_t
frame_count
);
...
...
porting/linux/user/src/hook/malloc_common.c
浏览文件 @
9836671d
...
...
@@ -80,4 +80,14 @@ size_t malloc_usable_size(void* addr)
return
MuslMalloc
(
malloc_usable_size
)(
addr
);
}
}
int
mallopt
(
int
param
,
int
value
)
{
volatile
const
struct
MallocDispatchType
*
dispatch_table
=
get_current_dispatch_table
();
if
(
__predict_false
(
dispatch_table
!=
NULL
))
{
return
dispatch_table
->
mallopt
(
param
,
value
);
}
else
{
return
MuslMalloc
(
mallopt
)(
param
,
value
);
}
}
#endif
porting/linux/user/src/malloc/malloc.c
浏览文件 @
9836671d
...
...
@@ -17,6 +17,13 @@ extern void* je_malloc(size_t size);
extern
void
*
je_calloc
(
size_t
count
,
size_t
size
);
extern
void
*
je_realloc
(
void
*
p
,
size_t
newsize
);
extern
void
je_free
(
void
*
p
);
#ifdef USE_JEMALLOC_DFX_INTF
extern
void
je_malloc_disable
();
extern
void
je_malloc_enable
();
extern
int
je_iterate
(
uintptr_t
base
,
size_t
size
,
void
(
*
callback
)(
uintptr_t
ptr
,
size_t
size
,
void
*
arg
),
void
*
arg
);
extern
int
je_mallopt
(
int
param
,
int
value
);
#endif
#endif
#if defined(__GNUC__) && defined(__PIC__)
...
...
@@ -159,7 +166,9 @@ void __pop_chunk(struct chunk *c)
void
malloc_disable
(
void
)
{
#ifdef MUSL_ITERATE_AND_STATS_API
#ifdef USE_JEMALLOC_DFX_INTF
je_malloc_disable
();
#elif defined(MUSL_ITERATE_AND_STATS_API)
lock
(
mal
.
free_lock
);
lock
(
total_heap_space_inc_lock
);
for
(
size_t
i
=
0
;
i
<
BINS_COUNT
;
++
i
)
{
...
...
@@ -173,7 +182,9 @@ void malloc_disable(void)
void
malloc_enable
(
void
)
{
#ifdef MUSL_ITERATE_AND_STATS_API
#ifdef USE_JEMALLOC_DFX_INTF
je_malloc_enable
();
#elif defined(MUSL_ITERATE_AND_STATS_API)
for
(
size_t
i
=
0
;
i
<
OCCUPIED_BIN_COUNT
;
++
i
)
{
unlock
(
mal
.
occupied_bins
[
i
].
lock
);
}
...
...
@@ -211,7 +222,9 @@ static void malloc_iterate_occupied_bin(occupied_bin_t *occupied_bin, iterate_in
int
malloc_iterate
(
void
*
base
,
size_t
size
,
void
(
*
callback
)(
void
*
base
,
size_t
size
,
void
*
arg
),
void
*
arg
)
{
#ifdef MUSL_ITERATE_AND_STATS_API
#ifdef USE_JEMALLOC_DFX_INTF
return
je_iterate
(
base
,
size
,
callback
,
arg
);
#elif defined(MUSL_ITERATE_AND_STATS_API)
uintptr_t
ptr
=
(
uintptr_t
)
base
;
uintptr_t
end_ptr
=
ptr
+
size
;
iterate_info_t
iterate_info
=
{
ptr
,
end_ptr
,
callback
,
arg
};
...
...
@@ -1303,8 +1316,15 @@ void __malloc_donate(char *start, char *end)
#endif
}
#ifdef HOOK_ENABLE
int
__libc_mallopt
(
int
param
,
int
value
)
#else
int
mallopt
(
int
param
,
int
value
)
#endif
{
#ifdef USE_JEMALLOC_DFX_INTF
return
je_mallopt
(
int
param
,
int
value
);
#endif
return
0
;
}
...
...
porting/linux/user/src/malloc/stats.c
浏览文件 @
9836671d
...
...
@@ -231,9 +231,17 @@ int malloc_info(int options, FILE* fp)
return
0
;
}
#ifdef USE_JEMALLOC_DFX_INTF
extern
struct
mallinfo
je_mallinfo
();
extern
je_malloc_stats_print
(
void
(
*
write_cb
)(
void
*
,
const
char
*
),
void
*
cbopaque
,
const
char
*
opts
);
#endif
void
malloc_stats_print
(
void
(
*
write_cb
)
(
void
*
,
const
char
*
),
void
*
cbopaque
,
const
char
*
opts
)
{
#ifdef MUSL_ITERATE_AND_STATS_API
#ifdef USE_JEMALLOC_DFX_INTF
je_malloc_stats_print
(
write_cb
,
cbopaque
,
opts
);
#elif defined(MUSL_ITERATE_AND_STATS_API)
malloc_disable
();
stat_printf
(
write_cb
,
...
...
@@ -252,7 +260,17 @@ void malloc_stats_print(void (*write_cb) (void *, const char *), void *cbopaque,
struct
mallinfo2
mallinfo2
(
void
)
{
#ifdef MUSL_ITERATE_AND_STATS_API
#ifdef USE_JEMALLOC_DFX_INTF
struct
mallinfo
info
=
je_mallinfo
();
struct
mallinfo2
res
=
{
.
hblks
=
info
.
hblks
,
.
hblkhd
=
info
.
hblkhd
,
.
usmblks
=
info
.
usmblks
,
.
uordblks
=
info
.
uordblks
,
.
fordblks
=
info
.
fordblks
,
};
return
res
;
#elif defined(MUSL_ITERATE_AND_STATS_API)
malloc_disable
();
malloc_stats_t
shared_stats
=
{
0
,
0
,
0
,
0
};
for
(
size_t
i
=
0
;
i
<
OCCUPIED_BIN_COUNT
;
++
i
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录