Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
6a2eaa3c
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看板
提交
6a2eaa3c
编写于
10月 06, 2012
作者:
R
Rich Felker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix buggy TLS size/alignment computations in static-linked TLS
上级
bd17431a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
5 deletion
+22
-5
src/env/__init_tls.c
src/env/__init_tls.c
+22
-5
未找到文件。
src/env/__init_tls.c
浏览文件 @
6a2eaa3c
...
...
@@ -11,10 +11,23 @@ static size_t len, size, align;
void
*
__copy_tls
(
unsigned
char
*
mem
)
{
mem
+=
-
size
&
(
4
*
sizeof
(
size_t
)
-
1
);
mem
+=
((
uintptr_t
)
image
-
(
uintptr_t
)
mem
)
&
(
align
-
1
);
pthread_t
td
;
if
(
!
image
)
return
mem
;
void
**
dtv
=
(
void
*
)
mem
;
dtv
[
0
]
=
(
void
*
)
1
;
mem
+=
__libc
.
tls_size
-
sizeof
(
struct
pthread
);
mem
-=
(
uintptr_t
)
mem
&
(
align
-
1
);
td
=
(
pthread_t
)
mem
;
td
->
dtv
=
dtv
;
mem
-=
size
;
dtv
[
1
]
=
mem
;
memcpy
(
mem
,
image
,
len
);
return
mem
+
size
;
return
td
;
}
void
*
__tls_get_addr
(
size_t
*
v
)
{
return
(
char
*
)
__pthread_self
()
->
dtv
[
1
]
+
v
[
1
];
}
static
void
*
simple
(
void
*
p
)
...
...
@@ -54,12 +67,16 @@ void __init_tls(size_t *auxv)
}
if
(
!
tls_phdr
)
return
;
libc
.
tls_size
=
size
+
align
+
8
*
sizeof
(
size_t
)
+
sizeof
(
struct
pthread
);
image
=
(
void
*
)(
base
+
tls_phdr
->
p_vaddr
);
len
=
tls_phdr
->
p_filesz
;
size
=
tls_phdr
->
p_memsz
;
align
=
tls_phdr
->
p_align
;
size
+=
(
-
size
-
(
uintptr_t
)
image
)
&
(
align
-
1
);
if
(
align
<
4
*
sizeof
(
size_t
))
align
=
4
*
sizeof
(
size_t
);
libc
.
tls_size
=
2
*
sizeof
(
void
*
)
+
size
+
align
+
sizeof
(
struct
pthread
);
mem
=
__mmap
(
0
,
libc
.
tls_size
,
PROT_READ
|
PROT_WRITE
,
MAP_ANONYMOUS
|
MAP_PRIVATE
,
-
1
,
0
);
if
(
mem
==
MAP_FAILED
)
a_crash
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录