1*c9945492SAndroid Build Coastguard Worker #define _GNU_SOURCE 2*c9945492SAndroid Build Coastguard Worker #include "pthread_impl.h" 3*c9945492SAndroid Build Coastguard Worker #include "libc.h" 4*c9945492SAndroid Build Coastguard Worker #include <sys/mman.h> 5*c9945492SAndroid Build Coastguard Worker pthread_getattr_np(pthread_t t,pthread_attr_t * a)6*c9945492SAndroid Build Coastguard Workerint pthread_getattr_np(pthread_t t, pthread_attr_t *a) 7*c9945492SAndroid Build Coastguard Worker { 8*c9945492SAndroid Build Coastguard Worker *a = (pthread_attr_t){0}; 9*c9945492SAndroid Build Coastguard Worker a->_a_detach = t->detach_state>=DT_DETACHED; 10*c9945492SAndroid Build Coastguard Worker a->_a_guardsize = t->guard_size; 11*c9945492SAndroid Build Coastguard Worker if (t->stack) { 12*c9945492SAndroid Build Coastguard Worker a->_a_stackaddr = (uintptr_t)t->stack; 13*c9945492SAndroid Build Coastguard Worker a->_a_stacksize = t->stack_size; 14*c9945492SAndroid Build Coastguard Worker } else { 15*c9945492SAndroid Build Coastguard Worker char *p = (void *)libc.auxv; 16*c9945492SAndroid Build Coastguard Worker size_t l = PAGE_SIZE; 17*c9945492SAndroid Build Coastguard Worker p += -(uintptr_t)p & PAGE_SIZE-1; 18*c9945492SAndroid Build Coastguard Worker a->_a_stackaddr = (uintptr_t)p; 19*c9945492SAndroid Build Coastguard Worker while (mremap(p-l-PAGE_SIZE, PAGE_SIZE, 2*PAGE_SIZE, 0)==MAP_FAILED && errno==ENOMEM) 20*c9945492SAndroid Build Coastguard Worker l += PAGE_SIZE; 21*c9945492SAndroid Build Coastguard Worker a->_a_stacksize = l; 22*c9945492SAndroid Build Coastguard Worker } 23*c9945492SAndroid Build Coastguard Worker return 0; 24*c9945492SAndroid Build Coastguard Worker } 25