From: Russ Cox Date: Tue, 17 Nov 2009 01:51:47 +0000 (-0800) Subject: runtime: make signal handler work on 386 X-Git-Tag: weekly.2009-11-17~29 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=597b2a91a62b79513e50e96fc464ae51cd35971b;p=gostls13.git runtime: make signal handler work on 386 R=r https://golang.org/cl/154171 --- diff --git a/src/pkg/runtime/darwin/386/sys.s b/src/pkg/runtime/darwin/386/sys.s index 719fcbb5f0..66253c99d3 100644 --- a/src/pkg/runtime/darwin/386/sys.s +++ b/src/pkg/runtime/darwin/386/sys.s @@ -58,23 +58,34 @@ TEXT sigaction(SB),7,$0 // 16(FP) siginfo // 20(FP) context TEXT sigtramp(SB),7,$40 + // Darwin sets GS to 0x37 on entry. + // The original GS is at 0x70(FP). + MOVL oldgs+0x70(FP), BX + MOVW BX, GS + // g = m->gsignal MOVL m, BP MOVL m_gsignal(BP), BP MOVL BP, g - MOVL handler+4(FP), DI - MOVL signo+12(FP), AX - MOVL siginfo+16(FP), BX - MOVL context+20(FP), CX + MOVL handler+0(FP), DI + // 4(FP) is sigstyle + MOVL signo+8(FP), AX + MOVL siginfo+12(FP), BX + MOVL context+16(FP), CX MOVL AX, 0(SP) MOVL BX, 4(SP) MOVL CX, 8(SP) CALL DI - MOVL context+20(FP), CX - MOVL style+8(FP), BX + // g = m->curg + MOVL m, BP + MOVL m_curg(BP), BP + MOVL BP, g + + MOVL context+16(FP), CX + MOVL style+4(FP), BX MOVL $0, 0(SP) // "caller PC" - ignored MOVL CX, 4(SP) diff --git a/src/pkg/runtime/darwin/os.h b/src/pkg/runtime/darwin/os.h index 2a3ca87bd0..2e493aed05 100644 --- a/src/pkg/runtime/darwin/os.h +++ b/src/pkg/runtime/darwin/os.h @@ -17,7 +17,7 @@ uint32 mach_thread_self(void); uint32 mach_thread_self(void); struct Sigaction; -void sigaction(int64, struct Sigaction*, struct Sigaction*); +void sigaction(uintptr, struct Sigaction*, struct Sigaction*); struct StackT; void sigaltstack(struct StackT*, struct StackT*);