svn commit: r211773 - in head/lib/libthr: . arch/powerpc
arch/powerpc/include arch/powerpc64
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Tue Aug 24 20:50:09 UTC 2010
Author: nwhitehorn
Date: Tue Aug 24 20:50:08 2010
New Revision: 211773
URL: http://svn.freebsd.org/changeset/base/211773
Log:
Unify 32-bit and 64-bit PowerPC libthr support. This reduces code
duplication, and simplifies the TBEMD import.
Requested by: imp
Deleted:
head/lib/libthr/arch/powerpc64/
Modified:
head/lib/libthr/Makefile
head/lib/libthr/arch/powerpc/Makefile.inc
head/lib/libthr/arch/powerpc/include/pthread_md.h
Modified: head/lib/libthr/Makefile
==============================================================================
--- head/lib/libthr/Makefile Tue Aug 24 20:45:21 2010 (r211772)
+++ head/lib/libthr/Makefile Tue Aug 24 20:50:08 2010 (r211773)
@@ -19,7 +19,7 @@ WARNS?= 3
CFLAGS+=-DPTHREAD_KERNEL
CFLAGS+=-I${.CURDIR}/../libc/include -I${.CURDIR}/thread \
-I${.CURDIR}/../../include
-CFLAGS+=-I${.CURDIR}/arch/${MACHINE_ARCH}/include
+CFLAGS+=-I${.CURDIR}/arch/${MACHINE_CPUARCH}/include
CFLAGS+=-I${.CURDIR}/sys
CFLAGS+=-I${.CURDIR}/../../libexec/rtld-elf
CFLAGS+=-I${.CURDIR}/../../libexec/rtld-elf/${MACHINE_ARCH}
@@ -38,7 +38,7 @@ CFLAGS+=-D_PTHREADS_INVARIANTS
PRECIOUSLIB=
-.include "${.CURDIR}/arch/${MACHINE_ARCH}/Makefile.inc"
+.include "${.CURDIR}/arch/${MACHINE_CPUARCH}/Makefile.inc"
.include "${.CURDIR}/sys/Makefile.inc"
.include "${.CURDIR}/thread/Makefile.inc"
Modified: head/lib/libthr/arch/powerpc/Makefile.inc
==============================================================================
--- head/lib/libthr/arch/powerpc/Makefile.inc Tue Aug 24 20:45:21 2010 (r211772)
+++ head/lib/libthr/arch/powerpc/Makefile.inc Tue Aug 24 20:50:08 2010 (r211773)
@@ -1,5 +1,5 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/arch/${MACHINE_ARCH}/${MACHINE_ARCH}
+.PATH: ${.CURDIR}/arch/${MACHINE_CPUARCH}/${MACHINE_CPUARCH}
SRCS+= pthread_md.c
Modified: head/lib/libthr/arch/powerpc/include/pthread_md.h
==============================================================================
--- head/lib/libthr/arch/powerpc/include/pthread_md.h Tue Aug 24 20:45:21 2010 (r211772)
+++ head/lib/libthr/arch/powerpc/include/pthread_md.h Tue Aug 24 20:50:08 2010 (r211773)
@@ -39,12 +39,16 @@
#define CPU_SPINWAIT
#define DTV_OFFSET offsetof(struct tcb, tcb_dtv)
+#ifdef __powerpc64__
+#define TP_OFFSET 0x7010
+#else
#define TP_OFFSET 0x7008
+#endif
/*
* Variant I tcb. The structure layout is fixed, don't blindly
* change it.
- * %r2 points to end of the structure.
+ * %r2 (32-bit) or %r13 (64-bit) points to end of the structure.
*/
struct tcb {
void *tcb_dtv;
@@ -57,7 +61,11 @@ void _tcb_dtor(struct tcb *);
static __inline void
_tcb_set(struct tcb *tcb)
{
+#ifdef __powerpc64__
+ register uint8_t *_tp __asm__("%r13");
+#else
register uint8_t *_tp __asm__("%r2");
+#endif
__asm __volatile("mr %0,%1" : "=r"(_tp) :
"r"((uint8_t *)tcb + TP_OFFSET));
@@ -66,7 +74,11 @@ _tcb_set(struct tcb *tcb)
static __inline struct tcb *
_tcb_get(void)
{
+#ifdef __powerpc64__
+ register uint8_t *_tp __asm__("%r13");
+#else
register uint8_t *_tp __asm__("%r2");
+#endif
return ((struct tcb *)(_tp - TP_OFFSET));
}
More information about the svn-src-all
mailing list