[go][runtime] Implement vDSO loading

This change adds a program to generate keys to look up in the vDSO from
parsing the syscalls.abigen file. The generated file is checked in with
this commit. In addition, the vdso_fuchsia.go file implements the steps
of parsing the vDSO ELF headers to fill in symbols which can be called
(similar to what is happening in syscall/zx).

Future changes will tie this code in with the syscall/zx code and
exercise the loader when cgo is not enabled.

Change-Id: I735d2d7e576fb63be4dd9dea97bda0fd83c63964
diff --git a/src/runtime/mkfuchsiavdso.go b/src/runtime/mkfuchsiavdso.go
new file mode 100644
index 0000000..fb0c55b
--- /dev/null
+++ b/src/runtime/mkfuchsiavdso.go
@@ -0,0 +1,297 @@
+// Copyright 2016 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
+
+// Uses the output of the internal/fuchsia/abigen parser to produce Go assembly
+// stubs to assign values to the vDSO entry points for syscalls.
+//
+// Regenerate with:
+//
+//	go run mkfuchsiavdso.go -keys > vdso_keys_fuchsia.go
+//	go run mkfuchsiavdso.go -calls -arch=amd64 > vdsocalls_fuchsia_amd64.s
+//	go run mkfuchsiavdso.go -calls -arch=arm64 > vdsocalls_fuchsia_arm64.s
+package main
+
+import (
+	"bytes"
+	"flag"
+	"fmt"
+	"io/ioutil"
+	"log"
+	"os"
+	"path/filepath"
+
+	"internal/fuchsia/abigen"
+)
+
+var (
+	keys        = flag.Bool("keys", false, "generate VDSO symbol keys and call stubs")
+	calls       = flag.Bool("calls", false, "generate ASM call implementation")
+	arch        = flag.String("arch", "amd64", "architecture to generate calls for")
+	fuchsiaRoot = flag.String("fuchsia_root", filepath.Join(os.Getenv("HOME"), "fuchsia"), "path to fuchsia root")
+)
+
+func elfHashGNU(s string) uint32 {
+	h := uint32(5381)
+	for i := 0; i < len(s); i++ {
+		h = h<<5 + h + uint32(s[i])
+	}
+	return h
+}
+
+func main() {
+	flag.Parse()
+
+	switch *arch {
+	case "amd64":
+	case "arm64":
+	default:
+		log.Fatalf("GOARCH=%s not supported", *arch)
+	}
+
+	syscallsFile := filepath.Join(*fuchsiaRoot, "/zircon/system/public/zircon/syscalls.abigen")
+	if args := flag.Args(); len(args) != 0 {
+		syscallsFile = args[0]
+	}
+
+	b, err := ioutil.ReadFile(syscallsFile)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	p := abigen.NewParser(b, syscallsFile)
+	defs, err := p.Parse()
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	buf := new(bytes.Buffer)
+
+	if *keys {
+		writeKeys(buf, defs)
+	} else if *calls {
+		writeCalls(buf, defs)
+	}
+
+	buf.WriteTo(os.Stdout)
+}
+
+func writeKeys(buf *bytes.Buffer, defs []abigen.SysDef) {
+	fmt.Fprint(buf, keyHeader[1:])
+
+	fmt.Fprint(buf, "var vdsoSymbolKeys = []vdsoSymbolKey{\n")
+	for _, def := range defs {
+		sym := "_zx_" + def.Name
+		fmt.Fprintf(buf, "\t{\"%s\", 0x%x, &vdso_zx_%s},\n", sym, elfHashGNU(sym), def.Name)
+	}
+	fmt.Fprint(buf, "}\n")
+
+	fmt.Fprint(buf, "\n")
+	for _, def := range defs {
+		fmt.Fprintf(buf, "//go:cgo_import_dynamic vdso_zx_%s _zx_%s\n", def.Name, def.Name)
+	}
+
+	fmt.Fprint(buf, "\n")
+	for _, def := range defs {
+		fmt.Fprintf(buf, "//go:linkname vdso_zx_%s vdso_zx_%s\n", def.Name, def.Name)
+	}
+
+	fmt.Fprint(buf, "\n")
+	for _, def := range defs {
+		fmt.Fprint(buf, "//go:noescape\n")
+		fmt.Fprint(buf, "//go:nosplit\n")
+		printStub(buf, def)
+		fmt.Fprint(buf, "\n")
+	}
+
+	fmt.Fprint(buf, "var (\n")
+	for _, def := range defs {
+		fmt.Fprintf(buf, "\tvdso_zx_%s uintptr\n", def.Name)
+	}
+	fmt.Fprint(buf, ")\n")
+}
+
+func writeCalls(buf *bytes.Buffer, defs []abigen.SysDef) {
+	fmt.Fprint(buf, callHeader[1:])
+	for _, def := range defs {
+		fmt.Fprint(buf, "// ")
+		printStub(buf, def)
+		printAsm(buf, def)
+		fmt.Fprint(buf, "\n")
+	}
+}
+
+const keyHeader = `
+// Copyright 2018 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.
+
+// Keys for vDSO symbols.
+// Generated by mkfuchsiavdso.go, do not edit.
+
+package runtime
+
+import "unsafe"
+
+const (
+	// vdsoArrayMax is the byte-size of a maximally sized array on this architecture.
+	// See cmd/compile/internal/amd64/galign.go arch.MAXWIDTH initialization.
+	vdsoArrayMax = 1<<50 - 1
+)
+`
+
+const callHeader = `
+// Copyright 2018 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.
+
+// Zircon system calls for the Fuchsia OS.
+// Generated by mkfuchsia.go, do not edit.
+
+#include "textflag.h"
+#include "funcdata.h"
+
+`
+
+func printStub(buf *bytes.Buffer, def abigen.SysDef) {
+	fmt.Fprintf(buf, "func vdsoCall_zx_%s(", def.Name)
+	for i, arg := range def.Args {
+		if arg.Type == (abigen.SysType{}) {
+			continue
+		}
+		if i > 0 {
+			fmt.Fprint(buf, ", ")
+		}
+		fmt.Fprintf(buf, "%s ", arg.Name)
+		fmt.Fprintf(buf, "%s", arg.Type.NativeType())
+	}
+	fmt.Fprint(buf, ")")
+	if def.Ret != (abigen.SysType{}) {
+		fmt.Fprint(buf, " ")
+		fmt.Fprintf(buf, "%s", def.Ret.NativeType())
+	}
+	fmt.Fprint(buf, "\n")
+}
+
+// amd64RegArgs is the amd64 registers in function argument calling convention order.
+var amd64RegArgs = []string{"DI", "SI", "DX", "CX", "R8", "R9", "R12", "R13"}
+
+// arm64RegArgs is the arm64 registers in function argument calling convention order.
+var arm64RegArgs = []string{"R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7"}
+
+// blockingSyscalls is a map of known syscalls which may block.
+// TODO(dhobsd): Is this list accurate? Potentially add nanosleep, channel_call, and others.
+var blockingSyscalls = map[string]bool{
+	"port_wait":        true,
+	"object_wait_one":  true,
+	"object_wait_many": true,
+}
+
+func printAsm(buf *bytes.Buffer, def abigen.SysDef) {
+	// The summed size of all arguments.
+	argSize := 0
+	for _, arg := range def.Args {
+		sz := arg.Type.Size()
+		if *arch == "arm64" && sz == 1 {
+			sz = 8
+		}
+		for argSize%sz != 0 {
+			// Add padding until the 'argSize' is aligned to the type we are adding.
+			argSize++
+		}
+		argSize += sz
+	}
+	if argSize%8 == 4 {
+		// Force the return argument on the stack to be 8-byte aligned, not 4-byte aligned
+		argSize += 4
+	}
+	retSize := def.Ret.Size()
+
+	var frameSize int
+	var regArgs []string
+	var callIns, retReg, suffix4, suffix8 string
+	switch *arch {
+	case "amd64":
+		regArgs = amd64RegArgs
+		callIns = "CALL"
+		retReg = "AX"
+		suffix8 = "Q"
+		suffix4 = "L"
+		switch len(def.Args) {
+		case 7:
+			frameSize = 16 + 8
+		case 8:
+			frameSize = 16 + 2*8
+		}
+	case "arm64":
+		regArgs = arm64RegArgs
+		callIns = "BL"
+		retReg = "R0"
+		suffix8 = "D"
+		suffix4 = "W"
+	default:
+		panic(fmt.Sprintf("arch=%s not supported", *arch))
+	}
+
+	fmt.Fprintf(buf, "TEXT runtime·vdsoCall_zx_%s(SB),NOSPLIT,$%d-%d\n", def.Name, frameSize, argSize+retSize)
+	fmt.Fprint(buf, "\tGO_ARGS\n")
+	fmt.Fprint(buf, "\tNO_LOCAL_POINTERS\n")
+
+	if _, ok := blockingSyscalls[def.Name]; ok {
+		fmt.Fprintf(buf, "\tCALL runtime·entersyscall(SB)\n")
+	}
+	off := 0
+	for i, arg := range def.Args {
+		name := arg.Name
+		suffix := suffix8
+		t := arg.Type
+		sz := t.Size()
+		if sz == 4 {
+			suffix = suffix4
+		} else if *arch == "arm64" && sz == 1 {
+			sz = 8
+		}
+		for off%sz != 0 {
+			// Add padding until the offset is aligned to the type we are accessing
+			off++
+		}
+
+		fmt.Fprintf(buf, "\tMOV%s %s+%d(FP), %s\n", suffix, name, off, regArgs[i])
+		off += sz
+	}
+	switch *arch {
+	case "amd64":
+		if len(def.Args) >= 7 {
+			fmt.Fprintf(buf, "\tMOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI\n")
+			fmt.Fprintf(buf, "\tANDQ $~15, SP // stack alignment for x86-64 ABI\n")
+			if len(def.Args) == 8 {
+				fmt.Fprintf(buf, "\tPUSHQ R13\n")
+			}
+			fmt.Fprintf(buf, "\tPUSHQ R12\n")
+		}
+		fmt.Fprintf(buf, "\tMOVQ vdso_zx_%s(SB), AX\n", def.Name)
+		fmt.Fprintf(buf, "\tCALL AX\n")
+		if len(def.Args) >= 7 {
+			fmt.Fprintf(buf, "\tPOPQ R12\n")
+			if len(def.Args) == 8 {
+				fmt.Fprintf(buf, "\tPOPQ R13\n")
+			}
+			fmt.Fprintf(buf, "\tMOVQ BP, SP\n")
+		}
+	case "arm64":
+		fmt.Fprintf(buf, "\tBL vdso_zx_%s(SB)\n", def.Name)
+	}
+	if retSize := def.Ret.Size(); retSize > 0 {
+		suffix := suffix8
+		if retSize == 4 {
+			suffix = suffix4
+		}
+		fmt.Fprintf(buf, "\tMOV%s %s, ret+%d(FP)\n", suffix, retReg, argSize)
+	}
+	if _, ok := blockingSyscalls[def.Name]; ok {
+		fmt.Fprintf(buf, "\t%s runtime·exitsyscall(SB)\n", callIns)
+	}
+	fmt.Fprintf(buf, "\tRET\n")
+}
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index f82014e..834ef60 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -3838,7 +3838,7 @@
 		if n == 0 {
 			// If all of the above has failed, account it against abstract "System" or "GC".
 			n = 2
-			if inVDSOPage(pc) {
+			if inVDSO(pc) {
 				pc = funcPC(_VDSO) + sys.PCQuantum
 			} else if pc > firstmoduledata.etext {
 				// "ExternalCode" is better than "etext".
diff --git a/src/runtime/vdso_elf.go b/src/runtime/vdso_elf.go
new file mode 100644
index 0000000..b8a368d
--- /dev/null
+++ b/src/runtime/vdso_elf.go
@@ -0,0 +1,56 @@
+// Copyright 2012 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 linux fuchsia
+// +build 386 amd64 arm arm64
+
+package runtime
+
+import "unsafe"
+
+const (
+	_AT_SYSINFO_EHDR = 33
+
+	_PT_LOAD    = 1 /* Loadable program segment */
+	_PT_DYNAMIC = 2 /* Dynamic linking information */
+
+	_PF_X = 1 /* Executable PH segment */
+
+	_DT_NULL     = 0          /* Marks end of dynamic section */
+	_DT_HASH     = 4          /* Dynamic symbol hash table */
+	_DT_STRTAB   = 5          /* Address of string table */
+	_DT_SYMTAB   = 6          /* Address of symbol table */
+	_DT_GNU_HASH = 0x6ffffef5 /* GNU-style dynamic symbol hash table */
+	_DT_VERSYM   = 0x6ffffff0
+	_DT_VERDEF   = 0x6ffffffc
+
+	_VER_FLG_BASE = 0x1 /* Version definition of file itself */
+
+	_SHN_UNDEF = 0 /* Undefined section */
+
+	_SHT_DYNSYM = 11 /* Dynamic linker symbol table */
+
+	_STT_FUNC = 2 /* Symbol is a code object */
+
+	_STB_GLOBAL = 1 /* Global symbol */
+	_STB_WEAK   = 2 /* Weak symbol */
+
+	_EI_NIDENT = 16
+
+	// Maximum indices for the array types used when traversing the vDSO ELF structures.
+	// Computed from architecture-specific max provided by vdso_linux_*.go
+	vdsoSymTabSize     = vdsoArrayMax / unsafe.Sizeof(elfSym{})
+	vdsoDynSize        = vdsoArrayMax / unsafe.Sizeof(elfDyn{})
+	vdsoSymStringsSize = vdsoArrayMax     // byte
+	vdsoVerSymSize     = vdsoArrayMax / 2 // uint16
+	vdsoHashSize       = vdsoArrayMax / 4 // uint32
+
+	// vdsoBloomSizeScale is a scaling factor for gnuhash tables which are uint32 indexed,
+	// but contain uintptrs
+	vdsoBloomSizeScale = unsafe.Sizeof(uintptr(0)) / 4 // uint32
+)
+
+/* How to extract and insert information held in the st_info field.  */
+func _ELF_ST_BIND(val byte) byte { return val >> 4 }
+func _ELF_ST_TYPE(val byte) byte { return val & 0xf }
diff --git a/src/runtime/vdso_elf64.go b/src/runtime/vdso_elf64.go
index 8510250..0fba406 100644
--- a/src/runtime/vdso_elf64.go
+++ b/src/runtime/vdso_elf64.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build linux
+// +build linux fuchsia
 // +build amd64 arm64
 
 package runtime
diff --git a/src/runtime/vdso_fuchsia.go b/src/runtime/vdso_fuchsia.go
new file mode 100644
index 0000000..3ab6086
--- /dev/null
+++ b/src/runtime/vdso_fuchsia.go
@@ -0,0 +1,160 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package runtime
+
+import "unsafe"
+
+// Look up symbols in the Fuchsia vDSO.
+//
+// When processes are spawned in Fuchsia, they are provided with a handle to a channel
+// and a pointer to where the vDSO is loaded. Syscalls may never be called directly;
+// on syscall entry, the kernel checks to see that the syscall was entered from the
+// vDSO. Because reading from the channel requires performing a syscall, we must
+// resolve symbols from the vDSO first.
+//
+// This is only performed when not using cgo. When a Go binary is built with cgo, libc
+// handles all of this.
+
+type vdsoSymbolKey struct {
+	name    string
+	gnuHash uint32
+	ptr     *uintptr
+}
+
+type vdsoInfo struct {
+	/* Load information */
+	loadAddr uintptr
+	loadBase uintptr /* loadAddr + p_vaddr */
+
+	/* Symbol table */
+	symtab     *[vdsoSymTabSize]elfSym
+	symstrings *[vdsoSymStringsSize]byte
+	chain      []uint32
+	bucket     []uint32
+	symOff     uint32
+	nBuckets   uint32
+}
+
+var (
+	vdsoLoadBase uintptr
+	vdsoMemSize  uintptr
+)
+
+// see vdso_keys_fuchsia.go for vdsoSymbolKeys[] and vdso*Sym vars
+
+func vdsoInit(info *vdsoInfo, hdr *elfEhdr) {
+	info.loadAddr = uintptr(unsafe.Pointer(hdr))
+
+	pt := unsafe.Pointer(info.loadAddr + uintptr(hdr.e_phoff))
+
+	// We need two things from the segment table: the load offset
+	// and the dynamic table.
+	var foundVaddr bool
+	var dyn *[vdsoDynSize]elfDyn
+	for i := uint16(0); i < hdr.e_phnum; i++ {
+		pt := (*elfPhdr)(add(pt, uintptr(i)*unsafe.Sizeof(elfPhdr{})))
+		switch pt.p_type {
+		case _PT_LOAD:
+			if !foundVaddr && pt.p_flags&_PF_X == _PF_X {
+				foundVaddr = true
+				info.loadBase = info.loadAddr + uintptr(pt.p_vaddr)
+				vdsoLoadBase = info.loadBase
+				vdsoMemSize = uintptr(pt.p_memsz)
+			}
+
+		case _PT_DYNAMIC:
+			dyn = (*[vdsoDynSize]elfDyn)(unsafe.Pointer(info.loadAddr + uintptr(pt.p_vaddr)))
+		}
+	}
+
+	if !foundVaddr || dyn == nil {
+		crash()
+	}
+
+	// Fish out the useful bits of the dynamic table.
+	var gnuhash *[vdsoHashSize]uint32
+	info.symstrings = nil
+	info.symtab = nil
+	for i := 0; dyn[i].d_tag != _DT_NULL; i++ {
+		dt := &dyn[i]
+		p := info.loadAddr + uintptr(dt.d_val)
+		switch dt.d_tag {
+		case _DT_STRTAB:
+			info.symstrings = (*[vdsoSymStringsSize]byte)(unsafe.Pointer(p))
+		case _DT_SYMTAB:
+			info.symtab = (*[vdsoSymTabSize]elfSym)(unsafe.Pointer(p))
+		case _DT_GNU_HASH:
+			gnuhash = (*[vdsoHashSize]uint32)(unsafe.Pointer(p))
+		}
+	}
+
+	if info.symstrings == nil || info.symtab == nil || gnuhash == nil {
+		crash()
+	}
+
+	// Parse the GNU hash table header.
+	info.nBuckets = gnuhash[0]
+	info.symOff = gnuhash[1]
+	bloomSize := gnuhash[2]
+	info.bucket = gnuhash[4+bloomSize*uint32(vdsoBloomSizeScale):][:info.nBuckets]
+	info.chain = gnuhash[4+bloomSize*uint32(vdsoBloomSizeScale)+info.nBuckets:]
+}
+
+func vdsoResolveSymbols(info *vdsoInfo) {
+	// Loop over the keys we wish to resolve and assign the symbol's offset to the
+	// pointer in the key table. We assume that all symbols we want to resolve
+	// exist, and crash if we are unable to resolve any of them.
+	for _, k := range vdsoSymbolKeys {
+		symIndex := info.bucket[k.gnuHash%info.nBuckets]
+
+		// Anything less than info.symOff is e.g. STN_UNDEF and will not be
+		// resolvable. Since that means we wouldn't be able to resolve this
+		// symbol we definitely need, crash.
+		if symIndex < info.symOff {
+			crash()
+		}
+
+		// For each symbol in this bucket, compare hashes and the name. If the
+		// symbol is not found, crash.
+		for ; ; symIndex++ {
+			hash := info.chain[symIndex-info.symOff]
+			sym := &info.symtab[symIndex]
+			if hash|1 == k.gnuHash|1 && k.name == gostringnocopy(&info.symstrings[sym.st_name]) {
+				typ := _ELF_ST_TYPE(sym.st_info)
+				bind := _ELF_ST_BIND(sym.st_info)
+				// If this isn't a function, doesn't have the appropriate binding, or
+				// has an undefined index, crash.
+				if typ != _STT_FUNC || (bind != _STB_GLOBAL && bind != _STB_WEAK) || sym.st_shndx == _SHN_UNDEF {
+					crash()
+				}
+
+				// We've found our symbol, assign its address and continue on to the
+				// next symbol.
+				*k.ptr = info.loadAddr + uintptr(sym.st_value)
+				break
+			}
+
+			if hash&1 != 0 {
+				// We made it to the end of this chain without finding
+				// our symbol. We won't find it. Crash.
+				crash()
+			}
+		}
+	}
+}
+
+func loadVDSO(val uintptr) {
+	var info vdsoInfo
+	// TODO(dhobsd): rsc says in vdso_linux.go that the compiler thinks info
+	// escapes. Remove/fix/investigate this comment at some point.
+	info1 := (*vdsoInfo)(noescape(unsafe.Pointer(&info)))
+	vdsoInit(info1, (*elfEhdr)(unsafe.Pointer(val)))
+	vdsoResolveSymbols(info1)
+}
+
+// inVDSO returns whether an observed PC falls within the VDSO mapping.
+func inVDSO(pc uintptr) bool {
+	return pc >= vdsoLoadBase && pc < vdsoLoadBase+vdsoMemSize
+}
diff --git a/src/runtime/vdso_in_none.go b/src/runtime/vdso_in_none.go
index 34cfac5..0304d94 100644
--- a/src/runtime/vdso_in_none.go
+++ b/src/runtime/vdso_in_none.go
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build linux,!386,!amd64,!arm,!arm64 !linux
+// +build linux,!386,!amd64,!arm,!arm64 !linux,!fuchsia
 
 package runtime
 
-// A dummy version of inVDSOPage for targets that don't use a VDSO.
+// A dummy version of inVDSO for targets that don't use a VDSO.
 
-func inVDSOPage(pc uintptr) bool {
+func inVDSO(pc uintptr) bool {
 	return false
 }
diff --git a/src/runtime/vdso_keys_fuchsia.go b/src/runtime/vdso_keys_fuchsia.go
new file mode 100644
index 0000000..fbc463c
--- /dev/null
+++ b/src/runtime/vdso_keys_fuchsia.go
@@ -0,0 +1,1080 @@
+// Copyright 2018 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.
+
+// Keys for vDSO symbols.
+// Generated by mkfuchsiavdso.go, do not edit.
+
+package runtime
+
+import "unsafe"
+
+const (
+	// vdsoArrayMax is the byte-size of a maximally sized array on this architecture.
+	// See cmd/compile/internal/amd64/galign.go arch.MAXWIDTH initialization.
+	vdsoArrayMax = 1<<50 - 1
+)
+
+var vdsoSymbolKeys = []vdsoSymbolKey{
+	{"_zx_clock_get", 0x3fb5d7c0, &vdso_zx_clock_get},
+	{"_zx_clock_get_new", 0x5291b129, &vdso_zx_clock_get_new},
+	{"_zx_clock_get_monotonic", 0xb00e6115, &vdso_zx_clock_get_monotonic},
+	{"_zx_nanosleep", 0xe9d6145a, &vdso_zx_nanosleep},
+	{"_zx_ticks_get", 0xaeb30a32, &vdso_zx_ticks_get},
+	{"_zx_ticks_per_second", 0x6ed47574, &vdso_zx_ticks_per_second},
+	{"_zx_deadline_after", 0x6253eb5c, &vdso_zx_deadline_after},
+	{"_zx_clock_adjust", 0x87cf38ab, &vdso_zx_clock_adjust},
+	{"_zx_system_get_dcache_line_size", 0x2d6d6511, &vdso_zx_system_get_dcache_line_size},
+	{"_zx_system_get_num_cpus", 0x8e92a0c2, &vdso_zx_system_get_num_cpus},
+	{"_zx_system_get_version", 0x206d39de, &vdso_zx_system_get_version},
+	{"_zx_system_get_physmem", 0x5a0e027b, &vdso_zx_system_get_physmem},
+	{"_zx_system_get_features", 0x42682df7, &vdso_zx_system_get_features},
+	{"_zx_cache_flush", 0x319eccca, &vdso_zx_cache_flush},
+	{"_zx_handle_close", 0xe769f876, &vdso_zx_handle_close},
+	{"_zx_handle_close_many", 0x8a9a3aaa, &vdso_zx_handle_close_many},
+	{"_zx_handle_duplicate", 0x3f0a83b, &vdso_zx_handle_duplicate},
+	{"_zx_handle_replace", 0xdc2d9edc, &vdso_zx_handle_replace},
+	{"_zx_object_wait_one", 0xed850621, &vdso_zx_object_wait_one},
+	{"_zx_object_wait_many", 0x9e247bd4, &vdso_zx_object_wait_many},
+	{"_zx_object_wait_async", 0x61e4dcdd, &vdso_zx_object_wait_async},
+	{"_zx_object_signal", 0x460ab89, &vdso_zx_object_signal},
+	{"_zx_object_signal_peer", 0xe90c8694, &vdso_zx_object_signal_peer},
+	{"_zx_object_get_property", 0xd60c8aef, &vdso_zx_object_get_property},
+	{"_zx_object_set_property", 0x2174eb7b, &vdso_zx_object_set_property},
+	{"_zx_object_set_cookie", 0x4491210, &vdso_zx_object_set_cookie},
+	{"_zx_object_get_cookie", 0xd3ca4484, &vdso_zx_object_get_cookie},
+	{"_zx_object_get_info", 0x7582ddf6, &vdso_zx_object_get_info},
+	{"_zx_object_get_child", 0x256ecc2e, &vdso_zx_object_get_child},
+	{"_zx_object_set_profile", 0x7d1d2727, &vdso_zx_object_set_profile},
+	{"_zx_channel_create", 0xe5199281, &vdso_zx_channel_create},
+	{"_zx_channel_read", 0xe7169b09, &vdso_zx_channel_read},
+	{"_zx_channel_read_etc", 0x77c4cc84, &vdso_zx_channel_read_etc},
+	{"_zx_channel_write", 0xca4bbc18, &vdso_zx_channel_write},
+	{"_zx_channel_call_noretry", 0xb5ad0b5b, &vdso_zx_channel_call_noretry},
+	{"_zx_channel_call_finish", 0x85ce3de9, &vdso_zx_channel_call_finish},
+	{"_zx_channel_call", 0xe70e51c9, &vdso_zx_channel_call},
+	{"_zx_socket_create", 0xf536e851, &vdso_zx_socket_create},
+	{"_zx_socket_write", 0x5e2d97e8, &vdso_zx_socket_write},
+	{"_zx_socket_read", 0xb5443cd9, &vdso_zx_socket_read},
+	{"_zx_socket_share", 0x5ddf97d0, &vdso_zx_socket_share},
+	{"_zx_socket_accept", 0xef7c1f4d, &vdso_zx_socket_accept},
+	{"_zx_thread_exit", 0xed44fe6, &vdso_zx_thread_exit},
+	{"_zx_thread_create", 0x100e8a20, &vdso_zx_thread_create},
+	{"_zx_thread_start", 0xea59505a, &vdso_zx_thread_start},
+	{"_zx_thread_read_state", 0x82fd0a88, &vdso_zx_thread_read_state},
+	{"_zx_thread_write_state", 0xb9265eb7, &vdso_zx_thread_write_state},
+	{"_zx_thread_set_priority", 0xb8704059, &vdso_zx_thread_set_priority},
+	{"_zx_process_exit", 0xc7f8a64d, &vdso_zx_process_exit},
+	{"_zx_process_create", 0xa3a21647, &vdso_zx_process_create},
+	{"_zx_process_start", 0xc80873a1, &vdso_zx_process_start},
+	{"_zx_process_read_memory", 0x883ab627, &vdso_zx_process_read_memory},
+	{"_zx_process_write_memory", 0x18162116, &vdso_zx_process_write_memory},
+	{"_zx_job_create", 0x6b9cbb63, &vdso_zx_job_create},
+	{"_zx_job_set_policy", 0xa45d60ea, &vdso_zx_job_set_policy},
+	{"_zx_task_bind_exception_port", 0xbf7013d6, &vdso_zx_task_bind_exception_port},
+	{"_zx_task_resume", 0x77b9b998, &vdso_zx_task_resume},
+	{"_zx_task_suspend", 0xe13ad509, &vdso_zx_task_suspend},
+	{"_zx_task_suspend_token", 0x341e98a9, &vdso_zx_task_suspend_token},
+	{"_zx_task_resume_from_exception", 0x185b8e99, &vdso_zx_task_resume_from_exception},
+	{"_zx_task_kill", 0x1ae4e313, &vdso_zx_task_kill},
+	{"_zx_event_create", 0x4c39490a, &vdso_zx_event_create},
+	{"_zx_eventpair_create", 0xe3fd9c16, &vdso_zx_eventpair_create},
+	{"_zx_futex_wait", 0xb089e255, &vdso_zx_futex_wait},
+	{"_zx_futex_wake", 0xb089e288, &vdso_zx_futex_wake},
+	{"_zx_futex_requeue", 0xd509be7c, &vdso_zx_futex_requeue},
+	{"_zx_port_create", 0x5294baed, &vdso_zx_port_create},
+	{"_zx_port_queue", 0x8f22883e, &vdso_zx_port_queue},
+	{"_zx_port_wait", 0xfc97666e, &vdso_zx_port_wait},
+	{"_zx_port_cancel", 0x5166105f, &vdso_zx_port_cancel},
+	{"_zx_timer_create", 0x943773a9, &vdso_zx_timer_create},
+	{"_zx_timer_set", 0xa2689081, &vdso_zx_timer_set},
+	{"_zx_timer_cancel", 0x9308c91b, &vdso_zx_timer_cancel},
+	{"_zx_vmo_create", 0xb27a765a, &vdso_zx_vmo_create},
+	{"_zx_vmo_read", 0xe70ab4a2, &vdso_zx_vmo_read},
+	{"_zx_vmo_write", 0xc8c308d1, &vdso_zx_vmo_write},
+	{"_zx_vmo_get_size", 0x261c77c0, &vdso_zx_vmo_get_size},
+	{"_zx_vmo_set_size", 0x3932724c, &vdso_zx_vmo_set_size},
+	{"_zx_vmo_op_range", 0xa73d6b71, &vdso_zx_vmo_op_range},
+	{"_zx_vmo_clone", 0xc755ed37, &vdso_zx_vmo_clone},
+	{"_zx_vmo_set_cache_policy", 0xe509bad4, &vdso_zx_vmo_set_cache_policy},
+	{"_zx_vmo_replace_as_executable", 0xbd38e576, &vdso_zx_vmo_replace_as_executable},
+	{"_zx_vmar_allocate_old", 0x3a81e3ed, &vdso_zx_vmar_allocate_old},
+	{"_zx_vmar_map_old", 0x6d5ee6c6, &vdso_zx_vmar_map_old},
+	{"_zx_vmar_protect_old", 0xe8a75b89, &vdso_zx_vmar_protect_old},
+	{"_zx_vmar_allocate", 0x4cac85ef, &vdso_zx_vmar_allocate},
+	{"_zx_vmar_destroy", 0xc2294134, &vdso_zx_vmar_destroy},
+	{"_zx_vmar_map", 0xc7b00448, &vdso_zx_vmar_map},
+	{"_zx_vmar_unmap", 0x745a1b6b, &vdso_zx_vmar_unmap},
+	{"_zx_vmar_protect", 0x7bee8f8b, &vdso_zx_vmar_protect},
+	{"_zx_cprng_draw_once", 0x40248ce0, &vdso_zx_cprng_draw_once},
+	{"_zx_cprng_draw", 0x12929c5c, &vdso_zx_cprng_draw},
+	{"_zx_cprng_add_entropy", 0x1617dd47, &vdso_zx_cprng_add_entropy},
+	{"_zx_fifo_create", 0xf197cb2c, &vdso_zx_fifo_create},
+	{"_zx_fifo_read", 0x3ec8acf4, &vdso_zx_fifo_read},
+	{"_zx_fifo_write", 0x18400b63, &vdso_zx_fifo_write},
+	{"_zx_profile_create", 0x28e1bf39, &vdso_zx_profile_create},
+	{"_zx_vmar_unmap_handle_close_thread_exit", 0x5a372afb, &vdso_zx_vmar_unmap_handle_close_thread_exit},
+	{"_zx_futex_wake_handle_close_thread_exit", 0x49731cb8, &vdso_zx_futex_wake_handle_close_thread_exit},
+	{"_zx_log_write", 0xac986281, &vdso_zx_log_write},
+	{"_zx_log_read", 0x33c39852, &vdso_zx_log_read},
+	{"_zx_debuglog_create", 0x2504f1, &vdso_zx_debuglog_create},
+	{"_zx_debuglog_write", 0x3f7aa088, &vdso_zx_debuglog_write},
+	{"_zx_debuglog_read", 0x66c2b179, &vdso_zx_debuglog_read},
+	{"_zx_ktrace_read", 0x7a59dbca, &vdso_zx_ktrace_read},
+	{"_zx_ktrace_control", 0x15debecf, &vdso_zx_ktrace_control},
+	{"_zx_ktrace_write", 0xc5f714f9, &vdso_zx_ktrace_write},
+	{"_zx_mtrace_control", 0x8c5f3211, &vdso_zx_mtrace_control},
+	{"_zx_debug_read", 0x6c062397, &vdso_zx_debug_read},
+	{"_zx_debug_write", 0xed2c5666, &vdso_zx_debug_write},
+	{"_zx_debug_send_command", 0xac6e8203, &vdso_zx_debug_send_command},
+	{"_zx_interrupt_create", 0xaa939795, &vdso_zx_interrupt_create},
+	{"_zx_interrupt_bind", 0xa25b97be, &vdso_zx_interrupt_bind},
+	{"_zx_interrupt_wait", 0xa266f916, &vdso_zx_interrupt_wait},
+	{"_zx_interrupt_destroy", 0x2cb5724b, &vdso_zx_interrupt_destroy},
+	{"_zx_interrupt_ack", 0x3b390f10, &vdso_zx_interrupt_ack},
+	{"_zx_interrupt_trigger", 0x19f00875, &vdso_zx_interrupt_trigger},
+	{"_zx_ioports_request", 0xb8f1c0ad, &vdso_zx_ioports_request},
+	{"_zx_vmo_create_contiguous", 0x466a8289, &vdso_zx_vmo_create_contiguous},
+	{"_zx_vmo_create_physical", 0x659677b6, &vdso_zx_vmo_create_physical},
+	{"_zx_iommu_create", 0x297b6af, &vdso_zx_iommu_create},
+	{"_zx_bti_create", 0x7833987, &vdso_zx_bti_create},
+	{"_zx_bti_pin", 0x2aa0e6da, &vdso_zx_bti_pin},
+	{"_zx_bti_release_quarantine", 0x441c1c6b, &vdso_zx_bti_release_quarantine},
+	{"_zx_pmt_unpin", 0x8e954c6f, &vdso_zx_pmt_unpin},
+	{"_zx_framebuffer_get_info", 0xe6c88924, &vdso_zx_framebuffer_get_info},
+	{"_zx_framebuffer_set_range", 0x364ad6b1, &vdso_zx_framebuffer_set_range},
+	{"_zx_pc_firmware_tables", 0x1a05d1fe, &vdso_zx_pc_firmware_tables},
+	{"_zx_smc_call", 0x63f0533, &vdso_zx_smc_call},
+	{"_zx_resource_create", 0x22a0d150, &vdso_zx_resource_create},
+	{"_zx_system_mexec", 0xd142362b, &vdso_zx_system_mexec},
+	{"_zx_system_powerctl", 0x43f6ae09, &vdso_zx_system_powerctl},
+}
+
+//go:cgo_import_dynamic vdso_zx_clock_get _zx_clock_get
+//go:cgo_import_dynamic vdso_zx_clock_get_new _zx_clock_get_new
+//go:cgo_import_dynamic vdso_zx_clock_get_monotonic _zx_clock_get_monotonic
+//go:cgo_import_dynamic vdso_zx_nanosleep _zx_nanosleep
+//go:cgo_import_dynamic vdso_zx_ticks_get _zx_ticks_get
+//go:cgo_import_dynamic vdso_zx_ticks_per_second _zx_ticks_per_second
+//go:cgo_import_dynamic vdso_zx_deadline_after _zx_deadline_after
+//go:cgo_import_dynamic vdso_zx_clock_adjust _zx_clock_adjust
+//go:cgo_import_dynamic vdso_zx_system_get_dcache_line_size _zx_system_get_dcache_line_size
+//go:cgo_import_dynamic vdso_zx_system_get_num_cpus _zx_system_get_num_cpus
+//go:cgo_import_dynamic vdso_zx_system_get_version _zx_system_get_version
+//go:cgo_import_dynamic vdso_zx_system_get_physmem _zx_system_get_physmem
+//go:cgo_import_dynamic vdso_zx_system_get_features _zx_system_get_features
+//go:cgo_import_dynamic vdso_zx_cache_flush _zx_cache_flush
+//go:cgo_import_dynamic vdso_zx_handle_close _zx_handle_close
+//go:cgo_import_dynamic vdso_zx_handle_close_many _zx_handle_close_many
+//go:cgo_import_dynamic vdso_zx_handle_duplicate _zx_handle_duplicate
+//go:cgo_import_dynamic vdso_zx_handle_replace _zx_handle_replace
+//go:cgo_import_dynamic vdso_zx_object_wait_one _zx_object_wait_one
+//go:cgo_import_dynamic vdso_zx_object_wait_many _zx_object_wait_many
+//go:cgo_import_dynamic vdso_zx_object_wait_async _zx_object_wait_async
+//go:cgo_import_dynamic vdso_zx_object_signal _zx_object_signal
+//go:cgo_import_dynamic vdso_zx_object_signal_peer _zx_object_signal_peer
+//go:cgo_import_dynamic vdso_zx_object_get_property _zx_object_get_property
+//go:cgo_import_dynamic vdso_zx_object_set_property _zx_object_set_property
+//go:cgo_import_dynamic vdso_zx_object_set_cookie _zx_object_set_cookie
+//go:cgo_import_dynamic vdso_zx_object_get_cookie _zx_object_get_cookie
+//go:cgo_import_dynamic vdso_zx_object_get_info _zx_object_get_info
+//go:cgo_import_dynamic vdso_zx_object_get_child _zx_object_get_child
+//go:cgo_import_dynamic vdso_zx_object_set_profile _zx_object_set_profile
+//go:cgo_import_dynamic vdso_zx_channel_create _zx_channel_create
+//go:cgo_import_dynamic vdso_zx_channel_read _zx_channel_read
+//go:cgo_import_dynamic vdso_zx_channel_read_etc _zx_channel_read_etc
+//go:cgo_import_dynamic vdso_zx_channel_write _zx_channel_write
+//go:cgo_import_dynamic vdso_zx_channel_call_noretry _zx_channel_call_noretry
+//go:cgo_import_dynamic vdso_zx_channel_call_finish _zx_channel_call_finish
+//go:cgo_import_dynamic vdso_zx_channel_call _zx_channel_call
+//go:cgo_import_dynamic vdso_zx_socket_create _zx_socket_create
+//go:cgo_import_dynamic vdso_zx_socket_write _zx_socket_write
+//go:cgo_import_dynamic vdso_zx_socket_read _zx_socket_read
+//go:cgo_import_dynamic vdso_zx_socket_share _zx_socket_share
+//go:cgo_import_dynamic vdso_zx_socket_accept _zx_socket_accept
+//go:cgo_import_dynamic vdso_zx_thread_exit _zx_thread_exit
+//go:cgo_import_dynamic vdso_zx_thread_create _zx_thread_create
+//go:cgo_import_dynamic vdso_zx_thread_start _zx_thread_start
+//go:cgo_import_dynamic vdso_zx_thread_read_state _zx_thread_read_state
+//go:cgo_import_dynamic vdso_zx_thread_write_state _zx_thread_write_state
+//go:cgo_import_dynamic vdso_zx_thread_set_priority _zx_thread_set_priority
+//go:cgo_import_dynamic vdso_zx_process_exit _zx_process_exit
+//go:cgo_import_dynamic vdso_zx_process_create _zx_process_create
+//go:cgo_import_dynamic vdso_zx_process_start _zx_process_start
+//go:cgo_import_dynamic vdso_zx_process_read_memory _zx_process_read_memory
+//go:cgo_import_dynamic vdso_zx_process_write_memory _zx_process_write_memory
+//go:cgo_import_dynamic vdso_zx_job_create _zx_job_create
+//go:cgo_import_dynamic vdso_zx_job_set_policy _zx_job_set_policy
+//go:cgo_import_dynamic vdso_zx_task_bind_exception_port _zx_task_bind_exception_port
+//go:cgo_import_dynamic vdso_zx_task_resume _zx_task_resume
+//go:cgo_import_dynamic vdso_zx_task_suspend _zx_task_suspend
+//go:cgo_import_dynamic vdso_zx_task_suspend_token _zx_task_suspend_token
+//go:cgo_import_dynamic vdso_zx_task_resume_from_exception _zx_task_resume_from_exception
+//go:cgo_import_dynamic vdso_zx_task_kill _zx_task_kill
+//go:cgo_import_dynamic vdso_zx_event_create _zx_event_create
+//go:cgo_import_dynamic vdso_zx_eventpair_create _zx_eventpair_create
+//go:cgo_import_dynamic vdso_zx_futex_wait _zx_futex_wait
+//go:cgo_import_dynamic vdso_zx_futex_wake _zx_futex_wake
+//go:cgo_import_dynamic vdso_zx_futex_requeue _zx_futex_requeue
+//go:cgo_import_dynamic vdso_zx_port_create _zx_port_create
+//go:cgo_import_dynamic vdso_zx_port_queue _zx_port_queue
+//go:cgo_import_dynamic vdso_zx_port_wait _zx_port_wait
+//go:cgo_import_dynamic vdso_zx_port_cancel _zx_port_cancel
+//go:cgo_import_dynamic vdso_zx_timer_create _zx_timer_create
+//go:cgo_import_dynamic vdso_zx_timer_set _zx_timer_set
+//go:cgo_import_dynamic vdso_zx_timer_cancel _zx_timer_cancel
+//go:cgo_import_dynamic vdso_zx_vmo_create _zx_vmo_create
+//go:cgo_import_dynamic vdso_zx_vmo_read _zx_vmo_read
+//go:cgo_import_dynamic vdso_zx_vmo_write _zx_vmo_write
+//go:cgo_import_dynamic vdso_zx_vmo_get_size _zx_vmo_get_size
+//go:cgo_import_dynamic vdso_zx_vmo_set_size _zx_vmo_set_size
+//go:cgo_import_dynamic vdso_zx_vmo_op_range _zx_vmo_op_range
+//go:cgo_import_dynamic vdso_zx_vmo_clone _zx_vmo_clone
+//go:cgo_import_dynamic vdso_zx_vmo_set_cache_policy _zx_vmo_set_cache_policy
+//go:cgo_import_dynamic vdso_zx_vmo_replace_as_executable _zx_vmo_replace_as_executable
+//go:cgo_import_dynamic vdso_zx_vmar_allocate_old _zx_vmar_allocate_old
+//go:cgo_import_dynamic vdso_zx_vmar_map_old _zx_vmar_map_old
+//go:cgo_import_dynamic vdso_zx_vmar_protect_old _zx_vmar_protect_old
+//go:cgo_import_dynamic vdso_zx_vmar_allocate _zx_vmar_allocate
+//go:cgo_import_dynamic vdso_zx_vmar_destroy _zx_vmar_destroy
+//go:cgo_import_dynamic vdso_zx_vmar_map _zx_vmar_map
+//go:cgo_import_dynamic vdso_zx_vmar_unmap _zx_vmar_unmap
+//go:cgo_import_dynamic vdso_zx_vmar_protect _zx_vmar_protect
+//go:cgo_import_dynamic vdso_zx_cprng_draw_once _zx_cprng_draw_once
+//go:cgo_import_dynamic vdso_zx_cprng_draw _zx_cprng_draw
+//go:cgo_import_dynamic vdso_zx_cprng_add_entropy _zx_cprng_add_entropy
+//go:cgo_import_dynamic vdso_zx_fifo_create _zx_fifo_create
+//go:cgo_import_dynamic vdso_zx_fifo_read _zx_fifo_read
+//go:cgo_import_dynamic vdso_zx_fifo_write _zx_fifo_write
+//go:cgo_import_dynamic vdso_zx_profile_create _zx_profile_create
+//go:cgo_import_dynamic vdso_zx_vmar_unmap_handle_close_thread_exit _zx_vmar_unmap_handle_close_thread_exit
+//go:cgo_import_dynamic vdso_zx_futex_wake_handle_close_thread_exit _zx_futex_wake_handle_close_thread_exit
+//go:cgo_import_dynamic vdso_zx_log_write _zx_log_write
+//go:cgo_import_dynamic vdso_zx_log_read _zx_log_read
+//go:cgo_import_dynamic vdso_zx_debuglog_create _zx_debuglog_create
+//go:cgo_import_dynamic vdso_zx_debuglog_write _zx_debuglog_write
+//go:cgo_import_dynamic vdso_zx_debuglog_read _zx_debuglog_read
+//go:cgo_import_dynamic vdso_zx_ktrace_read _zx_ktrace_read
+//go:cgo_import_dynamic vdso_zx_ktrace_control _zx_ktrace_control
+//go:cgo_import_dynamic vdso_zx_ktrace_write _zx_ktrace_write
+//go:cgo_import_dynamic vdso_zx_mtrace_control _zx_mtrace_control
+//go:cgo_import_dynamic vdso_zx_debug_read _zx_debug_read
+//go:cgo_import_dynamic vdso_zx_debug_write _zx_debug_write
+//go:cgo_import_dynamic vdso_zx_debug_send_command _zx_debug_send_command
+//go:cgo_import_dynamic vdso_zx_interrupt_create _zx_interrupt_create
+//go:cgo_import_dynamic vdso_zx_interrupt_bind _zx_interrupt_bind
+//go:cgo_import_dynamic vdso_zx_interrupt_wait _zx_interrupt_wait
+//go:cgo_import_dynamic vdso_zx_interrupt_destroy _zx_interrupt_destroy
+//go:cgo_import_dynamic vdso_zx_interrupt_ack _zx_interrupt_ack
+//go:cgo_import_dynamic vdso_zx_interrupt_trigger _zx_interrupt_trigger
+//go:cgo_import_dynamic vdso_zx_ioports_request _zx_ioports_request
+//go:cgo_import_dynamic vdso_zx_vmo_create_contiguous _zx_vmo_create_contiguous
+//go:cgo_import_dynamic vdso_zx_vmo_create_physical _zx_vmo_create_physical
+//go:cgo_import_dynamic vdso_zx_iommu_create _zx_iommu_create
+//go:cgo_import_dynamic vdso_zx_bti_create _zx_bti_create
+//go:cgo_import_dynamic vdso_zx_bti_pin _zx_bti_pin
+//go:cgo_import_dynamic vdso_zx_bti_release_quarantine _zx_bti_release_quarantine
+//go:cgo_import_dynamic vdso_zx_pmt_unpin _zx_pmt_unpin
+//go:cgo_import_dynamic vdso_zx_framebuffer_get_info _zx_framebuffer_get_info
+//go:cgo_import_dynamic vdso_zx_framebuffer_set_range _zx_framebuffer_set_range
+//go:cgo_import_dynamic vdso_zx_pc_firmware_tables _zx_pc_firmware_tables
+//go:cgo_import_dynamic vdso_zx_smc_call _zx_smc_call
+//go:cgo_import_dynamic vdso_zx_resource_create _zx_resource_create
+//go:cgo_import_dynamic vdso_zx_system_mexec _zx_system_mexec
+//go:cgo_import_dynamic vdso_zx_system_powerctl _zx_system_powerctl
+
+//go:linkname vdso_zx_clock_get vdso_zx_clock_get
+//go:linkname vdso_zx_clock_get_new vdso_zx_clock_get_new
+//go:linkname vdso_zx_clock_get_monotonic vdso_zx_clock_get_monotonic
+//go:linkname vdso_zx_nanosleep vdso_zx_nanosleep
+//go:linkname vdso_zx_ticks_get vdso_zx_ticks_get
+//go:linkname vdso_zx_ticks_per_second vdso_zx_ticks_per_second
+//go:linkname vdso_zx_deadline_after vdso_zx_deadline_after
+//go:linkname vdso_zx_clock_adjust vdso_zx_clock_adjust
+//go:linkname vdso_zx_system_get_dcache_line_size vdso_zx_system_get_dcache_line_size
+//go:linkname vdso_zx_system_get_num_cpus vdso_zx_system_get_num_cpus
+//go:linkname vdso_zx_system_get_version vdso_zx_system_get_version
+//go:linkname vdso_zx_system_get_physmem vdso_zx_system_get_physmem
+//go:linkname vdso_zx_system_get_features vdso_zx_system_get_features
+//go:linkname vdso_zx_cache_flush vdso_zx_cache_flush
+//go:linkname vdso_zx_handle_close vdso_zx_handle_close
+//go:linkname vdso_zx_handle_close_many vdso_zx_handle_close_many
+//go:linkname vdso_zx_handle_duplicate vdso_zx_handle_duplicate
+//go:linkname vdso_zx_handle_replace vdso_zx_handle_replace
+//go:linkname vdso_zx_object_wait_one vdso_zx_object_wait_one
+//go:linkname vdso_zx_object_wait_many vdso_zx_object_wait_many
+//go:linkname vdso_zx_object_wait_async vdso_zx_object_wait_async
+//go:linkname vdso_zx_object_signal vdso_zx_object_signal
+//go:linkname vdso_zx_object_signal_peer vdso_zx_object_signal_peer
+//go:linkname vdso_zx_object_get_property vdso_zx_object_get_property
+//go:linkname vdso_zx_object_set_property vdso_zx_object_set_property
+//go:linkname vdso_zx_object_set_cookie vdso_zx_object_set_cookie
+//go:linkname vdso_zx_object_get_cookie vdso_zx_object_get_cookie
+//go:linkname vdso_zx_object_get_info vdso_zx_object_get_info
+//go:linkname vdso_zx_object_get_child vdso_zx_object_get_child
+//go:linkname vdso_zx_object_set_profile vdso_zx_object_set_profile
+//go:linkname vdso_zx_channel_create vdso_zx_channel_create
+//go:linkname vdso_zx_channel_read vdso_zx_channel_read
+//go:linkname vdso_zx_channel_read_etc vdso_zx_channel_read_etc
+//go:linkname vdso_zx_channel_write vdso_zx_channel_write
+//go:linkname vdso_zx_channel_call_noretry vdso_zx_channel_call_noretry
+//go:linkname vdso_zx_channel_call_finish vdso_zx_channel_call_finish
+//go:linkname vdso_zx_channel_call vdso_zx_channel_call
+//go:linkname vdso_zx_socket_create vdso_zx_socket_create
+//go:linkname vdso_zx_socket_write vdso_zx_socket_write
+//go:linkname vdso_zx_socket_read vdso_zx_socket_read
+//go:linkname vdso_zx_socket_share vdso_zx_socket_share
+//go:linkname vdso_zx_socket_accept vdso_zx_socket_accept
+//go:linkname vdso_zx_thread_exit vdso_zx_thread_exit
+//go:linkname vdso_zx_thread_create vdso_zx_thread_create
+//go:linkname vdso_zx_thread_start vdso_zx_thread_start
+//go:linkname vdso_zx_thread_read_state vdso_zx_thread_read_state
+//go:linkname vdso_zx_thread_write_state vdso_zx_thread_write_state
+//go:linkname vdso_zx_thread_set_priority vdso_zx_thread_set_priority
+//go:linkname vdso_zx_process_exit vdso_zx_process_exit
+//go:linkname vdso_zx_process_create vdso_zx_process_create
+//go:linkname vdso_zx_process_start vdso_zx_process_start
+//go:linkname vdso_zx_process_read_memory vdso_zx_process_read_memory
+//go:linkname vdso_zx_process_write_memory vdso_zx_process_write_memory
+//go:linkname vdso_zx_job_create vdso_zx_job_create
+//go:linkname vdso_zx_job_set_policy vdso_zx_job_set_policy
+//go:linkname vdso_zx_task_bind_exception_port vdso_zx_task_bind_exception_port
+//go:linkname vdso_zx_task_resume vdso_zx_task_resume
+//go:linkname vdso_zx_task_suspend vdso_zx_task_suspend
+//go:linkname vdso_zx_task_suspend_token vdso_zx_task_suspend_token
+//go:linkname vdso_zx_task_resume_from_exception vdso_zx_task_resume_from_exception
+//go:linkname vdso_zx_task_kill vdso_zx_task_kill
+//go:linkname vdso_zx_event_create vdso_zx_event_create
+//go:linkname vdso_zx_eventpair_create vdso_zx_eventpair_create
+//go:linkname vdso_zx_futex_wait vdso_zx_futex_wait
+//go:linkname vdso_zx_futex_wake vdso_zx_futex_wake
+//go:linkname vdso_zx_futex_requeue vdso_zx_futex_requeue
+//go:linkname vdso_zx_port_create vdso_zx_port_create
+//go:linkname vdso_zx_port_queue vdso_zx_port_queue
+//go:linkname vdso_zx_port_wait vdso_zx_port_wait
+//go:linkname vdso_zx_port_cancel vdso_zx_port_cancel
+//go:linkname vdso_zx_timer_create vdso_zx_timer_create
+//go:linkname vdso_zx_timer_set vdso_zx_timer_set
+//go:linkname vdso_zx_timer_cancel vdso_zx_timer_cancel
+//go:linkname vdso_zx_vmo_create vdso_zx_vmo_create
+//go:linkname vdso_zx_vmo_read vdso_zx_vmo_read
+//go:linkname vdso_zx_vmo_write vdso_zx_vmo_write
+//go:linkname vdso_zx_vmo_get_size vdso_zx_vmo_get_size
+//go:linkname vdso_zx_vmo_set_size vdso_zx_vmo_set_size
+//go:linkname vdso_zx_vmo_op_range vdso_zx_vmo_op_range
+//go:linkname vdso_zx_vmo_clone vdso_zx_vmo_clone
+//go:linkname vdso_zx_vmo_set_cache_policy vdso_zx_vmo_set_cache_policy
+//go:linkname vdso_zx_vmo_replace_as_executable vdso_zx_vmo_replace_as_executable
+//go:linkname vdso_zx_vmar_allocate_old vdso_zx_vmar_allocate_old
+//go:linkname vdso_zx_vmar_map_old vdso_zx_vmar_map_old
+//go:linkname vdso_zx_vmar_protect_old vdso_zx_vmar_protect_old
+//go:linkname vdso_zx_vmar_allocate vdso_zx_vmar_allocate
+//go:linkname vdso_zx_vmar_destroy vdso_zx_vmar_destroy
+//go:linkname vdso_zx_vmar_map vdso_zx_vmar_map
+//go:linkname vdso_zx_vmar_unmap vdso_zx_vmar_unmap
+//go:linkname vdso_zx_vmar_protect vdso_zx_vmar_protect
+//go:linkname vdso_zx_cprng_draw_once vdso_zx_cprng_draw_once
+//go:linkname vdso_zx_cprng_draw vdso_zx_cprng_draw
+//go:linkname vdso_zx_cprng_add_entropy vdso_zx_cprng_add_entropy
+//go:linkname vdso_zx_fifo_create vdso_zx_fifo_create
+//go:linkname vdso_zx_fifo_read vdso_zx_fifo_read
+//go:linkname vdso_zx_fifo_write vdso_zx_fifo_write
+//go:linkname vdso_zx_profile_create vdso_zx_profile_create
+//go:linkname vdso_zx_vmar_unmap_handle_close_thread_exit vdso_zx_vmar_unmap_handle_close_thread_exit
+//go:linkname vdso_zx_futex_wake_handle_close_thread_exit vdso_zx_futex_wake_handle_close_thread_exit
+//go:linkname vdso_zx_log_write vdso_zx_log_write
+//go:linkname vdso_zx_log_read vdso_zx_log_read
+//go:linkname vdso_zx_debuglog_create vdso_zx_debuglog_create
+//go:linkname vdso_zx_debuglog_write vdso_zx_debuglog_write
+//go:linkname vdso_zx_debuglog_read vdso_zx_debuglog_read
+//go:linkname vdso_zx_ktrace_read vdso_zx_ktrace_read
+//go:linkname vdso_zx_ktrace_control vdso_zx_ktrace_control
+//go:linkname vdso_zx_ktrace_write vdso_zx_ktrace_write
+//go:linkname vdso_zx_mtrace_control vdso_zx_mtrace_control
+//go:linkname vdso_zx_debug_read vdso_zx_debug_read
+//go:linkname vdso_zx_debug_write vdso_zx_debug_write
+//go:linkname vdso_zx_debug_send_command vdso_zx_debug_send_command
+//go:linkname vdso_zx_interrupt_create vdso_zx_interrupt_create
+//go:linkname vdso_zx_interrupt_bind vdso_zx_interrupt_bind
+//go:linkname vdso_zx_interrupt_wait vdso_zx_interrupt_wait
+//go:linkname vdso_zx_interrupt_destroy vdso_zx_interrupt_destroy
+//go:linkname vdso_zx_interrupt_ack vdso_zx_interrupt_ack
+//go:linkname vdso_zx_interrupt_trigger vdso_zx_interrupt_trigger
+//go:linkname vdso_zx_ioports_request vdso_zx_ioports_request
+//go:linkname vdso_zx_vmo_create_contiguous vdso_zx_vmo_create_contiguous
+//go:linkname vdso_zx_vmo_create_physical vdso_zx_vmo_create_physical
+//go:linkname vdso_zx_iommu_create vdso_zx_iommu_create
+//go:linkname vdso_zx_bti_create vdso_zx_bti_create
+//go:linkname vdso_zx_bti_pin vdso_zx_bti_pin
+//go:linkname vdso_zx_bti_release_quarantine vdso_zx_bti_release_quarantine
+//go:linkname vdso_zx_pmt_unpin vdso_zx_pmt_unpin
+//go:linkname vdso_zx_framebuffer_get_info vdso_zx_framebuffer_get_info
+//go:linkname vdso_zx_framebuffer_set_range vdso_zx_framebuffer_set_range
+//go:linkname vdso_zx_pc_firmware_tables vdso_zx_pc_firmware_tables
+//go:linkname vdso_zx_smc_call vdso_zx_smc_call
+//go:linkname vdso_zx_resource_create vdso_zx_resource_create
+//go:linkname vdso_zx_system_mexec vdso_zx_system_mexec
+//go:linkname vdso_zx_system_powerctl vdso_zx_system_powerctl
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_clock_get(clock_id uint32) int64
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_clock_get_new(clock_id uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_clock_get_monotonic() int64
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_nanosleep(deadline int64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_ticks_get() uint64
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_ticks_per_second() uint64
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_deadline_after(nanoseconds int64) int64
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_clock_adjust(handle uint32, clock_id uint32, offset int64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_system_get_dcache_line_size() uint32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_system_get_num_cpus() uint32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_system_get_version(version unsafe.Pointer, version_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_system_get_physmem() uint64
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_system_get_features(kind uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_cache_flush(addr unsafe.Pointer, size uint, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_handle_close(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_handle_close_many(handles unsafe.Pointer, num_handles uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_handle_duplicate(handle uint32, rights uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_handle_replace(handle uint32, rights uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_wait_one(handle uint32, signals uint32, deadline int64, observed unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_wait_many(items unsafe.Pointer, count uint, deadline int64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_wait_async(handle uint32, port uint32, key uint64, signals uint32, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_signal(handle uint32, clear_mask uint32, set_mask uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_signal_peer(handle uint32, clear_mask uint32, set_mask uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_get_property(handle uint32, property uint32, value unsafe.Pointer, value_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_set_property(handle uint32, property uint32, value unsafe.Pointer, value_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_set_cookie(handle uint32, scope uint32, cookie uint64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_get_cookie(handle uint32, scope uint32, cookie unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_get_info(handle uint32, topic uint32, buffer unsafe.Pointer, buffer_size uint, actual_count unsafe.Pointer, avail_count unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_get_child(handle uint32, koid uint64, rights uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_object_set_profile(handle uint32, profile uint32, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_channel_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_channel_read(handle uint32, options uint32, bytes unsafe.Pointer, handles unsafe.Pointer, num_bytes uint32, num_handles uint32, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_channel_read_etc(handle uint32, options uint32, bytes unsafe.Pointer, handles unsafe.Pointer, num_bytes uint32, num_handles uint32, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_channel_write(handle uint32, options uint32, bytes unsafe.Pointer, num_bytes uint32, handles unsafe.Pointer, num_handles uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_channel_call_noretry(handle uint32, options uint32, deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_channel_call_finish(deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_channel_call(handle uint32, options uint32, deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_socket_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_socket_write(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_socket_read(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_socket_share(handle uint32, socket_to_share uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_socket_accept(handle uint32, out_socket unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_thread_exit()
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_thread_create(process uint32, name unsafe.Pointer, name_size uint, options uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_thread_start(handle uint32, thread_entry uintptr, stack uintptr, arg1 uintptr, arg2 uintptr) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_thread_read_state(handle uint32, kind uint32, buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_thread_write_state(handle uint32, kind uint32, buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_thread_set_priority(prio int32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_process_exit(retcode int64)
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_process_create(job uint32, name unsafe.Pointer, name_size uint, options uint32, proc_handle unsafe.Pointer, vmar_handle unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_process_start(handle uint32, thread uint32, entry uintptr, stack uintptr, arg1 uint32, arg2 uintptr) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_process_read_memory(proc uint32, vaddr uintptr, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_process_write_memory(proc uint32, vaddr uintptr, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_job_create(parent_job uint32, options uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_job_set_policy(job uint32, options uint32, topic uint32, policy unsafe.Pointer, count uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_task_bind_exception_port(handle uint32, port uint32, key uint64, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_task_resume(handle uint32, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_task_suspend(handle uint32, token unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_task_suspend_token(handle uint32, token unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_task_resume_from_exception(handle uint32, port uint32, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_task_kill(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_event_create(options uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_eventpair_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_futex_wait(value_ptr unsafe.Pointer, current_value int32, deadline int64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_futex_wake(value_ptr unsafe.Pointer, count uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_futex_requeue(wake_ptr unsafe.Pointer, wake_count uint32, current_value int32, requeue_ptr unsafe.Pointer, requeue_count uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_port_create(options uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_port_queue(handle uint32, packet unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_port_wait(handle uint32, deadline int64, packet unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_port_cancel(handle uint32, source uint32, key uint64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_timer_create(options uint32, clock_id uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_timer_set(handle uint32, deadline int64, slack int64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_timer_cancel(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_create(size uint64, options uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_read(handle uint32, buffer unsafe.Pointer, offset uint64, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_write(handle uint32, buffer unsafe.Pointer, offset uint64, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_get_size(handle uint32, size unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_set_size(handle uint32, size uint64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_op_range(handle uint32, op uint32, offset uint64, size uint64, buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_clone(handle uint32, options uint32, offset uint64, size uint64, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_set_cache_policy(handle uint32, cache_policy uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_replace_as_executable(handle uint32, vmex uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_allocate_old(parent_vmar uint32, offset uint64, size uint64, map_flags uint32, child_vmar unsafe.Pointer, child_addr unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_map_old(handle uint32, vmar_offset uint64, vmo uint32, vmo_offset uint64, len uint64, map_flags uint32, mapped_addr unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_protect_old(handle uint32, addr uintptr, len uint64, prot_flags uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_allocate(parent_vmar uint32, options uint32, offset uint64, size uint64, child_vmar unsafe.Pointer, child_addr unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_destroy(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_map(handle uint32, options uint32, vmar_offset uint64, vmo uint32, vmo_offset uint64, len uint64, mapped_addr unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_unmap(handle uint32, addr uintptr, len uint64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_protect(handle uint32, options uint32, addr uintptr, len uint64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_cprng_draw_once(buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_cprng_draw(buffer unsafe.Pointer, buffer_size uint)
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_cprng_add_entropy(buffer unsafe.Pointer, len uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_fifo_create(elem_count uint, elem_size uint, options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_fifo_read(handle uint32, elem_size uint, data unsafe.Pointer, count uint, actual_count unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_fifo_write(handle uint32, elem_size uint, data unsafe.Pointer, count uint, actual_count unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_profile_create(resource uint32, profile unsafe.Pointer, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmar_unmap_handle_close_thread_exit(vmar_handle uint32, addr uintptr, size uint, handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_futex_wake_handle_close_thread_exit(value_ptr unsafe.Pointer, count uint32, new_value int32, handle uint32)
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_log_write(handle uint32, len uint32, buffer unsafe.Pointer, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_log_read(handle uint32, len uint32, buffer unsafe.Pointer, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_debuglog_create(resource uint32, options uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_debuglog_write(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_debuglog_read(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_ktrace_read(handle uint32, data unsafe.Pointer, offset uint32, data_size uint, actual unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_ktrace_control(handle uint32, action uint32, options uint32, ptr unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_ktrace_write(handle uint32, id uint32, arg0 uint32, arg1 uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_mtrace_control(handle uint32, kind uint32, action uint32, options uint32, ptr unsafe.Pointer, ptr_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_debug_read(handle uint32, buffer unsafe.Pointer, buffer_size unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_debug_write(buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_debug_send_command(resource uint32, buffer unsafe.Pointer, buffer_size uint) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_interrupt_create(src_obj uint32, src_num uint32, options uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_interrupt_bind(handle uint32, port uint32, key uint64, options uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_interrupt_wait(handle uint32, out_timestamp unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_interrupt_destroy(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_interrupt_ack(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_interrupt_trigger(handle uint32, options uint32, timestamp int64) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_ioports_request(resource uint32, io_addr uint16, len uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_create_contiguous(bti uint32, size uint, alignment_log2 uint32, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_vmo_create_physical(resource uint32, paddr uintptr, size uint, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_iommu_create(resource uint32, typ uint32, desc unsafe.Pointer, desc_size uint, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_bti_create(iommu uint32, options uint32, bti_id uint64, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_bti_pin(handle uint32, options uint32, vmo uint32, offset uint64, size uint64, addrs unsafe.Pointer, addrs_count uint, out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_bti_release_quarantine(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_pmt_unpin(handle uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_framebuffer_get_info(resource uint32, format unsafe.Pointer, width unsafe.Pointer, height unsafe.Pointer, stride unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_framebuffer_set_range(resource uint32, vmo uint32, len uint32, format uint32, width uint32, height uint32, stride uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_pc_firmware_tables(handle uint32, acpi_rsdp unsafe.Pointer, smbios unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_smc_call(handle uint32, parameters unsafe.Pointer, out_smc_result unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_resource_create(parent_rsrc uint32, options uint32, base uint64, size uint, name unsafe.Pointer, name_size uint, resource_out unsafe.Pointer) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_system_mexec(resource uint32, kernel uint32, bootimage uint32) int32
+
+//go:noescape
+//go:nosplit
+func vdsoCall_zx_system_powerctl(resource uint32, cmd uint32, arg unsafe.Pointer) int32
+
+var (
+	vdso_zx_clock_get                           uintptr
+	vdso_zx_clock_get_new                       uintptr
+	vdso_zx_clock_get_monotonic                 uintptr
+	vdso_zx_nanosleep                           uintptr
+	vdso_zx_ticks_get                           uintptr
+	vdso_zx_ticks_per_second                    uintptr
+	vdso_zx_deadline_after                      uintptr
+	vdso_zx_clock_adjust                        uintptr
+	vdso_zx_system_get_dcache_line_size         uintptr
+	vdso_zx_system_get_num_cpus                 uintptr
+	vdso_zx_system_get_version                  uintptr
+	vdso_zx_system_get_physmem                  uintptr
+	vdso_zx_system_get_features                 uintptr
+	vdso_zx_cache_flush                         uintptr
+	vdso_zx_handle_close                        uintptr
+	vdso_zx_handle_close_many                   uintptr
+	vdso_zx_handle_duplicate                    uintptr
+	vdso_zx_handle_replace                      uintptr
+	vdso_zx_object_wait_one                     uintptr
+	vdso_zx_object_wait_many                    uintptr
+	vdso_zx_object_wait_async                   uintptr
+	vdso_zx_object_signal                       uintptr
+	vdso_zx_object_signal_peer                  uintptr
+	vdso_zx_object_get_property                 uintptr
+	vdso_zx_object_set_property                 uintptr
+	vdso_zx_object_set_cookie                   uintptr
+	vdso_zx_object_get_cookie                   uintptr
+	vdso_zx_object_get_info                     uintptr
+	vdso_zx_object_get_child                    uintptr
+	vdso_zx_object_set_profile                  uintptr
+	vdso_zx_channel_create                      uintptr
+	vdso_zx_channel_read                        uintptr
+	vdso_zx_channel_read_etc                    uintptr
+	vdso_zx_channel_write                       uintptr
+	vdso_zx_channel_call_noretry                uintptr
+	vdso_zx_channel_call_finish                 uintptr
+	vdso_zx_channel_call                        uintptr
+	vdso_zx_socket_create                       uintptr
+	vdso_zx_socket_write                        uintptr
+	vdso_zx_socket_read                         uintptr
+	vdso_zx_socket_share                        uintptr
+	vdso_zx_socket_accept                       uintptr
+	vdso_zx_thread_exit                         uintptr
+	vdso_zx_thread_create                       uintptr
+	vdso_zx_thread_start                        uintptr
+	vdso_zx_thread_read_state                   uintptr
+	vdso_zx_thread_write_state                  uintptr
+	vdso_zx_thread_set_priority                 uintptr
+	vdso_zx_process_exit                        uintptr
+	vdso_zx_process_create                      uintptr
+	vdso_zx_process_start                       uintptr
+	vdso_zx_process_read_memory                 uintptr
+	vdso_zx_process_write_memory                uintptr
+	vdso_zx_job_create                          uintptr
+	vdso_zx_job_set_policy                      uintptr
+	vdso_zx_task_bind_exception_port            uintptr
+	vdso_zx_task_resume                         uintptr
+	vdso_zx_task_suspend                        uintptr
+	vdso_zx_task_suspend_token                  uintptr
+	vdso_zx_task_resume_from_exception          uintptr
+	vdso_zx_task_kill                           uintptr
+	vdso_zx_event_create                        uintptr
+	vdso_zx_eventpair_create                    uintptr
+	vdso_zx_futex_wait                          uintptr
+	vdso_zx_futex_wake                          uintptr
+	vdso_zx_futex_requeue                       uintptr
+	vdso_zx_port_create                         uintptr
+	vdso_zx_port_queue                          uintptr
+	vdso_zx_port_wait                           uintptr
+	vdso_zx_port_cancel                         uintptr
+	vdso_zx_timer_create                        uintptr
+	vdso_zx_timer_set                           uintptr
+	vdso_zx_timer_cancel                        uintptr
+	vdso_zx_vmo_create                          uintptr
+	vdso_zx_vmo_read                            uintptr
+	vdso_zx_vmo_write                           uintptr
+	vdso_zx_vmo_get_size                        uintptr
+	vdso_zx_vmo_set_size                        uintptr
+	vdso_zx_vmo_op_range                        uintptr
+	vdso_zx_vmo_clone                           uintptr
+	vdso_zx_vmo_set_cache_policy                uintptr
+	vdso_zx_vmo_replace_as_executable           uintptr
+	vdso_zx_vmar_allocate_old                   uintptr
+	vdso_zx_vmar_map_old                        uintptr
+	vdso_zx_vmar_protect_old                    uintptr
+	vdso_zx_vmar_allocate                       uintptr
+	vdso_zx_vmar_destroy                        uintptr
+	vdso_zx_vmar_map                            uintptr
+	vdso_zx_vmar_unmap                          uintptr
+	vdso_zx_vmar_protect                        uintptr
+	vdso_zx_cprng_draw_once                     uintptr
+	vdso_zx_cprng_draw                          uintptr
+	vdso_zx_cprng_add_entropy                   uintptr
+	vdso_zx_fifo_create                         uintptr
+	vdso_zx_fifo_read                           uintptr
+	vdso_zx_fifo_write                          uintptr
+	vdso_zx_profile_create                      uintptr
+	vdso_zx_vmar_unmap_handle_close_thread_exit uintptr
+	vdso_zx_futex_wake_handle_close_thread_exit uintptr
+	vdso_zx_log_write                           uintptr
+	vdso_zx_log_read                            uintptr
+	vdso_zx_debuglog_create                     uintptr
+	vdso_zx_debuglog_write                      uintptr
+	vdso_zx_debuglog_read                       uintptr
+	vdso_zx_ktrace_read                         uintptr
+	vdso_zx_ktrace_control                      uintptr
+	vdso_zx_ktrace_write                        uintptr
+	vdso_zx_mtrace_control                      uintptr
+	vdso_zx_debug_read                          uintptr
+	vdso_zx_debug_write                         uintptr
+	vdso_zx_debug_send_command                  uintptr
+	vdso_zx_interrupt_create                    uintptr
+	vdso_zx_interrupt_bind                      uintptr
+	vdso_zx_interrupt_wait                      uintptr
+	vdso_zx_interrupt_destroy                   uintptr
+	vdso_zx_interrupt_ack                       uintptr
+	vdso_zx_interrupt_trigger                   uintptr
+	vdso_zx_ioports_request                     uintptr
+	vdso_zx_vmo_create_contiguous               uintptr
+	vdso_zx_vmo_create_physical                 uintptr
+	vdso_zx_iommu_create                        uintptr
+	vdso_zx_bti_create                          uintptr
+	vdso_zx_bti_pin                             uintptr
+	vdso_zx_bti_release_quarantine              uintptr
+	vdso_zx_pmt_unpin                           uintptr
+	vdso_zx_framebuffer_get_info                uintptr
+	vdso_zx_framebuffer_set_range               uintptr
+	vdso_zx_pc_firmware_tables                  uintptr
+	vdso_zx_smc_call                            uintptr
+	vdso_zx_resource_create                     uintptr
+	vdso_zx_system_mexec                        uintptr
+	vdso_zx_system_powerctl                     uintptr
+)
diff --git a/src/runtime/vdso_linux.go b/src/runtime/vdso_linux.go
index f6a285e..64f2c43 100644
--- a/src/runtime/vdso_linux.go
+++ b/src/runtime/vdso_linux.go
@@ -20,50 +20,6 @@
 // The version section is documented at
 // https://refspecs.linuxfoundation.org/LSB_3.2.0/LSB-Core-generic/LSB-Core-generic/symversion.html
 
-const (
-	_AT_SYSINFO_EHDR = 33
-
-	_PT_LOAD    = 1 /* Loadable program segment */
-	_PT_DYNAMIC = 2 /* Dynamic linking information */
-
-	_DT_NULL     = 0          /* Marks end of dynamic section */
-	_DT_HASH     = 4          /* Dynamic symbol hash table */
-	_DT_STRTAB   = 5          /* Address of string table */
-	_DT_SYMTAB   = 6          /* Address of symbol table */
-	_DT_GNU_HASH = 0x6ffffef5 /* GNU-style dynamic symbol hash table */
-	_DT_VERSYM   = 0x6ffffff0
-	_DT_VERDEF   = 0x6ffffffc
-
-	_VER_FLG_BASE = 0x1 /* Version definition of file itself */
-
-	_SHN_UNDEF = 0 /* Undefined section */
-
-	_SHT_DYNSYM = 11 /* Dynamic linker symbol table */
-
-	_STT_FUNC = 2 /* Symbol is a code object */
-
-	_STB_GLOBAL = 1 /* Global symbol */
-	_STB_WEAK   = 2 /* Weak symbol */
-
-	_EI_NIDENT = 16
-
-	// Maximum indices for the array types used when traversing the vDSO ELF structures.
-	// Computed from architecture-specific max provided by vdso_linux_*.go
-	vdsoSymTabSize     = vdsoArrayMax / unsafe.Sizeof(elfSym{})
-	vdsoDynSize        = vdsoArrayMax / unsafe.Sizeof(elfDyn{})
-	vdsoSymStringsSize = vdsoArrayMax     // byte
-	vdsoVerSymSize     = vdsoArrayMax / 2 // uint16
-	vdsoHashSize       = vdsoArrayMax / 4 // uint32
-
-	// vdsoBloomSizeScale is a scaling factor for gnuhash tables which are uint32 indexed,
-	// but contain uintptrs
-	vdsoBloomSizeScale = unsafe.Sizeof(uintptr(0)) / 4 // uint32
-)
-
-/* How to extract and insert information held in the st_info field.  */
-func _ELF_ST_BIND(val byte) byte { return val >> 4 }
-func _ELF_ST_TYPE(val byte) byte { return val & 0xf }
-
 type vdsoSymbolKey struct {
 	name    string
 	symHash uint32
@@ -277,8 +233,8 @@
 	}
 }
 
-// vdsoMarker returns whether PC is on the VDSO page.
-func inVDSOPage(pc uintptr) bool {
+// inVDSO returns whether PC is in the VDSO.
+func inVDSO(pc uintptr) bool {
 	for _, k := range vdsoSymbolKeys {
 		if *k.ptr != 0 {
 			page := *k.ptr &^ (physPageSize - 1)
diff --git a/src/runtime/vdsocalls_fuchsia_amd64.s b/src/runtime/vdsocalls_fuchsia_amd64.s
new file mode 100644
index 0000000..a36812e
--- /dev/null
+++ b/src/runtime/vdsocalls_fuchsia_amd64.s
@@ -0,0 +1,1687 @@
+// Copyright 2018 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.
+
+// Zircon system calls for the Fuchsia OS.
+// Generated by mkfuchsia.go, do not edit.
+
+#include "textflag.h"
+#include "funcdata.h"
+
+// func vdsoCall_zx_clock_get(clock_id uint32) int64
+TEXT runtime·vdsoCall_zx_clock_get(SB),NOSPLIT,$0-16
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL clock_id+0(FP), DI
+	MOVQ vdso_zx_clock_get(SB), AX
+	CALL AX
+	MOVQ AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_clock_get_new(clock_id uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_clock_get_new(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL clock_id+0(FP), DI
+	MOVQ out+8(FP), SI
+	MOVQ vdso_zx_clock_get_new(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_clock_get_monotonic() int64
+TEXT runtime·vdsoCall_zx_clock_get_monotonic(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ vdso_zx_clock_get_monotonic(SB), AX
+	CALL AX
+	MOVQ AX, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_nanosleep(deadline int64) int32
+TEXT runtime·vdsoCall_zx_nanosleep(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ deadline+0(FP), DI
+	MOVQ vdso_zx_nanosleep(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_ticks_get() uint64
+TEXT runtime·vdsoCall_zx_ticks_get(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ vdso_zx_ticks_get(SB), AX
+	CALL AX
+	MOVQ AX, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_ticks_per_second() uint64
+TEXT runtime·vdsoCall_zx_ticks_per_second(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ vdso_zx_ticks_per_second(SB), AX
+	CALL AX
+	MOVQ AX, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_deadline_after(nanoseconds int64) int64
+TEXT runtime·vdsoCall_zx_deadline_after(SB),NOSPLIT,$0-16
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ nanoseconds+0(FP), DI
+	MOVQ vdso_zx_deadline_after(SB), AX
+	CALL AX
+	MOVQ AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_clock_adjust(handle uint32, clock_id uint32, offset int64) int32
+TEXT runtime·vdsoCall_zx_clock_adjust(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL clock_id+4(FP), SI
+	MOVQ offset+8(FP), DX
+	MOVQ vdso_zx_clock_adjust(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_system_get_dcache_line_size() uint32
+TEXT runtime·vdsoCall_zx_system_get_dcache_line_size(SB),NOSPLIT,$0-4
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ vdso_zx_system_get_dcache_line_size(SB), AX
+	CALL AX
+	MOVL AX, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_system_get_num_cpus() uint32
+TEXT runtime·vdsoCall_zx_system_get_num_cpus(SB),NOSPLIT,$0-4
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ vdso_zx_system_get_num_cpus(SB), AX
+	CALL AX
+	MOVL AX, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_system_get_version(version unsafe.Pointer, version_size uint) int32
+TEXT runtime·vdsoCall_zx_system_get_version(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ version+0(FP), DI
+	MOVQ version_size+8(FP), SI
+	MOVQ vdso_zx_system_get_version(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_system_get_physmem() uint64
+TEXT runtime·vdsoCall_zx_system_get_physmem(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ vdso_zx_system_get_physmem(SB), AX
+	CALL AX
+	MOVQ AX, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_system_get_features(kind uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_system_get_features(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL kind+0(FP), DI
+	MOVQ out+8(FP), SI
+	MOVQ vdso_zx_system_get_features(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_cache_flush(addr unsafe.Pointer, size uint, options uint32) int32
+TEXT runtime·vdsoCall_zx_cache_flush(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ addr+0(FP), DI
+	MOVQ size+8(FP), SI
+	MOVL options+16(FP), DX
+	MOVQ vdso_zx_cache_flush(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_handle_close(handle uint32) int32
+TEXT runtime·vdsoCall_zx_handle_close(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_handle_close(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_handle_close_many(handles unsafe.Pointer, num_handles uint) int32
+TEXT runtime·vdsoCall_zx_handle_close_many(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ handles+0(FP), DI
+	MOVQ num_handles+8(FP), SI
+	MOVQ vdso_zx_handle_close_many(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_handle_duplicate(handle uint32, rights uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_handle_duplicate(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL rights+4(FP), SI
+	MOVQ out+8(FP), DX
+	MOVQ vdso_zx_handle_duplicate(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_handle_replace(handle uint32, rights uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_handle_replace(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL rights+4(FP), SI
+	MOVQ out+8(FP), DX
+	MOVQ vdso_zx_handle_replace(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_wait_one(handle uint32, signals uint32, deadline int64, observed unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_wait_one(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	CALL runtime·entersyscall(SB)
+	MOVL handle+0(FP), DI
+	MOVL signals+4(FP), SI
+	MOVQ deadline+8(FP), DX
+	MOVQ observed+16(FP), CX
+	MOVQ vdso_zx_object_wait_one(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	CALL runtime·exitsyscall(SB)
+	RET
+
+// func vdsoCall_zx_object_wait_many(items unsafe.Pointer, count uint, deadline int64) int32
+TEXT runtime·vdsoCall_zx_object_wait_many(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	CALL runtime·entersyscall(SB)
+	MOVQ items+0(FP), DI
+	MOVQ count+8(FP), SI
+	MOVQ deadline+16(FP), DX
+	MOVQ vdso_zx_object_wait_many(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	CALL runtime·exitsyscall(SB)
+	RET
+
+// func vdsoCall_zx_object_wait_async(handle uint32, port uint32, key uint64, signals uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_object_wait_async(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL port+4(FP), SI
+	MOVQ key+8(FP), DX
+	MOVL signals+16(FP), CX
+	MOVL options+20(FP), R8
+	MOVQ vdso_zx_object_wait_async(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_object_signal(handle uint32, clear_mask uint32, set_mask uint32) int32
+TEXT runtime·vdsoCall_zx_object_signal(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL clear_mask+4(FP), SI
+	MOVL set_mask+8(FP), DX
+	MOVQ vdso_zx_object_signal(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_signal_peer(handle uint32, clear_mask uint32, set_mask uint32) int32
+TEXT runtime·vdsoCall_zx_object_signal_peer(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL clear_mask+4(FP), SI
+	MOVL set_mask+8(FP), DX
+	MOVQ vdso_zx_object_signal_peer(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_get_property(handle uint32, property uint32, value unsafe.Pointer, value_size uint) int32
+TEXT runtime·vdsoCall_zx_object_get_property(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL property+4(FP), SI
+	MOVQ value+8(FP), DX
+	MOVQ value_size+16(FP), CX
+	MOVQ vdso_zx_object_get_property(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_object_set_property(handle uint32, property uint32, value unsafe.Pointer, value_size uint) int32
+TEXT runtime·vdsoCall_zx_object_set_property(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL property+4(FP), SI
+	MOVQ value+8(FP), DX
+	MOVQ value_size+16(FP), CX
+	MOVQ vdso_zx_object_set_property(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_object_set_cookie(handle uint32, scope uint32, cookie uint64) int32
+TEXT runtime·vdsoCall_zx_object_set_cookie(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL scope+4(FP), SI
+	MOVQ cookie+8(FP), DX
+	MOVQ vdso_zx_object_set_cookie(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_get_cookie(handle uint32, scope uint32, cookie unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_get_cookie(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL scope+4(FP), SI
+	MOVQ cookie+8(FP), DX
+	MOVQ vdso_zx_object_get_cookie(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_get_info(handle uint32, topic uint32, buffer unsafe.Pointer, buffer_size uint, actual_count unsafe.Pointer, avail_count unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_get_info(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL topic+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVQ buffer_size+16(FP), CX
+	MOVQ actual_count+24(FP), R8
+	MOVQ avail_count+32(FP), R9
+	MOVQ vdso_zx_object_get_info(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_object_get_child(handle uint32, koid uint64, rights uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_get_child(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ koid+8(FP), SI
+	MOVL rights+16(FP), DX
+	MOVQ out+24(FP), CX
+	MOVQ vdso_zx_object_get_child(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_object_set_profile(handle uint32, profile uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_object_set_profile(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL profile+4(FP), SI
+	MOVL options+8(FP), DX
+	MOVQ vdso_zx_object_set_profile(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_channel_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL options+0(FP), DI
+	MOVQ out0+8(FP), SI
+	MOVQ out1+16(FP), DX
+	MOVQ vdso_zx_channel_create(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_channel_read(handle uint32, options uint32, bytes unsafe.Pointer, handles unsafe.Pointer, num_bytes uint32, num_handles uint32, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_read(SB),NOSPLIT,$32-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ bytes+8(FP), DX
+	MOVQ handles+16(FP), CX
+	MOVL num_bytes+24(FP), R8
+	MOVL num_handles+28(FP), R9
+	MOVQ actual_bytes+32(FP), R12
+	MOVQ actual_handles+40(FP), R13
+	MOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI
+	ANDQ $~15, SP // stack alignment for x86-64 ABI
+	PUSHQ R13
+	PUSHQ R12
+	MOVQ vdso_zx_channel_read(SB), AX
+	CALL AX
+	POPQ R12
+	POPQ R13
+	MOVQ BP, SP
+	MOVL AX, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_channel_read_etc(handle uint32, options uint32, bytes unsafe.Pointer, handles unsafe.Pointer, num_bytes uint32, num_handles uint32, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_read_etc(SB),NOSPLIT,$32-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ bytes+8(FP), DX
+	MOVQ handles+16(FP), CX
+	MOVL num_bytes+24(FP), R8
+	MOVL num_handles+28(FP), R9
+	MOVQ actual_bytes+32(FP), R12
+	MOVQ actual_handles+40(FP), R13
+	MOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI
+	ANDQ $~15, SP // stack alignment for x86-64 ABI
+	PUSHQ R13
+	PUSHQ R12
+	MOVQ vdso_zx_channel_read_etc(SB), AX
+	CALL AX
+	POPQ R12
+	POPQ R13
+	MOVQ BP, SP
+	MOVL AX, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_channel_write(handle uint32, options uint32, bytes unsafe.Pointer, num_bytes uint32, handles unsafe.Pointer, num_handles uint32) int32
+TEXT runtime·vdsoCall_zx_channel_write(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ bytes+8(FP), DX
+	MOVL num_bytes+16(FP), CX
+	MOVQ handles+24(FP), R8
+	MOVL num_handles+32(FP), R9
+	MOVQ vdso_zx_channel_write(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_channel_call_noretry(handle uint32, options uint32, deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_call_noretry(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ deadline+8(FP), DX
+	MOVQ args+16(FP), CX
+	MOVQ actual_bytes+24(FP), R8
+	MOVQ actual_handles+32(FP), R9
+	MOVQ vdso_zx_channel_call_noretry(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_channel_call_finish(deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_call_finish(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ deadline+0(FP), DI
+	MOVQ args+8(FP), SI
+	MOVQ actual_bytes+16(FP), DX
+	MOVQ actual_handles+24(FP), CX
+	MOVQ vdso_zx_channel_call_finish(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_channel_call(handle uint32, options uint32, deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_call(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ deadline+8(FP), DX
+	MOVQ args+16(FP), CX
+	MOVQ actual_bytes+24(FP), R8
+	MOVQ actual_handles+32(FP), R9
+	MOVQ vdso_zx_channel_call(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_socket_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL options+0(FP), DI
+	MOVQ out0+8(FP), SI
+	MOVQ out1+16(FP), DX
+	MOVQ vdso_zx_socket_create(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_socket_write(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_write(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVQ buffer_size+16(FP), CX
+	MOVQ actual+24(FP), R8
+	MOVQ vdso_zx_socket_write(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_socket_read(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_read(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVQ buffer_size+16(FP), CX
+	MOVQ actual+24(FP), R8
+	MOVQ vdso_zx_socket_read(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_socket_share(handle uint32, socket_to_share uint32) int32
+TEXT runtime·vdsoCall_zx_socket_share(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL socket_to_share+4(FP), SI
+	MOVQ vdso_zx_socket_share(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_socket_accept(handle uint32, out_socket unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_accept(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ out_socket+8(FP), SI
+	MOVQ vdso_zx_socket_accept(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_thread_exit()
+TEXT runtime·vdsoCall_zx_thread_exit(SB),NOSPLIT,$0-0
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ vdso_zx_thread_exit(SB), AX
+	CALL AX
+	RET
+
+// func vdsoCall_zx_thread_create(process uint32, name unsafe.Pointer, name_size uint, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_thread_create(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL process+0(FP), DI
+	MOVQ name+8(FP), SI
+	MOVQ name_size+16(FP), DX
+	MOVL options+24(FP), CX
+	MOVQ out+32(FP), R8
+	MOVQ vdso_zx_thread_create(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_thread_start(handle uint32, thread_entry uintptr, stack uintptr, arg1 uintptr, arg2 uintptr) int32
+TEXT runtime·vdsoCall_zx_thread_start(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ thread_entry+8(FP), SI
+	MOVQ stack+16(FP), DX
+	MOVQ arg1+24(FP), CX
+	MOVQ arg2+32(FP), R8
+	MOVQ vdso_zx_thread_start(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_thread_read_state(handle uint32, kind uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_thread_read_state(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL kind+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVQ buffer_size+16(FP), CX
+	MOVQ vdso_zx_thread_read_state(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_thread_write_state(handle uint32, kind uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_thread_write_state(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL kind+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVQ buffer_size+16(FP), CX
+	MOVQ vdso_zx_thread_write_state(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_thread_set_priority(prio int32) int32
+TEXT runtime·vdsoCall_zx_thread_set_priority(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL prio+0(FP), DI
+	MOVQ vdso_zx_thread_set_priority(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_process_exit(retcode int64)
+TEXT runtime·vdsoCall_zx_process_exit(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ retcode+0(FP), DI
+	MOVQ vdso_zx_process_exit(SB), AX
+	CALL AX
+	RET
+
+// func vdsoCall_zx_process_create(job uint32, name unsafe.Pointer, name_size uint, options uint32, proc_handle unsafe.Pointer, vmar_handle unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_process_create(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL job+0(FP), DI
+	MOVQ name+8(FP), SI
+	MOVQ name_size+16(FP), DX
+	MOVL options+24(FP), CX
+	MOVQ proc_handle+32(FP), R8
+	MOVQ vmar_handle+40(FP), R9
+	MOVQ vdso_zx_process_create(SB), AX
+	CALL AX
+	MOVL AX, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_process_start(handle uint32, thread uint32, entry uintptr, stack uintptr, arg1 uint32, arg2 uintptr) int32
+TEXT runtime·vdsoCall_zx_process_start(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL thread+4(FP), SI
+	MOVQ entry+8(FP), DX
+	MOVQ stack+16(FP), CX
+	MOVL arg1+24(FP), R8
+	MOVQ arg2+32(FP), R9
+	MOVQ vdso_zx_process_start(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_process_read_memory(proc uint32, vaddr uintptr, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_process_read_memory(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL proc+0(FP), DI
+	MOVQ vaddr+8(FP), SI
+	MOVQ buffer+16(FP), DX
+	MOVQ buffer_size+24(FP), CX
+	MOVQ actual+32(FP), R8
+	MOVQ vdso_zx_process_read_memory(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_process_write_memory(proc uint32, vaddr uintptr, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_process_write_memory(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL proc+0(FP), DI
+	MOVQ vaddr+8(FP), SI
+	MOVQ buffer+16(FP), DX
+	MOVQ buffer_size+24(FP), CX
+	MOVQ actual+32(FP), R8
+	MOVQ vdso_zx_process_write_memory(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_job_create(parent_job uint32, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_job_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL parent_job+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ out+8(FP), DX
+	MOVQ vdso_zx_job_create(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_job_set_policy(job uint32, options uint32, topic uint32, policy unsafe.Pointer, count uint32) int32
+TEXT runtime·vdsoCall_zx_job_set_policy(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL job+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVL topic+8(FP), DX
+	MOVQ policy+16(FP), CX
+	MOVL count+24(FP), R8
+	MOVQ vdso_zx_job_set_policy(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_task_bind_exception_port(handle uint32, port uint32, key uint64, options uint32) int32
+TEXT runtime·vdsoCall_zx_task_bind_exception_port(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL port+4(FP), SI
+	MOVQ key+8(FP), DX
+	MOVL options+16(FP), CX
+	MOVQ vdso_zx_task_bind_exception_port(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_task_resume(handle uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_task_resume(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ vdso_zx_task_resume(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_task_suspend(handle uint32, token unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_task_suspend(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ token+8(FP), SI
+	MOVQ vdso_zx_task_suspend(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_task_suspend_token(handle uint32, token unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_task_suspend_token(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ token+8(FP), SI
+	MOVQ vdso_zx_task_suspend_token(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_task_resume_from_exception(handle uint32, port uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_task_resume_from_exception(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL port+4(FP), SI
+	MOVL options+8(FP), DX
+	MOVQ vdso_zx_task_resume_from_exception(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_task_kill(handle uint32) int32
+TEXT runtime·vdsoCall_zx_task_kill(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_task_kill(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_event_create(options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_event_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL options+0(FP), DI
+	MOVQ out+8(FP), SI
+	MOVQ vdso_zx_event_create(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_eventpair_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_eventpair_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL options+0(FP), DI
+	MOVQ out0+8(FP), SI
+	MOVQ out1+16(FP), DX
+	MOVQ vdso_zx_eventpair_create(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_futex_wait(value_ptr unsafe.Pointer, current_value int32, deadline int64) int32
+TEXT runtime·vdsoCall_zx_futex_wait(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ value_ptr+0(FP), DI
+	MOVL current_value+8(FP), SI
+	MOVQ deadline+16(FP), DX
+	MOVQ vdso_zx_futex_wait(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_futex_wake(value_ptr unsafe.Pointer, count uint32) int32
+TEXT runtime·vdsoCall_zx_futex_wake(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ value_ptr+0(FP), DI
+	MOVL count+8(FP), SI
+	MOVQ vdso_zx_futex_wake(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_futex_requeue(wake_ptr unsafe.Pointer, wake_count uint32, current_value int32, requeue_ptr unsafe.Pointer, requeue_count uint32) int32
+TEXT runtime·vdsoCall_zx_futex_requeue(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ wake_ptr+0(FP), DI
+	MOVL wake_count+8(FP), SI
+	MOVL current_value+12(FP), DX
+	MOVQ requeue_ptr+16(FP), CX
+	MOVL requeue_count+24(FP), R8
+	MOVQ vdso_zx_futex_requeue(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_port_create(options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_port_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL options+0(FP), DI
+	MOVQ out+8(FP), SI
+	MOVQ vdso_zx_port_create(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_port_queue(handle uint32, packet unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_port_queue(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ packet+8(FP), SI
+	MOVQ vdso_zx_port_queue(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_port_wait(handle uint32, deadline int64, packet unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_port_wait(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	CALL runtime·entersyscall(SB)
+	MOVL handle+0(FP), DI
+	MOVQ deadline+8(FP), SI
+	MOVQ packet+16(FP), DX
+	MOVQ vdso_zx_port_wait(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	CALL runtime·exitsyscall(SB)
+	RET
+
+// func vdsoCall_zx_port_cancel(handle uint32, source uint32, key uint64) int32
+TEXT runtime·vdsoCall_zx_port_cancel(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL source+4(FP), SI
+	MOVQ key+8(FP), DX
+	MOVQ vdso_zx_port_cancel(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_timer_create(options uint32, clock_id uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_timer_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL options+0(FP), DI
+	MOVL clock_id+4(FP), SI
+	MOVQ out+8(FP), DX
+	MOVQ vdso_zx_timer_create(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_timer_set(handle uint32, deadline int64, slack int64) int32
+TEXT runtime·vdsoCall_zx_timer_set(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ deadline+8(FP), SI
+	MOVQ slack+16(FP), DX
+	MOVQ vdso_zx_timer_set(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_timer_cancel(handle uint32) int32
+TEXT runtime·vdsoCall_zx_timer_cancel(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_timer_cancel(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_vmo_create(size uint64, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ size+0(FP), DI
+	MOVL options+8(FP), SI
+	MOVQ out+16(FP), DX
+	MOVQ vdso_zx_vmo_create(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_vmo_read(handle uint32, buffer unsafe.Pointer, offset uint64, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_vmo_read(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ buffer+8(FP), SI
+	MOVQ offset+16(FP), DX
+	MOVQ buffer_size+24(FP), CX
+	MOVQ vdso_zx_vmo_read(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_write(handle uint32, buffer unsafe.Pointer, offset uint64, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_vmo_write(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ buffer+8(FP), SI
+	MOVQ offset+16(FP), DX
+	MOVQ buffer_size+24(FP), CX
+	MOVQ vdso_zx_vmo_write(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_get_size(handle uint32, size unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_get_size(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ size+8(FP), SI
+	MOVQ vdso_zx_vmo_get_size(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmo_set_size(handle uint32, size uint64) int32
+TEXT runtime·vdsoCall_zx_vmo_set_size(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ size+8(FP), SI
+	MOVQ vdso_zx_vmo_set_size(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmo_op_range(handle uint32, op uint32, offset uint64, size uint64, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_vmo_op_range(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL op+4(FP), SI
+	MOVQ offset+8(FP), DX
+	MOVQ size+16(FP), CX
+	MOVQ buffer+24(FP), R8
+	MOVQ buffer_size+32(FP), R9
+	MOVQ vdso_zx_vmo_op_range(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_vmo_clone(handle uint32, options uint32, offset uint64, size uint64, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_clone(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ offset+8(FP), DX
+	MOVQ size+16(FP), CX
+	MOVQ out+24(FP), R8
+	MOVQ vdso_zx_vmo_clone(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_set_cache_policy(handle uint32, cache_policy uint32) int32
+TEXT runtime·vdsoCall_zx_vmo_set_cache_policy(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL cache_policy+4(FP), SI
+	MOVQ vdso_zx_vmo_set_cache_policy(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_vmo_replace_as_executable(handle uint32, vmex uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_replace_as_executable(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL vmex+4(FP), SI
+	MOVQ out+8(FP), DX
+	MOVQ vdso_zx_vmo_replace_as_executable(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmar_allocate_old(parent_vmar uint32, offset uint64, size uint64, map_flags uint32, child_vmar unsafe.Pointer, child_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_allocate_old(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL parent_vmar+0(FP), DI
+	MOVQ offset+8(FP), SI
+	MOVQ size+16(FP), DX
+	MOVL map_flags+24(FP), CX
+	MOVQ child_vmar+32(FP), R8
+	MOVQ child_addr+40(FP), R9
+	MOVQ vdso_zx_vmar_allocate_old(SB), AX
+	CALL AX
+	MOVL AX, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_vmar_map_old(handle uint32, vmar_offset uint64, vmo uint32, vmo_offset uint64, len uint64, map_flags uint32, mapped_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_map_old(SB),NOSPLIT,$24-60
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vmar_offset+8(FP), SI
+	MOVL vmo+16(FP), DX
+	MOVQ vmo_offset+24(FP), CX
+	MOVQ len+32(FP), R8
+	MOVL map_flags+40(FP), R9
+	MOVQ mapped_addr+48(FP), R12
+	MOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI
+	ANDQ $~15, SP // stack alignment for x86-64 ABI
+	PUSHQ R12
+	MOVQ vdso_zx_vmar_map_old(SB), AX
+	CALL AX
+	POPQ R12
+	MOVQ BP, SP
+	MOVL AX, ret+56(FP)
+	RET
+
+// func vdsoCall_zx_vmar_protect_old(handle uint32, addr uintptr, len uint64, prot_flags uint32) int32
+TEXT runtime·vdsoCall_zx_vmar_protect_old(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ addr+8(FP), SI
+	MOVQ len+16(FP), DX
+	MOVL prot_flags+24(FP), CX
+	MOVQ vdso_zx_vmar_protect_old(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmar_allocate(parent_vmar uint32, options uint32, offset uint64, size uint64, child_vmar unsafe.Pointer, child_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_allocate(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL parent_vmar+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ offset+8(FP), DX
+	MOVQ size+16(FP), CX
+	MOVQ child_vmar+24(FP), R8
+	MOVQ child_addr+32(FP), R9
+	MOVQ vdso_zx_vmar_allocate(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_vmar_destroy(handle uint32) int32
+TEXT runtime·vdsoCall_zx_vmar_destroy(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_vmar_destroy(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_vmar_map(handle uint32, options uint32, vmar_offset uint64, vmo uint32, vmo_offset uint64, len uint64, mapped_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_map(SB),NOSPLIT,$24-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ vmar_offset+8(FP), DX
+	MOVL vmo+16(FP), CX
+	MOVQ vmo_offset+24(FP), R8
+	MOVQ len+32(FP), R9
+	MOVQ mapped_addr+40(FP), R12
+	MOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI
+	ANDQ $~15, SP // stack alignment for x86-64 ABI
+	PUSHQ R12
+	MOVQ vdso_zx_vmar_map(SB), AX
+	CALL AX
+	POPQ R12
+	MOVQ BP, SP
+	MOVL AX, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_vmar_unmap(handle uint32, addr uintptr, len uint64) int32
+TEXT runtime·vdsoCall_zx_vmar_unmap(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ addr+8(FP), SI
+	MOVQ len+16(FP), DX
+	MOVQ vdso_zx_vmar_unmap(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_vmar_protect(handle uint32, options uint32, addr uintptr, len uint64) int32
+TEXT runtime·vdsoCall_zx_vmar_protect(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ addr+8(FP), DX
+	MOVQ len+16(FP), CX
+	MOVQ vdso_zx_vmar_protect(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_cprng_draw_once(buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_cprng_draw_once(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ buffer+0(FP), DI
+	MOVQ buffer_size+8(FP), SI
+	MOVQ vdso_zx_cprng_draw_once(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_cprng_draw(buffer unsafe.Pointer, buffer_size uint)
+TEXT runtime·vdsoCall_zx_cprng_draw(SB),NOSPLIT,$0-16
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ buffer+0(FP), DI
+	MOVQ buffer_size+8(FP), SI
+	MOVQ vdso_zx_cprng_draw(SB), AX
+	CALL AX
+	RET
+
+// func vdsoCall_zx_cprng_add_entropy(buffer unsafe.Pointer, len uint) int32
+TEXT runtime·vdsoCall_zx_cprng_add_entropy(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ buffer+0(FP), DI
+	MOVQ len+8(FP), SI
+	MOVQ vdso_zx_cprng_add_entropy(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_fifo_create(elem_count uint, elem_size uint, options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_fifo_create(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ elem_count+0(FP), DI
+	MOVQ elem_size+8(FP), SI
+	MOVL options+16(FP), DX
+	MOVQ out0+24(FP), CX
+	MOVQ out1+32(FP), R8
+	MOVQ vdso_zx_fifo_create(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_fifo_read(handle uint32, elem_size uint, data unsafe.Pointer, count uint, actual_count unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_fifo_read(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ elem_size+8(FP), SI
+	MOVQ data+16(FP), DX
+	MOVQ count+24(FP), CX
+	MOVQ actual_count+32(FP), R8
+	MOVQ vdso_zx_fifo_read(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_fifo_write(handle uint32, elem_size uint, data unsafe.Pointer, count uint, actual_count unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_fifo_write(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ elem_size+8(FP), SI
+	MOVQ data+16(FP), DX
+	MOVQ count+24(FP), CX
+	MOVQ actual_count+32(FP), R8
+	MOVQ vdso_zx_fifo_write(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_profile_create(resource uint32, profile unsafe.Pointer, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_profile_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVQ profile+8(FP), SI
+	MOVQ out+16(FP), DX
+	MOVQ vdso_zx_profile_create(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_vmar_unmap_handle_close_thread_exit(vmar_handle uint32, addr uintptr, size uint, handle uint32) int32
+TEXT runtime·vdsoCall_zx_vmar_unmap_handle_close_thread_exit(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL vmar_handle+0(FP), DI
+	MOVQ addr+8(FP), SI
+	MOVQ size+16(FP), DX
+	MOVL handle+24(FP), CX
+	MOVQ vdso_zx_vmar_unmap_handle_close_thread_exit(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_futex_wake_handle_close_thread_exit(value_ptr unsafe.Pointer, count uint32, new_value int32, handle uint32)
+TEXT runtime·vdsoCall_zx_futex_wake_handle_close_thread_exit(SB),NOSPLIT,$0-24
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ value_ptr+0(FP), DI
+	MOVL count+8(FP), SI
+	MOVL new_value+12(FP), DX
+	MOVL handle+16(FP), CX
+	MOVQ vdso_zx_futex_wake_handle_close_thread_exit(SB), AX
+	CALL AX
+	RET
+
+// func vdsoCall_zx_log_write(handle uint32, len uint32, buffer unsafe.Pointer, options uint32) int32
+TEXT runtime·vdsoCall_zx_log_write(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL len+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVL options+16(FP), CX
+	MOVQ vdso_zx_log_write(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_log_read(handle uint32, len uint32, buffer unsafe.Pointer, options uint32) int32
+TEXT runtime·vdsoCall_zx_log_read(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL len+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVL options+16(FP), CX
+	MOVQ vdso_zx_log_read(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_debuglog_create(resource uint32, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_debuglog_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ out+8(FP), DX
+	MOVQ vdso_zx_debuglog_create(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_debuglog_write(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debuglog_write(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVQ buffer_size+16(FP), CX
+	MOVQ vdso_zx_debuglog_write(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_debuglog_read(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debuglog_read(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ buffer+8(FP), DX
+	MOVQ buffer_size+16(FP), CX
+	MOVQ vdso_zx_debuglog_read(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_ktrace_read(handle uint32, data unsafe.Pointer, offset uint32, data_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_ktrace_read(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ data+8(FP), SI
+	MOVL offset+16(FP), DX
+	MOVQ data_size+24(FP), CX
+	MOVQ actual+32(FP), R8
+	MOVQ vdso_zx_ktrace_read(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_ktrace_control(handle uint32, action uint32, options uint32, ptr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_ktrace_control(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL action+4(FP), SI
+	MOVL options+8(FP), DX
+	MOVQ ptr+16(FP), CX
+	MOVQ vdso_zx_ktrace_control(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_ktrace_write(handle uint32, id uint32, arg0 uint32, arg1 uint32) int32
+TEXT runtime·vdsoCall_zx_ktrace_write(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL id+4(FP), SI
+	MOVL arg0+8(FP), DX
+	MOVL arg1+12(FP), CX
+	MOVQ vdso_zx_ktrace_write(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_mtrace_control(handle uint32, kind uint32, action uint32, options uint32, ptr unsafe.Pointer, ptr_size uint) int32
+TEXT runtime·vdsoCall_zx_mtrace_control(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL kind+4(FP), SI
+	MOVL action+8(FP), DX
+	MOVL options+12(FP), CX
+	MOVQ ptr+16(FP), R8
+	MOVQ ptr_size+24(FP), R9
+	MOVQ vdso_zx_mtrace_control(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_debug_read(handle uint32, buffer unsafe.Pointer, buffer_size unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_debug_read(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ buffer+8(FP), SI
+	MOVQ buffer_size+16(FP), DX
+	MOVQ vdso_zx_debug_read(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_debug_write(buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debug_write(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVQ buffer+0(FP), DI
+	MOVQ buffer_size+8(FP), SI
+	MOVQ vdso_zx_debug_write(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_debug_send_command(resource uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debug_send_command(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVQ buffer+8(FP), SI
+	MOVQ buffer_size+16(FP), DX
+	MOVQ vdso_zx_debug_send_command(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_create(src_obj uint32, src_num uint32, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_interrupt_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL src_obj+0(FP), DI
+	MOVL src_num+4(FP), SI
+	MOVL options+8(FP), DX
+	MOVQ out+16(FP), CX
+	MOVQ vdso_zx_interrupt_create(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_bind(handle uint32, port uint32, key uint64, options uint32) int32
+TEXT runtime·vdsoCall_zx_interrupt_bind(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL port+4(FP), SI
+	MOVQ key+8(FP), DX
+	MOVL options+16(FP), CX
+	MOVQ vdso_zx_interrupt_bind(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_wait(handle uint32, out_timestamp unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_interrupt_wait(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ out_timestamp+8(FP), SI
+	MOVQ vdso_zx_interrupt_wait(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_destroy(handle uint32) int32
+TEXT runtime·vdsoCall_zx_interrupt_destroy(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_interrupt_destroy(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_ack(handle uint32) int32
+TEXT runtime·vdsoCall_zx_interrupt_ack(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_interrupt_ack(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_trigger(handle uint32, options uint32, timestamp int64) int32
+TEXT runtime·vdsoCall_zx_interrupt_trigger(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ timestamp+8(FP), DX
+	MOVQ vdso_zx_interrupt_trigger(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_ioports_request(resource uint32, io_addr uint16, len uint32) int32
+TEXT runtime·vdsoCall_zx_ioports_request(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVQ io_addr+4(FP), SI
+	MOVL len+8(FP), DX
+	MOVQ vdso_zx_ioports_request(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmo_create_contiguous(bti uint32, size uint, alignment_log2 uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_create_contiguous(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL bti+0(FP), DI
+	MOVQ size+8(FP), SI
+	MOVL alignment_log2+16(FP), DX
+	MOVQ out+24(FP), CX
+	MOVQ vdso_zx_vmo_create_contiguous(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_create_physical(resource uint32, paddr uintptr, size uint, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_create_physical(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVQ paddr+8(FP), SI
+	MOVQ size+16(FP), DX
+	MOVQ out+24(FP), CX
+	MOVQ vdso_zx_vmo_create_physical(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_iommu_create(resource uint32, typ uint32, desc unsafe.Pointer, desc_size uint, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_iommu_create(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVL typ+4(FP), SI
+	MOVQ desc+8(FP), DX
+	MOVQ desc_size+16(FP), CX
+	MOVQ out+24(FP), R8
+	MOVQ vdso_zx_iommu_create(SB), AX
+	CALL AX
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_bti_create(iommu uint32, options uint32, bti_id uint64, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_bti_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL iommu+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ bti_id+8(FP), DX
+	MOVQ out+16(FP), CX
+	MOVQ vdso_zx_bti_create(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_bti_pin(handle uint32, options uint32, vmo uint32, offset uint64, size uint64, addrs unsafe.Pointer, addrs_count uint, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_bti_pin(SB),NOSPLIT,$32-60
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVL vmo+8(FP), DX
+	MOVQ offset+16(FP), CX
+	MOVQ size+24(FP), R8
+	MOVQ addrs+32(FP), R9
+	MOVQ addrs_count+40(FP), R12
+	MOVQ out+48(FP), R13
+	MOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI
+	ANDQ $~15, SP // stack alignment for x86-64 ABI
+	PUSHQ R13
+	PUSHQ R12
+	MOVQ vdso_zx_bti_pin(SB), AX
+	CALL AX
+	POPQ R12
+	POPQ R13
+	MOVQ BP, SP
+	MOVL AX, ret+56(FP)
+	RET
+
+// func vdsoCall_zx_bti_release_quarantine(handle uint32) int32
+TEXT runtime·vdsoCall_zx_bti_release_quarantine(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_bti_release_quarantine(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_pmt_unpin(handle uint32) int32
+TEXT runtime·vdsoCall_zx_pmt_unpin(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ vdso_zx_pmt_unpin(SB), AX
+	CALL AX
+	MOVL AX, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_framebuffer_get_info(resource uint32, format unsafe.Pointer, width unsafe.Pointer, height unsafe.Pointer, stride unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_framebuffer_get_info(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVQ format+8(FP), SI
+	MOVQ width+16(FP), DX
+	MOVQ height+24(FP), CX
+	MOVQ stride+32(FP), R8
+	MOVQ vdso_zx_framebuffer_get_info(SB), AX
+	CALL AX
+	MOVL AX, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_framebuffer_set_range(resource uint32, vmo uint32, len uint32, format uint32, width uint32, height uint32, stride uint32) int32
+TEXT runtime·vdsoCall_zx_framebuffer_set_range(SB),NOSPLIT,$24-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVL vmo+4(FP), SI
+	MOVL len+8(FP), DX
+	MOVL format+12(FP), CX
+	MOVL width+16(FP), R8
+	MOVL height+20(FP), R9
+	MOVL stride+24(FP), R12
+	MOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI
+	ANDQ $~15, SP // stack alignment for x86-64 ABI
+	PUSHQ R12
+	MOVQ vdso_zx_framebuffer_set_range(SB), AX
+	CALL AX
+	POPQ R12
+	MOVQ BP, SP
+	MOVL AX, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_pc_firmware_tables(handle uint32, acpi_rsdp unsafe.Pointer, smbios unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_pc_firmware_tables(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ acpi_rsdp+8(FP), SI
+	MOVQ smbios+16(FP), DX
+	MOVQ vdso_zx_pc_firmware_tables(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_smc_call(handle uint32, parameters unsafe.Pointer, out_smc_result unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_smc_call(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL handle+0(FP), DI
+	MOVQ parameters+8(FP), SI
+	MOVQ out_smc_result+16(FP), DX
+	MOVQ vdso_zx_smc_call(SB), AX
+	CALL AX
+	MOVL AX, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_resource_create(parent_rsrc uint32, options uint32, base uint64, size uint, name unsafe.Pointer, name_size uint, resource_out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_resource_create(SB),NOSPLIT,$24-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL parent_rsrc+0(FP), DI
+	MOVL options+4(FP), SI
+	MOVQ base+8(FP), DX
+	MOVQ size+16(FP), CX
+	MOVQ name+24(FP), R8
+	MOVQ name_size+32(FP), R9
+	MOVQ resource_out+40(FP), R12
+	MOVQ SP, BP   // BP is preserved across vsdo call by the x86-64 ABI
+	ANDQ $~15, SP // stack alignment for x86-64 ABI
+	PUSHQ R12
+	MOVQ vdso_zx_resource_create(SB), AX
+	CALL AX
+	POPQ R12
+	MOVQ BP, SP
+	MOVL AX, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_system_mexec(resource uint32, kernel uint32, bootimage uint32) int32
+TEXT runtime·vdsoCall_zx_system_mexec(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVL kernel+4(FP), SI
+	MOVL bootimage+8(FP), DX
+	MOVQ vdso_zx_system_mexec(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_system_powerctl(resource uint32, cmd uint32, arg unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_system_powerctl(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVL resource+0(FP), DI
+	MOVL cmd+4(FP), SI
+	MOVQ arg+8(FP), DX
+	MOVQ vdso_zx_system_powerctl(SB), AX
+	CALL AX
+	MOVL AX, ret+16(FP)
+	RET
+
diff --git a/src/runtime/vdsocalls_fuchsia_arm64.s b/src/runtime/vdsocalls_fuchsia_arm64.s
new file mode 100644
index 0000000..a8470f3
--- /dev/null
+++ b/src/runtime/vdsocalls_fuchsia_arm64.s
@@ -0,0 +1,1514 @@
+// Copyright 2018 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.
+
+// Zircon system calls for the Fuchsia OS.
+// Generated by mkfuchsia.go, do not edit.
+
+#include "textflag.h"
+#include "funcdata.h"
+
+// func vdsoCall_zx_clock_get(clock_id uint32) int64
+TEXT runtime·vdsoCall_zx_clock_get(SB),NOSPLIT,$0-16
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW clock_id+0(FP), R0
+	BL vdso_zx_clock_get(SB)
+	MOVD R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_clock_get_new(clock_id uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_clock_get_new(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW clock_id+0(FP), R0
+	MOVD out+8(FP), R1
+	BL vdso_zx_clock_get_new(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_clock_get_monotonic() int64
+TEXT runtime·vdsoCall_zx_clock_get_monotonic(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	BL vdso_zx_clock_get_monotonic(SB)
+	MOVD R0, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_nanosleep(deadline int64) int32
+TEXT runtime·vdsoCall_zx_nanosleep(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD deadline+0(FP), R0
+	BL vdso_zx_nanosleep(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_ticks_get() uint64
+TEXT runtime·vdsoCall_zx_ticks_get(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	BL vdso_zx_ticks_get(SB)
+	MOVD R0, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_ticks_per_second() uint64
+TEXT runtime·vdsoCall_zx_ticks_per_second(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	BL vdso_zx_ticks_per_second(SB)
+	MOVD R0, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_deadline_after(nanoseconds int64) int64
+TEXT runtime·vdsoCall_zx_deadline_after(SB),NOSPLIT,$0-16
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD nanoseconds+0(FP), R0
+	BL vdso_zx_deadline_after(SB)
+	MOVD R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_clock_adjust(handle uint32, clock_id uint32, offset int64) int32
+TEXT runtime·vdsoCall_zx_clock_adjust(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW clock_id+4(FP), R1
+	MOVD offset+8(FP), R2
+	BL vdso_zx_clock_adjust(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_system_get_dcache_line_size() uint32
+TEXT runtime·vdsoCall_zx_system_get_dcache_line_size(SB),NOSPLIT,$0-4
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	BL vdso_zx_system_get_dcache_line_size(SB)
+	MOVW R0, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_system_get_num_cpus() uint32
+TEXT runtime·vdsoCall_zx_system_get_num_cpus(SB),NOSPLIT,$0-4
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	BL vdso_zx_system_get_num_cpus(SB)
+	MOVW R0, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_system_get_version(version unsafe.Pointer, version_size uint) int32
+TEXT runtime·vdsoCall_zx_system_get_version(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD version+0(FP), R0
+	MOVD version_size+8(FP), R1
+	BL vdso_zx_system_get_version(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_system_get_physmem() uint64
+TEXT runtime·vdsoCall_zx_system_get_physmem(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	BL vdso_zx_system_get_physmem(SB)
+	MOVD R0, ret+0(FP)
+	RET
+
+// func vdsoCall_zx_system_get_features(kind uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_system_get_features(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW kind+0(FP), R0
+	MOVD out+8(FP), R1
+	BL vdso_zx_system_get_features(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_cache_flush(addr unsafe.Pointer, size uint, options uint32) int32
+TEXT runtime·vdsoCall_zx_cache_flush(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD addr+0(FP), R0
+	MOVD size+8(FP), R1
+	MOVW options+16(FP), R2
+	BL vdso_zx_cache_flush(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_handle_close(handle uint32) int32
+TEXT runtime·vdsoCall_zx_handle_close(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_handle_close(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_handle_close_many(handles unsafe.Pointer, num_handles uint) int32
+TEXT runtime·vdsoCall_zx_handle_close_many(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD handles+0(FP), R0
+	MOVD num_handles+8(FP), R1
+	BL vdso_zx_handle_close_many(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_handle_duplicate(handle uint32, rights uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_handle_duplicate(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW rights+4(FP), R1
+	MOVD out+8(FP), R2
+	BL vdso_zx_handle_duplicate(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_handle_replace(handle uint32, rights uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_handle_replace(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW rights+4(FP), R1
+	MOVD out+8(FP), R2
+	BL vdso_zx_handle_replace(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_wait_one(handle uint32, signals uint32, deadline int64, observed unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_wait_one(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	CALL runtime·entersyscall(SB)
+	MOVW handle+0(FP), R0
+	MOVW signals+4(FP), R1
+	MOVD deadline+8(FP), R2
+	MOVD observed+16(FP), R3
+	BL vdso_zx_object_wait_one(SB)
+	MOVW R0, ret+24(FP)
+	BL runtime·exitsyscall(SB)
+	RET
+
+// func vdsoCall_zx_object_wait_many(items unsafe.Pointer, count uint, deadline int64) int32
+TEXT runtime·vdsoCall_zx_object_wait_many(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	CALL runtime·entersyscall(SB)
+	MOVD items+0(FP), R0
+	MOVD count+8(FP), R1
+	MOVD deadline+16(FP), R2
+	BL vdso_zx_object_wait_many(SB)
+	MOVW R0, ret+24(FP)
+	BL runtime·exitsyscall(SB)
+	RET
+
+// func vdsoCall_zx_object_wait_async(handle uint32, port uint32, key uint64, signals uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_object_wait_async(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW port+4(FP), R1
+	MOVD key+8(FP), R2
+	MOVW signals+16(FP), R3
+	MOVW options+20(FP), R4
+	BL vdso_zx_object_wait_async(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_object_signal(handle uint32, clear_mask uint32, set_mask uint32) int32
+TEXT runtime·vdsoCall_zx_object_signal(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW clear_mask+4(FP), R1
+	MOVW set_mask+8(FP), R2
+	BL vdso_zx_object_signal(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_signal_peer(handle uint32, clear_mask uint32, set_mask uint32) int32
+TEXT runtime·vdsoCall_zx_object_signal_peer(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW clear_mask+4(FP), R1
+	MOVW set_mask+8(FP), R2
+	BL vdso_zx_object_signal_peer(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_get_property(handle uint32, property uint32, value unsafe.Pointer, value_size uint) int32
+TEXT runtime·vdsoCall_zx_object_get_property(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW property+4(FP), R1
+	MOVD value+8(FP), R2
+	MOVD value_size+16(FP), R3
+	BL vdso_zx_object_get_property(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_object_set_property(handle uint32, property uint32, value unsafe.Pointer, value_size uint) int32
+TEXT runtime·vdsoCall_zx_object_set_property(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW property+4(FP), R1
+	MOVD value+8(FP), R2
+	MOVD value_size+16(FP), R3
+	BL vdso_zx_object_set_property(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_object_set_cookie(handle uint32, scope uint32, cookie uint64) int32
+TEXT runtime·vdsoCall_zx_object_set_cookie(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW scope+4(FP), R1
+	MOVD cookie+8(FP), R2
+	BL vdso_zx_object_set_cookie(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_get_cookie(handle uint32, scope uint32, cookie unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_get_cookie(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW scope+4(FP), R1
+	MOVD cookie+8(FP), R2
+	BL vdso_zx_object_get_cookie(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_object_get_info(handle uint32, topic uint32, buffer unsafe.Pointer, buffer_size uint, actual_count unsafe.Pointer, avail_count unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_get_info(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW topic+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVD buffer_size+16(FP), R3
+	MOVD actual_count+24(FP), R4
+	MOVD avail_count+32(FP), R5
+	BL vdso_zx_object_get_info(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_object_get_child(handle uint32, koid uint64, rights uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_object_get_child(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD koid+8(FP), R1
+	MOVW rights+16(FP), R2
+	MOVD out+24(FP), R3
+	BL vdso_zx_object_get_child(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_object_set_profile(handle uint32, profile uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_object_set_profile(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW profile+4(FP), R1
+	MOVW options+8(FP), R2
+	BL vdso_zx_object_set_profile(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_channel_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW options+0(FP), R0
+	MOVD out0+8(FP), R1
+	MOVD out1+16(FP), R2
+	BL vdso_zx_channel_create(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_channel_read(handle uint32, options uint32, bytes unsafe.Pointer, handles unsafe.Pointer, num_bytes uint32, num_handles uint32, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_read(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD bytes+8(FP), R2
+	MOVD handles+16(FP), R3
+	MOVW num_bytes+24(FP), R4
+	MOVW num_handles+28(FP), R5
+	MOVD actual_bytes+32(FP), R6
+	MOVD actual_handles+40(FP), R7
+	BL vdso_zx_channel_read(SB)
+	MOVW R0, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_channel_read_etc(handle uint32, options uint32, bytes unsafe.Pointer, handles unsafe.Pointer, num_bytes uint32, num_handles uint32, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_read_etc(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD bytes+8(FP), R2
+	MOVD handles+16(FP), R3
+	MOVW num_bytes+24(FP), R4
+	MOVW num_handles+28(FP), R5
+	MOVD actual_bytes+32(FP), R6
+	MOVD actual_handles+40(FP), R7
+	BL vdso_zx_channel_read_etc(SB)
+	MOVW R0, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_channel_write(handle uint32, options uint32, bytes unsafe.Pointer, num_bytes uint32, handles unsafe.Pointer, num_handles uint32) int32
+TEXT runtime·vdsoCall_zx_channel_write(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD bytes+8(FP), R2
+	MOVW num_bytes+16(FP), R3
+	MOVD handles+24(FP), R4
+	MOVW num_handles+32(FP), R5
+	BL vdso_zx_channel_write(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_channel_call_noretry(handle uint32, options uint32, deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_call_noretry(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD deadline+8(FP), R2
+	MOVD args+16(FP), R3
+	MOVD actual_bytes+24(FP), R4
+	MOVD actual_handles+32(FP), R5
+	BL vdso_zx_channel_call_noretry(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_channel_call_finish(deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_call_finish(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD deadline+0(FP), R0
+	MOVD args+8(FP), R1
+	MOVD actual_bytes+16(FP), R2
+	MOVD actual_handles+24(FP), R3
+	BL vdso_zx_channel_call_finish(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_channel_call(handle uint32, options uint32, deadline int64, args unsafe.Pointer, actual_bytes unsafe.Pointer, actual_handles unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_channel_call(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD deadline+8(FP), R2
+	MOVD args+16(FP), R3
+	MOVD actual_bytes+24(FP), R4
+	MOVD actual_handles+32(FP), R5
+	BL vdso_zx_channel_call(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_socket_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW options+0(FP), R0
+	MOVD out0+8(FP), R1
+	MOVD out1+16(FP), R2
+	BL vdso_zx_socket_create(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_socket_write(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_write(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVD buffer_size+16(FP), R3
+	MOVD actual+24(FP), R4
+	BL vdso_zx_socket_write(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_socket_read(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_read(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVD buffer_size+16(FP), R3
+	MOVD actual+24(FP), R4
+	BL vdso_zx_socket_read(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_socket_share(handle uint32, socket_to_share uint32) int32
+TEXT runtime·vdsoCall_zx_socket_share(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW socket_to_share+4(FP), R1
+	BL vdso_zx_socket_share(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_socket_accept(handle uint32, out_socket unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_socket_accept(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD out_socket+8(FP), R1
+	BL vdso_zx_socket_accept(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_thread_exit()
+TEXT runtime·vdsoCall_zx_thread_exit(SB),NOSPLIT,$0-0
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	BL vdso_zx_thread_exit(SB)
+	RET
+
+// func vdsoCall_zx_thread_create(process uint32, name unsafe.Pointer, name_size uint, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_thread_create(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW process+0(FP), R0
+	MOVD name+8(FP), R1
+	MOVD name_size+16(FP), R2
+	MOVW options+24(FP), R3
+	MOVD out+32(FP), R4
+	BL vdso_zx_thread_create(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_thread_start(handle uint32, thread_entry uintptr, stack uintptr, arg1 uintptr, arg2 uintptr) int32
+TEXT runtime·vdsoCall_zx_thread_start(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD thread_entry+8(FP), R1
+	MOVD stack+16(FP), R2
+	MOVD arg1+24(FP), R3
+	MOVD arg2+32(FP), R4
+	BL vdso_zx_thread_start(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_thread_read_state(handle uint32, kind uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_thread_read_state(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW kind+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVD buffer_size+16(FP), R3
+	BL vdso_zx_thread_read_state(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_thread_write_state(handle uint32, kind uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_thread_write_state(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW kind+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVD buffer_size+16(FP), R3
+	BL vdso_zx_thread_write_state(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_thread_set_priority(prio int32) int32
+TEXT runtime·vdsoCall_zx_thread_set_priority(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW prio+0(FP), R0
+	BL vdso_zx_thread_set_priority(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_process_exit(retcode int64)
+TEXT runtime·vdsoCall_zx_process_exit(SB),NOSPLIT,$0-8
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD retcode+0(FP), R0
+	BL vdso_zx_process_exit(SB)
+	RET
+
+// func vdsoCall_zx_process_create(job uint32, name unsafe.Pointer, name_size uint, options uint32, proc_handle unsafe.Pointer, vmar_handle unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_process_create(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW job+0(FP), R0
+	MOVD name+8(FP), R1
+	MOVD name_size+16(FP), R2
+	MOVW options+24(FP), R3
+	MOVD proc_handle+32(FP), R4
+	MOVD vmar_handle+40(FP), R5
+	BL vdso_zx_process_create(SB)
+	MOVW R0, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_process_start(handle uint32, thread uint32, entry uintptr, stack uintptr, arg1 uint32, arg2 uintptr) int32
+TEXT runtime·vdsoCall_zx_process_start(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW thread+4(FP), R1
+	MOVD entry+8(FP), R2
+	MOVD stack+16(FP), R3
+	MOVW arg1+24(FP), R4
+	MOVD arg2+32(FP), R5
+	BL vdso_zx_process_start(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_process_read_memory(proc uint32, vaddr uintptr, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_process_read_memory(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW proc+0(FP), R0
+	MOVD vaddr+8(FP), R1
+	MOVD buffer+16(FP), R2
+	MOVD buffer_size+24(FP), R3
+	MOVD actual+32(FP), R4
+	BL vdso_zx_process_read_memory(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_process_write_memory(proc uint32, vaddr uintptr, buffer unsafe.Pointer, buffer_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_process_write_memory(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW proc+0(FP), R0
+	MOVD vaddr+8(FP), R1
+	MOVD buffer+16(FP), R2
+	MOVD buffer_size+24(FP), R3
+	MOVD actual+32(FP), R4
+	BL vdso_zx_process_write_memory(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_job_create(parent_job uint32, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_job_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW parent_job+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD out+8(FP), R2
+	BL vdso_zx_job_create(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_job_set_policy(job uint32, options uint32, topic uint32, policy unsafe.Pointer, count uint32) int32
+TEXT runtime·vdsoCall_zx_job_set_policy(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW job+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVW topic+8(FP), R2
+	MOVD policy+16(FP), R3
+	MOVW count+24(FP), R4
+	BL vdso_zx_job_set_policy(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_task_bind_exception_port(handle uint32, port uint32, key uint64, options uint32) int32
+TEXT runtime·vdsoCall_zx_task_bind_exception_port(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW port+4(FP), R1
+	MOVD key+8(FP), R2
+	MOVW options+16(FP), R3
+	BL vdso_zx_task_bind_exception_port(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_task_resume(handle uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_task_resume(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	BL vdso_zx_task_resume(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_task_suspend(handle uint32, token unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_task_suspend(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD token+8(FP), R1
+	BL vdso_zx_task_suspend(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_task_suspend_token(handle uint32, token unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_task_suspend_token(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD token+8(FP), R1
+	BL vdso_zx_task_suspend_token(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_task_resume_from_exception(handle uint32, port uint32, options uint32) int32
+TEXT runtime·vdsoCall_zx_task_resume_from_exception(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW port+4(FP), R1
+	MOVW options+8(FP), R2
+	BL vdso_zx_task_resume_from_exception(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_task_kill(handle uint32) int32
+TEXT runtime·vdsoCall_zx_task_kill(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_task_kill(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_event_create(options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_event_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW options+0(FP), R0
+	MOVD out+8(FP), R1
+	BL vdso_zx_event_create(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_eventpair_create(options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_eventpair_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW options+0(FP), R0
+	MOVD out0+8(FP), R1
+	MOVD out1+16(FP), R2
+	BL vdso_zx_eventpair_create(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_futex_wait(value_ptr unsafe.Pointer, current_value int32, deadline int64) int32
+TEXT runtime·vdsoCall_zx_futex_wait(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD value_ptr+0(FP), R0
+	MOVW current_value+8(FP), R1
+	MOVD deadline+16(FP), R2
+	BL vdso_zx_futex_wait(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_futex_wake(value_ptr unsafe.Pointer, count uint32) int32
+TEXT runtime·vdsoCall_zx_futex_wake(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD value_ptr+0(FP), R0
+	MOVW count+8(FP), R1
+	BL vdso_zx_futex_wake(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_futex_requeue(wake_ptr unsafe.Pointer, wake_count uint32, current_value int32, requeue_ptr unsafe.Pointer, requeue_count uint32) int32
+TEXT runtime·vdsoCall_zx_futex_requeue(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD wake_ptr+0(FP), R0
+	MOVW wake_count+8(FP), R1
+	MOVW current_value+12(FP), R2
+	MOVD requeue_ptr+16(FP), R3
+	MOVW requeue_count+24(FP), R4
+	BL vdso_zx_futex_requeue(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_port_create(options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_port_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW options+0(FP), R0
+	MOVD out+8(FP), R1
+	BL vdso_zx_port_create(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_port_queue(handle uint32, packet unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_port_queue(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD packet+8(FP), R1
+	BL vdso_zx_port_queue(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_port_wait(handle uint32, deadline int64, packet unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_port_wait(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	CALL runtime·entersyscall(SB)
+	MOVW handle+0(FP), R0
+	MOVD deadline+8(FP), R1
+	MOVD packet+16(FP), R2
+	BL vdso_zx_port_wait(SB)
+	MOVW R0, ret+24(FP)
+	BL runtime·exitsyscall(SB)
+	RET
+
+// func vdsoCall_zx_port_cancel(handle uint32, source uint32, key uint64) int32
+TEXT runtime·vdsoCall_zx_port_cancel(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW source+4(FP), R1
+	MOVD key+8(FP), R2
+	BL vdso_zx_port_cancel(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_timer_create(options uint32, clock_id uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_timer_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW options+0(FP), R0
+	MOVW clock_id+4(FP), R1
+	MOVD out+8(FP), R2
+	BL vdso_zx_timer_create(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_timer_set(handle uint32, deadline int64, slack int64) int32
+TEXT runtime·vdsoCall_zx_timer_set(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD deadline+8(FP), R1
+	MOVD slack+16(FP), R2
+	BL vdso_zx_timer_set(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_timer_cancel(handle uint32) int32
+TEXT runtime·vdsoCall_zx_timer_cancel(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_timer_cancel(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_vmo_create(size uint64, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD size+0(FP), R0
+	MOVW options+8(FP), R1
+	MOVD out+16(FP), R2
+	BL vdso_zx_vmo_create(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_vmo_read(handle uint32, buffer unsafe.Pointer, offset uint64, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_vmo_read(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD buffer+8(FP), R1
+	MOVD offset+16(FP), R2
+	MOVD buffer_size+24(FP), R3
+	BL vdso_zx_vmo_read(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_write(handle uint32, buffer unsafe.Pointer, offset uint64, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_vmo_write(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD buffer+8(FP), R1
+	MOVD offset+16(FP), R2
+	MOVD buffer_size+24(FP), R3
+	BL vdso_zx_vmo_write(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_get_size(handle uint32, size unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_get_size(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD size+8(FP), R1
+	BL vdso_zx_vmo_get_size(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmo_set_size(handle uint32, size uint64) int32
+TEXT runtime·vdsoCall_zx_vmo_set_size(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD size+8(FP), R1
+	BL vdso_zx_vmo_set_size(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmo_op_range(handle uint32, op uint32, offset uint64, size uint64, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_vmo_op_range(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW op+4(FP), R1
+	MOVD offset+8(FP), R2
+	MOVD size+16(FP), R3
+	MOVD buffer+24(FP), R4
+	MOVD buffer_size+32(FP), R5
+	BL vdso_zx_vmo_op_range(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_vmo_clone(handle uint32, options uint32, offset uint64, size uint64, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_clone(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD offset+8(FP), R2
+	MOVD size+16(FP), R3
+	MOVD out+24(FP), R4
+	BL vdso_zx_vmo_clone(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_set_cache_policy(handle uint32, cache_policy uint32) int32
+TEXT runtime·vdsoCall_zx_vmo_set_cache_policy(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW cache_policy+4(FP), R1
+	BL vdso_zx_vmo_set_cache_policy(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_vmo_replace_as_executable(handle uint32, vmex uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_replace_as_executable(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW vmex+4(FP), R1
+	MOVD out+8(FP), R2
+	BL vdso_zx_vmo_replace_as_executable(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmar_allocate_old(parent_vmar uint32, offset uint64, size uint64, map_flags uint32, child_vmar unsafe.Pointer, child_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_allocate_old(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW parent_vmar+0(FP), R0
+	MOVD offset+8(FP), R1
+	MOVD size+16(FP), R2
+	MOVW map_flags+24(FP), R3
+	MOVD child_vmar+32(FP), R4
+	MOVD child_addr+40(FP), R5
+	BL vdso_zx_vmar_allocate_old(SB)
+	MOVW R0, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_vmar_map_old(handle uint32, vmar_offset uint64, vmo uint32, vmo_offset uint64, len uint64, map_flags uint32, mapped_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_map_old(SB),NOSPLIT,$0-60
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD vmar_offset+8(FP), R1
+	MOVW vmo+16(FP), R2
+	MOVD vmo_offset+24(FP), R3
+	MOVD len+32(FP), R4
+	MOVW map_flags+40(FP), R5
+	MOVD mapped_addr+48(FP), R6
+	BL vdso_zx_vmar_map_old(SB)
+	MOVW R0, ret+56(FP)
+	RET
+
+// func vdsoCall_zx_vmar_protect_old(handle uint32, addr uintptr, len uint64, prot_flags uint32) int32
+TEXT runtime·vdsoCall_zx_vmar_protect_old(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD addr+8(FP), R1
+	MOVD len+16(FP), R2
+	MOVW prot_flags+24(FP), R3
+	BL vdso_zx_vmar_protect_old(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmar_allocate(parent_vmar uint32, options uint32, offset uint64, size uint64, child_vmar unsafe.Pointer, child_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_allocate(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW parent_vmar+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD offset+8(FP), R2
+	MOVD size+16(FP), R3
+	MOVD child_vmar+24(FP), R4
+	MOVD child_addr+32(FP), R5
+	BL vdso_zx_vmar_allocate(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_vmar_destroy(handle uint32) int32
+TEXT runtime·vdsoCall_zx_vmar_destroy(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_vmar_destroy(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_vmar_map(handle uint32, options uint32, vmar_offset uint64, vmo uint32, vmo_offset uint64, len uint64, mapped_addr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmar_map(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD vmar_offset+8(FP), R2
+	MOVW vmo+16(FP), R3
+	MOVD vmo_offset+24(FP), R4
+	MOVD len+32(FP), R5
+	MOVD mapped_addr+40(FP), R6
+	BL vdso_zx_vmar_map(SB)
+	MOVW R0, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_vmar_unmap(handle uint32, addr uintptr, len uint64) int32
+TEXT runtime·vdsoCall_zx_vmar_unmap(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD addr+8(FP), R1
+	MOVD len+16(FP), R2
+	BL vdso_zx_vmar_unmap(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_vmar_protect(handle uint32, options uint32, addr uintptr, len uint64) int32
+TEXT runtime·vdsoCall_zx_vmar_protect(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD addr+8(FP), R2
+	MOVD len+16(FP), R3
+	BL vdso_zx_vmar_protect(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_cprng_draw_once(buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_cprng_draw_once(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD buffer+0(FP), R0
+	MOVD buffer_size+8(FP), R1
+	BL vdso_zx_cprng_draw_once(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_cprng_draw(buffer unsafe.Pointer, buffer_size uint)
+TEXT runtime·vdsoCall_zx_cprng_draw(SB),NOSPLIT,$0-16
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD buffer+0(FP), R0
+	MOVD buffer_size+8(FP), R1
+	BL vdso_zx_cprng_draw(SB)
+	RET
+
+// func vdsoCall_zx_cprng_add_entropy(buffer unsafe.Pointer, len uint) int32
+TEXT runtime·vdsoCall_zx_cprng_add_entropy(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD buffer+0(FP), R0
+	MOVD len+8(FP), R1
+	BL vdso_zx_cprng_add_entropy(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_fifo_create(elem_count uint, elem_size uint, options uint32, out0 unsafe.Pointer, out1 unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_fifo_create(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD elem_count+0(FP), R0
+	MOVD elem_size+8(FP), R1
+	MOVW options+16(FP), R2
+	MOVD out0+24(FP), R3
+	MOVD out1+32(FP), R4
+	BL vdso_zx_fifo_create(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_fifo_read(handle uint32, elem_size uint, data unsafe.Pointer, count uint, actual_count unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_fifo_read(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD elem_size+8(FP), R1
+	MOVD data+16(FP), R2
+	MOVD count+24(FP), R3
+	MOVD actual_count+32(FP), R4
+	BL vdso_zx_fifo_read(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_fifo_write(handle uint32, elem_size uint, data unsafe.Pointer, count uint, actual_count unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_fifo_write(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD elem_size+8(FP), R1
+	MOVD data+16(FP), R2
+	MOVD count+24(FP), R3
+	MOVD actual_count+32(FP), R4
+	BL vdso_zx_fifo_write(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_profile_create(resource uint32, profile unsafe.Pointer, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_profile_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVD profile+8(FP), R1
+	MOVD out+16(FP), R2
+	BL vdso_zx_profile_create(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_vmar_unmap_handle_close_thread_exit(vmar_handle uint32, addr uintptr, size uint, handle uint32) int32
+TEXT runtime·vdsoCall_zx_vmar_unmap_handle_close_thread_exit(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW vmar_handle+0(FP), R0
+	MOVD addr+8(FP), R1
+	MOVD size+16(FP), R2
+	MOVW handle+24(FP), R3
+	BL vdso_zx_vmar_unmap_handle_close_thread_exit(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_futex_wake_handle_close_thread_exit(value_ptr unsafe.Pointer, count uint32, new_value int32, handle uint32)
+TEXT runtime·vdsoCall_zx_futex_wake_handle_close_thread_exit(SB),NOSPLIT,$0-24
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD value_ptr+0(FP), R0
+	MOVW count+8(FP), R1
+	MOVW new_value+12(FP), R2
+	MOVW handle+16(FP), R3
+	BL vdso_zx_futex_wake_handle_close_thread_exit(SB)
+	RET
+
+// func vdsoCall_zx_log_write(handle uint32, len uint32, buffer unsafe.Pointer, options uint32) int32
+TEXT runtime·vdsoCall_zx_log_write(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW len+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVW options+16(FP), R3
+	BL vdso_zx_log_write(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_log_read(handle uint32, len uint32, buffer unsafe.Pointer, options uint32) int32
+TEXT runtime·vdsoCall_zx_log_read(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW len+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVW options+16(FP), R3
+	BL vdso_zx_log_read(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_debuglog_create(resource uint32, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_debuglog_create(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD out+8(FP), R2
+	BL vdso_zx_debuglog_create(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_debuglog_write(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debuglog_write(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVD buffer_size+16(FP), R3
+	BL vdso_zx_debuglog_write(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_debuglog_read(handle uint32, options uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debuglog_read(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD buffer+8(FP), R2
+	MOVD buffer_size+16(FP), R3
+	BL vdso_zx_debuglog_read(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_ktrace_read(handle uint32, data unsafe.Pointer, offset uint32, data_size uint, actual unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_ktrace_read(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD data+8(FP), R1
+	MOVW offset+16(FP), R2
+	MOVD data_size+24(FP), R3
+	MOVD actual+32(FP), R4
+	BL vdso_zx_ktrace_read(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_ktrace_control(handle uint32, action uint32, options uint32, ptr unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_ktrace_control(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW action+4(FP), R1
+	MOVW options+8(FP), R2
+	MOVD ptr+16(FP), R3
+	BL vdso_zx_ktrace_control(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_ktrace_write(handle uint32, id uint32, arg0 uint32, arg1 uint32) int32
+TEXT runtime·vdsoCall_zx_ktrace_write(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW id+4(FP), R1
+	MOVW arg0+8(FP), R2
+	MOVW arg1+12(FP), R3
+	BL vdso_zx_ktrace_write(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_mtrace_control(handle uint32, kind uint32, action uint32, options uint32, ptr unsafe.Pointer, ptr_size uint) int32
+TEXT runtime·vdsoCall_zx_mtrace_control(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW kind+4(FP), R1
+	MOVW action+8(FP), R2
+	MOVW options+12(FP), R3
+	MOVD ptr+16(FP), R4
+	MOVD ptr_size+24(FP), R5
+	BL vdso_zx_mtrace_control(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_debug_read(handle uint32, buffer unsafe.Pointer, buffer_size unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_debug_read(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD buffer+8(FP), R1
+	MOVD buffer_size+16(FP), R2
+	BL vdso_zx_debug_read(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_debug_write(buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debug_write(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVD buffer+0(FP), R0
+	MOVD buffer_size+8(FP), R1
+	BL vdso_zx_debug_write(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_debug_send_command(resource uint32, buffer unsafe.Pointer, buffer_size uint) int32
+TEXT runtime·vdsoCall_zx_debug_send_command(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVD buffer+8(FP), R1
+	MOVD buffer_size+16(FP), R2
+	BL vdso_zx_debug_send_command(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_create(src_obj uint32, src_num uint32, options uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_interrupt_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW src_obj+0(FP), R0
+	MOVW src_num+4(FP), R1
+	MOVW options+8(FP), R2
+	MOVD out+16(FP), R3
+	BL vdso_zx_interrupt_create(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_bind(handle uint32, port uint32, key uint64, options uint32) int32
+TEXT runtime·vdsoCall_zx_interrupt_bind(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW port+4(FP), R1
+	MOVD key+8(FP), R2
+	MOVW options+16(FP), R3
+	BL vdso_zx_interrupt_bind(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_wait(handle uint32, out_timestamp unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_interrupt_wait(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD out_timestamp+8(FP), R1
+	BL vdso_zx_interrupt_wait(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_destroy(handle uint32) int32
+TEXT runtime·vdsoCall_zx_interrupt_destroy(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_interrupt_destroy(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_ack(handle uint32) int32
+TEXT runtime·vdsoCall_zx_interrupt_ack(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_interrupt_ack(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_interrupt_trigger(handle uint32, options uint32, timestamp int64) int32
+TEXT runtime·vdsoCall_zx_interrupt_trigger(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD timestamp+8(FP), R2
+	BL vdso_zx_interrupt_trigger(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_ioports_request(resource uint32, io_addr uint16, len uint32) int32
+TEXT runtime·vdsoCall_zx_ioports_request(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVD io_addr+4(FP), R1
+	MOVW len+8(FP), R2
+	BL vdso_zx_ioports_request(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_vmo_create_contiguous(bti uint32, size uint, alignment_log2 uint32, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_create_contiguous(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW bti+0(FP), R0
+	MOVD size+8(FP), R1
+	MOVW alignment_log2+16(FP), R2
+	MOVD out+24(FP), R3
+	BL vdso_zx_vmo_create_contiguous(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_vmo_create_physical(resource uint32, paddr uintptr, size uint, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_vmo_create_physical(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVD paddr+8(FP), R1
+	MOVD size+16(FP), R2
+	MOVD out+24(FP), R3
+	BL vdso_zx_vmo_create_physical(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_iommu_create(resource uint32, typ uint32, desc unsafe.Pointer, desc_size uint, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_iommu_create(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVW typ+4(FP), R1
+	MOVD desc+8(FP), R2
+	MOVD desc_size+16(FP), R3
+	MOVD out+24(FP), R4
+	BL vdso_zx_iommu_create(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_bti_create(iommu uint32, options uint32, bti_id uint64, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_bti_create(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW iommu+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD bti_id+8(FP), R2
+	MOVD out+16(FP), R3
+	BL vdso_zx_bti_create(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_bti_pin(handle uint32, options uint32, vmo uint32, offset uint64, size uint64, addrs unsafe.Pointer, addrs_count uint, out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_bti_pin(SB),NOSPLIT,$0-60
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVW vmo+8(FP), R2
+	MOVD offset+16(FP), R3
+	MOVD size+24(FP), R4
+	MOVD addrs+32(FP), R5
+	MOVD addrs_count+40(FP), R6
+	MOVD out+48(FP), R7
+	BL vdso_zx_bti_pin(SB)
+	MOVW R0, ret+56(FP)
+	RET
+
+// func vdsoCall_zx_bti_release_quarantine(handle uint32) int32
+TEXT runtime·vdsoCall_zx_bti_release_quarantine(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_bti_release_quarantine(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_pmt_unpin(handle uint32) int32
+TEXT runtime·vdsoCall_zx_pmt_unpin(SB),NOSPLIT,$0-12
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	BL vdso_zx_pmt_unpin(SB)
+	MOVW R0, ret+8(FP)
+	RET
+
+// func vdsoCall_zx_framebuffer_get_info(resource uint32, format unsafe.Pointer, width unsafe.Pointer, height unsafe.Pointer, stride unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_framebuffer_get_info(SB),NOSPLIT,$0-44
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVD format+8(FP), R1
+	MOVD width+16(FP), R2
+	MOVD height+24(FP), R3
+	MOVD stride+32(FP), R4
+	BL vdso_zx_framebuffer_get_info(SB)
+	MOVW R0, ret+40(FP)
+	RET
+
+// func vdsoCall_zx_framebuffer_set_range(resource uint32, vmo uint32, len uint32, format uint32, width uint32, height uint32, stride uint32) int32
+TEXT runtime·vdsoCall_zx_framebuffer_set_range(SB),NOSPLIT,$0-36
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVW vmo+4(FP), R1
+	MOVW len+8(FP), R2
+	MOVW format+12(FP), R3
+	MOVW width+16(FP), R4
+	MOVW height+20(FP), R5
+	MOVW stride+24(FP), R6
+	BL vdso_zx_framebuffer_set_range(SB)
+	MOVW R0, ret+32(FP)
+	RET
+
+// func vdsoCall_zx_pc_firmware_tables(handle uint32, acpi_rsdp unsafe.Pointer, smbios unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_pc_firmware_tables(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD acpi_rsdp+8(FP), R1
+	MOVD smbios+16(FP), R2
+	BL vdso_zx_pc_firmware_tables(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_smc_call(handle uint32, parameters unsafe.Pointer, out_smc_result unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_smc_call(SB),NOSPLIT,$0-28
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW handle+0(FP), R0
+	MOVD parameters+8(FP), R1
+	MOVD out_smc_result+16(FP), R2
+	BL vdso_zx_smc_call(SB)
+	MOVW R0, ret+24(FP)
+	RET
+
+// func vdsoCall_zx_resource_create(parent_rsrc uint32, options uint32, base uint64, size uint, name unsafe.Pointer, name_size uint, resource_out unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_resource_create(SB),NOSPLIT,$0-52
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW parent_rsrc+0(FP), R0
+	MOVW options+4(FP), R1
+	MOVD base+8(FP), R2
+	MOVD size+16(FP), R3
+	MOVD name+24(FP), R4
+	MOVD name_size+32(FP), R5
+	MOVD resource_out+40(FP), R6
+	BL vdso_zx_resource_create(SB)
+	MOVW R0, ret+48(FP)
+	RET
+
+// func vdsoCall_zx_system_mexec(resource uint32, kernel uint32, bootimage uint32) int32
+TEXT runtime·vdsoCall_zx_system_mexec(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVW kernel+4(FP), R1
+	MOVW bootimage+8(FP), R2
+	BL vdso_zx_system_mexec(SB)
+	MOVW R0, ret+16(FP)
+	RET
+
+// func vdsoCall_zx_system_powerctl(resource uint32, cmd uint32, arg unsafe.Pointer) int32
+TEXT runtime·vdsoCall_zx_system_powerctl(SB),NOSPLIT,$0-20
+	GO_ARGS
+	NO_LOCAL_POINTERS
+	MOVW resource+0(FP), R0
+	MOVW cmd+4(FP), R1
+	MOVD arg+8(FP), R2
+	BL vdso_zx_system_powerctl(SB)
+	MOVW R0, ret+16(FP)
+	RET
+