diff options
Diffstat (limited to 'src/thread/pthread_create.c')
| -rw-r--r-- | src/thread/pthread_create.c | 21 | 
1 files changed, 14 insertions, 7 deletions
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index e441bdac..c170a999 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -5,6 +5,10 @@  #include <sys/mman.h>  #include <string.h> +void *__mmap(void *, size_t, int, int, int, off_t); +int __munmap(void *, size_t); +int __mprotect(void *, size_t, int); +  static void dummy_0()  {  } @@ -14,7 +18,7 @@ weak_alias(dummy_0, __pthread_tsd_run_dtors);  weak_alias(dummy_0, __do_private_robust_list);  weak_alias(dummy_0, __do_orphaned_stdio_locks); -_Noreturn void pthread_exit(void *result) +_Noreturn void __pthread_exit(void *result)  {  	pthread_t self = __pthread_self();  	sigset_t set; @@ -139,7 +143,7 @@ static void init_file_lock(FILE *f)  void *__copy_tls(unsigned char *); -int pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp, void *(*entry)(void *), void *restrict arg) +int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp, void *(*entry)(void *), void *restrict arg)  {  	int ret;  	size_t size, guard; @@ -191,14 +195,14 @@ int pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp  	if (!tsd) {  		if (guard) { -			map = mmap(0, size, PROT_NONE, MAP_PRIVATE|MAP_ANON, -1, 0); +			map = __mmap(0, size, PROT_NONE, MAP_PRIVATE|MAP_ANON, -1, 0);  			if (map == MAP_FAILED) goto fail; -			if (mprotect(map+guard, size-guard, PROT_READ|PROT_WRITE)) { -				munmap(map, size); +			if (__mprotect(map+guard, size-guard, PROT_READ|PROT_WRITE)) { +				__munmap(map, size);  				goto fail;  			}  		} else { -			map = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); +			map = __mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);  			if (map == MAP_FAILED) goto fail;  		}  		tsd = map + size - __pthread_tsd_size; @@ -240,7 +244,7 @@ int pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp  	if (ret < 0) {  		a_dec(&libc.threads_minus_1); -		if (map) munmap(map, size); +		if (map) __munmap(map, size);  		return EAGAIN;  	} @@ -258,3 +262,6 @@ fail:  	__release_ptc();  	return EAGAIN;  } + +weak_alias(__pthread_exit, pthread_exit); +weak_alias(__pthread_create, pthread_create);  | 
