summaryrefslogtreecommitdiffstats
path: root/lib/libthr/arch
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2006-04-04 03:26:06 +0000
committerdavidxu <davidxu@FreeBSD.org>2006-04-04 03:26:06 +0000
commit8bff50a485059fe12389243cff1a7c87c1106531 (patch)
treeaa51415180b41bdb161e607aed018f1da6c064a9 /lib/libthr/arch
parent60609380bc28101514b8b5e88a2182bb37a9e6ff (diff)
downloadFreeBSD-src-8bff50a485059fe12389243cff1a7c87c1106531.zip
FreeBSD-src-8bff50a485059fe12389243cff1a7c87c1106531.tar.gz
Simplify _get_curthread() and _tcb_ctor because libc and rtld now
already allocate thread pointer space in tls block for initial thread. Only i386 and amd64 have been done, others still have to be tested.
Diffstat (limited to 'lib/libthr/arch')
-rw-r--r--lib/libthr/arch/amd64/amd64/pthread_md.c6
-rw-r--r--lib/libthr/arch/amd64/include/pthread_md.h4
-rw-r--r--lib/libthr/arch/i386/i386/pthread_md.c7
-rw-r--r--lib/libthr/arch/i386/include/pthread_md.h4
4 files changed, 6 insertions, 15 deletions
diff --git a/lib/libthr/arch/amd64/amd64/pthread_md.c b/lib/libthr/arch/amd64/amd64/pthread_md.c
index d2477df..b661657 100644
--- a/lib/libthr/arch/amd64/amd64/pthread_md.c
+++ b/lib/libthr/arch/amd64/amd64/pthread_md.c
@@ -38,13 +38,11 @@ struct tcb *
_tcb_ctor(struct pthread *thread, int initial)
{
struct tcb *tcb;
- void *oldtls;
if (initial)
- __asm __volatile("movq %%fs:0, %0" : "=r" (oldtls));
+ __asm __volatile("movq %%fs:0, %0" : "=r" (tcb));
else
- oldtls = NULL;
- tcb = _rtld_allocate_tls(oldtls, sizeof(struct tcb), 16);
+ tcb = _rtld_allocate_tls(NULL, sizeof(struct tcb), 16);
if (tcb)
tcb->tcb_thread = thread;
return (tcb);
diff --git a/lib/libthr/arch/amd64/include/pthread_md.h b/lib/libthr/arch/amd64/include/pthread_md.h
index 4500f6b..d12d6e4 100644
--- a/lib/libthr/arch/amd64/include/pthread_md.h
+++ b/lib/libthr/arch/amd64/include/pthread_md.h
@@ -96,8 +96,6 @@ extern struct pthread *_thr_initial;
static __inline struct pthread *
_get_curthread(void)
{
- if (_thr_initial)
- return (TCB_GET64(tcb_thread));
- return (NULL);
+ return (TCB_GET64(tcb_thread));
}
#endif
diff --git a/lib/libthr/arch/i386/i386/pthread_md.c b/lib/libthr/arch/i386/i386/pthread_md.c
index 20e76c8..a8b31d5 100644
--- a/lib/libthr/arch/i386/i386/pthread_md.c
+++ b/lib/libthr/arch/i386/i386/pthread_md.c
@@ -39,14 +39,11 @@ struct tcb *
_tcb_ctor(struct pthread *thread, int initial)
{
struct tcb *tcb;
- void *oldtls;
if (initial)
- __asm __volatile("movl %%gs:0, %0" : "=r" (oldtls));
+ __asm __volatile("movl %%gs:0, %0" : "=r" (tcb));
else
- oldtls = NULL;
-
- tcb = _rtld_allocate_tls(oldtls, sizeof(struct tcb), 16);
+ tcb = _rtld_allocate_tls(NULL, sizeof(struct tcb), 16);
if (tcb)
tcb->tcb_thread = thread;
return (tcb);
diff --git a/lib/libthr/arch/i386/include/pthread_md.h b/lib/libthr/arch/i386/include/pthread_md.h
index 2a17ccc..f3ea4cb 100644
--- a/lib/libthr/arch/i386/include/pthread_md.h
+++ b/lib/libthr/arch/i386/include/pthread_md.h
@@ -100,8 +100,6 @@ extern struct pthread *_thr_initial;
static __inline struct pthread *
_get_curthread(void)
{
- if (_thr_initial)
- return (TCB_GET32(tcb_thread));
- return (NULL);
+ return (TCB_GET32(tcb_thread));
}
#endif
OpenPOWER on IntegriCloud