mirror of https://github.com/golang/go.git
syscall, internal/routebsd: use hw.supported_arches on FreeBSD
Reading textual representation of the kernel config file to search for the "machine" config clause is awful, not to mention that kern.conftxt might be disabled at all. Use sysctl hw.supported_archs to detect 32bit binary running on amd64 host.
This commit is contained in:
parent
96a6e147b2
commit
9a9c35b386
|
|
@ -5,6 +5,7 @@
|
|||
package routebsd
|
||||
|
||||
import (
|
||||
"internal/stringslite"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
|
@ -25,26 +26,9 @@ func probeRoutingStack() (int, map[int]*wireFormat) {
|
|||
// to know the underlying kernel's architecture because the
|
||||
// alignment for routing facilities are set at the build time
|
||||
// of the kernel.
|
||||
conf, _ := syscall.Sysctl("kern.conftxt")
|
||||
for i, j := 0, 0; j < len(conf); j++ {
|
||||
if conf[j] != '\n' {
|
||||
continue
|
||||
}
|
||||
s := conf[i:j]
|
||||
i = j + 1
|
||||
if len(s) > len("machine") && s[:len("machine")] == "machine" {
|
||||
s = s[len("machine"):]
|
||||
for k := 0; k < len(s); k++ {
|
||||
if s[k] == ' ' || s[k] == '\t' {
|
||||
s = s[1:]
|
||||
}
|
||||
break
|
||||
}
|
||||
if s == "amd64" {
|
||||
align = 8
|
||||
}
|
||||
break
|
||||
}
|
||||
arches, _ := syscall.Sysctl("hw.supported_archs")
|
||||
if stringslite.Index(arches, "amd64") >= 0 {
|
||||
align = 8
|
||||
}
|
||||
ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdr}
|
||||
ifm.parse = ifm.parseInterfaceMessage
|
||||
|
|
|
|||
|
|
@ -4,28 +4,21 @@
|
|||
|
||||
package syscall
|
||||
|
||||
import "unsafe"
|
||||
import (
|
||||
"internal/stringslite"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
func init() {
|
||||
conf, _ := Sysctl("kern.conftxt")
|
||||
for i, j := 0, 0; j < len(conf); j++ {
|
||||
if conf[j] != '\n' {
|
||||
continue
|
||||
}
|
||||
s := conf[i:j]
|
||||
i = j + 1
|
||||
if len(s) > len("machine") && s[:len("machine")] == "machine" {
|
||||
s = s[len("machine"):]
|
||||
for k := 0; k < len(s); k++ {
|
||||
if s[k] == ' ' || s[k] == '\t' {
|
||||
s = s[1:]
|
||||
}
|
||||
break
|
||||
}
|
||||
freebsdConfArch = s
|
||||
break
|
||||
machine, _ := Sysctl("hw.machine")
|
||||
if machine == "i386" {
|
||||
arches, _ := Sysctl("hw.supported_archs")
|
||||
amd64 := "amd64"
|
||||
if stringslite.Index(arches, amd64) >= 0 {
|
||||
machine = amd64
|
||||
}
|
||||
}
|
||||
freebsdConfArch = machine
|
||||
}
|
||||
|
||||
func (any *anyMessage) toRoutingMessage(b []byte) RoutingMessage {
|
||||
|
|
|
|||
Loading…
Reference in New Issue