summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/freebsd/amd64/sys.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/freebsd/amd64/sys.s')
-rw-r--r--src/pkg/runtime/freebsd/amd64/sys.s24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/pkg/runtime/freebsd/amd64/sys.s b/src/pkg/runtime/freebsd/amd64/sys.s
index b9cf3832d..d986e9ac0 100644
--- a/src/pkg/runtime/freebsd/amd64/sys.s
+++ b/src/pkg/runtime/freebsd/amd64/sys.s
@@ -90,15 +90,29 @@ TEXT runtime·sigaction(SB),7,$-8
CALL runtime·notok(SB)
RET
-TEXT runtime·sigtramp(SB),7,$24-16
- get_tls(CX)
- MOVQ m(CX), AX
- MOVQ m_gsignal(AX), AX
- MOVQ AX, g(CX)
+TEXT runtime·sigtramp(SB),7,$64
+ get_tls(BX)
+
+ // save g
+ MOVQ g(BX), R10
+ MOVQ R10, 40(SP)
+
+ // g = m->signal
+ MOVQ m(BX), BP
+ MOVQ m_gsignal(BP), BP
+ MOVQ BP, g(BX)
+
MOVQ DI, 0(SP)
MOVQ SI, 8(SP)
MOVQ DX, 16(SP)
+ MOVQ R10, 24(SP)
+
CALL runtime·sighandler(SB)
+
+ // restore g
+ get_tls(BX)
+ MOVQ 40(SP), R10
+ MOVQ R10, g(BX)
RET
TEXT runtime·mmap(SB),7,$0