summaryrefslogtreecommitdiff
path: root/src/thread
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread')
-rw-r--r--src/thread/i386/__unmapself.s9
-rw-r--r--src/thread/pthread_create.c2
-rw-r--r--src/thread/x86_64/__unmapself.s13
3 files changed, 2 insertions, 22 deletions
diff --git a/src/thread/i386/__unmapself.s b/src/thread/i386/__unmapself.s
index 5c674966..bcf6e7fe 100644
--- a/src/thread/i386/__unmapself.s
+++ b/src/thread/i386/__unmapself.s
@@ -2,15 +2,6 @@
.global __unmapself
.type __unmapself,%function
__unmapself:
- call 1f
- .long -1
- .long -1
-1: popl %ecx
- xorl %ebx,%ebx
- xorl %edx,%edx
- movl $8,%esi
- movl $175,%eax
- int $128
movl $91,%eax
movl 4(%esp),%ebx
movl 8(%esp),%ecx
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
index 7c436957..c73c5211 100644
--- a/src/thread/pthread_create.c
+++ b/src/thread/pthread_create.c
@@ -25,6 +25,8 @@ void __pthread_unwind_next(struct __ptcb *cb)
}
}
+ syscall4(__NR_sigprocmask, SIG_BLOCK, (long)(uint64_t[1]){-1}, 0, 8);
+
if (!a_fetch_add(&libc.threads_minus_1, -1))
exit(0);
diff --git a/src/thread/x86_64/__unmapself.s b/src/thread/x86_64/__unmapself.s
index 59092eaa..d36257d0 100644
--- a/src/thread/x86_64/__unmapself.s
+++ b/src/thread/x86_64/__unmapself.s
@@ -3,19 +3,6 @@
.global __unmapself
.type __unmapself,%function
__unmapself:
- call 1f /* glibc ABI compat */
- .long -1
- .long -1
-1: push %rsi /* save arg2 for munmap */
- push %rdx /* save arg3 for munmap */
- mov %rdi,%rsi /* rt_sigprocmask() args: move arg1 to rsi */
- xor %rdi,%rdi
- xor %rdx,%rdx
- movq $8,%r10
- movl $14,%eax /* __NR_rt_sigprocmask */
- syscall /* call rt_sigprocmask(0,arg1,0,8) */
- pop %rsi /* munmap() args: reload from stack */
- pop %rdi
movl $11,%eax /* __NR_munmap */
syscall /* munmap(arg2,arg3) */
xor %rdi,%rdi /* exit() args: always return success */