Introduction
Introduction Statistics Contact Development Disclaimer Help
tarm - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit f51bf048784abd642dea4f033bc95acbd4468b6a
parent 48ca8d21f75b734a15091b77abf5ed4a92be90f2
Author: rsc <devnull@localhost>
Date: Tue, 1 Nov 2005 18:35:44 +0000
arm
Diffstat:
M src/Makefile | 11 ++++++++++-
A src/libthread/Linux-arm-asm.s | 53 ++++++++++++++++++++++++++++++
M src/libthread/Linux.c | 40 +++++++++++++++++++++++++++++…
M src/mkhdr | 2 ++
4 files changed, 105 insertions(+), 1 deletion(-)
---
diff --git a/src/Makefile b/src/Makefile
t@@ -1,6 +1,15 @@
../bin/mk: mkmk.sh
SYSNAME=`uname` export SYSNAME; \
- OBJTYPE=`uname -m | sed 's;i.86;386;; s;amd64;x86_64;; s;/.*;;; s; ;;g…
+ OBJTYPE=`uname -m | sed ' \
+ s;i.86;386;; \
+ s;amd64;x86_64;; \
+ s;/.*;;; s; ;;g; \
+ s;armv4l;arm;g; \
+ s;PowerMacintosh;power;g; \
+ s;macppc;power;g; \
+ s;ppc64;power;g; \
+ s;ppc;power;g; \
+ '` export OBJTYPE; \
PATH=/bin:/usr/bin:/usr/local/bin:`pwd`/../bin:$$PATH export PATH; \
PLAN9=`pwd`/.. export PLAN9; \
sh -x mkmk.sh
diff --git a/src/libthread/Linux-arm-asm.s b/src/libthread/Linux-arm-asm.s
t@@ -0,0 +1,53 @@
+
+.globl _tas
+_tas:
+ mov r3, #0xCA000000
+ add r3, r3, #0xFE0000
+ add r3, r3, #0xBA00
+ add r3, r3, #0xBE
+ swp r3, r3, [r0]
+ mov r0, r3
+ mov pc, lr
+
+.globl getmcontext
+getmcontext:
+ /* r0 will be overwritten */
+ str r1, [r0,#4]!
+ str r2, [r0,#4]!
+ str r3, [r0,#4]!
+ str r4, [r0,#4]!
+ str r5, [r0,#4]!
+ str r6, [r0,#4]!
+ str r7, [r0,#4]!
+ str r8, [r0,#4]!
+ str r9, [r0,#4]!
+ str r10, [r0,#4]!
+ str r11, [r0,#4]!
+ str r12, [r0,#4]!
+ str r13, [r0,#4]!
+ str r14, [r0,#4]!
+ /* r15 is pc */
+ mov r0, #0
+ mov pc, lr
+
+.globl setmcontext
+setmcontext:
+ /* r0 will be overwritten */
+ ldr r1, [r0,#4]!
+ ldr r2, [r0,#4]!
+ ldr r3, [r0,#4]!
+ ldr r4, [r0,#4]!
+ ldr r5, [r0,#4]!
+ ldr r6, [r0,#4]!
+ ldr r7, [r0,#4]!
+ ldr r8, [r0,#4]!
+ ldr r9, [r0,#4]!
+ ldr r10, [r0,#4]!
+ ldr r11, [r0,#4]!
+ ldr r12, [r0,#4]!
+ ldr r13, [r0,#4]!
+ ldr r14, [r0,#4]!
+ /* r15 is pc */
+ mov r0, #1
+ mov pc, lr
+
diff --git a/src/libthread/Linux.c b/src/libthread/Linux.c
t@@ -436,3 +436,43 @@ _threadpexit(void)
_exit(0);
}
+#ifdef __arm__
+extern int getmcontext(mcontext_t*);
+extern int setmcontext(const mcontext_t*);
+
+void
+makecontext(ucontext_t *uc, void (*fn)(void), int argc, ...)
+{
+ int i, *sp;
+ va_list arg;
+
+ sp = (int*)uc->uc_stack.ss_sp+uc->uc_stack.ss_size/4;
+ va_start(arg, argc);
+ for(i=0; i<4 && i<argc; i++)
+ uc->uc_mcontext.gregs[0] = va_arg(arg, uint);
+ uc->uc_mcontext.gregs[13] = (uint)sp;
+ uc->uc_mcontext.gregs[14] = (uint)fn;
+}
+
+int
+getcontext(ucontext_t *uc)
+{
+ return getmcontext(&uc->uc_mcontext);
+}
+
+int
+setcontext(const ucontext_t *uc)
+{
+ setmcontext(&uc->uc_mcontext);
+ return 0; /* not reached */
+}
+
+int
+swapcontext(ucontext_t *oucp, const ucontext_t *ucp)
+{
+ if(getcontext(oucp) == 0)
+ setcontext(ucp);
+ return 0;
+}
+#endif
+
diff --git a/src/mkhdr b/src/mkhdr
t@@ -1,9 +1,11 @@
SYSNAME=`uname`
+# objtype rules also in Makefile
OBJTYPE=`uname -m | sed '
s;i.86;386;;
s;amd64;x86_64;;
s;/.*;;;
s; ;;g;
+ s;armv4l;arm;g;
s;PowerMacintosh;power;g;
s;macppc;power;g;
s;ppc64;power;g;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.