]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime: mark sigtramp as TOPFRAME
authorMichael Pratt <mpratt@google.com>
Tue, 26 Apr 2022 18:42:34 +0000 (14:42 -0400)
committerGopher Robot <gobot@golang.org>
Thu, 28 Apr 2022 16:29:07 +0000 (16:29 +0000)
Currently throw() in the signal handler results in "fatal error: unknown
return pc from runtime.sigreturn ...".

Marking sigtramp as TOPFRAME allows gentraceback to stop tracebacks at
the end of a signal handler, since there is not much beyond sigtramp.

This is just done on Linux for now, but may apply to other Unix systems
as well.

Change-Id: I96edcb945283f417a5bfe00ce2fb2b1a0d578692
Reviewed-on: https://go-review.googlesource.com/c/go/+/402190
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Michael Pratt <mpratt@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/runtime/sys_linux_386.s
src/runtime/sys_linux_amd64.s
src/runtime/sys_linux_arm.s
src/runtime/sys_linux_arm64.s
src/runtime/sys_linux_mips64x.s
src/runtime/sys_linux_mipsx.s
src/runtime/sys_linux_ppc64x.s
src/runtime/sys_linux_riscv64.s
src/runtime/sys_linux_s390x.s

index fef68d51dcdb432627883810cc927286f0531526..4942f21e4f430c93a9c1e5c6ad9f20a6087487bf 100644 (file)
@@ -433,7 +433,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$12-16
        RET
 
 // Called using C ABI.
-TEXT runtime·sigtramp(SB),NOSPLIT,$28
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$28
        // Save callee-saved C registers, since the caller may be a C signal handler.
        MOVL    BX, bx-4(SP)
        MOVL    BP, bp-8(SP)
index f2dfbbb70c3fc5a3dd611a37d7ea60feb3985c51..ca6ecb13eb7e06d98316e2c715445b46ce655ef0 100644 (file)
@@ -339,7 +339,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
        RET
 
 // Called using C ABI.
-TEXT runtime·sigtramp(SB),NOSPLIT,$0
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$0
        // Transition from C ABI to Go ABI.
        PUSH_REGS_HOST_TO_ABI0()
 
index 201940b4e6d48d29554c254e502fdb4fc1b5abeb..66bf40328ebbdb2afecbee871d8dfa4aae2fd7ce 100644 (file)
@@ -566,7 +566,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-16
        MOVW    R4, R13
        RET
 
-TEXT runtime·sigtramp(SB),NOSPLIT,$0
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$0
        // Reserve space for callee-save registers and arguments.
        MOVM.DB.W [R4-R11], (R13)
        SUB     $16, R13
index 8e7cbf7d11e07b87a1aff9f4d8693b1460e2d301..b47b6fd0a05f6d857deb78e38a4a97facd28010e 100644 (file)
@@ -445,7 +445,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
        RET
 
 // Called from c-abi, R0: sig, R1: info, R2: cxt
-TEXT runtime·sigtramp(SB),NOSPLIT,$176
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$176
        // Save callee-save registers in the case of signal forwarding.
        // Please refer to https://golang.org/issue/31827 .
        SAVE_R19_TO_R28(8*4)
index 3c7f0e73078768614b0e8f730c159743c2d0f2e2..06d54dff78f0c60df0fb9c8bbd382f70e725b1ee 100644 (file)
@@ -405,7 +405,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
        JAL     (R25)
        RET
 
-TEXT runtime·sigtramp(SB),NOSPLIT,$64
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$64
        // initialize REGSB = PC&0xffffffff00000000
        BGEZAL  R0, 1(PC)
        SRLV    $32, R31, RSB
index ab4e976ee4d770db2ecdabff215700e9ae49ab96..e70edcc0e22fdc017b2c6e770dcb026f78f4a7f8 100644 (file)
@@ -311,7 +311,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-16
        MOVW    R22, R29
        RET
 
-TEXT runtime·sigtramp(SB),NOSPLIT,$12
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$12
        // this might be called in external code context,
        // where g is not set.
        MOVB    runtime·iscgo(SB), R1
index 48f933479523eb8cf15f7d789e0d998055bd8a6a..2913a05f56f86e9f2670a07a7a841cbe48f49125 100644 (file)
@@ -459,7 +459,7 @@ TEXT runtime·sigtramp(SB),NOSPLIT|NOFRAME,$0
        DWORD   $sigtramp<>(SB)
        DWORD   $0
        DWORD   $0
-TEXT sigtramp<>(SB),NOSPLIT|NOFRAME,$0
+TEXT sigtramp<>(SB),NOSPLIT|NOFRAME|TOPFRAME,$0
 #endif
        // Start with standard C stack frame layout and linkage.
        MOVD    LR, R0
index 8dde29eb92ab3a8da514b2457cc52fff7d976cc8..afb2d11da98fdc6af4abdac1e0f3a4b228fd502f 100644 (file)
@@ -417,7 +417,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
        RET
 
 // func sigtramp(signo, ureg, ctxt unsafe.Pointer)
-TEXT runtime·sigtramp(SB),NOSPLIT,$64
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$64
        MOVW    A0, 8(X2)
        MOV     A1, 16(X2)
        MOV     A2, 24(X2)
index 03ec7f03fd48d4c0984542becd308896675828aa..91ce1b3c8db4d3fc5ae4eb527344e2dd6a823b7d 100644 (file)
@@ -272,7 +272,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
 TEXT runtime·sigreturn(SB),NOSPLIT,$0-0
        RET
 
-TEXT runtime·sigtramp(SB),NOSPLIT,$64
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$64
        // initialize essential registers (just in case)
        XOR     R0, R0