From: Tobias Klauser Date: Thu, 24 May 2018 07:02:31 +0000 (+0200) Subject: cmd/vendor/golang.org/x: pick up upstream fixes for broken android and iOS tests X-Git-Tag: go1.11beta1~314 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c2b4b316b4459855af741042dd901db7cdce9b17;p=gostls13.git cmd/vendor/golang.org/x: pick up upstream fixes for broken android and iOS tests Pick up the changes from CL 114395, CL 114396 and CL 114415. By re-running govendor in the latest version, some files from golang.org/x/sys/unix which are ignored for the build also got removed from the vendored copy. Updates #25528 Updates #25535 Change-Id: I5c0002fc3a37d6abaafed2e15cc3e2ade803ad7b Reviewed-on: https://go-review.googlesource.com/114416 Run-TryBot: Tobias Klauser Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go index a27cdd6674..d9b77c1c5e 100644 --- a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go +++ b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go @@ -10,6 +10,7 @@ import ( "bytes" "io" "os" + "runtime" "testing" ) @@ -326,6 +327,11 @@ func TestMakeRawState(t *testing.T) { if err != nil { t.Fatalf("failed to get terminal state from GetState: %s", err) } + + if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { + t.Skip("MakeRaw not allowed on iOS; skipping test") + } + defer Restore(fd, st) raw, err := MakeRaw(fd) if err != nil { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/dev_darwin_test.go b/src/cmd/vendor/golang.org/x/sys/unix/dev_darwin_test.go deleted file mode 100644 index bf1adf3a8f..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/dev_darwin_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2017 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. - -// +build go1.7 - -package unix_test - -import ( - "fmt" - "testing" - - "golang.org/x/sys/unix" -) - -func TestDevices(t *testing.T) { - testCases := []struct { - path string - major uint32 - minor uint32 - }{ - // Most of the device major/minor numbers on Darwin are - // dynamically generated by devfs. These are some well-known - // static numbers. - {"/dev/ttyp0", 4, 0}, - {"/dev/ttys0", 4, 48}, - {"/dev/ptyp0", 5, 0}, - {"/dev/ptyr0", 5, 32}, - } - for _, tc := range testCases { - t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { - var stat unix.Stat_t - err := unix.Stat(tc.path, &stat) - if err != nil { - t.Errorf("failed to stat device: %v", err) - return - } - - dev := uint64(stat.Rdev) - if unix.Major(dev) != tc.major { - t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) - } - if unix.Minor(dev) != tc.minor { - t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) - } - if unix.Mkdev(tc.major, tc.minor) != dev { - t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) - } - }) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go b/src/cmd/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go deleted file mode 100644 index 9add376638..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2017 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. - -// +build go1.7 - -package unix_test - -import ( - "fmt" - "testing" - - "golang.org/x/sys/unix" -) - -func TestDevices(t *testing.T) { - testCases := []struct { - path string - major uint32 - minor uint32 - }{ - // Minor is a cookie instead of an index on DragonFlyBSD - {"/dev/null", 10, 0x00000002}, - {"/dev/random", 10, 0x00000003}, - {"/dev/urandom", 10, 0x00000004}, - {"/dev/zero", 10, 0x0000000c}, - {"/dev/bpf", 15, 0xffff00ff}, - } - for _, tc := range testCases { - t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { - var stat unix.Stat_t - err := unix.Stat(tc.path, &stat) - if err != nil { - t.Errorf("failed to stat device: %v", err) - return - } - - dev := uint64(stat.Rdev) - if unix.Major(dev) != tc.major { - t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) - } - if unix.Minor(dev) != tc.minor { - t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) - } - if unix.Mkdev(tc.major, tc.minor) != dev { - t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) - } - }) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go b/src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go index 2fd3eadd00..51645289ca 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go @@ -33,6 +33,9 @@ func TestDevices(t *testing.T) { var stat unix.Stat_t err := unix.Stat(tc.path, &stat) if err != nil { + if err == unix.EACCES { + t.Skip("no permission to stat device, skipping test") + } t.Errorf("failed to stat device: %v", err) return } diff --git a/src/cmd/vendor/golang.org/x/sys/unix/dev_netbsd_test.go b/src/cmd/vendor/golang.org/x/sys/unix/dev_netbsd_test.go deleted file mode 100644 index 441058a104..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/dev_netbsd_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2017 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. - -// +build go1.7 - -package unix_test - -import ( - "fmt" - "testing" - - "golang.org/x/sys/unix" -) - -func TestDevices(t *testing.T) { - testCases := []struct { - path string - major uint32 - minor uint32 - }{ - // well known major/minor numbers according to /dev/MAKEDEV on - // NetBSD 8.0 - {"/dev/null", 2, 2}, - {"/dev/zero", 2, 12}, - {"/dev/random", 46, 0}, - {"/dev/urandom", 46, 1}, - } - for _, tc := range testCases { - t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { - var stat unix.Stat_t - err := unix.Stat(tc.path, &stat) - if err != nil { - t.Errorf("failed to stat device: %v", err) - return - } - - dev := uint64(stat.Rdev) - if unix.Major(dev) != tc.major { - t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) - } - if unix.Minor(dev) != tc.minor { - t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) - } - if unix.Mkdev(tc.major, tc.minor) != dev { - t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) - } - }) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/dev_openbsd_test.go b/src/cmd/vendor/golang.org/x/sys/unix/dev_openbsd_test.go deleted file mode 100644 index 7c87d7a81c..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/dev_openbsd_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2017 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. - -// +build go1.7 - -package unix_test - -import ( - "fmt" - "testing" - - "golang.org/x/sys/unix" -) - -func TestDevices(t *testing.T) { - testCases := []struct { - path string - major uint32 - minor uint32 - }{ - // well known major/minor numbers according to /dev/MAKEDEV on - // OpenBSD 6.3 - {"/dev/null", 2, 2}, - {"/dev/zero", 2, 12}, - {"/dev/ttyp0", 5, 0}, - {"/dev/ttyp1", 5, 1}, - {"/dev/random", 45, 0}, // symlink to /dev/urandom - } - for _, tc := range testCases { - t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { - var stat unix.Stat_t - err := unix.Stat(tc.path, &stat) - if err != nil { - t.Errorf("failed to stat device: %v", err) - return - } - - dev := uint64(stat.Rdev) - if unix.Major(dev) != tc.major { - t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) - } - if unix.Minor(dev) != tc.minor { - t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) - } - if unix.Mkdev(tc.major, tc.minor) != dev { - t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) - } - }) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/linux/Dockerfile b/src/cmd/vendor/golang.org/x/sys/unix/linux/Dockerfile deleted file mode 100644 index 5381034e56..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/linux/Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -FROM ubuntu:17.10 - -# Dependencies to get the git sources and go binaries -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - git \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Get the git sources. If not cached, this takes O(5 minutes). -WORKDIR /git -RUN git config --global advice.detachedHead false -# Linux Kernel: Released 01 Apr 2018 -RUN git clone --branch v4.16 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux -# GNU C library: Released 01 Feb 2018 (we should try to get a secure way to clone this) -RUN git clone --branch glibc-2.27 --depth 1 git://sourceware.org/git/glibc.git - -# Get Go -ENV GOLANG_VERSION 1.10.1 -ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz -ENV GOLANG_DOWNLOAD_SHA256 72d820dec546752e5a8303b33b009079c15c2390ce76d67cf514991646c6127b - -RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \ - && echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \ - && tar -C /usr/local -xzf golang.tar.gz \ - && rm golang.tar.gz - -ENV PATH /usr/local/go/bin:$PATH - -# Linux and Glibc build dependencies and emulator -RUN apt-get update && apt-get install -y --no-install-recommends \ - bison gawk make python \ - gcc gcc-multilib \ - gettext texinfo \ - qemu \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -# Cross compilers (install recommended packages to get cross libc-dev) -RUN apt-get update && apt-get install -y \ - gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi \ - gcc-mips-linux-gnu gcc-mips64-linux-gnuabi64 \ - gcc-mips64el-linux-gnuabi64 gcc-mipsel-linux-gnu \ - gcc-powerpc64-linux-gnu gcc-powerpc64le-linux-gnu \ - gcc-s390x-linux-gnu gcc-sparc64-linux-gnu \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Let the scripts know they are in the docker environment -ENV GOLANG_SYS_BUILD docker -WORKDIR /build -ENTRYPOINT ["go", "run", "linux/mkall.go", "/git/linux", "/git/glibc"] diff --git a/src/cmd/vendor/golang.org/x/sys/unix/linux/mkall.go b/src/cmd/vendor/golang.org/x/sys/unix/linux/mkall.go deleted file mode 100644 index 40b5cf4eff..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/linux/mkall.go +++ /dev/null @@ -1,750 +0,0 @@ -// Copyright 2017 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. - -// linux/mkall.go - Generates all Linux zsysnum, zsyscall, zerror, and ztype -// files for all 11 linux architectures supported by the go compiler. See -// README.md for more information about the build system. - -// To run it you must have a git checkout of the Linux kernel and glibc. Once -// the appropriate sources are ready, the program is run as: -// go run linux/mkall.go - -// +build ignore - -package main - -import ( - "bufio" - "bytes" - "debug/elf" - "encoding/binary" - "errors" - "fmt" - "io" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" - "unicode" -) - -// These will be paths to the appropriate source directories. -var LinuxDir string -var GlibcDir string - -const TempDir = "/tmp" -const IncludeDir = TempDir + "/include" // To hold our C headers -const BuildDir = TempDir + "/build" // To hold intermediate build files - -const GOOS = "linux" // Only for Linux targets -const BuildArch = "amd64" // Must be built on this architecture -const MinKernel = "2.6.23" // https://golang.org/doc/install#requirements - -type target struct { - GoArch string // Architecture name according to Go - LinuxArch string // Architecture name according to the Linux Kernel - GNUArch string // Architecture name according to GNU tools (https://wiki.debian.org/Multiarch/Tuples) - BigEndian bool // Default Little Endian - SignedChar bool // Is -fsigned-char needed (default no) - Bits int -} - -// List of the 11 Linux targets supported by the go compiler. sparc64 is not -// currently supported, though a port is in progress. -var targets = []target{ - { - GoArch: "386", - LinuxArch: "x86", - GNUArch: "i686-linux-gnu", // Note "i686" not "i386" - Bits: 32, - }, - { - GoArch: "amd64", - LinuxArch: "x86", - GNUArch: "x86_64-linux-gnu", - Bits: 64, - }, - { - GoArch: "arm64", - LinuxArch: "arm64", - GNUArch: "aarch64-linux-gnu", - SignedChar: true, - Bits: 64, - }, - { - GoArch: "arm", - LinuxArch: "arm", - GNUArch: "arm-linux-gnueabi", - Bits: 32, - }, - { - GoArch: "mips", - LinuxArch: "mips", - GNUArch: "mips-linux-gnu", - BigEndian: true, - Bits: 32, - }, - { - GoArch: "mipsle", - LinuxArch: "mips", - GNUArch: "mipsel-linux-gnu", - Bits: 32, - }, - { - GoArch: "mips64", - LinuxArch: "mips", - GNUArch: "mips64-linux-gnuabi64", - BigEndian: true, - Bits: 64, - }, - { - GoArch: "mips64le", - LinuxArch: "mips", - GNUArch: "mips64el-linux-gnuabi64", - Bits: 64, - }, - { - GoArch: "ppc64", - LinuxArch: "powerpc", - GNUArch: "powerpc64-linux-gnu", - BigEndian: true, - Bits: 64, - }, - { - GoArch: "ppc64le", - LinuxArch: "powerpc", - GNUArch: "powerpc64le-linux-gnu", - Bits: 64, - }, - { - GoArch: "s390x", - LinuxArch: "s390", - GNUArch: "s390x-linux-gnu", - BigEndian: true, - SignedChar: true, - Bits: 64, - }, - // { - // GoArch: "sparc64", - // LinuxArch: "sparc", - // GNUArch: "sparc64-linux-gnu", - // BigEndian: true, - // Bits: 64, - // }, -} - -// ptracePairs is a list of pairs of targets that can, in some cases, -// run each other's binaries. -var ptracePairs = []struct{ a1, a2 string }{ - {"386", "amd64"}, - {"arm", "arm64"}, - {"mips", "mips64"}, - {"mipsle", "mips64le"}, -} - -func main() { - if runtime.GOOS != GOOS || runtime.GOARCH != BuildArch { - fmt.Printf("Build system has GOOS_GOARCH = %s_%s, need %s_%s\n", - runtime.GOOS, runtime.GOARCH, GOOS, BuildArch) - return - } - - // Check that we are using the new build system if we should - if os.Getenv("GOLANG_SYS_BUILD") != "docker" { - fmt.Println("In the new build system, mkall.go should not be called directly.") - fmt.Println("See README.md") - return - } - - // Parse the command line options - if len(os.Args) != 3 { - fmt.Println("USAGE: go run linux/mkall.go ") - return - } - LinuxDir = os.Args[1] - GlibcDir = os.Args[2] - - for _, t := range targets { - fmt.Printf("----- GENERATING: %s -----\n", t.GoArch) - if err := t.generateFiles(); err != nil { - fmt.Printf("%v\n***** FAILURE: %s *****\n\n", err, t.GoArch) - } else { - fmt.Printf("----- SUCCESS: %s -----\n\n", t.GoArch) - } - } - - fmt.Printf("----- GENERATING ptrace pairs -----\n") - ok := true - for _, p := range ptracePairs { - if err := generatePtracePair(p.a1, p.a2); err != nil { - fmt.Printf("%v\n***** FAILURE: %s/%s *****\n\n", err, p.a1, p.a2) - ok = false - } - } - if ok { - fmt.Printf("----- SUCCESS ptrace pairs -----\n\n") - } -} - -// Makes an exec.Cmd with Stderr attached to os.Stderr -func makeCommand(name string, args ...string) *exec.Cmd { - cmd := exec.Command(name, args...) - cmd.Stderr = os.Stderr - return cmd -} - -// Runs the command, pipes output to a formatter, pipes that to an output file. -func (t *target) commandFormatOutput(formatter string, outputFile string, - name string, args ...string) (err error) { - mainCmd := makeCommand(name, args...) - - fmtCmd := makeCommand(formatter) - if formatter == "mkpost" { - fmtCmd = makeCommand("go", "run", "mkpost.go") - // Set GOARCH_TARGET so mkpost knows what GOARCH is.. - fmtCmd.Env = append(os.Environ(), "GOARCH_TARGET="+t.GoArch) - // Set GOARCH to host arch for mkpost, so it can run natively. - for i, s := range fmtCmd.Env { - if strings.HasPrefix(s, "GOARCH=") { - fmtCmd.Env[i] = "GOARCH=" + BuildArch - } - } - } - - // mainCmd | fmtCmd > outputFile - if fmtCmd.Stdin, err = mainCmd.StdoutPipe(); err != nil { - return - } - if fmtCmd.Stdout, err = os.Create(outputFile); err != nil { - return - } - - // Make sure the formatter eventually closes - if err = fmtCmd.Start(); err != nil { - return - } - defer func() { - fmtErr := fmtCmd.Wait() - if err == nil { - err = fmtErr - } - }() - - return mainCmd.Run() -} - -// Generates all the files for a Linux target -func (t *target) generateFiles() error { - // Setup environment variables - os.Setenv("GOOS", GOOS) - os.Setenv("GOARCH", t.GoArch) - - // Get appropriate compiler and emulator (unless on x86) - if t.LinuxArch != "x86" { - // Check/Setup cross compiler - compiler := t.GNUArch + "-gcc" - if _, err := exec.LookPath(compiler); err != nil { - return err - } - os.Setenv("CC", compiler) - - // Check/Setup emulator (usually first component of GNUArch) - qemuArchName := t.GNUArch[:strings.Index(t.GNUArch, "-")] - if t.LinuxArch == "powerpc" { - qemuArchName = t.GoArch - } - os.Setenv("GORUN", "qemu-"+qemuArchName) - } else { - os.Setenv("CC", "gcc") - } - - // Make the include directory and fill it with headers - if err := os.MkdirAll(IncludeDir, os.ModePerm); err != nil { - return err - } - defer os.RemoveAll(IncludeDir) - if err := t.makeHeaders(); err != nil { - return fmt.Errorf("could not make header files: %v", err) - } - fmt.Println("header files generated") - - // Make each of the four files - if err := t.makeZSysnumFile(); err != nil { - return fmt.Errorf("could not make zsysnum file: %v", err) - } - fmt.Println("zsysnum file generated") - - if err := t.makeZSyscallFile(); err != nil { - return fmt.Errorf("could not make zsyscall file: %v", err) - } - fmt.Println("zsyscall file generated") - - if err := t.makeZTypesFile(); err != nil { - return fmt.Errorf("could not make ztypes file: %v", err) - } - fmt.Println("ztypes file generated") - - if err := t.makeZErrorsFile(); err != nil { - return fmt.Errorf("could not make zerrors file: %v", err) - } - fmt.Println("zerrors file generated") - - return nil -} - -// Create the Linux, glibc and ABI (C compiler convention) headers in the include directory. -func (t *target) makeHeaders() error { - // Make the Linux headers we need for this architecture - linuxMake := makeCommand("make", "headers_install", "ARCH="+t.LinuxArch, "INSTALL_HDR_PATH="+TempDir) - linuxMake.Dir = LinuxDir - if err := linuxMake.Run(); err != nil { - return err - } - - // A Temporary build directory for glibc - if err := os.MkdirAll(BuildDir, os.ModePerm); err != nil { - return err - } - defer os.RemoveAll(BuildDir) - - // Make the glibc headers we need for this architecture - confScript := filepath.Join(GlibcDir, "configure") - glibcConf := makeCommand(confScript, "--prefix="+TempDir, "--host="+t.GNUArch, "--enable-kernel="+MinKernel) - glibcConf.Dir = BuildDir - if err := glibcConf.Run(); err != nil { - return err - } - glibcMake := makeCommand("make", "install-headers") - glibcMake.Dir = BuildDir - if err := glibcMake.Run(); err != nil { - return err - } - // We only need an empty stubs file - stubsFile := filepath.Join(IncludeDir, "gnu/stubs.h") - if file, err := os.Create(stubsFile); err != nil { - return err - } else { - file.Close() - } - - // ABI headers will specify C compiler behavior for the target platform. - return t.makeABIHeaders() -} - -// makeABIHeaders generates C header files based on the platform's calling convention. -// While many platforms have formal Application Binary Interfaces, in practice, whatever the -// dominant C compilers generate is the de-facto calling convention. -// -// We generate C headers instead of a Go file, so as to enable references to the ABI from Cgo. -func (t *target) makeABIHeaders() (err error) { - abiDir := filepath.Join(IncludeDir, "abi") - if err = os.Mkdir(abiDir, os.ModePerm); err != nil { - return err - } - - cc := os.Getenv("CC") - if cc == "" { - return errors.New("CC (compiler) env var not set") - } - - // Build a sacrificial ELF file, to mine for C compiler behavior. - binPath := filepath.Join(TempDir, "tmp_abi.o") - bin, err := t.buildELF(cc, cCode, binPath) - if err != nil { - return fmt.Errorf("cannot build ELF to analyze: %v", err) - } - defer bin.Close() - defer os.Remove(binPath) - - // Right now, we put everything in abi.h, but we may change this later. - abiFile, err := os.Create(filepath.Join(abiDir, "abi.h")) - if err != nil { - return err - } - defer func() { - if cerr := abiFile.Close(); cerr != nil && err == nil { - err = cerr - } - }() - - if err = t.writeBitFieldMasks(bin, abiFile); err != nil { - return fmt.Errorf("cannot write bitfield masks: %v", err) - } - - return nil -} - -func (t *target) buildELF(cc, src, path string) (*elf.File, error) { - // Compile the cCode source using the set compiler - we will need its .data section. - // Do not link the binary, so that we can find .data section offsets from the symbol values. - ccCmd := makeCommand(cc, "-o", path, "-gdwarf", "-x", "c", "-c", "-") - ccCmd.Stdin = strings.NewReader(src) - ccCmd.Stdout = os.Stdout - if err := ccCmd.Run(); err != nil { - return nil, fmt.Errorf("compiler error: %v", err) - } - - bin, err := elf.Open(path) - if err != nil { - return nil, fmt.Errorf("cannot read ELF file %s: %v", path, err) - } - - return bin, nil -} - -func (t *target) writeBitFieldMasks(bin *elf.File, out io.Writer) error { - symbols, err := bin.Symbols() - if err != nil { - return fmt.Errorf("getting ELF symbols: %v", err) - } - var masksSym *elf.Symbol - - for _, sym := range symbols { - if sym.Name == "masks" { - masksSym = &sym - } - } - - if masksSym == nil { - return errors.New("could not find the 'masks' symbol in ELF symtab") - } - - dataSection := bin.Section(".data") - if dataSection == nil { - return errors.New("ELF file has no .data section") - } - - data, err := dataSection.Data() - if err != nil { - return fmt.Errorf("could not read .data section: %v\n", err) - } - - var bo binary.ByteOrder - if t.BigEndian { - bo = binary.BigEndian - } else { - bo = binary.LittleEndian - } - - // 64 bit masks of type uint64 are stored in the data section starting at masks.Value. - // Here we are running on AMD64, but these values may be big endian or little endian, - // depending on target architecture. - for i := uint64(0); i < 64; i++ { - off := masksSym.Value + i*8 - // Define each mask in native by order, so as to match target endian. - fmt.Fprintf(out, "#define BITFIELD_MASK_%d %dULL\n", i, bo.Uint64(data[off:off+8])) - } - - return nil -} - -// makes the zsysnum_linux_$GOARCH.go file -func (t *target) makeZSysnumFile() error { - zsysnumFile := fmt.Sprintf("zsysnum_linux_%s.go", t.GoArch) - unistdFile := filepath.Join(IncludeDir, "asm/unistd.h") - - args := append(t.cFlags(), unistdFile) - return t.commandFormatOutput("gofmt", zsysnumFile, "linux/mksysnum.pl", args...) -} - -// makes the zsyscall_linux_$GOARCH.go file -func (t *target) makeZSyscallFile() error { - zsyscallFile := fmt.Sprintf("zsyscall_linux_%s.go", t.GoArch) - // Find the correct architecture syscall file (might end with x.go) - archSyscallFile := fmt.Sprintf("syscall_linux_%s.go", t.GoArch) - if _, err := os.Stat(archSyscallFile); os.IsNotExist(err) { - shortArch := strings.TrimSuffix(t.GoArch, "le") - archSyscallFile = fmt.Sprintf("syscall_linux_%sx.go", shortArch) - } - - args := append(t.mksyscallFlags(), "-tags", "linux,"+t.GoArch, - "syscall_linux.go", archSyscallFile) - return t.commandFormatOutput("gofmt", zsyscallFile, "./mksyscall.pl", args...) -} - -// makes the zerrors_linux_$GOARCH.go file -func (t *target) makeZErrorsFile() error { - zerrorsFile := fmt.Sprintf("zerrors_linux_%s.go", t.GoArch) - - return t.commandFormatOutput("gofmt", zerrorsFile, "./mkerrors.sh", t.cFlags()...) -} - -// makes the ztypes_linux_$GOARCH.go file -func (t *target) makeZTypesFile() error { - ztypesFile := fmt.Sprintf("ztypes_linux_%s.go", t.GoArch) - - args := []string{"tool", "cgo", "-godefs", "--"} - args = append(args, t.cFlags()...) - args = append(args, "linux/types.go") - return t.commandFormatOutput("mkpost", ztypesFile, "go", args...) -} - -// Flags that should be given to gcc and cgo for this target -func (t *target) cFlags() []string { - // Compile statically to avoid cross-architecture dynamic linking. - flags := []string{"-Wall", "-Werror", "-static", "-I" + IncludeDir} - - // Architecture-specific flags - if t.SignedChar { - flags = append(flags, "-fsigned-char") - } - if t.LinuxArch == "x86" { - flags = append(flags, fmt.Sprintf("-m%d", t.Bits)) - } - - return flags -} - -// Flags that should be given to mksyscall for this target -func (t *target) mksyscallFlags() (flags []string) { - if t.Bits == 32 { - if t.BigEndian { - flags = append(flags, "-b32") - } else { - flags = append(flags, "-l32") - } - } - - // This flag menas a 64-bit value should use (even, odd)-pair. - if t.GoArch == "arm" || (t.LinuxArch == "mips" && t.Bits == 32) { - flags = append(flags, "-arm") - } - return -} - -// generatePtracePair takes a pair of GOARCH values that can run each -// other's binaries, such as 386 and amd64. It extracts the PtraceRegs -// type for each one. It writes a new file defining the types -// PtraceRegsArch1 and PtraceRegsArch2 and the corresponding functions -// Ptrace{Get,Set}Regs{arch1,arch2}. This permits debugging the other -// binary on a native system. -func generatePtracePair(arch1, arch2 string) error { - def1, err := ptraceDef(arch1) - if err != nil { - return err - } - def2, err := ptraceDef(arch2) - if err != nil { - return err - } - f, err := os.Create(fmt.Sprintf("zptrace%s_linux.go", arch1)) - if err != nil { - return err - } - buf := bufio.NewWriter(f) - fmt.Fprintf(buf, "// Code generated by linux/mkall.go generatePtracePair(%s, %s). DO NOT EDIT.\n", arch1, arch2) - fmt.Fprintf(buf, "\n") - fmt.Fprintf(buf, "// +build linux\n") - fmt.Fprintf(buf, "// +build %s %s\n", arch1, arch2) - fmt.Fprintf(buf, "\n") - fmt.Fprintf(buf, "package unix\n") - fmt.Fprintf(buf, "\n") - fmt.Fprintf(buf, "%s\n", `import "unsafe"`) - fmt.Fprintf(buf, "\n") - writeOnePtrace(buf, arch1, def1) - fmt.Fprintf(buf, "\n") - writeOnePtrace(buf, arch2, def2) - if err := buf.Flush(); err != nil { - return err - } - if err := f.Close(); err != nil { - return err - } - return nil -} - -// ptraceDef returns the definition of PtraceRegs for arch. -func ptraceDef(arch string) (string, error) { - filename := fmt.Sprintf("ztypes_linux_%s.go", arch) - data, err := ioutil.ReadFile(filename) - if err != nil { - return "", fmt.Errorf("reading %s: %v", filename, err) - } - start := bytes.Index(data, []byte("type PtraceRegs struct")) - if start < 0 { - return "", fmt.Errorf("%s: no definition of PtraceRegs", filename) - } - data = data[start:] - end := bytes.Index(data, []byte("\n}\n")) - if end < 0 { - return "", fmt.Errorf("%s: can't find end of PtraceRegs definition", filename) - } - return string(data[:end+2]), nil -} - -// writeOnePtrace writes out the ptrace definitions for arch. -func writeOnePtrace(w io.Writer, arch, def string) { - uarch := string(unicode.ToUpper(rune(arch[0]))) + arch[1:] - fmt.Fprintf(w, "// PtraceRegs%s is the registers used by %s binaries.\n", uarch, arch) - fmt.Fprintf(w, "%s\n", strings.Replace(def, "PtraceRegs", "PtraceRegs"+uarch, 1)) - fmt.Fprintf(w, "\n") - fmt.Fprintf(w, "// PtraceGetRegs%s fetches the registers used by %s binaries.\n", uarch, arch) - fmt.Fprintf(w, "func PtraceGetRegs%s(pid int, regsout *PtraceRegs%s) error {\n", uarch, uarch) - fmt.Fprintf(w, "\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n") - fmt.Fprintf(w, "}\n") - fmt.Fprintf(w, "\n") - fmt.Fprintf(w, "// PtraceSetRegs%s sets the registers used by %s binaries.\n", uarch, arch) - fmt.Fprintf(w, "func PtraceSetRegs%s(pid int, regs *PtraceRegs%s) error {\n", uarch, uarch) - fmt.Fprintf(w, "\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n") - fmt.Fprintf(w, "}\n") -} - -// cCode is compiled for the target architecture, and the resulting data section is carved for -// the statically initialized bit masks. -const cCode = ` -// Bit fields are used in some system calls and other ABIs, but their memory layout is -// implementation-defined [1]. Even with formal ABIs, bit fields are a source of subtle bugs [2]. -// Here we generate the offsets for all 64 bits in an uint64. -// 1: http://en.cppreference.com/w/c/language/bit_field -// 2: https://lwn.net/Articles/478657/ - -#include - -struct bitfield { - union { - uint64_t val; - struct { - uint64_t u64_bit_0 : 1; - uint64_t u64_bit_1 : 1; - uint64_t u64_bit_2 : 1; - uint64_t u64_bit_3 : 1; - uint64_t u64_bit_4 : 1; - uint64_t u64_bit_5 : 1; - uint64_t u64_bit_6 : 1; - uint64_t u64_bit_7 : 1; - uint64_t u64_bit_8 : 1; - uint64_t u64_bit_9 : 1; - uint64_t u64_bit_10 : 1; - uint64_t u64_bit_11 : 1; - uint64_t u64_bit_12 : 1; - uint64_t u64_bit_13 : 1; - uint64_t u64_bit_14 : 1; - uint64_t u64_bit_15 : 1; - uint64_t u64_bit_16 : 1; - uint64_t u64_bit_17 : 1; - uint64_t u64_bit_18 : 1; - uint64_t u64_bit_19 : 1; - uint64_t u64_bit_20 : 1; - uint64_t u64_bit_21 : 1; - uint64_t u64_bit_22 : 1; - uint64_t u64_bit_23 : 1; - uint64_t u64_bit_24 : 1; - uint64_t u64_bit_25 : 1; - uint64_t u64_bit_26 : 1; - uint64_t u64_bit_27 : 1; - uint64_t u64_bit_28 : 1; - uint64_t u64_bit_29 : 1; - uint64_t u64_bit_30 : 1; - uint64_t u64_bit_31 : 1; - uint64_t u64_bit_32 : 1; - uint64_t u64_bit_33 : 1; - uint64_t u64_bit_34 : 1; - uint64_t u64_bit_35 : 1; - uint64_t u64_bit_36 : 1; - uint64_t u64_bit_37 : 1; - uint64_t u64_bit_38 : 1; - uint64_t u64_bit_39 : 1; - uint64_t u64_bit_40 : 1; - uint64_t u64_bit_41 : 1; - uint64_t u64_bit_42 : 1; - uint64_t u64_bit_43 : 1; - uint64_t u64_bit_44 : 1; - uint64_t u64_bit_45 : 1; - uint64_t u64_bit_46 : 1; - uint64_t u64_bit_47 : 1; - uint64_t u64_bit_48 : 1; - uint64_t u64_bit_49 : 1; - uint64_t u64_bit_50 : 1; - uint64_t u64_bit_51 : 1; - uint64_t u64_bit_52 : 1; - uint64_t u64_bit_53 : 1; - uint64_t u64_bit_54 : 1; - uint64_t u64_bit_55 : 1; - uint64_t u64_bit_56 : 1; - uint64_t u64_bit_57 : 1; - uint64_t u64_bit_58 : 1; - uint64_t u64_bit_59 : 1; - uint64_t u64_bit_60 : 1; - uint64_t u64_bit_61 : 1; - uint64_t u64_bit_62 : 1; - uint64_t u64_bit_63 : 1; - }; - }; -}; - -struct bitfield masks[] = { - {.u64_bit_0 = 1}, - {.u64_bit_1 = 1}, - {.u64_bit_2 = 1}, - {.u64_bit_3 = 1}, - {.u64_bit_4 = 1}, - {.u64_bit_5 = 1}, - {.u64_bit_6 = 1}, - {.u64_bit_7 = 1}, - {.u64_bit_8 = 1}, - {.u64_bit_9 = 1}, - {.u64_bit_10 = 1}, - {.u64_bit_11 = 1}, - {.u64_bit_12 = 1}, - {.u64_bit_13 = 1}, - {.u64_bit_14 = 1}, - {.u64_bit_15 = 1}, - {.u64_bit_16 = 1}, - {.u64_bit_17 = 1}, - {.u64_bit_18 = 1}, - {.u64_bit_19 = 1}, - {.u64_bit_20 = 1}, - {.u64_bit_21 = 1}, - {.u64_bit_22 = 1}, - {.u64_bit_23 = 1}, - {.u64_bit_24 = 1}, - {.u64_bit_25 = 1}, - {.u64_bit_26 = 1}, - {.u64_bit_27 = 1}, - {.u64_bit_28 = 1}, - {.u64_bit_29 = 1}, - {.u64_bit_30 = 1}, - {.u64_bit_31 = 1}, - {.u64_bit_32 = 1}, - {.u64_bit_33 = 1}, - {.u64_bit_34 = 1}, - {.u64_bit_35 = 1}, - {.u64_bit_36 = 1}, - {.u64_bit_37 = 1}, - {.u64_bit_38 = 1}, - {.u64_bit_39 = 1}, - {.u64_bit_40 = 1}, - {.u64_bit_41 = 1}, - {.u64_bit_42 = 1}, - {.u64_bit_43 = 1}, - {.u64_bit_44 = 1}, - {.u64_bit_45 = 1}, - {.u64_bit_46 = 1}, - {.u64_bit_47 = 1}, - {.u64_bit_48 = 1}, - {.u64_bit_49 = 1}, - {.u64_bit_50 = 1}, - {.u64_bit_51 = 1}, - {.u64_bit_52 = 1}, - {.u64_bit_53 = 1}, - {.u64_bit_54 = 1}, - {.u64_bit_55 = 1}, - {.u64_bit_56 = 1}, - {.u64_bit_57 = 1}, - {.u64_bit_58 = 1}, - {.u64_bit_59 = 1}, - {.u64_bit_60 = 1}, - {.u64_bit_61 = 1}, - {.u64_bit_62 = 1}, - {.u64_bit_63 = 1} -}; - -int main(int argc, char **argv) { - struct bitfield *mask_ptr = &masks[0]; - return mask_ptr->val; -} - -` diff --git a/src/cmd/vendor/golang.org/x/sys/unix/linux/mksysnum.pl b/src/cmd/vendor/golang.org/x/sys/unix/linux/mksysnum.pl deleted file mode 100755 index 63fd800bcb..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/linux/mksysnum.pl +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env perl -# Copyright 2009 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. - -use strict; - -if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") { - print STDERR "GOARCH or GOOS not defined in environment\n"; - exit 1; -} - -# Check that we are using the new build system if we should -if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { - print STDERR "In the new build system, mksysnum should not be called directly.\n"; - print STDERR "See README.md\n"; - exit 1; -} - -my $command = "$0 ". join(' ', @ARGV); - -print < 999){ - # ignore deprecated syscalls that are no longer implemented - # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716 - return; - } - $name =~ y/a-z/A-Z/; - $num = $num + $offset; - print " SYS_$name = $num;\n"; -} - -my $prev; -open(CC, "$ENV{'CC'} -E -dD @ARGV |") || die "can't run $ENV{'CC'}"; -while(){ - if(/^#define __NR_Linux\s+([0-9]+)/){ - # mips/mips64: extract offset - $offset = $1; - } - elsif(/^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)/){ - # arm: extract offset - $offset = $1; - } - elsif(/^#define __NR_syscalls\s+/) { - # ignore redefinitions of __NR_syscalls - } - elsif(/^#define __NR_(\w*)Linux_syscalls\s+/) { - # mips/mips64: ignore definitions about the number of syscalls - } - elsif(/^#define __NR_(\w+)\s+([0-9]+)/){ - $prev = $2; - fmt($1, $2); - } - elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){ - $prev = $2; - fmt($1, $2); - } - elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){ - fmt($1, $prev+$2) - } - elsif(/^#define __NR_(\w+)\s+\(__NR_Linux \+ ([0-9]+)/){ - fmt($1, $2); - } - elsif(/^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE \+ ([0-9]+)/){ - fmt($1, $2); - } -} - -print < -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// abi/abi.h generated by mkall.go. -#include "abi/abi.h" - -// On mips64, the glibc stat and kernel stat do not agree -#if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) - -// Use the stat defined by the kernel with a few modifications. These are: -// * The time fields (like st_atime and st_atimensec) use the timespec -// struct (like st_atim) for consistency with the glibc fields. -// * The padding fields get different names to not break compatibility. -// * st_blocks is signed, again for compatibility. -struct stat { - unsigned int st_dev; - unsigned int st_pad1[3]; // Reserved for st_dev expansion - - unsigned long st_ino; - - mode_t st_mode; - __u32 st_nlink; - - uid_t st_uid; - gid_t st_gid; - - unsigned int st_rdev; - unsigned int st_pad2[3]; // Reserved for st_rdev expansion - - off_t st_size; - - // These are declared as separate fields in the kernel. Here we use - // the timespec struct for consistency with the other stat structs. - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - - unsigned int st_blksize; - unsigned int st_pad4; - - long st_blocks; -}; - -// These are needed because we do not include fcntl.h or sys/types.h -#include -#include - -#else - -// Use the stat defined by glibc -#include -#include - -#endif - -// These are defined in linux/fcntl.h, but including it globally causes -// conflicts with fcntl.h -#ifndef AT_STATX_SYNC_TYPE -# define AT_STATX_SYNC_TYPE 0x6000 // Type of synchronisation required from statx() -#endif -#ifndef AT_STATX_SYNC_AS_STAT -# define AT_STATX_SYNC_AS_STAT 0x0000 // - Do whatever stat() does -#endif -#ifndef AT_STATX_FORCE_SYNC -# define AT_STATX_FORCE_SYNC 0x2000 // - Force the attributes to be sync'd with the server -#endif -#ifndef AT_STATX_DONT_SYNC -# define AT_STATX_DONT_SYNC 0x4000 // - Don't sync attributes with the server -#endif - -#ifdef TCSETS2 -// On systems that have "struct termios2" use this as type Termios. -typedef struct termios2 termios_t; -#else -typedef struct termios termios_t; -#endif - -enum { - sizeofPtr = sizeof(void*), -}; - -union sockaddr_all { - struct sockaddr s1; // this one gets used for fields - struct sockaddr_in s2; // these pad it out - struct sockaddr_in6 s3; - struct sockaddr_un s4; - struct sockaddr_ll s5; - struct sockaddr_nl s6; -}; - -struct sockaddr_any { - struct sockaddr addr; - char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; -}; - -// copied from /usr/include/bluetooth/hci.h -struct sockaddr_hci { - sa_family_t hci_family; - unsigned short hci_dev; - unsigned short hci_channel; -}; - -// copied from /usr/include/bluetooth/bluetooth.h -#define BDADDR_BREDR 0x00 -#define BDADDR_LE_PUBLIC 0x01 -#define BDADDR_LE_RANDOM 0x02 - -// copied from /usr/include/bluetooth/l2cap.h -struct sockaddr_l2 { - sa_family_t l2_family; - unsigned short l2_psm; - uint8_t l2_bdaddr[6]; - unsigned short l2_cid; - uint8_t l2_bdaddr_type; -}; - -// copied from /usr/include/linux/un.h -struct my_sockaddr_un { - sa_family_t sun_family; -#if defined(__ARM_EABI__) || defined(__powerpc64__) - // on ARM char is by default unsigned - signed char sun_path[108]; -#else - char sun_path[108]; -#endif -}; - -#ifdef __ARM_EABI__ -typedef struct user_regs PtraceRegs; -#elif defined(__aarch64__) -typedef struct user_pt_regs PtraceRegs; -#elif defined(__mips__) || defined(__powerpc64__) -typedef struct pt_regs PtraceRegs; -#elif defined(__s390x__) -typedef struct _user_regs_struct PtraceRegs; -#elif defined(__sparc__) -#include -typedef struct pt_regs PtraceRegs; -#else -typedef struct user_regs_struct PtraceRegs; -#endif - -#if defined(__s390x__) -typedef struct _user_psw_struct ptracePsw; -typedef struct _user_fpregs_struct ptraceFpregs; -typedef struct _user_per_struct ptracePer; -#else -typedef struct {} ptracePsw; -typedef struct {} ptraceFpregs; -typedef struct {} ptracePer; -#endif - -// The real epoll_event is a union, and godefs doesn't handle it well. -struct my_epoll_event { - uint32_t events; -#if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32) - // padding is not specified in linux/eventpoll.h but added to conform to the - // alignment requirements of EABI - int32_t padFd; -#elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__) - int32_t _padFd; -#endif - int32_t fd; - int32_t pad; -}; - -// Copied from with the following modifications: -// 1) bit field after read_format redeclared as '__u64 bits' to make it -// accessible from Go -// 2) collapsed the unions, to avoid confusing godoc for the generated output -// (e.g. having to use BpAddr as an extension of Config) -struct perf_event_attr_go { - __u32 type; - - __u32 size; - __u64 config; - - // union { - // __u64 sample_period; - // __u64 sample_freq; - // }; - __u64 sample; - - __u64 sample_type; - __u64 read_format; - - // Replaces the bit field. Flags are defined as constants. - __u64 bits; - - // union { - // __u32 wakeup_events; - // __u32 wakeup_watermark; - // }; - __u32 wakeup; - - __u32 bp_type; - - // union { - // __u64 bp_addr; - // __u64 config1; - // }; - __u64 ext1; - - // union { - // __u64 bp_len; - // __u64 config2; - // }; - __u64 ext2; - - __u64 branch_sample_type; - - __u64 sample_regs_user; - - __u32 sample_stack_user; - - __s32 clockid; - __u64 sample_regs_intr; - __u32 aux_watermark; - __u32 __reserved_2; -}; - -*/ -import "C" - -// Machine characteristics; for internal use. - -const ( - sizeofPtr = C.sizeofPtr - sizeofShort = C.sizeof_short - sizeofInt = C.sizeof_int - sizeofLong = C.sizeof_long - sizeofLongLong = C.sizeof_longlong - PathMax = C.PATH_MAX -) - -// Basic types - -type ( - _C_short C.short - _C_int C.int - _C_long C.long - _C_long_long C.longlong -) - -// Time - -type Timespec C.struct_timespec - -type Timeval C.struct_timeval - -type Timex C.struct_timex - -type Time_t C.time_t - -type Tms C.struct_tms - -type Utimbuf C.struct_utimbuf - -// Processes - -type Rusage C.struct_rusage - -type Rlimit C.struct_rlimit - -type _Gid_t C.gid_t - -// Files - -type Stat_t C.struct_stat - -type Statfs_t C.struct_statfs - -type StatxTimestamp C.struct_statx_timestamp - -type Statx_t C.struct_statx - -type Dirent C.struct_dirent - -type Fsid C.fsid_t - -type Flock_t C.struct_flock - -// Filesystem Encryption - -type FscryptPolicy C.struct_fscrypt_policy - -type FscryptKey C.struct_fscrypt_key - -// Structure for Keyctl - -type KeyctlDHParams C.struct_keyctl_dh_params - -// Advice to Fadvise - -const ( - FADV_NORMAL = C.POSIX_FADV_NORMAL - FADV_RANDOM = C.POSIX_FADV_RANDOM - FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL - FADV_WILLNEED = C.POSIX_FADV_WILLNEED - FADV_DONTNEED = C.POSIX_FADV_DONTNEED - FADV_NOREUSE = C.POSIX_FADV_NOREUSE -) - -// Sockets - -type RawSockaddrInet4 C.struct_sockaddr_in - -type RawSockaddrInet6 C.struct_sockaddr_in6 - -type RawSockaddrUnix C.struct_my_sockaddr_un - -type RawSockaddrLinklayer C.struct_sockaddr_ll - -type RawSockaddrNetlink C.struct_sockaddr_nl - -type RawSockaddrHCI C.struct_sockaddr_hci - -type RawSockaddrL2 C.struct_sockaddr_l2 - -type RawSockaddrCAN C.struct_sockaddr_can - -type RawSockaddrALG C.struct_sockaddr_alg - -type RawSockaddrVM C.struct_sockaddr_vm - -type RawSockaddr C.struct_sockaddr - -type RawSockaddrAny C.struct_sockaddr_any - -type _Socklen C.socklen_t - -type Linger C.struct_linger - -type Iovec C.struct_iovec - -type IPMreq C.struct_ip_mreq - -type IPMreqn C.struct_ip_mreqn - -type IPv6Mreq C.struct_ipv6_mreq - -type PacketMreq C.struct_packet_mreq - -type Msghdr C.struct_msghdr - -type Cmsghdr C.struct_cmsghdr - -type Inet4Pktinfo C.struct_in_pktinfo - -type Inet6Pktinfo C.struct_in6_pktinfo - -type IPv6MTUInfo C.struct_ip6_mtuinfo - -type ICMPv6Filter C.struct_icmp6_filter - -type Ucred C.struct_ucred - -type TCPInfo C.struct_tcp_info - -const ( - SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in - SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 - SizeofSockaddrAny = C.sizeof_struct_sockaddr_any - SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un - SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll - SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl - SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci - SizeofSockaddrL2 = C.sizeof_struct_sockaddr_l2 - SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can - SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg - SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm - SizeofLinger = C.sizeof_struct_linger - SizeofIovec = C.sizeof_struct_iovec - SizeofIPMreq = C.sizeof_struct_ip_mreq - SizeofIPMreqn = C.sizeof_struct_ip_mreqn - SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq - SizeofPacketMreq = C.sizeof_struct_packet_mreq - SizeofMsghdr = C.sizeof_struct_msghdr - SizeofCmsghdr = C.sizeof_struct_cmsghdr - SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo - SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo - SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo - SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter - SizeofUcred = C.sizeof_struct_ucred - SizeofTCPInfo = C.sizeof_struct_tcp_info -) - -// Netlink routing and interface messages - -const ( - IFA_UNSPEC = C.IFA_UNSPEC - IFA_ADDRESS = C.IFA_ADDRESS - IFA_LOCAL = C.IFA_LOCAL - IFA_LABEL = C.IFA_LABEL - IFA_BROADCAST = C.IFA_BROADCAST - IFA_ANYCAST = C.IFA_ANYCAST - IFA_CACHEINFO = C.IFA_CACHEINFO - IFA_MULTICAST = C.IFA_MULTICAST - IFLA_UNSPEC = C.IFLA_UNSPEC - IFLA_ADDRESS = C.IFLA_ADDRESS - IFLA_BROADCAST = C.IFLA_BROADCAST - IFLA_IFNAME = C.IFLA_IFNAME - IFLA_MTU = C.IFLA_MTU - IFLA_LINK = C.IFLA_LINK - IFLA_QDISC = C.IFLA_QDISC - IFLA_STATS = C.IFLA_STATS - IFLA_COST = C.IFLA_COST - IFLA_PRIORITY = C.IFLA_PRIORITY - IFLA_MASTER = C.IFLA_MASTER - IFLA_WIRELESS = C.IFLA_WIRELESS - IFLA_PROTINFO = C.IFLA_PROTINFO - IFLA_TXQLEN = C.IFLA_TXQLEN - IFLA_MAP = C.IFLA_MAP - IFLA_WEIGHT = C.IFLA_WEIGHT - IFLA_OPERSTATE = C.IFLA_OPERSTATE - IFLA_LINKMODE = C.IFLA_LINKMODE - IFLA_LINKINFO = C.IFLA_LINKINFO - IFLA_NET_NS_PID = C.IFLA_NET_NS_PID - IFLA_IFALIAS = C.IFLA_IFALIAS - IFLA_NUM_VF = C.IFLA_NUM_VF - IFLA_VFINFO_LIST = C.IFLA_VFINFO_LIST - IFLA_STATS64 = C.IFLA_STATS64 - IFLA_VF_PORTS = C.IFLA_VF_PORTS - IFLA_PORT_SELF = C.IFLA_PORT_SELF - IFLA_AF_SPEC = C.IFLA_AF_SPEC - IFLA_GROUP = C.IFLA_GROUP - IFLA_NET_NS_FD = C.IFLA_NET_NS_FD - IFLA_EXT_MASK = C.IFLA_EXT_MASK - IFLA_PROMISCUITY = C.IFLA_PROMISCUITY - IFLA_NUM_TX_QUEUES = C.IFLA_NUM_TX_QUEUES - IFLA_NUM_RX_QUEUES = C.IFLA_NUM_RX_QUEUES - IFLA_CARRIER = C.IFLA_CARRIER - IFLA_PHYS_PORT_ID = C.IFLA_PHYS_PORT_ID - IFLA_CARRIER_CHANGES = C.IFLA_CARRIER_CHANGES - IFLA_PHYS_SWITCH_ID = C.IFLA_PHYS_SWITCH_ID - IFLA_LINK_NETNSID = C.IFLA_LINK_NETNSID - IFLA_PHYS_PORT_NAME = C.IFLA_PHYS_PORT_NAME - IFLA_PROTO_DOWN = C.IFLA_PROTO_DOWN - IFLA_GSO_MAX_SEGS = C.IFLA_GSO_MAX_SEGS - IFLA_GSO_MAX_SIZE = C.IFLA_GSO_MAX_SIZE - IFLA_PAD = C.IFLA_PAD - IFLA_XDP = C.IFLA_XDP - IFLA_EVENT = C.IFLA_EVENT - IFLA_NEW_NETNSID = C.IFLA_NEW_NETNSID - IFLA_IF_NETNSID = C.IFLA_IF_NETNSID - IFLA_MAX = C.IFLA_MAX - RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE - RT_SCOPE_SITE = C.RT_SCOPE_SITE - RT_SCOPE_LINK = C.RT_SCOPE_LINK - RT_SCOPE_HOST = C.RT_SCOPE_HOST - RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE - RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC - RT_TABLE_COMPAT = C.RT_TABLE_COMPAT - RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT - RT_TABLE_MAIN = C.RT_TABLE_MAIN - RT_TABLE_LOCAL = C.RT_TABLE_LOCAL - RT_TABLE_MAX = C.RT_TABLE_MAX - RTA_UNSPEC = C.RTA_UNSPEC - RTA_DST = C.RTA_DST - RTA_SRC = C.RTA_SRC - RTA_IIF = C.RTA_IIF - RTA_OIF = C.RTA_OIF - RTA_GATEWAY = C.RTA_GATEWAY - RTA_PRIORITY = C.RTA_PRIORITY - RTA_PREFSRC = C.RTA_PREFSRC - RTA_METRICS = C.RTA_METRICS - RTA_MULTIPATH = C.RTA_MULTIPATH - RTA_FLOW = C.RTA_FLOW - RTA_CACHEINFO = C.RTA_CACHEINFO - RTA_TABLE = C.RTA_TABLE - RTN_UNSPEC = C.RTN_UNSPEC - RTN_UNICAST = C.RTN_UNICAST - RTN_LOCAL = C.RTN_LOCAL - RTN_BROADCAST = C.RTN_BROADCAST - RTN_ANYCAST = C.RTN_ANYCAST - RTN_MULTICAST = C.RTN_MULTICAST - RTN_BLACKHOLE = C.RTN_BLACKHOLE - RTN_UNREACHABLE = C.RTN_UNREACHABLE - RTN_PROHIBIT = C.RTN_PROHIBIT - RTN_THROW = C.RTN_THROW - RTN_NAT = C.RTN_NAT - RTN_XRESOLVE = C.RTN_XRESOLVE - RTNLGRP_NONE = C.RTNLGRP_NONE - RTNLGRP_LINK = C.RTNLGRP_LINK - RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY - RTNLGRP_NEIGH = C.RTNLGRP_NEIGH - RTNLGRP_TC = C.RTNLGRP_TC - RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR - RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE - RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE - RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE - RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR - RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE - RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE - RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO - RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX - RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE - RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT - SizeofNlMsghdr = C.sizeof_struct_nlmsghdr - SizeofNlMsgerr = C.sizeof_struct_nlmsgerr - SizeofRtGenmsg = C.sizeof_struct_rtgenmsg - SizeofNlAttr = C.sizeof_struct_nlattr - SizeofRtAttr = C.sizeof_struct_rtattr - SizeofIfInfomsg = C.sizeof_struct_ifinfomsg - SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg - SizeofRtMsg = C.sizeof_struct_rtmsg - SizeofRtNexthop = C.sizeof_struct_rtnexthop -) - -type NlMsghdr C.struct_nlmsghdr - -type NlMsgerr C.struct_nlmsgerr - -type RtGenmsg C.struct_rtgenmsg - -type NlAttr C.struct_nlattr - -type RtAttr C.struct_rtattr - -type IfInfomsg C.struct_ifinfomsg - -type IfAddrmsg C.struct_ifaddrmsg - -type RtMsg C.struct_rtmsg - -type RtNexthop C.struct_rtnexthop - -// Linux socket filter - -const ( - SizeofSockFilter = C.sizeof_struct_sock_filter - SizeofSockFprog = C.sizeof_struct_sock_fprog -) - -type SockFilter C.struct_sock_filter - -type SockFprog C.struct_sock_fprog - -// Inotify - -type InotifyEvent C.struct_inotify_event - -const SizeofInotifyEvent = C.sizeof_struct_inotify_event - -// Ptrace - -// Register structures -type PtraceRegs C.PtraceRegs - -// Structures contained in PtraceRegs on s390x (exported by mkpost.go) -type PtracePsw C.ptracePsw - -type PtraceFpregs C.ptraceFpregs - -type PtracePer C.ptracePer - -// Misc - -type FdSet C.fd_set - -type Sysinfo_t C.struct_sysinfo - -type Utsname C.struct_utsname - -type Ustat_t C.struct_ustat - -type EpollEvent C.struct_my_epoll_event - -const ( - AT_EMPTY_PATH = C.AT_EMPTY_PATH - AT_FDCWD = C.AT_FDCWD - AT_NO_AUTOMOUNT = C.AT_NO_AUTOMOUNT - AT_REMOVEDIR = C.AT_REMOVEDIR - - AT_STATX_SYNC_AS_STAT = C.AT_STATX_SYNC_AS_STAT - AT_STATX_FORCE_SYNC = C.AT_STATX_FORCE_SYNC - AT_STATX_DONT_SYNC = C.AT_STATX_DONT_SYNC - - AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW - AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW -) - -type PollFd C.struct_pollfd - -const ( - POLLIN = C.POLLIN - POLLPRI = C.POLLPRI - POLLOUT = C.POLLOUT - POLLRDHUP = C.POLLRDHUP - POLLERR = C.POLLERR - POLLHUP = C.POLLHUP - POLLNVAL = C.POLLNVAL -) - -type Sigset_t C.sigset_t - -const RNDGETENTCNT = C.RNDGETENTCNT - -const PERF_IOC_FLAG_GROUP = C.PERF_IOC_FLAG_GROUP - -// Terminal handling - -type Termios C.termios_t - -type Winsize C.struct_winsize - -// Taskstats and cgroup stats. - -type Taskstats C.struct_taskstats - -const ( - TASKSTATS_CMD_UNSPEC = C.TASKSTATS_CMD_UNSPEC - TASKSTATS_CMD_GET = C.TASKSTATS_CMD_GET - TASKSTATS_CMD_NEW = C.TASKSTATS_CMD_NEW - TASKSTATS_TYPE_UNSPEC = C.TASKSTATS_TYPE_UNSPEC - TASKSTATS_TYPE_PID = C.TASKSTATS_TYPE_PID - TASKSTATS_TYPE_TGID = C.TASKSTATS_TYPE_TGID - TASKSTATS_TYPE_STATS = C.TASKSTATS_TYPE_STATS - TASKSTATS_TYPE_AGGR_PID = C.TASKSTATS_TYPE_AGGR_PID - TASKSTATS_TYPE_AGGR_TGID = C.TASKSTATS_TYPE_AGGR_TGID - TASKSTATS_TYPE_NULL = C.TASKSTATS_TYPE_NULL - TASKSTATS_CMD_ATTR_UNSPEC = C.TASKSTATS_CMD_ATTR_UNSPEC - TASKSTATS_CMD_ATTR_PID = C.TASKSTATS_CMD_ATTR_PID - TASKSTATS_CMD_ATTR_TGID = C.TASKSTATS_CMD_ATTR_TGID - TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_REGISTER_CPUMASK - TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK -) - -type CGroupStats C.struct_cgroupstats - -const ( - CGROUPSTATS_CMD_UNSPEC = C.__TASKSTATS_CMD_MAX - CGROUPSTATS_CMD_GET = C.CGROUPSTATS_CMD_GET - CGROUPSTATS_CMD_NEW = C.CGROUPSTATS_CMD_NEW - CGROUPSTATS_TYPE_UNSPEC = C.CGROUPSTATS_TYPE_UNSPEC - CGROUPSTATS_TYPE_CGROUP_STATS = C.CGROUPSTATS_TYPE_CGROUP_STATS - CGROUPSTATS_CMD_ATTR_UNSPEC = C.CGROUPSTATS_CMD_ATTR_UNSPEC - CGROUPSTATS_CMD_ATTR_FD = C.CGROUPSTATS_CMD_ATTR_FD -) - -// Generic netlink - -type Genlmsghdr C.struct_genlmsghdr - -const ( - CTRL_CMD_UNSPEC = C.CTRL_CMD_UNSPEC - CTRL_CMD_NEWFAMILY = C.CTRL_CMD_NEWFAMILY - CTRL_CMD_DELFAMILY = C.CTRL_CMD_DELFAMILY - CTRL_CMD_GETFAMILY = C.CTRL_CMD_GETFAMILY - CTRL_CMD_NEWOPS = C.CTRL_CMD_NEWOPS - CTRL_CMD_DELOPS = C.CTRL_CMD_DELOPS - CTRL_CMD_GETOPS = C.CTRL_CMD_GETOPS - CTRL_CMD_NEWMCAST_GRP = C.CTRL_CMD_NEWMCAST_GRP - CTRL_CMD_DELMCAST_GRP = C.CTRL_CMD_DELMCAST_GRP - CTRL_CMD_GETMCAST_GRP = C.CTRL_CMD_GETMCAST_GRP - CTRL_ATTR_UNSPEC = C.CTRL_ATTR_UNSPEC - CTRL_ATTR_FAMILY_ID = C.CTRL_ATTR_FAMILY_ID - CTRL_ATTR_FAMILY_NAME = C.CTRL_ATTR_FAMILY_NAME - CTRL_ATTR_VERSION = C.CTRL_ATTR_VERSION - CTRL_ATTR_HDRSIZE = C.CTRL_ATTR_HDRSIZE - CTRL_ATTR_MAXATTR = C.CTRL_ATTR_MAXATTR - CTRL_ATTR_OPS = C.CTRL_ATTR_OPS - CTRL_ATTR_MCAST_GROUPS = C.CTRL_ATTR_MCAST_GROUPS - CTRL_ATTR_OP_UNSPEC = C.CTRL_ATTR_OP_UNSPEC - CTRL_ATTR_OP_ID = C.CTRL_ATTR_OP_ID - CTRL_ATTR_OP_FLAGS = C.CTRL_ATTR_OP_FLAGS - CTRL_ATTR_MCAST_GRP_UNSPEC = C.CTRL_ATTR_MCAST_GRP_UNSPEC - CTRL_ATTR_MCAST_GRP_NAME = C.CTRL_ATTR_MCAST_GRP_NAME - CTRL_ATTR_MCAST_GRP_ID = C.CTRL_ATTR_MCAST_GRP_ID -) - -// CPU affinity - -type cpuMask C.__cpu_mask - -const ( - _CPU_SETSIZE = C.__CPU_SETSIZE - _NCPUBITS = C.__NCPUBITS -) - -// Bluetooth - -const ( - BDADDR_BREDR = C.BDADDR_BREDR - BDADDR_LE_PUBLIC = C.BDADDR_LE_PUBLIC - BDADDR_LE_RANDOM = C.BDADDR_LE_RANDOM -) - -// Perf subsystem - -type PerfEventAttr C.struct_perf_event_attr_go - -type PerfEventMmapPage C.struct_perf_event_mmap_page - -// Bit field in struct perf_event_attr expanded as flags. -// Set these on PerfEventAttr.Bits by ORing them together. -const ( - PerfBitDisabled uint64 = CBitFieldMaskBit0 - PerfBitInherit = CBitFieldMaskBit1 - PerfBitPinned = CBitFieldMaskBit2 - PerfBitExclusive = CBitFieldMaskBit3 - PerfBitExcludeUser = CBitFieldMaskBit4 - PerfBitExcludeKernel = CBitFieldMaskBit5 - PerfBitExcludeHv = CBitFieldMaskBit6 - PerfBitExcludeIdle = CBitFieldMaskBit7 - PerfBitMmap = CBitFieldMaskBit8 - PerfBitComm = CBitFieldMaskBit9 - PerfBitFreq = CBitFieldMaskBit10 - PerfBitInheritStat = CBitFieldMaskBit11 - PerfBitEnableOnExec = CBitFieldMaskBit12 - PerfBitTask = CBitFieldMaskBit13 - PerfBitWatermark = CBitFieldMaskBit14 - PerfBitPreciseIPBit1 = CBitFieldMaskBit15 - PerfBitPreciseIPBit2 = CBitFieldMaskBit16 - PerfBitMmapData = CBitFieldMaskBit17 - PerfBitSampleIDAll = CBitFieldMaskBit18 - PerfBitExcludeHost = CBitFieldMaskBit19 - PerfBitExcludeGuest = CBitFieldMaskBit20 - PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 - PerfBitExcludeCallchainUser = CBitFieldMaskBit22 - PerfBitMmap2 = CBitFieldMaskBit23 - PerfBitCommExec = CBitFieldMaskBit24 - PerfBitUseClockID = CBitFieldMaskBit25 - PerfBitContextSwitch = CBitFieldMaskBit26 -) - -const ( - PERF_TYPE_HARDWARE = C.PERF_TYPE_HARDWARE - PERF_TYPE_SOFTWARE = C.PERF_TYPE_SOFTWARE - PERF_TYPE_TRACEPOINT = C.PERF_TYPE_TRACEPOINT - PERF_TYPE_HW_CACHE = C.PERF_TYPE_HW_CACHE - PERF_TYPE_RAW = C.PERF_TYPE_RAW - PERF_TYPE_BREAKPOINT = C.PERF_TYPE_BREAKPOINT - - PERF_COUNT_HW_CPU_CYCLES = C.PERF_COUNT_HW_CPU_CYCLES - PERF_COUNT_HW_INSTRUCTIONS = C.PERF_COUNT_HW_INSTRUCTIONS - PERF_COUNT_HW_CACHE_REFERENCES = C.PERF_COUNT_HW_CACHE_REFERENCES - PERF_COUNT_HW_CACHE_MISSES = C.PERF_COUNT_HW_CACHE_MISSES - PERF_COUNT_HW_BRANCH_INSTRUCTIONS = C.PERF_COUNT_HW_BRANCH_INSTRUCTIONS - PERF_COUNT_HW_BRANCH_MISSES = C.PERF_COUNT_HW_BRANCH_MISSES - PERF_COUNT_HW_BUS_CYCLES = C.PERF_COUNT_HW_BUS_CYCLES - PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = C.PERF_COUNT_HW_STALLED_CYCLES_FRONTEND - PERF_COUNT_HW_STALLED_CYCLES_BACKEND = C.PERF_COUNT_HW_STALLED_CYCLES_BACKEND - PERF_COUNT_HW_REF_CPU_CYCLES = C.PERF_COUNT_HW_REF_CPU_CYCLES - - PERF_COUNT_HW_CACHE_L1D = C.PERF_COUNT_HW_CACHE_L1D - PERF_COUNT_HW_CACHE_L1I = C.PERF_COUNT_HW_CACHE_L1I - PERF_COUNT_HW_CACHE_LL = C.PERF_COUNT_HW_CACHE_LL - PERF_COUNT_HW_CACHE_DTLB = C.PERF_COUNT_HW_CACHE_DTLB - PERF_COUNT_HW_CACHE_ITLB = C.PERF_COUNT_HW_CACHE_ITLB - PERF_COUNT_HW_CACHE_BPU = C.PERF_COUNT_HW_CACHE_BPU - PERF_COUNT_HW_CACHE_NODE = C.PERF_COUNT_HW_CACHE_NODE - - PERF_COUNT_HW_CACHE_OP_READ = C.PERF_COUNT_HW_CACHE_OP_READ - PERF_COUNT_HW_CACHE_OP_WRITE = C.PERF_COUNT_HW_CACHE_OP_WRITE - PERF_COUNT_HW_CACHE_OP_PREFETCH = C.PERF_COUNT_HW_CACHE_OP_PREFETCH - - PERF_COUNT_HW_CACHE_RESULT_ACCESS = C.PERF_COUNT_HW_CACHE_RESULT_ACCESS - PERF_COUNT_HW_CACHE_RESULT_MISS = C.PERF_COUNT_HW_CACHE_RESULT_MISS - - PERF_COUNT_SW_CPU_CLOCK = C.PERF_COUNT_SW_CPU_CLOCK - PERF_COUNT_SW_TASK_CLOCK = C.PERF_COUNT_SW_TASK_CLOCK - PERF_COUNT_SW_PAGE_FAULTS = C.PERF_COUNT_SW_PAGE_FAULTS - PERF_COUNT_SW_CONTEXT_SWITCHES = C.PERF_COUNT_SW_CONTEXT_SWITCHES - PERF_COUNT_SW_CPU_MIGRATIONS = C.PERF_COUNT_SW_CPU_MIGRATIONS - PERF_COUNT_SW_PAGE_FAULTS_MIN = C.PERF_COUNT_SW_PAGE_FAULTS_MIN - PERF_COUNT_SW_PAGE_FAULTS_MAJ = C.PERF_COUNT_SW_PAGE_FAULTS_MAJ - PERF_COUNT_SW_ALIGNMENT_FAULTS = C.PERF_COUNT_SW_ALIGNMENT_FAULTS - PERF_COUNT_SW_EMULATION_FAULTS = C.PERF_COUNT_SW_EMULATION_FAULTS - PERF_COUNT_SW_DUMMY = C.PERF_COUNT_SW_DUMMY - - PERF_SAMPLE_IP = C.PERF_SAMPLE_IP - PERF_SAMPLE_TID = C.PERF_SAMPLE_TID - PERF_SAMPLE_TIME = C.PERF_SAMPLE_TIME - PERF_SAMPLE_ADDR = C.PERF_SAMPLE_ADDR - PERF_SAMPLE_READ = C.PERF_SAMPLE_READ - PERF_SAMPLE_CALLCHAIN = C.PERF_SAMPLE_CALLCHAIN - PERF_SAMPLE_ID = C.PERF_SAMPLE_ID - PERF_SAMPLE_CPU = C.PERF_SAMPLE_CPU - PERF_SAMPLE_PERIOD = C.PERF_SAMPLE_PERIOD - PERF_SAMPLE_STREAM_ID = C.PERF_SAMPLE_STREAM_ID - PERF_SAMPLE_RAW = C.PERF_SAMPLE_RAW - PERF_SAMPLE_BRANCH_STACK = C.PERF_SAMPLE_BRANCH_STACK - - PERF_SAMPLE_BRANCH_USER = C.PERF_SAMPLE_BRANCH_USER - PERF_SAMPLE_BRANCH_KERNEL = C.PERF_SAMPLE_BRANCH_KERNEL - PERF_SAMPLE_BRANCH_HV = C.PERF_SAMPLE_BRANCH_HV - PERF_SAMPLE_BRANCH_ANY = C.PERF_SAMPLE_BRANCH_ANY - PERF_SAMPLE_BRANCH_ANY_CALL = C.PERF_SAMPLE_BRANCH_ANY_CALL - PERF_SAMPLE_BRANCH_ANY_RETURN = C.PERF_SAMPLE_BRANCH_ANY_RETURN - PERF_SAMPLE_BRANCH_IND_CALL = C.PERF_SAMPLE_BRANCH_IND_CALL - - PERF_FORMAT_TOTAL_TIME_ENABLED = C.PERF_FORMAT_TOTAL_TIME_ENABLED - PERF_FORMAT_TOTAL_TIME_RUNNING = C.PERF_FORMAT_TOTAL_TIME_RUNNING - PERF_FORMAT_ID = C.PERF_FORMAT_ID - PERF_FORMAT_GROUP = C.PERF_FORMAT_GROUP - - PERF_RECORD_MMAP = C.PERF_RECORD_MMAP - PERF_RECORD_LOST = C.PERF_RECORD_LOST - PERF_RECORD_COMM = C.PERF_RECORD_COMM - PERF_RECORD_EXIT = C.PERF_RECORD_EXIT - PERF_RECORD_THROTTLE = C.PERF_RECORD_THROTTLE - PERF_RECORD_UNTHROTTLE = C.PERF_RECORD_UNTHROTTLE - PERF_RECORD_FORK = C.PERF_RECORD_FORK - PERF_RECORD_READ = C.PERF_RECORD_READ - PERF_RECORD_SAMPLE = C.PERF_RECORD_SAMPLE - - PERF_CONTEXT_HV = C.PERF_CONTEXT_HV - PERF_CONTEXT_KERNEL = C.PERF_CONTEXT_KERNEL - PERF_CONTEXT_USER = C.PERF_CONTEXT_USER - - PERF_CONTEXT_GUEST = C.PERF_CONTEXT_GUEST - PERF_CONTEXT_GUEST_KERNEL = C.PERF_CONTEXT_GUEST_KERNEL - PERF_CONTEXT_GUEST_USER = C.PERF_CONTEXT_GUEST_USER - - PERF_FLAG_FD_NO_GROUP = C.PERF_FLAG_FD_NO_GROUP - PERF_FLAG_FD_OUTPUT = C.PERF_FLAG_FD_OUTPUT - PERF_FLAG_PID_CGROUP = C.PERF_FLAG_PID_CGROUP -) - -// Platform ABI and calling convention - -// Bit field masks for interoperability with C code that uses bit fields. -// Each mask corresponds to a single bit set - bit field behavior can be replicated by combining -// the masks with bitwise OR. -const ( - CBitFieldMaskBit0 = C.BITFIELD_MASK_0 - CBitFieldMaskBit1 = C.BITFIELD_MASK_1 - CBitFieldMaskBit2 = C.BITFIELD_MASK_2 - CBitFieldMaskBit3 = C.BITFIELD_MASK_3 - CBitFieldMaskBit4 = C.BITFIELD_MASK_4 - CBitFieldMaskBit5 = C.BITFIELD_MASK_5 - CBitFieldMaskBit6 = C.BITFIELD_MASK_6 - CBitFieldMaskBit7 = C.BITFIELD_MASK_7 - CBitFieldMaskBit8 = C.BITFIELD_MASK_8 - CBitFieldMaskBit9 = C.BITFIELD_MASK_9 - CBitFieldMaskBit10 = C.BITFIELD_MASK_10 - CBitFieldMaskBit11 = C.BITFIELD_MASK_11 - CBitFieldMaskBit12 = C.BITFIELD_MASK_12 - CBitFieldMaskBit13 = C.BITFIELD_MASK_13 - CBitFieldMaskBit14 = C.BITFIELD_MASK_14 - CBitFieldMaskBit15 = C.BITFIELD_MASK_15 - CBitFieldMaskBit16 = C.BITFIELD_MASK_16 - CBitFieldMaskBit17 = C.BITFIELD_MASK_17 - CBitFieldMaskBit18 = C.BITFIELD_MASK_18 - CBitFieldMaskBit19 = C.BITFIELD_MASK_19 - CBitFieldMaskBit20 = C.BITFIELD_MASK_20 - CBitFieldMaskBit21 = C.BITFIELD_MASK_21 - CBitFieldMaskBit22 = C.BITFIELD_MASK_22 - CBitFieldMaskBit23 = C.BITFIELD_MASK_23 - CBitFieldMaskBit24 = C.BITFIELD_MASK_24 - CBitFieldMaskBit25 = C.BITFIELD_MASK_25 - CBitFieldMaskBit26 = C.BITFIELD_MASK_26 - CBitFieldMaskBit27 = C.BITFIELD_MASK_27 - CBitFieldMaskBit28 = C.BITFIELD_MASK_28 - CBitFieldMaskBit29 = C.BITFIELD_MASK_29 - CBitFieldMaskBit30 = C.BITFIELD_MASK_30 - CBitFieldMaskBit31 = C.BITFIELD_MASK_31 - CBitFieldMaskBit32 = C.BITFIELD_MASK_32 - CBitFieldMaskBit33 = C.BITFIELD_MASK_33 - CBitFieldMaskBit34 = C.BITFIELD_MASK_34 - CBitFieldMaskBit35 = C.BITFIELD_MASK_35 - CBitFieldMaskBit36 = C.BITFIELD_MASK_36 - CBitFieldMaskBit37 = C.BITFIELD_MASK_37 - CBitFieldMaskBit38 = C.BITFIELD_MASK_38 - CBitFieldMaskBit39 = C.BITFIELD_MASK_39 - CBitFieldMaskBit40 = C.BITFIELD_MASK_40 - CBitFieldMaskBit41 = C.BITFIELD_MASK_41 - CBitFieldMaskBit42 = C.BITFIELD_MASK_42 - CBitFieldMaskBit43 = C.BITFIELD_MASK_43 - CBitFieldMaskBit44 = C.BITFIELD_MASK_44 - CBitFieldMaskBit45 = C.BITFIELD_MASK_45 - CBitFieldMaskBit46 = C.BITFIELD_MASK_46 - CBitFieldMaskBit47 = C.BITFIELD_MASK_47 - CBitFieldMaskBit48 = C.BITFIELD_MASK_48 - CBitFieldMaskBit49 = C.BITFIELD_MASK_49 - CBitFieldMaskBit50 = C.BITFIELD_MASK_50 - CBitFieldMaskBit51 = C.BITFIELD_MASK_51 - CBitFieldMaskBit52 = C.BITFIELD_MASK_52 - CBitFieldMaskBit53 = C.BITFIELD_MASK_53 - CBitFieldMaskBit54 = C.BITFIELD_MASK_54 - CBitFieldMaskBit55 = C.BITFIELD_MASK_55 - CBitFieldMaskBit56 = C.BITFIELD_MASK_56 - CBitFieldMaskBit57 = C.BITFIELD_MASK_57 - CBitFieldMaskBit58 = C.BITFIELD_MASK_58 - CBitFieldMaskBit59 = C.BITFIELD_MASK_59 - CBitFieldMaskBit60 = C.BITFIELD_MASK_60 - CBitFieldMaskBit61 = C.BITFIELD_MASK_61 - CBitFieldMaskBit62 = C.BITFIELD_MASK_62 - CBitFieldMaskBit63 = C.BITFIELD_MASK_63 -) - -// TCP-MD5 signature. - -type SockaddrStorage C.struct_sockaddr_storage - -type TCPMD5Sig C.struct_tcp_md5sig - -// Disk drive operations. - -type HDDriveCmdHdr C.struct_hd_drive_cmd_hdr - -type HDGeometry C.struct_hd_geometry - -type HDDriveID C.struct_hd_driveid diff --git a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh index e88bee0752..3b7d62354b 100755 --- a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -50,6 +50,7 @@ includes_Darwin=' #include #include #include +#include #include #include #include @@ -437,7 +438,7 @@ ccflags="$@" $2 ~ /^GENL_/ || $2 ~ /^STATX_/ || $2 ~ /^UTIME_/ || - $2 ~ /^XATTR_(CREATE|REPLACE)/ || + $2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ || $2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ || $2 ~ /^FSOPT_/ || $2 ~ /^WDIOC_/ || diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go index 279cae16b5..79e94767de 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -176,9 +176,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } -//sys getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) - -func Getxattr(path string, attr string, dest []byte) (sz int, err error) { +func xattrPointer(dest []byte) *byte { // It's only when dest is set to NULL that the OS X implementations of // getxattr() and listxattr() return the current sizes of the named attributes. // An empty byte array is not sufficient. To maintain the same behaviour as the @@ -188,7 +186,17 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) { if len(dest) > 0 { destp = &dest[0] } - return getxattr(path, attr, destp, len(dest), 0, 0) + return destp +} + +//sys getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW) } //sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) @@ -220,11 +228,11 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // current implementation, only the resource fork extended attribute makes // use of this argument. For all others, position is reserved. We simply // default to setting it to zero. - var datap *byte - if len(data) > 0 { - datap = &data[0] - } - return setxattr(path, attr, datap, len(data), 0, flags) + return setxattr(path, attr, xattrPointer(data), len(data), 0, flags) +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW) } //sys removexattr(path string, attr string, options int) (err error) @@ -236,15 +244,18 @@ func Removexattr(path string, attr string) (err error) { return removexattr(path, attr, 0) } +func Lremovexattr(link string, attr string) (err error) { + return removexattr(link, attr, XATTR_NOFOLLOW) +} + //sys listxattr(path string, dest *byte, size int, options int) (sz int, err error) func Listxattr(path string, dest []byte) (sz int, err error) { - // See comment in Getxattr for as to why Listxattr is implemented as such. - var destp *byte - if len(dest) > 0 { - destp = &dest[0] - } - return listxattr(path, destp, len(dest), 0) + return listxattr(path, xattrPointer(dest), len(dest), 0) +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW) } func setattrlistTimes(path string, times []Timespec, flags int) error { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go index 9c99893c36..842be627fd 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go @@ -32,6 +32,10 @@ func TestIoctlGetInt(t *testing.T) { } func TestPpoll(t *testing.T) { + if runtime.GOOS == "android" { + t.Skip("mkfifo syscall is not available on android, skipping test") + } + f, cleanup := mktmpfifo(t) defer cleanup() @@ -259,6 +263,9 @@ func TestSchedSetaffinity(t *testing.T) { if runtime.NumCPU() < 2 { t.Skip("skipping setaffinity tests on single CPU system") } + if runtime.GOOS == "android" { + t.Skip("skipping setaffinity tests on android") + } err = unix.SchedSetaffinity(0, &newMask) if err != nil { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go index 7372b3ea33..ad09716a8a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go @@ -125,6 +125,10 @@ func TestFcntlFlock(t *testing.T) { // "-test.run=^TestPassFD$" and an environment variable used to signal // that the test should become the child process instead. func TestPassFD(t *testing.T) { + if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { + t.Skip("cannot exec subprocess on iOS, skipping test") + } + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { passFDChild() return @@ -390,6 +394,11 @@ func TestDup(t *testing.T) { } func TestPoll(t *testing.T) { + if runtime.GOOS == "android" || + (runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64")) { + t.Skip("mkfifo syscall is not available on android and iOS, skipping test") + } + f, cleanup := mktmpfifo(t) defer cleanup() @@ -426,7 +435,10 @@ func TestGetwd(t *testing.T) { // These are chosen carefully not to be symlinks on a Mac // (unlike, say, /var, /etc) dirs := []string{"/", "/usr/bin"} - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "android": + dirs = []string{"/", "/system/bin"} + case "darwin": switch runtime.GOARCH { case "arm", "arm64": d1, err := ioutil.TempDir("", "d1") @@ -534,7 +546,7 @@ func TestFchmodat(t *testing.T) { didChmodSymlink := true err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", uint32(mode), unix.AT_SYMLINK_NOFOLLOW) if err != nil { - if (runtime.GOOS == "linux" || runtime.GOOS == "solaris") && err == unix.EOPNOTSUPP { + if (runtime.GOOS == "android" || runtime.GOOS == "linux" || runtime.GOOS == "solaris") && err == unix.EOPNOTSUPP { // Linux and Illumos don't support flags != 0 didChmodSymlink = false } else { @@ -560,6 +572,19 @@ func TestFchmodat(t *testing.T) { } } +func TestMkdev(t *testing.T) { + major := uint32(42) + minor := uint32(7) + dev := unix.Mkdev(major, minor) + + if unix.Major(dev) != major { + t.Errorf("Major(%#x) == %d, want %d", dev, unix.Major(dev), major) + } + if unix.Minor(dev) != minor { + t.Errorf("Minor(%#x) == %d, want %d", dev, unix.Minor(dev), minor) + } +} + // mktmpfifo creates a temporary FIFO and provides a cleanup function. func mktmpfifo(t *testing.T) (*os.File, func()) { err := unix.Mkfifo("fifo", 0666) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go b/src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go index 78cf9224fd..fb846a7b19 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go @@ -7,6 +7,7 @@ package unix_test import ( + "os" "runtime" "strings" "testing" @@ -89,4 +90,29 @@ func TestXattr(t *testing.T) { if err != nil { t.Fatalf("Removexattr: %v", err) } + + n := "nonexistent" + err = unix.Lsetxattr(n, xattrName, []byte(xattrDataSet), 0) + if err != unix.ENOENT { + t.Errorf("Lsetxattr: expected %v on non-existent file, got %v", unix.ENOENT, err) + } + + _, err = unix.Lgetxattr(n, xattrName, nil) + if err != unix.ENOENT { + t.Errorf("Lgetxattr: %v", err) + } + + s := "symlink1" + err = os.Symlink(n, s) + if err != nil { + t.Fatal(err) + } + + // Linux doesn't support xattrs on symlink according to xattr(7), so + // just test that we get the proper errors. + + err = unix.Lsetxattr(s, xattrName, []byte(xattrDataSet), 0) + if err != nil && (runtime.GOOS != "linux" || err != unix.EPERM) { + t.Fatalf("Lsetxattr: %v", err) + } } diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go index c5a9b73dc8..3b39d7408a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go @@ -1473,6 +1473,12 @@ const ( WORDSIZE = 0x20 WSTOPPED = 0x8 WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 ) // Errors diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index 7de222b652..8fe5547775 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1473,6 +1473,12 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x8 WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 ) // Errors diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go index 33a42e78a2..7a977770d0 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go @@ -1473,6 +1473,12 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x8 WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 ) // Errors diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index 71805155bc..6d56d8a059 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1473,6 +1473,12 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x8 WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 ) // Errors diff --git a/src/cmd/vendor/golang.org/x/sys/windows/service.go b/src/cmd/vendor/golang.org/x/sys/windows/service.go index a500dd7dfc..24aa90bbbe 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/service.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/service.go @@ -162,3 +162,4 @@ type ENUM_SERVICE_STATUS_PROCESS struct { //sys ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W //sys QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W //sys EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW +//sys QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx diff --git a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go index c7b3b15ead..318c61634e 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -65,6 +65,7 @@ var ( procChangeServiceConfig2W = modadvapi32.NewProc("ChangeServiceConfig2W") procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") + procQueryServiceStatusEx = modadvapi32.NewProc("QueryServiceStatusEx") procGetLastError = modkernel32.NewProc("GetLastError") procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") @@ -472,6 +473,18 @@ func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serv return } +func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceStatusEx.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func GetLastError() (lasterr error) { r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) if r0 != 0 { diff --git a/src/cmd/vendor/vendor.json b/src/cmd/vendor/vendor.json index 779a2bcacf..e87f526168 100644 --- a/src/cmd/vendor/vendor.json +++ b/src/cmd/vendor/vendor.json @@ -119,22 +119,22 @@ "revisionTime": "2018-04-06T10:28:20Z" }, { - "checksumSHA1": "E18+MSOY6MlYvt0118eUPj9NsyQ=", + "checksumSHA1": "4nPV7YdyHiVRSWaxpy6jHt/MTq4=", "path": "golang.org/x/crypto/ssh/terminal", - "revision": "1a580b3eff7814fc9b40602fd35256c63b50f491", - "revisionTime": "2018-05-14T23:55:10Z" + "revision": "159ae71589f303f9fbfd7528413e0fe944b9c1cb", + "revisionTime": "2018-05-24T11:38:20Z" }, { - "checksumSHA1": "6dKfNPNpUf9n8ya24buuzpMFfjs=", + "checksumSHA1": "dFWZRPHQmh24everjam0u30KoIM=", "path": "golang.org/x/sys/unix", - "revision": "f3b0f5faf591842dced5f027709e1706df17b749", - "revisionTime": "2018-05-23T20:41:33Z" + "revision": "04b83988a018ef3ebffe1485df79d6499b76a4b4", + "revisionTime": "2018-05-24T06:57:10Z" }, { - "checksumSHA1": "oOO80EfXGcEl+tZoYAZVs6VRpE8=", + "checksumSHA1": "y0x0I9zDxnxn9nCxwP/MdPyq1E8=", "path": "golang.org/x/sys/windows", - "revision": "f3b0f5faf591842dced5f027709e1706df17b749", - "revisionTime": "2018-05-23T20:41:33Z" + "revision": "04b83988a018ef3ebffe1485df79d6499b76a4b4", + "revisionTime": "2018-05-24T06:57:10Z" }, { "checksumSHA1": "BnZkq/3Ejb7961bDhybRraW6jzI=", @@ -145,14 +145,14 @@ { "checksumSHA1": "dQbFeoiAxfB3WFFVcAdeSwSgeDk=", "path": "golang.org/x/sys/windows/svc", - "revision": "f3b0f5faf591842dced5f027709e1706df17b749", - "revisionTime": "2018-05-23T20:41:33Z" + "revision": "04b83988a018ef3ebffe1485df79d6499b76a4b4", + "revisionTime": "2018-05-24T06:57:10Z" }, { "checksumSHA1": "e9KJPWrdqg5PMkbE2w60Io8rY4M=", "path": "golang.org/x/sys/windows/svc/debug", - "revision": "f3b0f5faf591842dced5f027709e1706df17b749", - "revisionTime": "2018-05-23T20:41:33Z" + "revision": "04b83988a018ef3ebffe1485df79d6499b76a4b4", + "revisionTime": "2018-05-24T06:57:10Z" }, { "checksumSHA1": "dz53pQfqAnXG8HdJj+nazXN9YRw=", @@ -163,8 +163,8 @@ { "checksumSHA1": "wz+0tf0Z7cVBaz/35P1m1cAiI7k=", "path": "golang.org/x/sys/windows/svc/mgr", - "revision": "f3b0f5faf591842dced5f027709e1706df17b749", - "revisionTime": "2018-05-23T20:41:33Z" + "revision": "04b83988a018ef3ebffe1485df79d6499b76a4b4", + "revisionTime": "2018-05-24T06:57:10Z" } ], "rootPath": "/cmd"