Commit bbae8d55 authored by Joel Sing's avatar Joel Sing

syscall: use correct cmsg alignment for openbsd/arm

The OpenBSD armv7 port requires 64-bit alignment for cmsgs.

Rework the cmsg alignment code to facilitate this.

Change-Id: I52cf55a8a4cda46c6ef35b0f694862b842028b42
Reviewed-on: https://go-review.googlesource.com/c/153837
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 09da2801
...@@ -8,17 +8,30 @@ ...@@ -8,17 +8,30 @@
package syscall package syscall
import "unsafe" import (
"runtime"
"unsafe"
)
// Round the length of a raw sockaddr up to align it properly. // Round the length of a raw sockaddr up to align it properly.
func cmsgAlignOf(salen int) int { func cmsgAlignOf(salen int) int {
salign := sizeofPtr salign := sizeofPtr
// NOTE: It seems like 64-bit Darwin, DragonFly BSD and
// Solaris kernels still require 32-bit aligned access to switch runtime.GOOS {
// network subsystem. case "darwin", "dragonfly", "solaris":
if darwin64Bit || dragonfly64Bit || solaris64Bit { // NOTE: It seems like 64-bit Darwin, DragonFly BSD and
salign = 4 // Solaris kernels still require 32-bit aligned access to
// network subsystem.
if sizeofPtr == 8 {
salign = 4
}
case "openbsd":
// OpenBSD armv7 requires 64-bit alignment.
if runtime.GOARCH == "arm" {
salign = 8
}
} }
return (salen + salign - 1) & ^(salign - 1) return (salen + salign - 1) & ^(salign - 1)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment