aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/rt0_amd64_linux.s
diff options
context:
space:
mode:
authorKen Thompson <ken@golang.org>2008-06-27 13:03:19 -0700
committerKen Thompson <ken@golang.org>2008-06-27 13:03:19 -0700
commit1f6828bcdf27a46160c12b859e6bab216cd11940 (patch)
treedc9788315b1d59c70656abf607d3846179a762ec /src/runtime/rt0_amd64_linux.s
parentf977e251fa3f782ad640889bbe72336af83399dd (diff)
downloadgo-1f6828bcdf27a46160c12b859e6bab216cd11940.tar.xz
segmented stack
SVN=125151
Diffstat (limited to 'src/runtime/rt0_amd64_linux.s')
-rw-r--r--src/runtime/rt0_amd64_linux.s73
1 files changed, 41 insertions, 32 deletions
diff --git a/src/runtime/rt0_amd64_linux.s b/src/runtime/rt0_amd64_linux.s
index d89dc927ef..6e2c42fba6 100644
--- a/src/runtime/rt0_amd64_linux.s
+++ b/src/runtime/rt0_amd64_linux.s
@@ -3,48 +3,59 @@
// license that can be found in the LICENSE file.
-TEXT _rt0_amd64_linux(SB),1,$-8
- PUSHQ $0
- MOVQ SP, BP
- ANDQ $~15, SP
- MOVQ 8(BP), DI // argc
- LEAQ 16(BP), SI // argv
- MOVL DI, DX
- ADDL $1, DX
- SHLL $3, DX
- ADDQ SI, DX
- MOVQ DX, CX
- CMPQ (CX), $0
- JEQ done
+TEXT _rt0_amd64_linux(SB),7,$-8
-loop:
- ADDQ $8, CX
- CMPQ (CX), $0
- JNE loop
+// copy arguments forward on an even stack
+
+
+ MOVQ 0(SP), AX // argc
+ LEAQ 8(SP), BX // argv
+ ANDQ $~7, SP
+ SUBQ $32, SP
+ MOVQ AX, 16(SP)
+ MOVQ BX, 24(SP)
+
+// allocate the per-user block
+
+ LEAQ peruser<>(SB), R15 // dedicated u. register
+ MOVQ SP, AX
+ SUBQ $4096, AX
+ MOVQ AX, 0(R15)
-done:
- ADDQ $8, CX
- SUBQ $16, SP
- MOVL DI, 0(SP)
- MOVQ SI, 8(SP)
- CALL args(SB)
- ADDQ $16, SP
CALL check(SB)
+
+// process the arguments
+
+ MOVL 16(SP), AX
+ MOVL AX, 0(SP)
+ MOVQ 24(SP), AX
+ MOVQ AX, 8(SP)
+ CALL args(SB)
+
CALL main·main(SB)
+
+ MOVQ $0, AX
+ MOVQ AX, 0(SP) // exit status
CALL sys·exit(SB)
+
CALL notok(SB)
- POPQ AX
+
+ ADDQ $32, SP
+ RET
+
+TEXT _morestack(SB), 7, $0
+ MOVQ SP, AX
+ SUBQ $1024, AX
+ MOVQ AX, 0(R15)
RET
-TEXT FLUSH(SB),1,$-8
+TEXT FLUSH(SB),7,$-8
RET
TEXT sys·exit(SB),1,$-8
MOVL 8(SP), DI
MOVL $60, AX
SYSCALL
- JCC 2(PC)
- CALL notok(SB)
RET
TEXT sys·write(SB),1,$-8
@@ -53,8 +64,6 @@ TEXT sys·write(SB),1,$-8
MOVL 24(SP), DX
MOVL $1, AX // syscall entry
SYSCALL
- JCC 2(PC)
- CALL notok(SB)
RET
TEXT open(SB),1,$-8
@@ -93,8 +102,6 @@ TEXT sys·rt_sigaction(SB),1,$-8
MOVL CX, R10
MOVL $13, AX // syscall entry
SYSCALL
- JCC 2(PC)
- CALL notok(SB)
RET
TEXT sigtramp(SB),1,$24
@@ -151,3 +158,5 @@ TEXT sys·getcallerpc+0(SB),0,$0
MOVQ x+0(FP),AX
MOVQ -8(AX),AX
RET
+
+GLOBL peruser<>(SB),$64