git: 9front

Download patch

ref: 117b1e300a41e48ec4ff13b8f0de27d5ac1c69ee
parent: aa2f5f17f52ef838a2352b5eb92bf6b4ebd48815
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Mon Dec 3 00:22:21 EST 2012

ape: initialize _tos and use _tos->pid for getpid()

--- a/sys/src/ape/lib/ap/386/main9.s
+++ b/sys/src/ape/lib/ap/386/main9.s
@@ -1,4 +1,16 @@
-	TEXT	_main(SB), 1, $12
+#define NPRIVATES	16
+
+GLOBL	_tos(SB), $4
+GLOBL	_privates(SB), $4
+GLOBL	_nprivates(SB), $4
+
+TEXT	_main(SB), 1, $(3*4+NPRIVATES*4)
+
+	/* _tos = arg */
+	MOVL	AX, _tos(SB)
+	LEAL	8(SP), AX
+	MOVL	AX, _privates(SB)
+	MOVL	$NPRIVATES, _nprivates(SB)
 
 	CALL	_envsetup(SB)
 	MOVL	inargc-4(FP), AX
--- a/sys/src/ape/lib/ap/68020/main9.s
+++ b/sys/src/ape/lib/ap/68020/main9.s
@@ -1,5 +1,17 @@
-TEXT	_main(SB), 1, $16
+#define NPRIVATES	16
+
+GLOBL	_tos(SB), $4
+GLOBL	_privates(SB), $4
+GLOBL	_nprivates(SB), $4
+
+TEXT	_main(SB), 1, $(3*4+NPRIVATES*4)
 	MOVL	$a6base(SB), A6
+
+	/* _tos = arg */
+	MOVL	R0, _tos(SB)		/* return value of sys exec!! */
+	LEA	private+8(SP), _privates(SB)
+	MOVL	$NPRIVATES, _nprivates(SB)
+
 	PEA	inargv+0(FP)
 	MOVL	inargc-4(FP), TOS
 	BSR	_envsetup(SB)
--- a/sys/src/ape/lib/ap/alpha/main9.s
+++ b/sys/src/ape/lib/ap/alpha/main9.s
@@ -1,6 +1,19 @@
-TEXT	_main(SB), 1, $16
+#define NPRIVATES	16
 
+GLOBL	_tos(SB), $4
+GLOBL	_privates(SB), $4
+GLOBL	_nprivates(SB), $4
+
+TEXT	_main(SB), 1, $(3*4+NPRIVATES*4)
 	MOVQ	$setSB(SB), R29
+
+	/* _tos = arg */
+	MOVL	R0, _tos(SB)
+	MOVQ	$8(SP), R1
+	MOVL	R1, _privates(SB)
+	MOVQ	$NPRIVATES, R1
+	MOVL	R1, _nprivates(SB)
+
 	JSR	_envsetup(SB)
 	MOVL	inargc-8(FP), R0
 	MOVL	$inargv-4(FP), R1
--- a/sys/src/ape/lib/ap/arm/main9.s
+++ b/sys/src/ape/lib/ap/arm/main9.s
@@ -2,8 +2,23 @@
 sp=13
 sb=12
 
-TEXT	_main(SB), 1, $16
+#define NPRIVATES	16
+
+GLOBL	_tos(SB), $4
+GLOBL	_privates(SB), $4
+GLOBL	_nprivates(SB), $4
+
+TEXT	_main(SB), 1, $(3*4+NPRIVATES*4)
+
 	MOVW	$setR12(SB), R(sb)
+
+	/* _tos = arg */
+	MOVW	R(arg), _tos(SB)
+	MOVW	$private+8(SP), R1
+	MOVW	R1, _privates(SB)
+	MOVW	$NPRIVATES, R1
+	MOVW	R1, _nprivates(SB)
+
 	BL	_envsetup(SB)
 	MOVW	$inargv+0(FP), R(arg)
 	MOVW	R(arg), 8(R(sp))
--- a/sys/src/ape/lib/ap/mips/main9.s
+++ b/sys/src/ape/lib/ap/mips/main9.s
@@ -1,5 +1,27 @@
-	TEXT	_main(SB), $16
+#define NPRIVATES	16
+
+GLOBL	_tos(SB), $4
+GLOBL	_privates(SB), $4
+GLOBL	_nprivates(SB), $4
+
+TEXT	_main(SB), 1, $(3*4+NPRIVATES*4)
 	MOVW	$setR30(SB), R30
+
+	/* _tos = arg */
+	MOVW	R1, _tos(SB)
+/*
+	MOVW	$0,FCR31
+	NOR	R0,R0
+	MOVD	$0.5, F26
+	SUBD	F26, F26, F24
+	ADDD	F26, F26, F28
+	ADDD	F28, F28, F30
+*/
+	MOVW	$8(SP), R1
+	MOVW	R1, _privates(SB)
+	MOVW	$NPRIVATES, R1
+	MOVW	R1, _nprivates(SB)
+
 	JAL	_envsetup(SB)
 	MOVW	inargc-4(FP), R1
 	MOVW	$inargv+0(FP), R2
--- a/sys/src/ape/lib/ap/plan9/getpid.c
+++ b/sys/src/ape/lib/ap/plan9/getpid.c
@@ -5,18 +5,13 @@
 #include <errno.h>
 #include "sys9.h"
 
+typedef long long vlong;
+typedef unsigned long ulong;
+typedef unsigned long long uvlong;
+#include	"/sys/include/tos.h"
+
 pid_t
 getpid(void)
 {
-	int n, f;
-	char pidbuf[15];
-
-	f = _OPEN("#c/pid", 0);
-	n = _READ(f, pidbuf, sizeof pidbuf);
-	if(n < 0)
-		_syserrno();
-	else
-		n = atoi(pidbuf);
-	_CLOSE(f);
-	return n;
+	return _tos->pid;
 }
--- a/sys/src/ape/lib/ap/power/main9.s
+++ b/sys/src/ape/lib/ap/power/main9.s
@@ -1,8 +1,21 @@
-TEXT	_main(SB), 1, $16
+#define NPRIVATES	16
 
+GLOBL	_tos(SB), $4
+GLOBL	_privates(SB), $4
+GLOBL	_nprivates(SB), $4
+
+TEXT	_main(SB), 1, $(3*4+NPRIVATES*4)
+
 	MOVW	$setSB(SB), R2
 
-	BL		_envsetup(SB)
+	/* _tos = arg */
+	MOVW	R3, _tos(SB)
+	MOVW	$8(SP), R1
+	MOVW	R1, _privates(SB)
+	MOVW	$NPRIVATES, R1
+	MOVW	R1, _nprivates(SB)
+
+	BL	_envsetup(SB)
 	MOVW	inargc-4(FP), R3
 	MOVW	$inargv+0(FP), R4
 	MOVW	R3, 4(R1)
--- a/sys/src/ape/lib/ap/sparc/main9.s
+++ b/sys/src/ape/lib/ap/sparc/main9.s
@@ -1,5 +1,26 @@
-	TEXT	_main(SB), $16
+#define NPRIVATES	16
+
+GLOBL	_tos(SB), $4
+GLOBL	_privates(SB), $4
+GLOBL	_nprivates(SB), $4
+
+TEXT	_main(SB), 1, $(3*4+NPRIVATES*4)
 	MOVW	$setSB(SB), R2
+
+	/* _tos = arg */
+	MOVW	R7, _tos(SB)
+/*
+	MOVW	_fpsr+0(SB), FSR
+	FMOVD	$0.5, F26
+	FSUBD	F26, F26, F24
+	FADDD	F26, F26, F28
+	FADDD	F28, F28, F30
+*/
+	MOVW	$8(SP), R1
+	MOVW	R1, _privates(SB)
+	MOVW	$NPRIVATES, R1
+	MOVW	R1, _nprivates(SB)
+
 	JMPL	_envsetup(SB)
 	MOVW	inargc-4(FP), R7
 	MOVW	$inargv+0(FP), R8
--