]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: make signal handler work on 386
authorRuss Cox <rsc@golang.org>
Tue, 17 Nov 2009 01:51:47 +0000 (17:51 -0800)
committerRuss Cox <rsc@golang.org>
Tue, 17 Nov 2009 01:51:47 +0000 (17:51 -0800)
R=r
https://golang.org/cl/154171

src/pkg/runtime/darwin/386/sys.s
src/pkg/runtime/darwin/os.h

index 719fcbb5f04a44c6c689324bed6149e02c9af119..66253c99d36690898c920ddd59059a07d6f5e5cf 100644 (file)
@@ -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)
index 2a3ca87bd01ab28e04da548119565181c63ac7dd..2e493aed05efb9dc21b0e62de1bdae03b263001c 100644 (file)
@@ -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*);