]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use uintXX instead of *byte for si_addr on Darwin
authorAustin Clements <austin@google.com>
Thu, 26 Mar 2015 16:14:26 +0000 (12:14 -0400)
committerAustin Clements <austin@google.com>
Thu, 26 Mar 2015 16:20:32 +0000 (16:20 +0000)
Currently, Darwin's siginfo type uses *byte for the si_addr
field. This results in unwanted write barriers in set_sigaddr. It's
also pointless since it never points to anything real and the get/set
methods return/take uintXX and cast it from/to the pointer.

All other arches use a uint type for this field. Change Darwin to
match. This simplifies the get/set methods and eliminates the unwanted
write barriers.

Change-Id: Ifdb5646d35e1f2f6808b87a3d59745ec9718add1
Reviewed-on: https://go-review.googlesource.com/8086
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/defs_darwin_386.go
src/runtime/defs_darwin_amd64.go
src/runtime/defs_darwin_arm.go
src/runtime/signal_darwin_386.go
src/runtime/signal_darwin_amd64.go
src/runtime/signal_darwin_arm.go

index cf4812f9fabdea2e5116bd39ca8c7720d80d7492..e051301207db75ac284eb5c46af21e7c53a34554 100644 (file)
@@ -174,7 +174,7 @@ type siginfo struct {
        si_pid    int32
        si_uid    uint32
        si_status int32
-       si_addr   *byte
+       si_addr   uint32
        si_value  [4]byte
        si_band   int32
        __pad     [7]uint32
index 2cd4c0cd057afed37eda7ba5f0a482fcb3b985f5..d9d9fc551662ba80bde86d9601b2e593b5c2c07c 100644 (file)
@@ -175,7 +175,7 @@ type siginfo struct {
        si_pid    int32
        si_uid    uint32
        si_status int32
-       si_addr   *byte
+       si_addr   uint64
        si_value  [8]byte
        si_band   int64
        __pad     [7]uint64
index 92bab509fb1c4cacac0abda2775e810ad2b5aefc..b53336c1b46185bc129b509bca54f8f04360ba68 100644 (file)
@@ -176,7 +176,7 @@ type siginfo struct {
        si_pid    int32
        si_uid    uint32
        si_status int32
-       si_addr   *byte
+       si_addr   uint32
        si_value  [4]byte
        si_band   int32
        __pad     [7]uint32
index ccf30ef3160745f2aab049fb81a627a2f15e4770..302b3aafc9d9fe392f0916aeec534df9b22c1199 100644 (file)
@@ -26,9 +26,9 @@ func (c *sigctxt) cs() uint32      { return c.regs().cs }
 func (c *sigctxt) fs() uint32      { return c.regs().fs }
 func (c *sigctxt) gs() uint32      { return c.regs().gs }
 func (c *sigctxt) sigcode() uint32 { return uint32(c.info.si_code) }
-func (c *sigctxt) sigaddr() uint32 { return uint32(uintptr(unsafe.Pointer(c.info.si_addr))) }
+func (c *sigctxt) sigaddr() uint32 { return c.info.si_addr }
 
 func (c *sigctxt) set_eip(x uint32)     { c.regs().eip = x }
 func (c *sigctxt) set_esp(x uint32)     { c.regs().esp = x }
 func (c *sigctxt) set_sigcode(x uint32) { c.info.si_code = int32(x) }
-func (c *sigctxt) set_sigaddr(x uint32) { c.info.si_addr = (*byte)(unsafe.Pointer(uintptr(x))) }
+func (c *sigctxt) set_sigaddr(x uint32) { c.info.si_addr = x }
index 409bc6d5752dc299495161aee8d36add0959c6ee..dbf044814ce63eefde2bf061249c52108745dd37 100644 (file)
@@ -34,9 +34,9 @@ func (c *sigctxt) cs() uint64      { return c.regs().cs }
 func (c *sigctxt) fs() uint64      { return c.regs().fs }
 func (c *sigctxt) gs() uint64      { return c.regs().gs }
 func (c *sigctxt) sigcode() uint64 { return uint64(c.info.si_code) }
-func (c *sigctxt) sigaddr() uint64 { return uint64(uintptr(unsafe.Pointer(c.info.si_addr))) }
+func (c *sigctxt) sigaddr() uint64 { return c.info.si_addr }
 
 func (c *sigctxt) set_rip(x uint64)     { c.regs().rip = x }
 func (c *sigctxt) set_rsp(x uint64)     { c.regs().rsp = x }
 func (c *sigctxt) set_sigcode(x uint64) { c.info.si_code = int32(x) }
-func (c *sigctxt) set_sigaddr(x uint64) { c.info.si_addr = (*byte)(unsafe.Pointer(uintptr(x))) }
+func (c *sigctxt) set_sigaddr(x uint64) { c.info.si_addr = x }
index 1441a655ef6f19240df4ccb000450006ace342a0..0f1097193159b04fa19cc20263e1680afb31dbd5 100644 (file)
@@ -29,7 +29,7 @@ func (c *sigctxt) sp() uint32      { return c.regs().sp }
 func (c *sigctxt) lr() uint32      { return c.regs().lr }
 func (c *sigctxt) pc() uint32      { return c.regs().pc }
 func (c *sigctxt) cpsr() uint32    { return c.regs().cpsr }
-func (c *sigctxt) fault() uint32   { return uint32(uintptr(unsafe.Pointer(c.info.si_addr))) }
+func (c *sigctxt) fault() uint32   { return c.info.si_addr }
 func (c *sigctxt) sigcode() uint32 { return uint32(c.info.si_code) }
 func (c *sigctxt) trap() uint32    { return 0 }
 func (c *sigctxt) error() uint32   { return 0 }
@@ -41,4 +41,4 @@ func (c *sigctxt) set_lr(x uint32)  { c.regs().lr = x }
 func (c *sigctxt) set_r10(x uint32) { c.regs().r[10] = x }
 
 func (c *sigctxt) set_sigcode(x uint32) { c.info.si_code = int32(x) }
-func (c *sigctxt) set_sigaddr(x uint32) { c.info.si_addr = (*byte)(unsafe.Pointer(uintptr(x))) }
+func (c *sigctxt) set_sigaddr(x uint32) { c.info.si_addr = x }