add pthread_attr_setstack interface (and get)

i originally omitted these (optional, per POSIX) interfaces because i
considered them backwards implementation details. however, someone
later brought to my attention a fairly legitimate use case: allocating
thread stacks in memory that's setup for sharing and/or fast transfer
between CPU and GPU so that the thread can move data to a GPU directly
from automatic-storage buffers without having to go through additional
buffer copies.

perhaps there are other situations in which these interfaces are
useful too.
This commit is contained in:
Rich Felker
2012-06-09 19:53:29 -04:00
parent f457b1cb0d
commit 819006a88b
4 changed files with 39 additions and 10 deletions

View File

@ -0,0 +1,14 @@
#include "pthread_impl.h"
/* pthread_key_create.c overrides this */
static const size_t dummy = 0;
weak_alias(dummy, __pthread_tsd_size);
int pthread_attr_setstack(pthread_attr_t *a, void *addr, size_t size)
{
if (size-PTHREAD_STACK_MIN-__pthread_tsd_size > SIZE_MAX/4)
return EINVAL;
a->_a_stackaddr = (size_t)addr + size;
a->_a_stacksize = size - DEFAULT_STACK_SIZE;
return 0;
}