1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #include <assert.h>
21: #include <errno.h>
22: #include <limits.h>
23: #include "pthreadP.h"
24:
25:
26: #ifndef NEW_VERNUM
27: # define NEW_VERNUM GLIBC_2_3_3
28: #endif
29:
30:
31: int
32: __pthread_attr_setstack (attr, stackaddr, stacksize)
33: pthread_attr_t *attr;
34: void *stackaddr;
35: size_t stacksize;
36: {
37: struct pthread_attr *iattr;
38:
39: assert (sizeof (*attr) >= sizeof (struct pthread_attr));
40: iattr = (struct pthread_attr *) attr;
41:
42:
43: if (stacksize < PTHREAD_STACK_MIN)
44: return EINVAL;
45:
46: #ifdef EXTRA_PARAM_CHECKS
47: EXTRA_PARAM_CHECKS;
48: #endif
49:
50: iattr->stacksize = stacksize;
51: iattr->stackaddr = (char *) stackaddr + stacksize;
52: iattr->flags |= ATTR_FLAG_STACKADDR;
53:
54: return 0;
55: }
56:
57: #if PTHREAD_STACK_MIN == 16384
58: strong_alias (__pthread_attr_setstack, pthread_attr_setstack)
59: #else
60: # include <shlib-compat.h>
61: versioned_symbol (libpthread, __pthread_attr_setstack, pthread_attr_setstack,
62: NEW_VERNUM);
63:
64: # if SHLIB_COMPAT(libpthread, GLIBC_2_2, NEW_VERNUM)
65:
66: int
67: __old_pthread_attr_setstack (pthread_attr_t *attr, void *stackaddr,
68: size_t stacksize)
69: {
70: struct pthread_attr *iattr;
71:
72: assert (sizeof (*attr) >= sizeof (struct pthread_attr));
73: iattr = (struct pthread_attr *) attr;
74:
75:
76: if (stacksize < 16384)
77: return EINVAL;
78:
79: # ifdef EXTRA_PARAM_CHECKS
80: EXTRA_PARAM_CHECKS;
81: # endif
82:
83: iattr->stacksize = stacksize;
84: iattr->stackaddr = (char *) stackaddr + stacksize;
85: iattr->flags |= ATTR_FLAG_STACKADDR;
86:
87: return 0;
88: }
89:
90: compat_symbol (libpthread, __old_pthread_attr_setstack, pthread_attr_setstack,
91: GLIBC_2_2);
92: # endif
93:
94: #endif