Fix up some test cases
[kopensolaris-gnu/glibc.git] / nptl / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / pthreaddef.h
index 4ce180e..c6bedcf 100644 (file)
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+/* Get the arch-specific version.  */
+#include_next <pthreaddef.h>
+
 /* Register atfork handlers to protect signal_lock.  */
 extern void sigaction_atfork (void);
-#define PLATFORM_PTHREAD_INIT               \
-    sigaction_atfork ();                    \
-    THREAD_SETMEM (pd, main_thread, 1);
+
+/* We need to tell the kernel about the allocated stack.  */
+#define PLATFORM_THREAD_START                   \
+    {                                           \
+      pd->stack.ss_sp = pd->stackblock;         \
+      pd->stack.ss_sp = pd->stackblock_size;    \
+      pd->stack.ss_flags = 0;                   \
+      setustack (&pd->stack);                   \
+    }
+
+#ifndef __stack_t_defined
+# define __need_stack_t
+# include <bits/sigstack.h>
+#endif
+
+#define PLATFORM_PTHREAD_INIT                       \
+    sigaction_atfork ();                            \
+    THREAD_SETMEM (pd, main_thread, 1);             \
+    stack_t *_stack;                                \
+       if (getustack (&_stack) == 0 && _stack)         \
+      {                                             \
+        pd->stackblock = _stack->ss_sp;             \
+        pd->stackblock_size = _stack->ss_size;      \
+      }
 
 /* Additional descr fields.  */
-# define PLATFORM_DESCR_FIELDS              \
-    int sigpipe_disabled;                   \
-    int main_thread;
+# define PLATFORM_DESCR_FIELDS  \
+    int main_thread;            \
+    stack_t stack;
+
+/* stackblock/stackblock_size should always be filled.  */
+#define GET_MAIN_STACK_INFO(stackaddr, stacksize)      ENOSYS
 
 /* Use tid as pthread_t (instead of descr).  */
 #define PTHREAD_T_IS_TID
@@ -34,22 +61,30 @@ extern void sigaction_atfork (void);
 /* Use pthread scheduler functions in tpp.  */
 #define TPP_PTHREAD_SCHED
 
-/* pthread_setXid not supported/needed.  */
-#define NO_SETXID_SUPPORT
+/* pthread_ is unsigned.  */
+#define FREE_P(descr) ((descr)->tid == (pthread_t)-1)
+
+/* The first thread has a large (10M) stack so use the arch defaults.  */
+#define PTHREAD_USE_ARCH_STACK_DEFAULT_SIZE
 
-/* Disable robust list.  */
-#define NO_ROBUST_LIST_SUPPORT
+/* It is known that the first lwpid is 1.  */
+#define FIRST_THREAD_TID       1
 
-/* Disable futex support.  */
-#define NO_FUTEX_SUPPORT
+/* We need to be passed the stacksize.  */
+#define NEED_STACK_SIZE
 
-/* Make sure SIGCANCEL sanity check compiles.  */
-#define SI_TKILL SI_LWP
-#define __ASSUME_CORRECT_SI_PID
+/* __exit_thread_inline is the same for all architectures.  */
+#include <inline-syscall.h>
 
-/* We support tkill.  */
-#undef __NR_tgkill
-#undef __ASSUME_TGKILL
+DECLARE_INLINE_SYSCALL (void, lwp_exit, void);
 
-/* pthread_ is unsigned.  */
-#define FREE_P(descr) ((descr)->tid == (pthread_t)-1)
+#undef __exit_thread_inline
+#define __exit_thread_inline(val) \
+    INLINE_SYSCALL (lwp_exit, 0);
+
+/* We don't have /dev/shm on solaris, so we use /tmp/.dev_shm.  */
+#define STATIC_DEV_SHM         "/tmp/.glibc_dev_shm"
+#define STATIC_DEV_SHM_PREFIX  STATIC_DEV_SHM "/sem."
+
+/* Pthread structs are opaque so don't assume any struct internals.  */
+#define OPAQUE_STRUCTS