Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
afd3a3b7
T
Third Party Musl
项目概览
OpenHarmony
/
Third Party Musl
9 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
afd3a3b7
编写于
2月 07, 2023
作者:
O
openharmony_ci
提交者:
Gitee
2月 07, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
回退 'Pull Request !789 : hook upload'
上级
3a2f6ceb
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
26 addition
and
53 deletion
+26
-53
musl_template.gni
musl_template.gni
+0
-7
porting/linux/user/src/hook/malloc_common.c
porting/linux/user/src/hook/malloc_common.c
+11
-29
porting/linux/user/src/hook/musl_malloc.h
porting/linux/user/src/hook/musl_malloc.h
+2
-9
porting/linux/user/src/hook/musl_preinit.c
porting/linux/user/src/hook/musl_preinit.c
+2
-2
porting/linux/user/src/hook/musl_preinit_common.c
porting/linux/user/src/hook/musl_preinit_common.c
+2
-2
porting/linux/user/src/malloc/malloc.c
porting/linux/user/src/malloc/malloc.c
+9
-4
未找到文件。
musl_template.gni
浏览文件 @
afd3a3b7
...
...
@@ -730,13 +730,6 @@ template("musl_libs") {
"//build/config/compiler:compiler",
":soft_hook",
]
cflags = [
"-mllvm",
"--instcombine-max-iterations=0",
"-ffp-contract=fast",
"-O3",
]
}
source_set("soft_musl_jemalloc") {
...
...
porting/linux/user/src/hook/malloc_common.c
浏览文件 @
afd3a3b7
...
...
@@ -9,44 +9,26 @@
void
*
malloc
(
size_t
bytes
)
{
struct
MallocDispatchType
*
dispatch_table
=
(
struct
MallocDispatchType
*
)
atomic_load_explicit
(
&
__musl_libc_globals
.
current_dispatch_table
,
memory_order_acquire
);
volatile
const
struct
MallocDispatchType
*
dispatch_table
=
get_current_dispatch_table
();
if
(
__predict_false
(
dispatch_table
!=
NULL
))
{
if
(
__get_memleak_hook_flag
())
{
return
dispatch_table
->
malloc
(
bytes
);
}
if
(
!
__get_global_hook_flag
())
{
return
MuslFunc
(
malloc
)(
bytes
);
}
if
(
!
__get_hook_flag
())
{
return
MuslFunc
(
malloc
)(
bytes
);
}
return
dispatch_table
->
malloc
(
bytes
);
void
*
ret
=
dispatch_table
->
malloc
(
bytes
);
return
ret
;
}
void
*
result
=
MuslMalloc
(
malloc
)(
bytes
);
if
(
__predict_false
(
result
==
NULL
))
{
//__musl_log(__MUSL_LOG_WARN, "malloc(%zu) failed: returning null pointer\n", bytes);
}
return
MuslFunc
(
malloc
)(
bytes
)
;
return
result
;
}
void
free
(
void
*
mem
)
{
struct
MallocDispatchType
*
dispatch_table
=
(
struct
MallocDispatchType
*
)
atomic_load_explicit
(
&
__musl_libc_globals
.
current_dispatch_table
,
memory_order_acquire
);
volatile
const
struct
MallocDispatchType
*
dispatch_table
=
get_current_dispatch_table
();
if
(
__predict_false
(
dispatch_table
!=
NULL
))
{
if
(
__get_memleak_hook_flag
())
{
dispatch_table
->
free
(
mem
);
return
;
}
if
(
!
__get_global_hook_flag
())
{
MuslFunc
(
free
)(
mem
);
return
;
}
if
(
!
__get_hook_flag
())
{
MuslFunc
(
free
)(
mem
);
return
;
}
dispatch_table
->
free
(
mem
);
return
;
}
else
{
MuslMalloc
(
free
)(
mem
);
}
MuslFunc
(
free
)(
mem
);
}
void
*
mmap
(
void
*
addr
,
size_t
length
,
int
prot
,
int
flags
,
int
fd
,
off_t
offset
)
...
...
porting/linux/user/src/hook/musl_malloc.h
浏览文件 @
afd3a3b7
...
...
@@ -13,19 +13,12 @@ extern "C" {
#define MuslMalloc(func) func
#endif
#ifdef USE_JEMALLOC
#define MuslFunc(func) je_ ## func
#else
#define MuslFunc(func) internal_ ## func
#endif
extern
void
*
internal_malloc
(
size_t
);
extern
void
internal_free
(
void
*
);
void
*
__libc_mmap
(
void
*
,
size_t
,
int
,
int
,
int
,
off_t
);
int
__libc_munmap
(
void
*
,
size_t
);
void
*
__libc_malloc
(
size_t
);
void
*
__libc_calloc
(
size_t
,
size_t
);
void
*
__libc_realloc
(
void
*
,
size_t
);
void
__libc_free
(
void
*
);
void
*
__libc_valloc
(
size_t
);
void
*
__libc_memalign
(
size_t
,
size_t
);
size_t
__libc_malloc_usable_size
(
void
*
);
...
...
porting/linux/user/src/hook/musl_preinit.c
浏览文件 @
afd3a3b7
...
...
@@ -40,7 +40,7 @@ void* ohos_malloc_hook_init_function(size_t bytes);
static
struct
MallocDispatchType
__ohos_malloc_hook_init_dispatch
=
{
.
malloc
=
ohos_malloc_hook_init_function
,
.
free
=
Musl
Fun
c
(
free
),
.
free
=
Musl
Mallo
c
(
free
),
.
mmap
=
MuslMalloc
(
mmap
),
.
munmap
=
MuslMalloc
(
munmap
),
.
calloc
=
MuslMalloc
(
calloc
),
...
...
@@ -459,7 +459,7 @@ void* ohos_malloc_hook_init_function(size_t bytes)
// __musl_log(__MUSL_LOG_ERROR, "%s: ohos_malloc_hook: failed to pthread_detach\n", getprogname());
}
}
void
*
ptr
=
Musl
Fun
c
(
malloc
)(
bytes
);
void
*
ptr
=
Musl
Mallo
c
(
malloc
)(
bytes
);
return
ptr
;
}
...
...
porting/linux/user/src/hook/musl_preinit_common.c
浏览文件 @
afd3a3b7
...
...
@@ -8,8 +8,8 @@
struct
musl_libc_globals
__musl_libc_globals
;
struct
MallocDispatchType
__libc_malloc_default_dispatch
=
{
.
malloc
=
Musl
Fun
c
(
malloc
),
.
free
=
Musl
Fun
c
(
free
),
.
malloc
=
Musl
Mallo
c
(
malloc
),
.
free
=
Musl
Mallo
c
(
free
),
.
mmap
=
MuslMalloc
(
mmap
),
.
munmap
=
MuslMalloc
(
munmap
),
.
calloc
=
MuslMalloc
(
calloc
),
...
...
porting/linux/user/src/malloc/malloc.c
浏览文件 @
afd3a3b7
...
...
@@ -30,6 +30,11 @@ extern int je_mallopt(int param, int value);
#define inline inline __attribute__((always_inline))
#endif
#ifdef HOOK_ENABLE
void
*
__libc_malloc
(
size_t
);
void
__libc_free
(
void
*
p
);
#endif
static
struct
{
volatile
uint64_t
binmap
;
struct
bin
bins
[
BINS_COUNT
];
...
...
@@ -623,16 +628,16 @@ static void trim(struct chunk *self, size_t n)
}
#ifdef HOOK_ENABLE
void
*
__libc_malloc
(
size_t
n
)
#else
void
*
malloc
(
size_t
n
)
#endif
{
#ifdef USE_JEMALLOC
return
je_malloc
(
n
);
#endif
return
internal_malloc
(
n
);
}
#endif
void
*
internal_malloc
(
size_t
n
)
{
...
...
@@ -1240,16 +1245,16 @@ static void quarantine_bin(struct chunk *self)
#endif
#ifdef HOOK_ENABLE
void
__libc_free
(
void
*
p
)
#else
void
free
(
void
*
p
)
#endif
{
#ifdef USE_JEMALLOC
return
je_free
(
p
);
#endif
return
internal_free
(
p
);
}
#endif
void
internal_free
(
void
*
p
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录