Skip to content

Commit

Permalink
runtime: correct signal structs/offsets for openbsd/arm
Browse files Browse the repository at this point in the history
Update sigcontext and siginfo structs to match those currently in use by OpenBSD armv7.

Also correct the offset of the fault address field in the siginfo struct, which moved
due to the switch to EABI.

Change-Id: Icdd95222346239fcc04b95ae0fcefae09b7aa044
Reviewed-on: https://go-review.googlesource.com/c/154077
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
  • Loading branch information
4a6f656c committed Dec 13, 2018
1 parent b6e6870 commit f95578c
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
12 changes: 8 additions & 4 deletions src/runtime/defs_openbsd_arm.go
Expand Up @@ -114,13 +114,17 @@ type sigcontext struct {
sc_usr_lr uint32
sc_svc_lr uint32
sc_pc uint32
sc_fpused uint32
sc_fpscr uint32
sc_fpreg [32]uint64
}

type siginfo struct {
si_signo int32
si_code int32
si_errno int32
_data [116]byte
si_signo int32
si_code int32
si_errno int32
pad_cgo_0 [4]byte
_data [120]byte
}

type stackt struct {
Expand Down
4 changes: 2 additions & 2 deletions src/runtime/signal_openbsd_arm.go
Expand Up @@ -45,7 +45,7 @@ func (c *sigctxt) oldmask() uint32 { return 0 }

func (c *sigctxt) sigcode() uint32 { return uint32(c.info.si_code) }
func (c *sigctxt) sigaddr() uint32 {
return *(*uint32)(add(unsafe.Pointer(c.info), 12))
return *(*uint32)(add(unsafe.Pointer(c.info), 16))
}

func (c *sigctxt) set_pc(x uint32) { c.regs().sc_pc = x }
Expand All @@ -55,5 +55,5 @@ func (c *sigctxt) set_r10(x uint32) { c.regs().sc_r10 = x }

func (c *sigctxt) set_sigcode(x uint32) { c.info.si_code = int32(x) }
func (c *sigctxt) set_sigaddr(x uint32) {
*(*uint32)(add(unsafe.Pointer(c.info), 12)) = x
*(*uint32)(add(unsafe.Pointer(c.info), 16)) = x
}

0 comments on commit f95578c

Please sign in to comment.