From 4abab5ad6c8465a7528ccdd5f49367da05f78bbd Mon Sep 17 00:00:00 2001 From: Vladimir Azarov Date: Tue, 1 Oct 2024 15:47:05 +0200 Subject: Initial version --- src/thread/__unmapself.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/thread/__unmapself.c (limited to 'src/thread/__unmapself.c') diff --git a/src/thread/__unmapself.c b/src/thread/__unmapself.c new file mode 100644 index 0000000..31d94e6 --- /dev/null +++ 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); +} -- cgit v1.2.3