diff --git a/Config.uk b/Config.uk index 3587c55..124a23c 100644 --- a/Config.uk +++ b/Config.uk @@ -5,6 +5,7 @@ menuconfig LIBPTHREAD_EMBEDDED select LIBUKDEBUG select LIBUKALLOC select LIBUKSCHED + select LIBUKSIGNAL select LIBUKLOCK select LIBUKLOCK_MUTEX select LIBUKLOCK_SEMAPHORE diff --git a/include/pte_osal.h b/include/pte_osal.h index bcf5374..759cb1b 100644 --- a/include/pte_osal.h +++ b/include/pte_osal.h @@ -4,6 +4,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + typedef struct uk_thread* pte_osThreadHandle; typedef struct uk_semaphore *pte_osSemaphoreHandle; typedef struct uk_mutex *pte_osMutexHandle; @@ -11,6 +15,11 @@ typedef struct uk_mutex *pte_osMutexHandle; #define OS_MAX_SIMUL_THREADS \ CONFIG_LIBPTHREAD_EMBEDDED_MAX_SIMUL_THREADS +#ifdef __cplusplus +} +#endif + + #include "pte_generic_osal.h" #endif /* __PTE_OSAL_H__ */ diff --git a/include/pte_types.h b/include/pte_types.h index c9081fa..817e313 100644 --- a/include/pte_types.h +++ b/include/pte_types.h @@ -3,8 +3,16 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + typedef unsigned int tid_t; typedef int pid_t; +#ifdef __cplusplus +} +#endif + #endif /* __PTE_TYPES_H__ */ diff --git a/patches/0012-Add_pthread_kill_when_uk_signals_are_enabled.patch b/patches/0012-Add_pthread_kill_when_uk_signals_are_enabled.patch new file mode 100644 index 0000000..7b3732c --- /dev/null +++ b/patches/0012-Add_pthread_kill_when_uk_signals_are_enabled.patch @@ -0,0 +1,24 @@ +diff --git a/pthread_kill.c b/pthread_kill.c +index 3a6daf6..4ea7448 100644 +--- a/pthread_kill.c ++++ b/pthread_kill.c +@@ -47,7 +47,9 @@ + #include "pthread.h" + #include "implement.h" + +-#ifdef __hermit__ ++#include ++ ++#if CONFIG_LIBUKSIGNAL + int pte_kill(pte_osThreadHandle threadId, int sig); + #endif + +@@ -98,7 +100,7 @@ pthread_kill (pthread_t thread, int sig) + + pte_osMutexUnlock(pte_thread_reuse_lock); + +-#ifdef __hermit__ ++#if CONFIG_LIBUKSIGNAL + result = pte_kill(tp->threadId, sig); + #else + if (0 == result && 0 != sig) diff --git a/pte_osal.c b/pte_osal.c index 640c3e4..d884ee5 100644 --- a/pte_osal.c +++ b/pte_osal.c @@ -103,6 +103,19 @@ pte_osResult pte_osInit(void) return result; } +/*************************************************************************** + * + * Signal handling + * + **************************************************************************/ +#if CONFIG_LIBUKSIGNAL +int pte_kill(pte_osThreadHandle threadId, int sig) +{ + return uk_sig_thread_kill(threadId, sig); +} +#endif + + /**************************************************************************** * * Threads @@ -162,6 +175,12 @@ pte_osResult pte_osThreadCreate(pte_osThreadEntryPoint entry_point, return PTE_OS_NO_RESOURCES; } +#if CONFIG_LIBUKSIGNAL + /* inherit signal mask */ + ptd->uk_thread->signals_container.mask = + uk_thread_current()->signals_container.mask; +#endif + ptd->uk_thread->prv = ptd; *ph = ptd->uk_thread; diff --git a/pthread_sigmask.c b/pthread_sigmask.c index 7e12e2b..e447f01 100644 --- a/pthread_sigmask.c +++ b/pthread_sigmask.c @@ -21,9 +21,9 @@ #include #include +#include int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset) { - WARN_STUBBED(); - return 0; + return uk_thread_sigmask(how, set, oldset); }