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>
"bytes"
"io"
"os"
+ "runtime"
"testing"
)
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 {
+++ /dev/null
-// 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)
- }
- })
- }
-}
+++ /dev/null
-// 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)
- }
- })
- }
-}
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
}
+++ /dev/null
-// 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)
- }
- })
- }
-}
+++ /dev/null
-// 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)
- }
- })
- }
-}
+++ /dev/null
-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"]
+++ /dev/null
-// 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;
-}
-
-`
+++ /dev/null
-#!/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
+++ /dev/null
-// 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
#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>
$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_/ ||
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
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)
// 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)
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 {
}
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()
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 {
// "-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
}
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()
// 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")
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 {
}
}
+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)
package unix_test
import (
+ "os"
"runtime"
"strings"
"testing"
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)
+ }
}
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
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
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
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
//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
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")
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 {
"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"