]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix riscv64 sigaction mask field offset
authorRhys Hiltner <rhys@justin.tv>
Tue, 30 Nov 2021 00:48:34 +0000 (16:48 -0800)
committerCherry Mui <cherryyz@google.com>
Wed, 1 Dec 2021 16:55:04 +0000 (16:55 +0000)
The Linux kernel for riscv64 does not include an sa_restorer field on
its sigaction struct, and expects sa_mask to come immediately after the
sa_flags field. Arrange the fields of the sigaction struct that are
known to the kernel so they appear at the correct byte offsets, and so
they agree with the output of "go tool cgo -godefs".

Follow the example set by the mips/mipsle port to leave the sa_restorer
field in place, but at an offset where it won't hurt anything.

Fixes #49709

Change-Id: I9bb0d7dbd7439d07e3a204461c7d790f33fd4977
Reviewed-on: https://go-review.googlesource.com/c/go/+/367635
Run-TryBot: Rhys Hiltner <rhys@justin.tv>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
Trust: Ian Lance Taylor <iant@golang.org>

src/runtime/defs_linux_riscv64.go

index 332720a8c848d1d6f45ca23e930f196eb6a5bf81..747e26bc4b6d9acfe7a14a59ee1a658b132c9170 100644 (file)
@@ -122,10 +122,12 @@ func (tv *timeval) set_usec(x int32) {
 }
 
 type sigactiont struct {
-       sa_handler  uintptr
-       sa_flags    uint64
+       sa_handler uintptr
+       sa_flags   uint64
+       sa_mask    uint64
+       // Linux on riscv64 does not have the sa_restorer field, but the setsig
+       // function references it (for x86). Not much harm to include it at the end.
        sa_restorer uintptr
-       sa_mask     uint64
 }
 
 type siginfoFields struct {