summaryrefslogtreecommitdiff
path: root/Libraries/LibPthread
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibPthread')
-rw-r--r--Libraries/LibPthread/Makefile19
-rwxr-xr-xLibraries/LibPthread/install.sh9
-rw-r--r--Libraries/LibPthread/pthread.cpp24
-rw-r--r--Libraries/LibPthread/pthread.h74
4 files changed, 126 insertions, 0 deletions
diff --git a/Libraries/LibPthread/Makefile b/Libraries/LibPthread/Makefile
new file mode 100644
index 0000000000..993ee2cdb9
--- /dev/null
+++ b/Libraries/LibPthread/Makefile
@@ -0,0 +1,19 @@
+include ../../Makefile.common
+
+OBJS = pthread.o
+
+LIBRARY = libpthread.a
+DEFINES += -DUSERLAND
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJS)
+ @echo "LIB $@"; $(AR) rcs $@ $(OBJS)
+
+.cpp.o:
+ @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
+
+-include $(OBJS:%.o=%.d)
+
+clean:
+ @echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
diff --git a/Libraries/LibPthread/install.sh b/Libraries/LibPthread/install.sh
new file mode 100755
index 0000000000..4a7d00c6d1
--- /dev/null
+++ b/Libraries/LibPthread/install.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -e
+SERENITY_ROOT=../../
+
+mkdir -p $SERENITY_ROOT/Root/usr/include/sys/
+mkdir -p $SERENITY_ROOT/Root/usr/lib/
+cp ./*.h $SERENITY_ROOT/Root/usr/include/
+cp libpthread.a $SERENITY_ROOT/Root/usr/lib/
diff --git a/Libraries/LibPthread/pthread.cpp b/Libraries/LibPthread/pthread.cpp
new file mode 100644
index 0000000000..26761b8a02
--- /dev/null
+++ b/Libraries/LibPthread/pthread.cpp
@@ -0,0 +1,24 @@
+#include <AK/StdLibExtras.h>
+#include <pthread.h>
+#include <unistd.h>
+
+extern "C" {
+
+int pthread_create(pthread_t* thread, pthread_attr_t* attributes, void *(*start_routine)(void*), void* argument_to_start_routine)
+{
+ if (!thread)
+ return -EINVAL;
+ UNUSED_PARAM(attributes);
+ int rc = create_thread(start_routine, argument_to_start_routine);
+ if (rc < 0)
+ return rc;
+ *thread = rc;
+ return 0;
+}
+
+void pthread_exit(void* value_ptr)
+{
+ exit_thread(value_ptr);
+}
+
+}
diff --git a/Libraries/LibPthread/pthread.h b/Libraries/LibPthread/pthread.h
new file mode 100644
index 0000000000..19e6f88f19
--- /dev/null
+++ b/Libraries/LibPthread/pthread.h
@@ -0,0 +1,74 @@
+#pragma once
+
+#include <sched.h>
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
+typedef int pthread_t;
+typedef void* pthread_key_t;
+typedef void* pthread_once_t;
+typedef void* pthread_mutex_t;
+typedef void* pthread_attr_t;
+typedef void* pthread_mutexattr_t;
+typedef void* pthread_cond_t;
+typedef void* pthread_spinlock_t;
+typedef void* pthread_condattr_t;
+
+int pthread_create(pthread_t*, pthread_attr_t*, void* (*)(void*), void*);
+void pthread_exit(void*);
+int pthread_kill(pthread_t, int);
+void pthread_cleanup_push(void (*)(void*), void*);
+void pthread_cleanup_pop(int);
+int pthread_join(pthread_t, void**);
+int pthread_mutex_lock(pthread_mutex_t*);
+int pthread_mutex_trylock(pthread_mutex_t* mutex);
+int pthread_mutex_unlock(pthread_mutex_t*);
+int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*);
+int pthread_mutex_destroy(pthread_mutex_t*);
+int pthread_attr_init(pthread_attr_t*);
+int pthread_attr_destroy(pthread_attr_t*);
+
+int pthread_once(pthread_once_t*, void (*)(void));
+#define PTHREAD_ONCE_INIT 0
+void* pthread_getspecific(pthread_key_t key);
+int pthread_setspecific(pthread_key_t key, const void* value);
+
+#define PTHREAD_MUTEX_NORMAL 0
+#define PTHREAD_MUTEX_RECURSIVE 1
+#define PTHREAD_MUTEX_INITIALIZER 0
+#define PTHREAD_COND_INITIALIZER 0
+
+int pthread_key_create(pthread_key_t* key, void (*destructor)(void*));
+int pthread_key_delete(pthread_key_t key);
+int pthread_cond_broadcast(pthread_cond_t*);
+int pthread_cond_init(pthread_cond_t*, const pthread_condattr_t*);
+int pthread_cond_signal(pthread_cond_t*);
+int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*);
+int pthread_condattr_destroy(pthread_condattr_t*);
+int pthread_cancel(pthread_t);
+void pthread_cleanup_push(void (*)(void*), void*);
+void pthread_cleanup_pop(int);
+int pthread_cond_broadcast(pthread_cond_t*);
+int pthread_cond_destroy(pthread_cond_t*);
+int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, const struct timespec*);
+int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*);
+int pthread_condattr_destroy(pthread_condattr_t*);
+
+void pthread_testcancel(void);
+
+int pthread_spin_destroy(pthread_spinlock_t*);
+int pthread_spin_init(pthread_spinlock_t*, int);
+int pthread_spin_lock(pthread_spinlock_t*);
+int pthread_spin_trylock(pthread_spinlock_t*);
+int pthread_spin_unlock(pthread_spinlock_t*);
+int pthread_cond_destroy(pthread_cond_t*);
+pthread_t pthread_self(void);
+int pthread_detach(pthread_t);
+int pthread_equal(pthread_t, pthread_t);
+void pthread_exit(void*);
+int pthread_mutexattr_init(pthread_mutexattr_t*);
+int pthread_mutexattr_settype(pthread_mutexattr_t*, int);
+int pthread_mutexattr_destroy(pthread_mutexattr_t*);
+
+__END_DECLS