summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/ap/amd64/main9p.s
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-02-01 10:31:41 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2014-02-01 10:31:41 +0100
commited9e9f98e9cc502c72b27c68612e9e187ec11e10 (patch)
tree42901d0156503dadce4bf1f0b60e9ef850c3c5e0 /sys/src/ape/lib/ap/amd64/main9p.s
parentd4fb753c9c90e0ca745a1b3708ad3ec4ca523e71 (diff)
libc and ape support for amd64
Diffstat (limited to 'sys/src/ape/lib/ap/amd64/main9p.s')
-rw-r--r--sys/src/ape/lib/ap/amd64/main9p.s45
1 files changed, 45 insertions, 0 deletions
diff --git a/sys/src/ape/lib/ap/amd64/main9p.s b/sys/src/ape/lib/ap/amd64/main9p.s
new file mode 100644
index 000000000..dfd3450ea
--- /dev/null
+++ b/sys/src/ape/lib/ap/amd64/main9p.s
@@ -0,0 +1,45 @@
+#define NPRIVATES 16
+
+GLOBL _tos(SB), $8
+GLOBL _privates(SB), $8
+GLOBL _nprivates(SB), $8
+
+TEXT _mainp(SB), 1, $(3*8+NPRIVATES*8)
+
+ /* _tos = arg */
+ MOVQ AX, _tos(SB)
+ LEAQ 8(SP), AX
+ MOVQ AX, _privates(SB)
+ MOVQ $NPRIVATES, _nprivates(SB)
+
+ /* _profmain(); */
+ CALL _profmain(SB)
+
+ /* _tos->prof.pp = _tos->prof.next; */
+ MOVQ _tos+0(SB),DX
+ MOVQ 4(DX),CX
+ MOVQ CX,(DX)
+
+ CALL _envsetup(SB)
+
+ /* main(argc, argv, environ); */
+ MOVL inargc-8(FP), RARG
+ LEAQ inargv+0(FP), AX
+ MOVQ AX, 8(SP)
+ MOVQ environ(SB), AX
+ MOVQ AX, 16(SP)
+ CALL main(SB)
+
+loop:
+ MOVL AX, RARG
+ CALL exit(SB)
+ MOVQ $_profin(SB), AX /* force loading of profile */
+ MOVL $0, AX
+ JMP loop
+
+TEXT _savearg(SB), 1, $0
+ RET
+
+TEXT _callpc(SB), 1, $0
+ MOVQ 8(RARG), AX
+ RET