Bladeren bron

+ reworked to support resizing of stack

Károly Balogh 21 jaren geleden
bovenliggende
commit
3720331958
1 gewijzigde bestanden met toevoegingen van 141 en 16 verwijderingen
  1. 141 16
      rtl/morphos/prt0.as

+ 141 - 16
rtl/morphos/prt0.as

@@ -19,22 +19,102 @@
 	.globl	_start
 	.align	4
 _start:
-	stwu 1,-64(1)
+	stwu 1,-16(1)
 	mflr 0
-	stw 29,52(1)
-	stw 30,56(1)
-	stw 31,60(1)
-	stw 0,68(1)
-
-	/* Save Stackpointer */
-	lis 4,OriginalStkPtr@ha
-	stw 1,OriginalStkPtr@l(4)
+	stw 0,20(1)
 
 	/* Get ExecBase */
 	lwz 3,4(0)
 	lis 4,_ExecBase@ha
 	stw 3,_ExecBase@l(4)
 
+	/* Allocating new stack */
+   lis 4,__stklen@ha
+   lwz 3,__stklen@l(4)
+	stw 3,0(2)
+   li  3,1
+   stw 3,4(2)
+   lwz 3,4(0)
+   stw 3,56(2)
+   lwz 3,100(2)
+   mtlr 3
+   li  3,-684
+   blrl
+	lis 4,stackArea@ha
+	stw 3,stackArea@l(4)
+
+	/* Setting up stackSwap struct */
+	lis 4,stackSwap@ha
+   addi 4,4,stackSwap@l
+	stw 3,0(4)
+   lis 5,__stklen@ha
+   lwz 6,__stklen@l(5)
+	add 3,3,6
+	stw 3,4(4)
+   stw 3,8(4)
+
+   /* Calling main function with the new stack */
+	stw 4,32(2)
+	lis 4,_initproc@ha
+   addi 4,4,_initproc@l
+   stw 4,36(2)
+   li 3,0
+   stw 3,40(2)
+   lwz 4,100(2)
+   mtlr 4
+   li 3,-804
+   blrl
+
+	/* Freeing up stack area */
+   lis 4,stackArea@ha
+   lwz 3,stackArea@l(4)
+   stw 3,36(2)
+	lwz 3,4(0)
+   stw 3,56(2)
+   lwz 3,100(2)
+   mtlr 3
+   li 3,-690
+   blrl 
+
+	/* Setting return value */
+	lis 4,returnValue@ha
+   lwz 3,returnValue@l(4)
+
+	lwz 4,0(1)
+	lwz 0,4(4)
+	mtlr 0
+	mr 1,4
+	blr
+
+_initproc:
+   /* Save Linkregister */
+	stwu 1,-128(1)
+   mflr 0
+	stw 13,52(1)
+	stw 14,56(1)
+	stw 15,60(1)
+	stw 16,64(1)
+	stw 17,68(1)
+	stw 18,72(1)
+	stw 19,76(1)
+	stw 20,80(1)
+	stw 21,84(1)
+	stw 22,88(1)
+	stw 23,92(1)
+	stw 24,96(1)
+	stw 25,100(1)
+	stw 26,104(1)
+	stw 27,108(1)
+	stw 28,112(1)
+	stw 29,116(1)
+	stw 30,120(1)
+	stw 31,124(1)
+	stw 0,132(1)
+
+	/* Save Stackpointer */
+	lis 4,OriginalStkPtr@ha
+	stw 1,OriginalStkPtr@l(4)
+
 	bl	PASCALMAIN
 
 	.globl	_haltproc
@@ -43,13 +123,33 @@ _haltproc:
 	lis 4,OriginalStkPtr@ha
 	lwz 1,OriginalStkPtr@l(4)
 
-	lwz 11,0(1)
-	lwz 0,4(11)
+	/* Store return value */
+	lis 4,returnValue@ha
+	stw 3,returnValue@l(4)
+
+	lwz 4,0(1)
+	lwz 0,4(4)
 	mtlr 0
-	lwz 29,-12(11)
-	lwz 30,-8(11)
-	lwz 31,-4(11)
-	mr 1,11
+	lwz 13,-76(4)
+	lwz 14,-72(4)
+	lwz 15,-68(4)
+	lwz 16,-64(4)
+	lwz 17,-60(4)
+	lwz 18,-56(4)
+	lwz 19,-52(4)
+	lwz 20,-48(4)
+	lwz 21,-44(4)
+	lwz 22,-40(4)
+	lwz 23,-36(4)
+	lwz 24,-32(4)
+	lwz 25,-28(4)
+	lwz 26,-24(4)
+	lwz 27,-20(4)
+	lwz 28,-16(4)
+	lwz 29,-12(4)
+	lwz 30,-8(4)
+	lwz 31,-4(4)
+	mr 1,4
 	blr
 
 	.globl	_ExecBase
@@ -64,6 +164,28 @@ _ExecBase:
 OriginalStkPtr:
 	.long	0
 
+	.globl	OriginalLinkRegister
+	.align	4
+OriginalLinkRegister:
+	.long	0
+
+	.globl	returnValue
+	.align	4
+returnValue:
+	.long	0
+
+	.globl	stackArea
+	.align	4
+stackArea:
+	.long 0
+
+	.globl	stackSwap
+	.align	4
+stackSwap:
+	.long	0
+	.long	0
+	.long	0
+
 	/* This is needed to be a proper MOS ABox executable */
 	/* This symbol _MUST NOT_ be stripped out from the executable */
    /* or else... */
@@ -75,7 +197,10 @@ __abox__:
 
 /*
   $Log$
-  Revision 1.7  2004-05-13 01:15:42  karoly
+  Revision 1.8  2004-06-05 19:25:12  karoly
+    + reworked to support resizing of stack
+
+  Revision 1.7  2004/05/13 01:15:42  karoly
     - removed comment about argc/argv, made it work another way
 
   Revision 1.6  2004/05/01 15:08:57  karoly