diff options
| author | Ken Thompson <ken@golang.org> | 2008-06-27 13:03:19 -0700 |
|---|---|---|
| committer | Ken Thompson <ken@golang.org> | 2008-06-27 13:03:19 -0700 |
| commit | 1f6828bcdf27a46160c12b859e6bab216cd11940 (patch) | |
| tree | dc9788315b1d59c70656abf607d3846179a762ec /src/runtime/rt0_amd64_linux.s | |
| parent | f977e251fa3f782ad640889bbe72336af83399dd (diff) | |
| download | go-1f6828bcdf27a46160c12b859e6bab216cd11940.tar.xz | |
segmented stack
SVN=125151
Diffstat (limited to 'src/runtime/rt0_amd64_linux.s')
| -rw-r--r-- | src/runtime/rt0_amd64_linux.s | 73 |
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 |
