diff options
| author | Joel Sing <joel@sing.id.au> | 2018-12-13 00:38:37 +1100 |
|---|---|---|
| committer | Joel Sing <joel@sing.id.au> | 2018-12-13 00:47:37 +0000 |
| commit | bbae8d55083d14c414f32af638d5a5174b8027cc (patch) | |
| tree | f9d177b97595772b08a126265fc8ec82227db789 /src | |
| parent | 09da2801578519ee5597bdd4cbfa22d4d127cc6d (diff) | |
| download | go-bbae8d55083d14c414f32af638d5a5174b8027cc.tar.xz | |
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: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/syscall/sockcmsg_unix.go | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/syscall/sockcmsg_unix.go b/src/syscall/sockcmsg_unix.go index 5020033bad..954148012f 100644 --- a/src/syscall/sockcmsg_unix.go +++ b/src/syscall/sockcmsg_unix.go @@ -8,17 +8,30 @@ package syscall -import "unsafe" +import ( + "runtime" + "unsafe" +) // Round the length of a raw sockaddr up to align it properly. func cmsgAlignOf(salen int) int { salign := sizeofPtr - // NOTE: It seems like 64-bit Darwin, DragonFly BSD and - // Solaris kernels still require 32-bit aligned access to - // network subsystem. - if darwin64Bit || dragonfly64Bit || solaris64Bit { - salign = 4 + + switch runtime.GOOS { + case "darwin", "dragonfly", "solaris": + // NOTE: It seems like 64-bit Darwin, DragonFly BSD and + // 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) } |
