Commit 201054a7 by Ian Lance Taylor

runtime, os: fix the build on Solaris

    
    Reviewed-on: https://go-review.googlesource.com/137535

From-SVN: r264593
parent a1f9402e
652fbfb7acfd81ceffe28e20984464aa7bb6024d e7b98cf0a380eb45791cd5c52897224a686dcdec
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -4,14 +4,18 @@ ...@@ -4,14 +4,18 @@
package os package os
import "syscall" import (
"syscall"
_ "unsafe" // for go:linkname
)
var executablePath string // set by sysauxv in ../runtime/os3_solaris.go // solarisExecutablePath is defined in the runtime package.
func solarisExecutablePath() string
var initCwd, initCwdErr = Getwd() var initCwd, initCwdErr = Getwd()
func executable() (string, error) { func executable() (string, error) {
path := executablePath path := solarisExecutablePath()
if len(path) == 0 { if len(path) == 0 {
path, err := syscall.Getexecname() path, err := syscall.Getexecname()
if err != nil { if err != nil {
......
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package runtime
import (
"runtime/internal/sys"
"unsafe"
)
var executablePath string
func sysargs(argc int32, argv **byte) {
n := argc + 1
// skip over argv, envp to get to auxv
for argv_index(argv, n) != nil {
n++
}
// skip NULL separator
n++
// now argv+n is auxv
auxv := (*[1 << 28]uintptr)(add(unsafe.Pointer(argv), uintptr(n)*sys.PtrSize))
sysauxv(auxv[:])
}
const (
_AT_NULL = 0 // Terminates the vector
_AT_PAGESZ = 6 // Page size in bytes
_AT_SUN_EXECNAME = 2014 // exec() path name
)
func sysauxv(auxv []uintptr) {
for i := 0; auxv[i] != _AT_NULL; i += 2 {
tag, val := auxv[i], auxv[i+1]
switch tag {
case _AT_PAGESZ:
physPageSize = val
case _AT_SUN_EXECNAME:
executablePath = gostringnocopy((*byte)(unsafe.Pointer(val)))
}
}
}
//go:linkname solarisExecutablePath os.solarisExecutablePath
// solarisExecutablePath is called from the os package to fetch the
// saved executable path.
func solarisExecutablePath() string {
return executablePath
}
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build !plan9 // +build !plan9
// +build !solaris
// +build !windows // +build !windows
// +build !nacl // +build !nacl
// +build !freebsd // +build !freebsd
......
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