Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       pthread_attr_getstack, pthread_attr_setstack - get and set stack attributes

SYNOPSIS

       #include <pthread.h>

       int pthread_attr_getstack(const pthread_attr_t *restrict attr,
              void **restrict stackaddr, size_t *restrict stacksize);
       int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr,
              size_t stacksize);

DESCRIPTION

       The pthread_attr_getstack() and pthread_attr_setstack() functions, respectively, shall get
       and set the thread creation stack attributes stackaddr and stacksize in the attr object.

       The stack attributes specify the area of storage to  be  used  for  the  created  thread's
       stack.  The base (lowest addressable byte) of the storage shall be stackaddr, and the size
       of  the  storage  shall  be  stacksize  bytes.   The   stacksize   shall   be   at   least
       {PTHREAD_STACK_MIN}.  The  stackaddr shall be aligned appropriately to be used as a stack;
       for example, pthread_attr_setstack() may fail with [EINVAL] if ( stackaddr & 0x7)  is  not
       0.  All pages within the stack described by stackaddr and stacksize shall be both readable
       and writable by the thread.

RETURN VALUE

       Upon successful completion, these functions shall return a value of 0; otherwise, an error
       number shall be returned to indicate the error.

       The  pthread_attr_getstack()  function shall store the stack attribute values in stackaddr
       and stacksize if successful.

ERRORS

       The pthread_attr_setstack() function shall fail if:

       EINVAL The  value  of  stacksize  is  less  than   {PTHREAD_STACK_MIN}   or   exceeds   an
              implementation-defined limit.

       The pthread_attr_setstack() function may fail if:

       EINVAL The  value of stackaddr does not have proper alignment to be used as a stack, or if
              ( stackaddr + stacksize) lacks proper alignment.

       EACCES The stack page(s) described by stackaddr and stacksize are not  both  readable  and
              writable by the thread.

       These functions shall not return an error code of [EINTR].

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       These  functions are appropriate for use by applications in an environment where the stack
       for a thread must be placed in some particular region of memory.

       While it might seem that an  application  could  detect  stack  overflow  by  providing  a
       protected  page  outside  the  specified  stack  region,  this  cannot  be  done portably.
       Implementations are free to place the thread's initial stack pointer anywhere  within  the
       specified  region  to  accommodate  the  machine's  stack  pointer behavior and allocation
       requirements. Furthermore, on some architectures, such as the IA-64, "overflow" might mean
       that two separate stack pointers allocated within the region will overlap somewhere in the
       middle of the region.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       pthread_attr_init()  ,  pthread_attr_setdetachstate()  ,   pthread_attr_setstacksize()   ,
       pthread_create()  ,  the  Base  Definitions  volume  of  IEEE Std 1003.1-2001, <limits.h>,
       <pthread.h>

COPYRIGHT

       Portions of this text are reprinted and  reproduced  in  electronic  form  from  IEEE  Std
       1003.1,  2003  Edition,  Standard  for Information Technology -- Portable Operating System
       Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003  by
       the  Institute  of  Electrical  and  Electronics Engineers, Inc and The Open Group. In the
       event of any discrepancy between this version and the original IEEE  and  The  Open  Group
       Standard,  the  original  IEEE  and  The  Open Group Standard is the referee document. The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .