diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-04-20 15:44:41 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-04-20 15:44:41 +0200 |
commit | 50104cc32a498f7517a51c8dc93106c51c7a54b4 (patch) | |
tree | 47af80be259cc7c45d0eaec7d42e61fa38c8e4fb /src/pkg/runtime/freebsd/386/sys.s | |
parent | c072558b90f1bbedc2022b0f30c8b1ac4712538e (diff) | |
download | golang-upstream/2011.03.07.1.tar.gz |
Imported Upstream version 2011.03.07.1upstream/2011.03.07.1
Diffstat (limited to 'src/pkg/runtime/freebsd/386/sys.s')
-rw-r--r-- | src/pkg/runtime/freebsd/386/sys.s | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/src/pkg/runtime/freebsd/386/sys.s b/src/pkg/runtime/freebsd/386/sys.s index 7110e6924..60c189bf8 100644 --- a/src/pkg/runtime/freebsd/386/sys.s +++ b/src/pkg/runtime/freebsd/386/sys.s @@ -111,30 +111,36 @@ TEXT runtime·sigaction(SB),7,$-4 CALL runtime·notok(SB) RET -TEXT runtime·sigtramp(SB),7,$40 - // g = m->gsignal - get_tls(DX) - MOVL m(DX), BP - MOVL m_gsignal(BP), BP - MOVL BP, g(DX) +TEXT runtime·sigtramp(SB),7,$44 + get_tls(CX) - MOVL signo+0(FP), AX - MOVL siginfo+4(FP), BX - MOVL context+8(FP), CX + // save g + MOVL g(CX), DI + MOVL DI, 20(SP) + + // g = m->gsignal + MOVL m(CX), BX + MOVL m_gsignal(BX), BX + MOVL BX, g(CX) - MOVL AX, 0(SP) + // copy arguments for call to sighandler + MOVL signo+0(FP), BX + MOVL BX, 0(SP) + MOVL info+4(FP), BX MOVL BX, 4(SP) - MOVL CX, 8(SP) - CALL runtime·sighandler(SB) + MOVL context+8(FP), BX + MOVL BX, 8(SP) + MOVL DI, 12(SP) - // g = m->curg - get_tls(DX) - MOVL m(DX), BP - MOVL m_curg(BP), BP - MOVL BP, g(DX) + CALL runtime·sighandler(SB) + // restore g + get_tls(CX) + MOVL 20(SP), BX + MOVL BX, g(CX) + + // call sigreturn MOVL context+8(FP), AX - MOVL $0, 0(SP) // syscall gap MOVL AX, 4(SP) MOVL $417, AX // sigreturn(ucontext) |