未验证 提交 b82ff235 编写于 作者: O openharmony_ci 提交者: Gitee

!473 规避dlclose中删除tls的问题

Merge pull request !473 from dhy308/gl-fix_dlclose_tls
...@@ -3124,6 +3124,11 @@ static int do_dlclose(struct dso *p) ...@@ -3124,6 +3124,11 @@ static int do_dlclose(struct dso *p)
d->fini_next = p->fini_next; d->fini_next = p->fini_next;
} }
/* empty tls image */
if (p->tls.size != 0) {
p->tls.image = NULL;
}
/* remove dso from global dso list */ /* remove dso from global dso list */
if (p == tail) { if (p == tail) {
tail = p->prev; tail = p->prev;
...@@ -3146,10 +3151,14 @@ static int do_dlclose(struct dso *p) ...@@ -3146,10 +3151,14 @@ static int do_dlclose(struct dso *p)
if (p->deps != no_deps) if (p->deps != no_deps)
internal_free(p->deps); internal_free(p->deps);
unmap_library(p); unmap_library(p);
if (p->parents) { if (p->parents) {
internal_free(p->parents); internal_free(p->parents);
} }
internal_free(p);
if (p->tls.size == 0) {
internal_free(p);
}
return 0; return 0;
} }
......
...@@ -52,7 +52,9 @@ void *__copy_tls(unsigned char *mem) ...@@ -52,7 +52,9 @@ void *__copy_tls(unsigned char *mem)
for (i=1, p=libc.tls_head; p; i++, p=p->next) { for (i=1, p=libc.tls_head; p; i++, p=p->next) {
dtv[i] = (uintptr_t)(mem + p->offset) + DTP_OFFSET; dtv[i] = (uintptr_t)(mem + p->offset) + DTP_OFFSET;
memcpy(mem + p->offset, p->image, p->len); if (p->image) {
memcpy(mem + p->offset, p->image, p->len);
}
} }
#else #else
dtv = (uintptr_t *)mem; dtv = (uintptr_t *)mem;
...@@ -63,7 +65,9 @@ void *__copy_tls(unsigned char *mem) ...@@ -63,7 +65,9 @@ void *__copy_tls(unsigned char *mem)
for (i=1, p=libc.tls_head; p; i++, p=p->next) { for (i=1, p=libc.tls_head; p; i++, p=p->next) {
dtv[i] = (uintptr_t)(mem - p->offset) + DTP_OFFSET; dtv[i] = (uintptr_t)(mem - p->offset) + DTP_OFFSET;
memcpy(mem - p->offset, p->image, p->len); if (p->image) {
memcpy(mem - p->offset, p->image, p->len);
}
} }
#endif #endif
dtv[0] = libc.tls_cnt; dtv[0] = libc.tls_cnt;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册