1 /* pthread_getattr_np test.
2 Copyright (C) 2003 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4 Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, write to the Free
18 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
29 #include <stackinfo.h>
34 pthread_attr_t a
, *ap
, a2
;
41 err
= pthread_attr_init (ap
);
44 error (0, err
, "pthread_attr_init failed");
49 ap
= (pthread_attr_t
*) arg
;
51 err
= pthread_getattr_np (pthread_self (), &a
);
54 error (0, err
, "pthread_getattr_np failed");
58 int detachstate1
, detachstate2
;
59 err
= pthread_attr_getdetachstate (&a
, &detachstate1
);
62 error (0, err
, "pthread_attr_getdetachstate failed");
67 err
= pthread_attr_getdetachstate (ap
, &detachstate2
);
70 error (0, err
, "pthread_attr_getdetachstate failed");
73 else if (detachstate1
!= detachstate2
)
75 error (0, 0, "detachstate differs %d != %d",
76 detachstate1
, detachstate2
);
83 err
= pthread_attr_getstack (&a
, &stackaddr
, &stacksize
);
86 error (0, err
, "pthread_attr_getstack failed");
89 else if ((void *) &a
< stackaddr
90 || (void *) &a
>= stackaddr
+ stacksize
)
92 error (0, 0, "pthread_attr_getstack returned range does not cover thread's stack");
96 printf ("thread stack %p-%p (0x%zx)\n", stackaddr
, stackaddr
+ stacksize
,
99 size_t guardsize1
, guardsize2
;
100 err
= pthread_attr_getguardsize (&a
, &guardsize1
);
103 error (0, err
, "pthread_attr_getguardsize failed");
108 err
= pthread_attr_getguardsize (ap
, &guardsize2
);
111 error (0, err
, "pthread_attr_getguardsize failed");
114 else if (guardsize1
!= guardsize2
)
116 error (0, 0, "guardsize differs %zd != %zd",
117 guardsize1
, guardsize2
);
121 printf ("thread guardsize %zd\n", guardsize1
);
125 err
= pthread_attr_getscope (&a
, &scope1
);
128 error (0, err
, "pthread_attr_getscope failed");
133 err
= pthread_attr_getscope (ap
, &scope2
);
136 error (0, err
, "pthread_attr_getscope failed");
139 else if (scope1
!= scope2
)
141 error (0, 0, "scope differs %d != %d",
147 err
= pthread_attr_destroy (&a
);
150 error (0, err
, "pthread_attr_destroy failed");
156 err
= pthread_attr_destroy (ap
);
159 error (0, err
, "pthread_attr_destroy failed");
174 int err
= pthread_attr_init (&a
);
177 error (0, err
, "pthread_attr_init failed");
181 err
= pthread_attr_destroy (&a
);
184 error (0, err
, "pthread_attr_destroy failed");
188 err
= pthread_getattr_np (pthread_self (), &a
);
191 error (0, err
, "pthread_getattr_np failed");
196 err
= pthread_attr_getdetachstate (&a
, &detachstate
);
199 error (0, err
, "pthread_attr_getdetachstate failed");
202 else if (detachstate
!= PTHREAD_CREATE_JOINABLE
)
204 error (0, 0, "initial thread not joinable");
210 err
= pthread_attr_getstack (&a
, &stackaddr
, &stacksize
);
213 error (0, err
, "pthread_attr_getstack failed");
216 else if ((void *) &a
< stackaddr
217 || (void *) &a
>= stackaddr
+ stacksize
)
219 error (0, 0, "pthread_attr_getstack returned range does not cover main's stack");
223 printf ("initial thread stack %p-%p (0x%zx)\n", stackaddr
,
224 stackaddr
+ stacksize
, stacksize
);
227 err
= pthread_attr_getguardsize (&a
, &guardsize
);
230 error (0, err
, "pthread_attr_getguardsize failed");
233 else if (guardsize
!= 0)
235 error (0, 0, "pthread_attr_getguardsize returned %zd != 0",
241 err
= pthread_attr_getscope (&a
, &scope
);
244 error (0, err
, "pthread_attr_getscope failed");
247 else if (scope
!= PTHREAD_SCOPE_SYSTEM
)
249 error (0, 0, "pthread_attr_getscope returned %d != PTHREAD_SCOPE_SYSTEM",
255 err
= pthread_attr_getinheritsched (&a
, &inheritsched
);
258 error (0, err
, "pthread_attr_getinheritsched failed");
261 else if (inheritsched
!= PTHREAD_INHERIT_SCHED
)
263 error (0, 0, "pthread_attr_getinheritsched returned %d != PTHREAD_INHERIT_SCHED",
268 err
= pthread_attr_destroy (&a
);
271 error (0, err
, "pthread_attr_destroy failed");
276 err
= pthread_create (&th
, NULL
, tf
, NULL
);
279 error (0, err
, "pthread_create #1 failed");
285 err
= pthread_join (th
, &ret
);
288 error (0, err
, "pthread_join #1 failed");
291 else if (ret
!= NULL
)
295 err
= pthread_attr_init (&a
);
298 error (0, err
, "pthread_attr_init failed");
302 err
= pthread_create (&th
, &a
, tf
, &a
);
305 error (0, err
, "pthread_create #2 failed");
311 err
= pthread_join (th
, &ret
);
314 error (0, err
, "pthread_join #2 failed");
317 else if (ret
!= NULL
)
321 err
= pthread_attr_setguardsize (&a
, 16 * sysconf (_SC_PAGESIZE
));
324 error (0, err
, "pthread_attr_setguardsize failed");
328 err
= pthread_create (&th
, &a
, tf
, &a
);
331 error (0, err
, "pthread_create #3 failed");
337 err
= pthread_join (th
, &ret
);
340 error (0, err
, "pthread_join #3 failed");
343 else if (ret
!= NULL
)
347 err
= pthread_attr_destroy (&a
);
350 error (0, err
, "pthread_attr_destroy failed");
357 #define TEST_FUNCTION do_test ()
358 #include "../test-skeleton.c"