Implemented a few more stubs for PTHREAD compliance
authorKevin Klues <klueska@cs.berkeley.edu>
Wed, 5 Dec 2012 04:23:06 +0000 (20:23 -0800)
committerKevin Klues <klueska@cs.berkeley.edu>
Wed, 5 Dec 2012 04:23:06 +0000 (20:23 -0800)
(Including signal stuff)

user/parlib/signal.c [new file with mode: 0644]
user/pthread/pthread.c
user/pthread/pthread.h

diff --git a/user/parlib/signal.c b/user/parlib/signal.c
new file mode 100644 (file)
index 0000000..5c458be
--- /dev/null
@@ -0,0 +1,78 @@
+#include <signal.h>
+
+// Process wide table of signal handlers
+__sighandler_t sighandlers[_NSIG-1];
+
+int sigaddset(sigset_t *__set, int __signo)
+{
+}
+
+int sigdelset(sigset_t *__set, int __signo)
+{
+}
+
+int sigismember(__const sigset_t *__set, int __signo)
+{
+}
+
+int sigprocmask(int __how, __const sigset_t *__restrict __set, sigset_t *__restrict __oset)
+{
+}
+
+int sigsuspend(__const sigset_t *__set)
+{
+}
+
+int sigaction(int __sig, __const struct sigaction *__restrict __act,
+ struct sigaction *__restrict __oact)
+{
+}
+
+int sigpending(sigset_t *__set)
+{
+}
+
+int sigwait(__const sigset_t *__restrict __set, int *__restrict __sig)
+{
+}
+
+int sigwaitinfo(__const sigset_t *__restrict __set, siginfo_t *__restrict __info)
+{
+}
+
+int sigtimedwait(__const sigset_t *__restrict __set,
+    siginfo_t *__restrict __info,
+    __const struct timespec *__restrict __timeout)
+{
+}
+
+int sigqueue(__pid_t __pid, int __sig, __const union sigval __val)
+{
+}
+
+
+int sigvec(int __sig, __const struct sigvec *__vec, struct sigvec *__ovec)
+{
+}
+
+
+int sigreturn(struct sigcontext *__scp)
+{
+}
+
+
+int siginterrupt(int __sig, int __interrupt)
+{
+}
+
+
+int sigstack(struct sigstack *__ss, struct sigstack *__oss)
+{
+}
+
+
+int sigaltstack(__const struct sigaltstack *__restrict __ss,
+   struct sigaltstack *__restrict __oss)
+{
+}
+
index b21524e..af8a527 100644 (file)
@@ -789,3 +789,23 @@ int pthread_detach(pthread_t thread)
        thread->detached = TRUE;
        return 0;
 }
+
+int pthread_kill (pthread_t __threadid, int __signo)
+{
+       printf("pthread_kill is not yet implemented!");
+       return -1;
+}
+
+
+int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset)
+{
+       printf("pthread_sigmask is not yet implemented!");
+       return -1;
+}
+
+int pthread_sigqueue(pthread_t *thread, int sig, const union sigval value)
+{
+       printf("pthread_sigqueue is not yet implemented!");
+       return -1;
+}
+
index 4d4dd79..e355fb6 100644 (file)
@@ -2,6 +2,7 @@
 #define _PTHREAD_H
 
 #include <sys/queue.h>
+#include <signal.h>
 #include <vcore.h>
 #include <uthread.h>
 #include <mcs.h>
@@ -36,6 +37,7 @@ struct pthread_tcb {
        void *(*start_routine)(void*);
        void *arg;
        void *retval;
+       uint64_t sigmask;
 };
 typedef struct pthread_tcb* pthread_t;
 TAILQ_HEAD(pthread_queue, pthread_tcb);
@@ -131,10 +133,13 @@ int pthread_attr_init(pthread_attr_t *);
 int pthread_attr_destroy(pthread_attr_t *);
 int pthread_create(pthread_t *, const pthread_attr_t *,
                    void *(*)(void *), void *);
+int pthread_detach(pthread_t __th);
 int pthread_join(pthread_t, void **);
 int pthread_yield(void);
 
 int pthread_attr_setdetachstate(pthread_attr_t *__attr,int __detachstate);
+int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
+int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
 
 int pthread_mutex_destroy(pthread_mutex_t *);
 int pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *);
@@ -178,13 +183,20 @@ int pthread_barrier_init(pthread_barrier_t* b, const pthread_barrierattr_t* a, i
 int pthread_barrier_wait(pthread_barrier_t* b);
 int pthread_barrier_destroy(pthread_barrier_t* b);
 
-//added for redis compile
-int pthread_detach(pthread_t __th);
-int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
-int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
-
-//added for go compile
+// POSIX signal compliance
 int pthread_kill (pthread_t __threadid, int __signo);
+int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset);
+int pthread_sigqueue(pthread_t *thread, int sig, const union sigval value);
+
+// Dynamic TLS stuff
+static inline int pthread_key_create(pthread_key_t *key, void (*destructor)(void*))
+{ return -1; }
+static inline int pthread_key_delete(pthread_key_t key)
+{ return -1; }
+static inline void *pthread_getspecific(pthread_key_t key)
+{ return NULL; }
+static inline int pthread_setspecific(pthread_key_t key, const void *value)
+{ return -1; }
 
 #ifdef __cplusplus
   }