+// User data
+
+#define PTHREAD_XTHREADS_MAX 65535
+#define PTHREAD_XNULL ((pthread_t)NULL)
+
+#ifdef __PTHREAD_EXTRA_INTERNAL
+typedef struct pthread_user_data_internal_t {
+ pthread_t tid; //Thread ID
+ void *usr; //User pointer
+ //Internaly used members:
+ sig_atomic_t running; //pthread_pause
+} pthread_user_data_internal_t;
+
+pthread_user_data_internal_t* pthread_user_data_internal(pthread_t thread);
+int pthread_user_data_lock();
+int pthread_user_data_unlock();
+#endif //__PTHREAD_EXTRA_INTERNAL
+
+void** pthread_user_data_ptr(pthread_t thread);
+void* pthread_user_data_get(pthread_t thread);
+void pthread_user_data_set(pthread_t thread, void *usr);
+void pthread_user_data_cleanup(void * arg);
+int pthread_user_data_internal_iterate(int (*routine)(pthread_t), void *arg);
+
+// Pausing
+
+//GDB: handle SIG34 nostop noprint
+#define PTHREAD_XSIG_STOP (SIGRTMIN+0)
+#define PTHREAD_XSIG_CONT (SIGRTMIN+1)
+#define PTHREAD_XSIGRTMIN (SIGRTMIN+2) //First unused RT signal
+
+int pthread_extra_create(pthread_t *restrict thread,
+ const pthread_attr_t *restrict attr,
+ void *(*start_routine)(void *),
+ void *restrict arg);
+void pthread_unpause_handler();
+void pthread_pause_handler();
+void pthread_pause_enable();
+void pthread_pause_disable();
+int pthread_pause(pthread_t thread);
+int pthread_unpause(pthread_t thread);
+int pthread_pause_all();
+int pthread_unpause_all();
+int pthread_pause_reschedule(pthread_t thread);
+int pthread_extra_yield();