Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
e69ae844
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看板
提交
e69ae844
编写于
7月 20, 2013
作者:
R
Rich Felker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add support for init_array/fini_array ctors/dtors to dynamic linker
上级
ce8a9957
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
2 deletion
+13
-2
src/ldso/dynlink.c
src/ldso/dynlink.c
+13
-2
未找到文件。
src/ldso/dynlink.c
浏览文件 @
e69ae844
...
@@ -696,7 +696,13 @@ static void do_fini()
...
@@ -696,7 +696,13 @@ static void do_fini()
for
(
p
=
fini_head
;
p
;
p
=
p
->
fini_next
)
{
for
(
p
=
fini_head
;
p
;
p
=
p
->
fini_next
)
{
if
(
!
p
->
constructed
)
continue
;
if
(
!
p
->
constructed
)
continue
;
decode_vec
(
p
->
dynv
,
dyn
,
DYN_CNT
);
decode_vec
(
p
->
dynv
,
dyn
,
DYN_CNT
);
((
void
(
*
)(
void
))(
p
->
base
+
dyn
[
DT_FINI
]))();
if
(
dyn
[
0
]
&
(
1
<<
DT_FINI_ARRAY
))
{
size_t
n
=
dyn
[
DT_FINI_ARRAYSZ
]
/
sizeof
(
size_t
);
size_t
*
fn
=
(
void
*
)(
p
->
base
+
dyn
[
DT_FINI_ARRAY
]);
while
(
n
--
)
((
void
(
*
)(
void
))
*
fn
++
)();
}
if
(
dyn
[
0
]
&
(
1
<<
DT_FINI
))
((
void
(
*
)(
void
))(
p
->
base
+
dyn
[
DT_FINI
]))();
}
}
}
}
...
@@ -712,12 +718,17 @@ static void do_init_fini(struct dso *p)
...
@@ -712,12 +718,17 @@ static void do_init_fini(struct dso *p)
if
(
p
->
constructed
)
continue
;
if
(
p
->
constructed
)
continue
;
p
->
constructed
=
1
;
p
->
constructed
=
1
;
decode_vec
(
p
->
dynv
,
dyn
,
DYN_CNT
);
decode_vec
(
p
->
dynv
,
dyn
,
DYN_CNT
);
if
(
dyn
[
0
]
&
(
1
<<
DT_FINI
))
{
if
(
dyn
[
0
]
&
(
(
1
<<
DT_FINI
)
|
(
1
<<
DT_FINI_ARRAY
)
))
{
p
->
fini_next
=
fini_head
;
p
->
fini_next
=
fini_head
;
fini_head
=
p
;
fini_head
=
p
;
}
}
if
(
dyn
[
0
]
&
(
1
<<
DT_INIT
))
if
(
dyn
[
0
]
&
(
1
<<
DT_INIT
))
((
void
(
*
)(
void
))(
p
->
base
+
dyn
[
DT_INIT
]))();
((
void
(
*
)(
void
))(
p
->
base
+
dyn
[
DT_INIT
]))();
if
(
dyn
[
0
]
&
(
1
<<
DT_INIT_ARRAY
))
{
size_t
n
=
dyn
[
DT_INIT_ARRAYSZ
]
/
sizeof
(
size_t
);
size_t
*
fn
=
(
void
*
)(
p
->
base
+
dyn
[
DT_INIT_ARRAY
]);
while
(
n
--
)
((
void
(
*
)(
void
))
*
fn
++
)();
}
if
(
!
need_locking
&&
libc
.
threads_minus_1
)
{
if
(
!
need_locking
&&
libc
.
threads_minus_1
)
{
need_locking
=
1
;
need_locking
=
1
;
pthread_mutex_lock
(
&
init_fini_lock
);
pthread_mutex_lock
(
&
init_fini_lock
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录