summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-06-06 15:32:34 +0800
committerGitHub <[email protected]>2020-06-06 15:32:34 +0800
commit08a8e75ae9f94175a37d302bb28375a07b78ccfd (patch)
tree98381e9a0fcc4f6be2b8dd8df24ef7f9265a578e
parent64ac4928f4a466fdf7eacd6c160a099549858028 (diff)
parentbe43008c562dd785d6f7727bad0d93125d8a362b (diff)
Merge pull request #3662 from BernardXiong/fix_pthreads
Fix pthreads
-rw-r--r--components/libc/compilers/newlib/syscalls.c4
-rw-r--r--components/libc/pthreads/SConscript20
-rw-r--r--[-rwxr-xr-x]components/libc/pthreads/pthread.c2
-rw-r--r--include/rtdef.h2
4 files changed, 18 insertions, 10 deletions
diff --git a/components/libc/compilers/newlib/syscalls.c b/components/libc/compilers/newlib/syscalls.c
index 59c1881ad1..228fa0d140 100644
--- a/components/libc/compilers/newlib/syscalls.c
+++ b/components/libc/compilers/newlib/syscalls.c
@@ -17,10 +17,6 @@
#include <dfs_posix.h>
#endif
-#ifdef RT_USING_PTHREADS
-#include <pthread.h>
-#endif
-
#ifdef RT_USING_MODULE
#include <dlmodule.h>
#endif
diff --git a/components/libc/pthreads/SConscript b/components/libc/pthreads/SConscript
index 1b7b75bfd1..e154ee0aa9 100644
--- a/components/libc/pthreads/SConscript
+++ b/components/libc/pthreads/SConscript
@@ -1,10 +1,22 @@
from building import *
+from utils import VersionCmp
-cwd = GetCurrentDir()
-src = Glob('*.c')
-CPPPATH = [cwd]
+cwd = GetCurrentDir()
+src = Glob('*.c')
+CPPPATH = [cwd]
+CPPDEFINES = []
+
+# only enable POSIX.1b-1993 Real-time extensions
+libc_ver = GetDepend('LIBC_VERSION')
+try:
+ ver = libc_ver.split(' ')
+ ver = ver[1]
+ if VersionCmp(ver, "2.5.0") == 1:
+ CPPDEFINES = ['_POSIX_C_SOURCE=199309L']
+except :
+ pass
group = DefineGroup('pthreads', src,
- depend = ['RT_USING_PTHREADS', 'RT_USING_LIBC'], CPPPATH = CPPPATH)
+ depend = ['RT_USING_PTHREADS', 'RT_USING_LIBC'], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
diff --git a/components/libc/pthreads/pthread.c b/components/libc/pthreads/pthread.c
index 5d3bc0796a..19a511b45b 100755..100644
--- a/components/libc/pthreads/pthread.c
+++ b/components/libc/pthreads/pthread.c
@@ -277,7 +277,7 @@ int pthread_create(pthread_t *pid,
/* set pthread cleanup function and ptd data */
ptd->tid->cleanup = _pthread_cleanup;
- ptd->tid->user_data = (rt_uint32_t)ptd;
+ ptd->tid->user_data = (rt_ubase_t)ptd;
/* start thread */
if (rt_thread_startup(ptd->tid) == RT_EOK)
diff --git a/include/rtdef.h b/include/rtdef.h
index f2b546f75e..b391ff7685 100644
--- a/include/rtdef.h
+++ b/include/rtdef.h
@@ -623,7 +623,7 @@ struct rt_thread
void *lwp;
#endif
- rt_uint32_t user_data; /**< private user data beyond this thread */
+ rt_ubase_t user_data; /**< private user data beyond this thread */
};
typedef struct rt_thread *rt_thread_t;