1*c9945492SAndroid Build Coastguard Worker #include "pthread_impl.h" 2*c9945492SAndroid Build Coastguard Worker #include "atomic.h" 3*c9945492SAndroid Build Coastguard Worker #include "syscall.h" 4*c9945492SAndroid Build Coastguard Worker /* cheat and reuse CRTJMP macro from dynlink code */ 5*c9945492SAndroid Build Coastguard Worker #include "dynlink.h" 6*c9945492SAndroid Build Coastguard Worker 7*c9945492SAndroid Build Coastguard Worker static void *unmap_base; 8*c9945492SAndroid Build Coastguard Worker static size_t unmap_size; 9*c9945492SAndroid Build Coastguard Worker static char shared_stack[256]; 10*c9945492SAndroid Build Coastguard Worker do_unmap()11*c9945492SAndroid Build Coastguard Workerstatic void do_unmap() 12*c9945492SAndroid Build Coastguard Worker { 13*c9945492SAndroid Build Coastguard Worker __syscall(SYS_munmap, unmap_base, unmap_size); 14*c9945492SAndroid Build Coastguard Worker __syscall(SYS_exit); 15*c9945492SAndroid Build Coastguard Worker } 16*c9945492SAndroid Build Coastguard Worker __unmapself(void * base,size_t size)17*c9945492SAndroid Build Coastguard Workervoid __unmapself(void *base, size_t size) 18*c9945492SAndroid Build Coastguard Worker { 19*c9945492SAndroid Build Coastguard Worker char *stack = shared_stack + sizeof shared_stack; 20*c9945492SAndroid Build Coastguard Worker stack -= (uintptr_t)stack % 16; 21*c9945492SAndroid Build Coastguard Worker unmap_base = base; 22*c9945492SAndroid Build Coastguard Worker unmap_size = size; 23*c9945492SAndroid Build Coastguard Worker CRTJMP(do_unmap, stack); 24*c9945492SAndroid Build Coastguard Worker } 25