]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/vendor/golang.org/x: pick up upstream fixes for broken android and iOS tests
authorTobias Klauser <tklauser@distanz.ch>
Thu, 24 May 2018 07:02:31 +0000 (09:02 +0200)
committerTobias Klauser <tobias.klauser@gmail.com>
Thu, 24 May 2018 20:56:47 +0000 (20:56 +0000)
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 <tobias.klauser@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

22 files changed:
src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go
src/cmd/vendor/golang.org/x/sys/unix/dev_darwin_test.go [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go
src/cmd/vendor/golang.org/x/sys/unix/dev_netbsd_test.go [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/dev_openbsd_test.go [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/linux/Dockerfile [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/linux/mkall.go [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/linux/mksysnum.pl [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/linux/types.go [deleted file]
src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh
src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go
src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go
src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go
src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go
src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go
src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go
src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
src/cmd/vendor/golang.org/x/sys/windows/service.go
src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go
src/cmd/vendor/vendor.json

index a27cdd66743e0efbaa129ad6ce52405b29548fe3..d9b77c1c5efda61beddb799dd345638849329141 100644 (file)
@@ -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 (file)
index bf1adf3..0000000
+++ /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 (file)
index 9add376..0000000
+++ /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)
-                       }
-               })
-       }
-}
index 2fd3eadd009f85571b13a32d55debc77d6ae78f8..51645289ca212dd215c21cda700ab52334ac48c3 100644 (file)
@@ -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 (file)
index 441058a..0000000
+++ /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 (file)
index 7c87d7a..0000000
+++ /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 (file)
index 5381034..0000000
+++ /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 (file)
index 40b5cf4..0000000
+++ /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 <linux_dir> <glibc_dir>
-
-// +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 <linux_dir> <glibc_dir>")
-               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 <stdint.h>
-
-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 (executable)
index 63fd800..0000000
+++ /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 <<EOF;
-// $command
-// Code generated by the command above; see README.md. DO NOT EDIT.
-
-// +build $ENV{'GOARCH'},$ENV{'GOOS'}
-
-package unix
-
-const(
-EOF
-
-my $offset = 0;
-
-sub fmt {
-       my ($name, $num) = @_;
-       if($num > 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(<CC>){
-       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 <<EOF;
-)
-EOF
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/linux/types.go b/src/cmd/vendor/golang.org/x/sys/unix/linux/types.go
deleted file mode 100644 (file)
index 3bc7035..0000000
+++ /dev/null
@@ -1,974 +0,0 @@
-// 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.
-
-// +build ignore
-
-/*
-Input to cgo -godefs.  See README.md
-*/
-
-// +godefs map struct_in_addr [4]byte /* in_addr */
-// +godefs map struct_in6_addr [16]byte /* in6_addr */
-
-package unix
-
-/*
-#define _LARGEFILE_SOURCE
-#define _LARGEFILE64_SOURCE
-#define _FILE_OFFSET_BITS 64
-#define _GNU_SOURCE
-
-#include <dirent.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <netpacket/packet.h>
-#include <poll.h>
-#include <sched.h>
-#include <signal.h>
-#include <stdio.h>
-#include <sys/epoll.h>
-#include <sys/inotify.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-#include <sys/mount.h>
-#include <sys/param.h>
-#include <sys/ptrace.h>
-#include <sys/resource.h>
-#include <sys/select.h>
-#include <sys/signal.h>
-#include <sys/statfs.h>
-#include <sys/sysinfo.h>
-#include <sys/time.h>
-#include <sys/times.h>
-#include <sys/timex.h>
-#include <sys/un.h>
-#include <sys/user.h>
-#include <sys/utsname.h>
-#include <sys/wait.h>
-#include <linux/filter.h>
-#include <linux/icmpv6.h>
-#include <linux/keyctl.h>
-#include <linux/netlink.h>
-#include <linux/perf_event.h>
-#include <linux/rtnetlink.h>
-#include <linux/stat.h>
-#include <asm/termbits.h>
-#include <asm/ptrace.h>
-#include <time.h>
-#include <unistd.h>
-#include <ustat.h>
-#include <utime.h>
-#include <linux/can.h>
-#include <linux/if_alg.h>
-#include <linux/fs.h>
-#include <linux/vm_sockets.h>
-#include <linux/random.h>
-#include <linux/taskstats.h>
-#include <linux/cgroupstats.h>
-#include <linux/genetlink.h>
-#include <linux/socket.h>
-#include <linux/hdreg.h>
-
-// 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 <linux/fcntl.h>
-#include <linux/fadvise.h>
-
-#else
-
-// Use the stat defined by glibc
-#include <fcntl.h>
-#include <sys/types.h>
-
-#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 <asm/ptrace.h>
-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 <linux/perf_event.h> 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
index e88bee075261ae5ffd2f3b698c6cc49258fe4653..3b7d62354b94eae6494cf145b7c3c974342a0721 100755 (executable)
@@ -50,6 +50,7 @@ includes_Darwin='
 #include <sys/mount.h>
 #include <sys/utsname.h>
 #include <sys/wait.h>
+#include <sys/xattr.h>
 #include <net/bpf.h>
 #include <net/if.h>
 #include <net/if_types.h>
@@ -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_/ ||
index 279cae16b55f8c2c08560bff5b1738476ce2308c..79e94767deb22a12e13529cf453d40f5b85ac83b 100644 (file)
@@ -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 {
index 9c99893c364d67b365c8cc5315829016069f95da..842be627fd7850536f9ccac1c16cc3a74321e510 100644 (file)
@@ -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 {
index 7372b3ea33a735737e5ab65d859962561365dad5..ad09716a8af830ceb98b135d555ba1b6756a70ea 100644 (file)
@@ -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)
index 78cf9224fda47431d1e940786fb755f3589aa762..fb846a7b1953d2b485180b59062ea8d064c0ca87 100644 (file)
@@ -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)
+       }
 }
index c5a9b73dc8c96b34aba1cb7de1bbccf95df0b036..3b39d7408ad84bd494918a9ca70a766ac65d2e7e 100644 (file)
@@ -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
index 7de222b652ca6121e63715d264ae017f0293b958..8fe5547775b2ced15c43edfa5082d6882a1ce0d7 100644 (file)
@@ -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
index 33a42e78a21cedd11edb65805389b814ae37aa8c..7a977770d0ade59dc3e1cfdc0b5d4c2f704c0e62 100644 (file)
@@ -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
index 71805155bcbd70b627db16a6f28cae4d1085887b..6d56d8a059d17f30478a85ec7ca785391e464d39 100644 (file)
@@ -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
index a500dd7dfcf0a164eded614c9a0d0dba81223fad..24aa90bbbe1dd2b0a7b67e24f16783dcc2053f5f 100644 (file)
@@ -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
index c7b3b15eadb9211c1c1d9067293e4d14426c6cf0..318c61634e1d11ec75eae9b7af3d15a024a98bd7 100644 (file)
@@ -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 {
index 779a2bcacf327b3ba618043130669dcfd4f97b05..e87f526168289c5435a3f33f48933da210c895f1 100644 (file)
                        "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=",
                {
                        "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=",
                {
                        "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"