• Austin Clements's avatar
    runtime: restore RSB for sigpanic call on mips64x · e5186895
    Austin Clements authored
    preparePanic must set all registers expected by Go runtime conventions
    in case the sigpanic is being injected into C code. However, on
    mips64x it fails to restore RSB (R28). As a result, if C code modifies
    RSB and then raises a signal that turns into a sigpanic call, sigpanic
    may crash when it attempts to lock runtime.debuglock (the first global
    it references).
    
    Fix this by restoring RSB in the signal context using the same
    convention as main and sigtramp.
    
    Fixes #23641.
    
    Change-Id: Ib47e83df89e2a3eece10f480e4e91ce9e4424388
    Reviewed-on: https://go-review.googlesource.com/91156
    Run-TryBot: Austin Clements <austin@google.com>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    e5186895
signal_linux_mips64x.go 3.35 KB