From 3719aa4d9ab3672ebb4c82bcabfa2a57ecb6e596 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Fri, 27 Jun 2008 13:10:56 -0700 Subject: [PATCH] update darwin for segmented stacks SVN=125154 --- src/runtime/rt0_amd64_darwin.s | 73 ++++++++++++++++++++-------------- src/runtime/rt0_amd64_linux.s | 2 +- 2 files changed, 45 insertions(+), 30 deletions(-) diff --git a/src/runtime/rt0_amd64_darwin.s b/src/runtime/rt0_amd64_darwin.s index c7d77c49d7..c32b7770e1 100644 --- a/src/runtime/rt0_amd64_darwin.s +++ b/src/runtime/rt0_amd64_darwin.s @@ -3,43 +3,56 @@ // license that can be found in the LICENSE file. -TEXT _rt0_amd64_darwin(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 - -loop: - ADDQ $8, CX - CMPQ (CX), $0 - JNE loop - -done: - ADDQ $8, CX - SUBQ $16, SP - MOVL DI, 0(SP) - MOVQ SI, 8(SP) - CALL args(SB) - ADDQ $16, SP +TEXT _rt0_amd64_darwin(SB),7,$-8 + +// 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) + 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),7,$-8 RET -TEXT sys·exit(SB),7,$-8 +TEXT sys·exit(SB),1,$-8 MOVL 8(SP), DI // arg 1 exit status MOVL $(0x2000000+1), AX SYSCALL @@ -138,7 +151,9 @@ TEXT sys·memclr(SB),1,$-8 STOSQ RET -TEXT sys·getcallerpc+0(SB),0,$0 +TEXT sys·getcallerpc+0(SB),1,$0 MOVQ x+0(FP),AX MOVQ -8(AX),AX RET + +GLOBL peruser<>(SB),$64 diff --git a/src/runtime/rt0_amd64_linux.s b/src/runtime/rt0_amd64_linux.s index 6e2c42fba6..1dd77e4711 100644 --- a/src/runtime/rt0_amd64_linux.s +++ b/src/runtime/rt0_amd64_linux.s @@ -154,7 +154,7 @@ TEXT sys·memclr(SB),1,$-8 STOSQ RET -TEXT sys·getcallerpc+0(SB),0,$0 +TEXT sys·getcallerpc+0(SB),1,$0 MOVQ x+0(FP),AX MOVQ -8(AX),AX RET -- 2.48.1