X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2F__unmapself.c;h=31d94e67edb9e4a017c62ed2742c45bef0a19dbb;hb=4554f155dd23a65fcdfd39f1d5af8af55ba37694;hp=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/thread/__unmapself.c b/src/thread/__unmapself.c index e69de29b..31d94e67 100644 --- a/src/thread/__unmapself.c +++ b/src/thread/__unmapself.c @@ -0,0 +1,24 @@ +#include "pthread_impl.h" +#include "atomic.h" +#include "syscall.h" +/* cheat and reuse CRTJMP macro from dynlink code */ +#include "dynlink.h" + +static void *unmap_base; +static size_t unmap_size; +static char shared_stack[256]; + +static void do_unmap() +{ + __syscall(SYS_munmap, unmap_base, unmap_size); + __syscall(SYS_exit); +} + +void __unmapself(void *base, size_t size) +{ + char *stack = shared_stack + sizeof shared_stack; + stack -= (uintptr_t)stack % 16; + unmap_base = base; + unmap_size = size; + CRTJMP(do_unmap, stack); +}