Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
687fc70e
T
Third Party Musl
项目概览
OpenHarmony
/
Third Party Musl
接近 2 年 前同步成功
通知
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看板
未验证
提交
687fc70e
编写于
12月 07, 2022
作者:
O
openharmony_ci
提交者:
Gitee
12月 07, 2022
浏览文件
操作
浏览文件
下载
差异文件
!728 Optimize hash filter performance
Merge pull request !728 from yinchuang/optimize_hash
上级
d294125f
4ade55af
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
11 addition
and
15 deletion
+11
-15
porting/linux/user/ldso/dynlink.c
porting/linux/user/ldso/dynlink.c
+11
-15
未找到文件。
porting/linux/user/ldso/dynlink.c
浏览文件 @
687fc70e
...
...
@@ -44,6 +44,12 @@ static void error(const char *, ...);
#define MAXP2(a,b) (-(-(a)&-(b)))
#define ALIGN(x,y) ((x)+(y)-1 & -(y))
#define GNU_HASH_FILTER(ght, ghm, gho) \
const size_t *bloomwords = (const void *)(ght+4); \
size_t f = bloomwords[gho & (ght[2]-1)]; \
if (!(f & ghm)) continue; \
f >>= (gh >> ght[3]) % (8 * sizeof f); \
if (!(f & 1)) continue;
#define container_of(p,t,m) ((t*)((char *)(p)-offsetof(t,m)))
#define countof(a) ((sizeof (a))/(sizeof (a)[0]))
...
...
@@ -644,19 +650,6 @@ static Sym *gnu_lookup(struct sym_info_pair s_info_p, uint32_t *hashtab, struct
return
0
;
}
static
Sym
*
gnu_lookup_filtered
(
struct
sym_info_pair
s_info_p
,
uint32_t
*
hashtab
,
struct
dso
*
dso
,
struct
verinfo
*
verinfo
,
uint32_t
fofs
,
size_t
fmask
)
{
uint32_t
h1
=
s_info_p
.
sym_h
;
const
size_t
*
bloomwords
=
(
const
void
*
)(
hashtab
+
4
);
size_t
f
=
bloomwords
[
fofs
&
(
hashtab
[
2
]
-
1
)];
if
(
!
(
f
&
fmask
))
return
0
;
f
>>=
(
h1
>>
hashtab
[
3
])
%
(
8
*
sizeof
f
);
if
(
!
(
f
&
1
))
return
0
;
return
gnu_lookup
(
s_info_p
,
hashtab
,
dso
,
verinfo
);
}
static
bool
check_sym_accessible
(
struct
dso
*
dso
,
ns_t
*
ns
)
{
if
(
!
dso
||
!
dso
->
namespace
||
!
ns
)
{
...
...
@@ -800,11 +793,13 @@ static inline struct symdef find_sym2(struct dso *dso, struct verinfo *verinfo,
continue
;
}
if
((
ght
=
dso
->
ghashtab
))
{
sym
=
gnu_lookup_filtered
(
s_info_p
,
ght
,
dso
,
verinfo
,
gho
,
ghm
);
GNU_HASH_FILTER
(
ght
,
ghm
,
gho
)
sym
=
gnu_lookup
(
s_info_p
,
ght
,
dso
,
verinfo
);
}
else
{
if
(
!
h
)
s_info_p
=
sysv_hash
(
verinfo
->
s
);
sym
=
sysv_lookup
(
verinfo
,
s_info_p
,
dso
);
}
if
(
!
sym
)
continue
;
if
(
!
sym
->
st_shndx
)
if
(
need_def
||
(
sym
->
st_info
&
0xf
)
==
STT_TLS
...
...
@@ -836,7 +831,8 @@ static inline struct symdef find_sym_by_saved_so_list(
dso_searching
=
dso_relocating
->
reloc_can_search_dso_list
[
i
];
Sym
*
sym
;
if
((
ght
=
dso_searching
->
ghashtab
))
{
sym
=
gnu_lookup_filtered
(
s_info_p
,
ght
,
dso_searching
,
verinfo
,
gho
,
ghm
);
GNU_HASH_FILTER
(
ght
,
ghm
,
gho
)
sym
=
gnu_lookup
(
s_info_p
,
ght
,
dso_searching
,
verinfo
);
}
else
{
if
(
!
h
)
s_info_p
=
sysv_hash
(
verinfo
->
s
);
sym
=
sysv_lookup
(
verinfo
,
s_info_p
,
dso_searching
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录