mirror of
https://github.com/golang/go
synced 2024-11-22 02:44:39 -07:00
FreeBSD-specific porting work.
cgo/libmach remain unimplemented. However, compilers, runtime, and packages are 100%. I still need to go through and implement missing syscalls (at least make sure they're all listed), but for all shipped functionality, this is done. Ship! ;) R=rsc, VenkateshSrinivas https://golang.org/cl/152142
This commit is contained in:
parent
30b1b9a36a
commit
0489a260da
@ -4,7 +4,7 @@
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
set -e
|
||||
make hello fib chain
|
||||
gomake hello fib chain
|
||||
echo '*' hello >run.out
|
||||
./hello >>run.out
|
||||
echo '*' fib >>run.out
|
||||
@ -12,4 +12,4 @@ echo '*' fib >>run.out
|
||||
echo '*' chain >>run.out
|
||||
./chain >>run.out
|
||||
diff run.out golden.out
|
||||
make clean
|
||||
gomake clean
|
||||
|
@ -38,6 +38,7 @@
|
||||
#define PADDR(a) ((uint32)(a) & ~0x80000000)
|
||||
|
||||
char linuxdynld[] = "/lib64/ld-linux-x86-64.so.2";
|
||||
char freebsddynld[] = "/libexec/ld-elf.so.1";
|
||||
|
||||
char zeroes[32];
|
||||
|
||||
@ -284,7 +285,7 @@ doelf(void)
|
||||
Sym *s, *shstrtab, *dynamic, *dynstr, *d;
|
||||
int h, nsym, t;
|
||||
|
||||
if(HEADTYPE != 7)
|
||||
if(HEADTYPE != 7 && HEADTYPE != 9)
|
||||
return;
|
||||
|
||||
/* predefine strings we need for section headers */
|
||||
@ -317,7 +318,14 @@ doelf(void)
|
||||
s = lookup(".interp", 0);
|
||||
s->reachable = 1;
|
||||
s->type = SDATA; // TODO: rodata
|
||||
switch(HEADTYPE) {
|
||||
case 7:
|
||||
addstring(lookup(".interp", 0), linuxdynld);
|
||||
break;
|
||||
case 9:
|
||||
addstring(lookup(".interp", 0), freebsddynld);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* hash table.
|
||||
@ -512,6 +520,7 @@ asmb(void)
|
||||
break;
|
||||
|
||||
case 7:
|
||||
case 9:
|
||||
debug['8'] = 1; /* 64-bit addresses */
|
||||
v = rnd(HEADR+textsize, INITRND);
|
||||
seek(cout, v, 0);
|
||||
@ -565,6 +574,7 @@ asmb(void)
|
||||
symo = rnd(HEADR+textsize, INITRND)+rnd(datsize, INITRND)+machlink;
|
||||
break;
|
||||
case 7:
|
||||
case 9:
|
||||
symo = rnd(HEADR+textsize, INITRND)+datsize;
|
||||
symo = rnd(symo, INITRND);
|
||||
break;
|
||||
@ -649,6 +659,7 @@ asmb(void)
|
||||
asmbmacho(symdatva, symo);
|
||||
break;
|
||||
case 7:
|
||||
case 9:
|
||||
/* elf amd-64 */
|
||||
|
||||
eh = getElfEhdr();
|
||||
@ -871,6 +882,8 @@ asmb(void)
|
||||
eh->ident[EI_MAG1] = 'E';
|
||||
eh->ident[EI_MAG2] = 'L';
|
||||
eh->ident[EI_MAG3] = 'F';
|
||||
if(HEADTYPE == 9)
|
||||
eh->ident[EI_OSABI] = 9;
|
||||
eh->ident[EI_CLASS] = ELFCLASS64;
|
||||
eh->ident[EI_DATA] = ELFDATA2LSB;
|
||||
eh->ident[EI_VERSION] = EV_CURRENT;
|
||||
|
@ -46,6 +46,7 @@ char* paramspace = "FP";
|
||||
* -H5 -T0x80110000 -R4096 is ELF32
|
||||
* -H6 -Tx -Rx is apple MH-exec
|
||||
* -H7 -Tx -Rx is linux elf-exec
|
||||
* -H9 -Tx -Rx is FreeBSD elf-exec
|
||||
*
|
||||
* options used: 189BLQSWabcjlnpsvz
|
||||
*/
|
||||
@ -149,6 +150,10 @@ main(int argc, char *argv[])
|
||||
if(strcmp(goos, "darwin") == 0)
|
||||
HEADTYPE = 6;
|
||||
else
|
||||
if(strcmp(goos, "freebsd") == 0) {
|
||||
debug['d'] = 1; /* no dynamic syms for now */
|
||||
HEADTYPE = 9;
|
||||
} else
|
||||
print("goos is not known: %s\n", goos);
|
||||
}
|
||||
|
||||
@ -194,6 +199,7 @@ main(int argc, char *argv[])
|
||||
INITDAT = 0;
|
||||
break;
|
||||
case 7: /* elf64 executable */
|
||||
case 9: /* freebsd */
|
||||
elfinit();
|
||||
HEADR = ELFRESERVE;
|
||||
if(INITTEXT == -1)
|
||||
|
@ -24,6 +24,7 @@ clean:
|
||||
|
||||
install: install-$(shell uname | tr A-Z a-z)
|
||||
install-linux: install-default
|
||||
install-freebsd: install-default
|
||||
|
||||
# on Darwin, have to install and setgid; see $GOROOT/src/sudo.bash
|
||||
install-darwin: $(TARG)
|
||||
|
@ -24,6 +24,7 @@ clean:
|
||||
|
||||
install: install-$(shell uname | tr A-Z a-z)
|
||||
install-linux: install-default
|
||||
install-freebsd: install-default
|
||||
|
||||
# on Darwin, have to install and setgid; see $GOROOT/src/sudo.bash
|
||||
install-darwin: $(TARG)
|
||||
|
@ -16,6 +16,7 @@ CFLAGS_amd64=-m64
|
||||
|
||||
LDFLAGS_linux=-shared -lpthread -lm
|
||||
LDFLAGS_darwin=-dynamiclib -Wl,-undefined,dynamic_lookup /usr/lib/libpthread.dylib
|
||||
LDFLAGS_freebsd=-pthread -shared -lm
|
||||
|
||||
%.o: %.c
|
||||
gcc $(CFLAGS_$(GOARCH)) -O2 -fPIC -o $@ -c $*.c
|
||||
|
46
src/libcgo/freebsd_amd64.c
Normal file
46
src/libcgo/freebsd_amd64.c
Normal file
@ -0,0 +1,46 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
#include <pthread.h>
|
||||
#include "libcgo.h"
|
||||
|
||||
static void* threadentry(void*);
|
||||
|
||||
void
|
||||
initcgo(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
libcgo_sys_thread_start(ThreadStart *ts)
|
||||
{
|
||||
pthread_attr_t attr;
|
||||
pthread_t p;
|
||||
size_t size;
|
||||
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_getstacksize(&attr, &size);
|
||||
ts->g->stackguard = size;
|
||||
pthread_create(&p, &attr, threadentry, ts);
|
||||
}
|
||||
|
||||
static void*
|
||||
threadentry(void *v)
|
||||
{
|
||||
ThreadStart ts;
|
||||
|
||||
ts = *(ThreadStart*)v;
|
||||
free(v);
|
||||
|
||||
ts.g->stackbase = (uintptr)&ts;
|
||||
|
||||
/*
|
||||
* libcgo_sys_thread_start set stackguard to stack size;
|
||||
* change to actual guard pointer.
|
||||
*/
|
||||
ts.g->stackguard = (uintptr)&ts - ts.g->stackguard + 4096;
|
||||
|
||||
crosscall_amd64(ts.m, ts.g, ts.fn);
|
||||
return nil;
|
||||
}
|
41
src/libmach/freebsd.c
Normal file
41
src/libmach/freebsd.c
Normal file
@ -0,0 +1,41 @@
|
||||
// This is stubbed out for the moment. Will revisit when the time comes.
|
||||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
#include <mach.h>
|
||||
|
||||
int
|
||||
ctlproc(int pid, char *msg)
|
||||
{
|
||||
sysfatal("ctlproc unimplemented in FreeBSD");
|
||||
}
|
||||
|
||||
char*
|
||||
proctextfile(int pid)
|
||||
{
|
||||
sysfatal("proctextfile unimplemented in FreeBSD");
|
||||
}
|
||||
|
||||
char*
|
||||
procstatus(int pid)
|
||||
{
|
||||
sysfatal("procstatus unimplemented in FreeBSD");
|
||||
}
|
||||
|
||||
Map*
|
||||
attachproc(int pid, Fhdr *fp)
|
||||
{
|
||||
sysfatal("attachproc unimplemented in FreeBSD");
|
||||
}
|
||||
|
||||
void
|
||||
detachproc(Map *m)
|
||||
{
|
||||
sysfatal("detachproc unimplemented in FreeBSD");
|
||||
}
|
||||
|
||||
int
|
||||
procthreadpids(int pid, int *p, int np)
|
||||
{
|
||||
sysfatal("procthreadpids unimplemented in FreeBSD");
|
||||
}
|
17
src/pkg/debug/proc/proc_freebsd.go
Normal file
17
src/pkg/debug/proc/proc_freebsd.go
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package proc
|
||||
|
||||
import "os"
|
||||
|
||||
// Process tracing is not supported on FreeBSD yet.
|
||||
|
||||
func Attach(pid int) (Process, os.Error) {
|
||||
return nil, os.NewError("debug/proc not implemented on FreeBSD")
|
||||
}
|
||||
|
||||
func ForkExec(argv0 string, argv []string, envv []string, dir string, fd []*os.File) (Process, os.Error) {
|
||||
return Attach(0)
|
||||
}
|
5
src/pkg/debug/proc/regs_freebsd_amd64.go
Normal file
5
src/pkg/debug/proc/regs_freebsd_amd64.go
Normal file
@ -0,0 +1,5 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package proc
|
106
src/pkg/net/fd_freebsd.go
Normal file
106
src/pkg/net/fd_freebsd.go
Normal file
@ -0,0 +1,106 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Waiting for FDs via kqueue/kevent.
|
||||
|
||||
package net
|
||||
|
||||
import (
|
||||
"os";
|
||||
"syscall";
|
||||
)
|
||||
|
||||
type pollster struct {
|
||||
kq int;
|
||||
eventbuf [10]syscall.Kevent_t;
|
||||
events []syscall.Kevent_t;
|
||||
}
|
||||
|
||||
func newpollster() (p *pollster, err os.Error) {
|
||||
p = new(pollster);
|
||||
var e int;
|
||||
if p.kq, e = syscall.Kqueue(); e != 0 {
|
||||
return nil, os.NewSyscallError("kqueue", e)
|
||||
}
|
||||
p.events = p.eventbuf[0:0];
|
||||
return p, nil;
|
||||
}
|
||||
|
||||
func (p *pollster) AddFD(fd int, mode int, repeat bool) os.Error {
|
||||
var kmode int;
|
||||
if mode == 'r' {
|
||||
kmode = syscall.EVFILT_READ
|
||||
} else {
|
||||
kmode = syscall.EVFILT_WRITE
|
||||
}
|
||||
var events [1]syscall.Kevent_t;
|
||||
ev := &events[0];
|
||||
// EV_ADD - add event to kqueue list
|
||||
// EV_ONESHOT - delete the event the first time it triggers
|
||||
flags := syscall.EV_ADD;
|
||||
if !repeat {
|
||||
flags |= syscall.EV_ONESHOT
|
||||
}
|
||||
syscall.SetKevent(ev, fd, kmode, flags);
|
||||
|
||||
n, e := syscall.Kevent(p.kq, &events, nil, nil);
|
||||
if e != 0 {
|
||||
return os.NewSyscallError("kevent", e)
|
||||
}
|
||||
if n != 1 || (ev.Flags&syscall.EV_ERROR) == 0 || int(ev.Ident) != fd || int(ev.Filter) != kmode {
|
||||
return os.NewSyscallError("kqueue phase error", e)
|
||||
}
|
||||
if ev.Data != 0 {
|
||||
return os.Errno(int(ev.Data))
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
func (p *pollster) DelFD(fd int, mode int) {
|
||||
var kmode int;
|
||||
if mode == 'r' {
|
||||
kmode = syscall.EVFILT_READ
|
||||
} else {
|
||||
kmode = syscall.EVFILT_WRITE
|
||||
}
|
||||
var events [1]syscall.Kevent_t;
|
||||
ev := &events[0];
|
||||
// EV_DELETE - delete event from kqueue list
|
||||
syscall.SetKevent(ev, fd, kmode, syscall.EV_DELETE);
|
||||
syscall.Kevent(p.kq, &events, nil, nil);
|
||||
}
|
||||
|
||||
func (p *pollster) WaitFD(nsec int64) (fd int, mode int, err os.Error) {
|
||||
var t *syscall.Timespec;
|
||||
for len(p.events) == 0 {
|
||||
if nsec > 0 {
|
||||
if t == nil {
|
||||
t = new(syscall.Timespec)
|
||||
}
|
||||
*t = syscall.NsecToTimespec(nsec);
|
||||
}
|
||||
nn, e := syscall.Kevent(p.kq, nil, &p.eventbuf, t);
|
||||
if e != 0 {
|
||||
if e == syscall.EINTR {
|
||||
continue
|
||||
}
|
||||
return -1, 0, os.NewSyscallError("kevent", e);
|
||||
}
|
||||
if nn == 0 {
|
||||
return -1, 0, nil
|
||||
}
|
||||
p.events = p.eventbuf[0:nn];
|
||||
}
|
||||
ev := &p.events[0];
|
||||
p.events = p.events[1:len(p.events)];
|
||||
fd = int(ev.Ident);
|
||||
if ev.Filter == syscall.EVFILT_READ {
|
||||
mode = 'r'
|
||||
} else {
|
||||
mode = 'w'
|
||||
}
|
||||
return fd, mode, nil;
|
||||
}
|
||||
|
||||
func (p *pollster) Close() os.Error { return os.NewSyscallError("close", syscall.Close(p.kq)) }
|
@ -18,6 +18,10 @@ import (
|
||||
// Unfortunately, we need to run on kernels built without IPv6 support too.
|
||||
// So probe the kernel to figure it out.
|
||||
func kernelSupportsIPv6() bool {
|
||||
// FreeBSD does not support this sort of interface.
|
||||
if syscall.OS == "freebsd" {
|
||||
return false
|
||||
}
|
||||
fd, e := syscall.Socket(syscall.AF_INET6, syscall.SOCK_STREAM, syscall.IPPROTO_TCP);
|
||||
if fd >= 0 {
|
||||
syscall.Close(fd)
|
||||
|
74
src/pkg/os/dir_freebsd.go
Normal file
74
src/pkg/os/dir_freebsd.go
Normal file
@ -0,0 +1,74 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package os
|
||||
|
||||
import (
|
||||
"syscall";
|
||||
"unsafe";
|
||||
)
|
||||
|
||||
const (
|
||||
blockSize = 4096; // TODO(r): use statfs
|
||||
)
|
||||
|
||||
func (file *File) Readdirnames(count int) (names []string, err Error) {
|
||||
// If this file has no dirinfo, create one.
|
||||
if file.dirinfo == nil {
|
||||
file.dirinfo = new(dirInfo);
|
||||
// The buffer must be at least a block long.
|
||||
// TODO(r): use fstatfs to find fs block size.
|
||||
file.dirinfo.buf = make([]byte, blockSize);
|
||||
}
|
||||
d := file.dirinfo;
|
||||
size := count;
|
||||
if size < 0 {
|
||||
size = 100
|
||||
}
|
||||
names = make([]string, 0, size); // Empty with room to grow.
|
||||
for count != 0 {
|
||||
// Refill the buffer if necessary
|
||||
if d.bufp >= d.nbuf {
|
||||
var errno int;
|
||||
d.bufp = 0;
|
||||
// Final argument is (basep *uintptr) and the syscall doesn't take nil.
|
||||
d.nbuf, errno = syscall.Getdirentries(file.fd, d.buf, new(uintptr));
|
||||
if errno != 0 {
|
||||
d.nbuf = 0;
|
||||
return names, NewSyscallError("getdirentries", errno);
|
||||
}
|
||||
if d.nbuf <= 0 {
|
||||
break // EOF
|
||||
}
|
||||
}
|
||||
// Drain the buffer
|
||||
for count != 0 && d.bufp < d.nbuf {
|
||||
dirent := (*syscall.Dirent)(unsafe.Pointer(&d.buf[d.bufp]));
|
||||
if dirent.Reclen == 0 {
|
||||
d.bufp = d.nbuf;
|
||||
break;
|
||||
}
|
||||
d.bufp += int(dirent.Reclen);
|
||||
if dirent.Fileno == 0 { // File absent in directory.
|
||||
continue
|
||||
}
|
||||
bytes := (*[len(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0]));
|
||||
var name = string(bytes[0:dirent.Namlen]);
|
||||
if name == "." || name == ".." { // Useless names
|
||||
continue
|
||||
}
|
||||
count--;
|
||||
if len(names) == cap(names) {
|
||||
nnames := make([]string, len(names), 2*len(names));
|
||||
for i := 0; i < len(names); i++ {
|
||||
nnames[i] = names[i]
|
||||
}
|
||||
names = nnames;
|
||||
}
|
||||
names = names[0 : len(names)+1];
|
||||
names[len(names)-1] = name;
|
||||
}
|
||||
}
|
||||
return names, nil;
|
||||
}
|
38
src/pkg/os/stat_freebsd.go
Normal file
38
src/pkg/os/stat_freebsd.go
Normal file
@ -0,0 +1,38 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package os
|
||||
|
||||
import "syscall"
|
||||
|
||||
func isSymlink(stat *syscall.Stat_t) bool {
|
||||
return stat.Mode&syscall.S_IFMT == syscall.S_IFLNK
|
||||
}
|
||||
|
||||
func dirFromStat(name string, dir *Dir, lstat, stat *syscall.Stat_t) *Dir {
|
||||
dir.Dev = uint64(stat.Dev);
|
||||
dir.Ino = uint64(stat.Ino);
|
||||
dir.Nlink = uint64(stat.Nlink);
|
||||
dir.Mode = uint32(stat.Mode);
|
||||
dir.Uid = stat.Uid;
|
||||
dir.Gid = stat.Gid;
|
||||
dir.Rdev = uint64(stat.Rdev);
|
||||
dir.Size = uint64(stat.Size);
|
||||
dir.Blksize = uint64(stat.Blksize);
|
||||
dir.Blocks = uint64(stat.Blocks);
|
||||
dir.Atime_ns = uint64(syscall.TimespecToNsec(stat.Atimespec));
|
||||
dir.Mtime_ns = uint64(syscall.TimespecToNsec(stat.Mtimespec));
|
||||
dir.Ctime_ns = uint64(syscall.TimespecToNsec(stat.Ctimespec));
|
||||
for i := len(name) - 1; i >= 0; i-- {
|
||||
if name[i] == '/' {
|
||||
name = name[i+1 : len(name)];
|
||||
break;
|
||||
}
|
||||
}
|
||||
dir.Name = name;
|
||||
if isSymlink(lstat) && !isSymlink(stat) {
|
||||
dir.FollowedSymlink = true
|
||||
}
|
||||
return dir;
|
||||
}
|
16
src/pkg/os/sys_freebsd.go
Normal file
16
src/pkg/os/sys_freebsd.go
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package os
|
||||
|
||||
import "syscall"
|
||||
|
||||
func Hostname() (name string, err Error) {
|
||||
var errno int;
|
||||
name, errno = syscall.Sysctl("kern.hostname");
|
||||
if errno != 0 {
|
||||
return "", NewSyscallError("sysctl kern.hostname", errno)
|
||||
}
|
||||
return name, nil;
|
||||
}
|
@ -5,10 +5,9 @@
|
||||
#include "amd64/asm.h"
|
||||
|
||||
TEXT _rt0_amd64(SB),7,$-8
|
||||
|
||||
// copy arguments forward on an even stack
|
||||
MOVQ 0(SP), AX // argc
|
||||
LEAQ 8(SP), BX // argv
|
||||
MOVQ 0(DI), AX // argc
|
||||
LEAQ 8(DI), BX // argv
|
||||
SUBQ $(4*8+7), SP // 2args 2auto
|
||||
ANDQ $~7, SP
|
||||
MOVQ AX, 16(SP)
|
||||
|
@ -6,4 +6,5 @@
|
||||
|
||||
TEXT _rt0_amd64_darwin(SB),7,$-8
|
||||
MOVQ $_rt0_amd64(SB), AX
|
||||
MOVQ SP, DI
|
||||
JMP AX
|
||||
|
157
src/pkg/runtime/freebsd/amd64/defs.h
Normal file
157
src/pkg/runtime/freebsd/amd64/defs.h
Normal file
@ -0,0 +1,157 @@
|
||||
// godefs -f -m64 freebsd/defs.c
|
||||
|
||||
// MACHINE GENERATED - DO NOT EDIT.
|
||||
|
||||
// Constants
|
||||
enum {
|
||||
PROT_NONE = 0,
|
||||
PROT_READ = 0x1,
|
||||
PROT_WRITE = 0x2,
|
||||
PROT_EXEC = 0x4,
|
||||
MAP_ANON = 0x1000,
|
||||
MAP_PRIVATE = 0x2,
|
||||
SA_SIGINFO = 0x40,
|
||||
SA_RESTART = 0x2,
|
||||
SA_ONSTACK = 0x1,
|
||||
UMTX_OP_WAIT = 0x2,
|
||||
UMTX_OP_WAKE = 0x3,
|
||||
EINTR = 0x4,
|
||||
};
|
||||
|
||||
// Types
|
||||
#pragma pack on
|
||||
|
||||
typedef struct Sigaltstack Sigaltstack;
|
||||
struct Sigaltstack {
|
||||
int8 *ss_sp;
|
||||
uint64 ss_size;
|
||||
int32 ss_flags;
|
||||
byte pad0[4];
|
||||
};
|
||||
|
||||
typedef struct Sigset Sigset;
|
||||
struct Sigset {
|
||||
uint32 __bits[4];
|
||||
};
|
||||
|
||||
typedef union Sigval Sigval;
|
||||
union Sigval {
|
||||
int32 sival_int;
|
||||
void *sival_ptr;
|
||||
int32 sigval_int;
|
||||
void *sigval_ptr;
|
||||
};
|
||||
|
||||
typedef struct StackT StackT;
|
||||
struct StackT {
|
||||
int8 *ss_sp;
|
||||
uint64 ss_size;
|
||||
int32 ss_flags;
|
||||
byte pad0[4];
|
||||
};
|
||||
|
||||
typedef struct Siginfo Siginfo;
|
||||
struct Siginfo {
|
||||
int32 si_signo;
|
||||
int32 si_errno;
|
||||
int32 si_code;
|
||||
int32 si_pid;
|
||||
uint32 si_uid;
|
||||
int32 si_status;
|
||||
void *si_addr;
|
||||
Sigval si_value;
|
||||
byte _reason[40];
|
||||
};
|
||||
|
||||
typedef struct Mcontext Mcontext;
|
||||
struct Mcontext {
|
||||
int64 mc_onstack;
|
||||
int64 mc_rdi;
|
||||
int64 mc_rsi;
|
||||
int64 mc_rdx;
|
||||
int64 mc_rcx;
|
||||
int64 mc_r8;
|
||||
int64 mc_r9;
|
||||
int64 mc_rax;
|
||||
int64 mc_rbx;
|
||||
int64 mc_rbp;
|
||||
int64 mc_r10;
|
||||
int64 mc_r11;
|
||||
int64 mc_r12;
|
||||
int64 mc_r13;
|
||||
int64 mc_r14;
|
||||
int64 mc_r15;
|
||||
uint32 mc_trapno;
|
||||
uint16 mc_fs;
|
||||
uint16 mc_gs;
|
||||
int64 mc_addr;
|
||||
uint32 mc_flags;
|
||||
uint16 mc_es;
|
||||
uint16 mc_ds;
|
||||
int64 mc_err;
|
||||
int64 mc_rip;
|
||||
int64 mc_cs;
|
||||
int64 mc_rflags;
|
||||
int64 mc_rsp;
|
||||
int64 mc_ss;
|
||||
int64 mc_len;
|
||||
int64 mc_fpformat;
|
||||
int64 mc_ownedfp;
|
||||
int64 mc_fpstate[64];
|
||||
int64 mc_fsbase;
|
||||
int64 mc_gsbase;
|
||||
int64 mc_spare[6];
|
||||
};
|
||||
|
||||
typedef struct Ucontext Ucontext;
|
||||
struct Ucontext {
|
||||
Sigset uc_sigmask;
|
||||
Mcontext uc_mcontext;
|
||||
Ucontext *uc_link;
|
||||
StackT uc_stack;
|
||||
int32 uc_flags;
|
||||
int32 __spare__[4];
|
||||
byte pad0[12];
|
||||
};
|
||||
|
||||
typedef struct Sigcontext Sigcontext;
|
||||
struct Sigcontext {
|
||||
Sigset sc_mask;
|
||||
int64 sc_onstack;
|
||||
int64 sc_rdi;
|
||||
int64 sc_rsi;
|
||||
int64 sc_rdx;
|
||||
int64 sc_rcx;
|
||||
int64 sc_r8;
|
||||
int64 sc_r9;
|
||||
int64 sc_rax;
|
||||
int64 sc_rbx;
|
||||
int64 sc_rbp;
|
||||
int64 sc_r10;
|
||||
int64 sc_r11;
|
||||
int64 sc_r12;
|
||||
int64 sc_r13;
|
||||
int64 sc_r14;
|
||||
int64 sc_r15;
|
||||
int32 sc_trapno;
|
||||
int16 sc_fs;
|
||||
int16 sc_gs;
|
||||
int64 sc_addr;
|
||||
int32 sc_flags;
|
||||
int16 sc_es;
|
||||
int16 sc_ds;
|
||||
int64 sc_err;
|
||||
int64 sc_rip;
|
||||
int64 sc_cs;
|
||||
int64 sc_rflags;
|
||||
int64 sc_rsp;
|
||||
int64 sc_ss;
|
||||
int64 sc_len;
|
||||
int64 sc_fpformat;
|
||||
int64 sc_ownedfp;
|
||||
int64 sc_fpstate[64];
|
||||
int64 sc_fsbase;
|
||||
int64 sc_gsbase;
|
||||
int64 sc_spare[6];
|
||||
};
|
||||
#pragma pack off
|
9
src/pkg/runtime/freebsd/amd64/rt0.s
Normal file
9
src/pkg/runtime/freebsd/amd64/rt0.s
Normal file
@ -0,0 +1,9 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Darwin and Linux use the same linkage to main
|
||||
|
||||
TEXT _rt0_amd64_freebsd(SB),7,$-8
|
||||
MOVQ $_rt0_amd64(SB), DX
|
||||
JMP DX
|
117
src/pkg/runtime/freebsd/amd64/signal.c
Normal file
117
src/pkg/runtime/freebsd/amd64/signal.c
Normal file
@ -0,0 +1,117 @@
|
||||
#include "runtime.h"
|
||||
#include "defs.h"
|
||||
#include "signals.h"
|
||||
#include "os.h"
|
||||
|
||||
extern void sigtramp(void);
|
||||
|
||||
typedef struct sigaction {
|
||||
union {
|
||||
void (*__sa_handler)(int32);
|
||||
void (*__sa_sigaction)(int32, Siginfo*, void *);
|
||||
} __sigaction_u; /* signal handler */
|
||||
int32 sa_flags; /* see signal options below */
|
||||
int64 sa_mask; /* signal mask to apply */
|
||||
} Sigaction;
|
||||
|
||||
void
|
||||
dumpregs(Sigcontext *r)
|
||||
{
|
||||
printf("rax %X\n", r->sc_rax);
|
||||
printf("rbx %X\n", r->sc_rbx);
|
||||
printf("rcx %X\n", r->sc_rcx);
|
||||
printf("rdx %X\n", r->sc_rdx);
|
||||
printf("rdi %X\n", r->sc_rdi);
|
||||
printf("rsi %X\n", r->sc_rsi);
|
||||
printf("rbp %X\n", r->sc_rbp);
|
||||
printf("rsp %X\n", r->sc_rsp);
|
||||
printf("r8 %X\n", r->sc_r8 );
|
||||
printf("r9 %X\n", r->sc_r9 );
|
||||
printf("r10 %X\n", r->sc_r10);
|
||||
printf("r11 %X\n", r->sc_r11);
|
||||
printf("r12 %X\n", r->sc_r12);
|
||||
printf("r13 %X\n", r->sc_r13);
|
||||
printf("r14 %X\n", r->sc_r14);
|
||||
printf("r15 %X\n", r->sc_r15);
|
||||
printf("rip %X\n", r->sc_rip);
|
||||
printf("rflags %X\n", r->sc_flags);
|
||||
printf("cs %X\n", (uint64)r->sc_cs);
|
||||
printf("fs %X\n", (uint64)r->sc_fsbase);
|
||||
printf("gs %X\n", (uint64)r->sc_gsbase);
|
||||
}
|
||||
|
||||
void
|
||||
sighandler(int32 sig, Siginfo* info, void* context)
|
||||
{
|
||||
Ucontext *uc;
|
||||
Mcontext *mc;
|
||||
Sigcontext *sc;
|
||||
|
||||
if(panicking) // traceback already printed
|
||||
exit(2);
|
||||
panicking = 1;
|
||||
|
||||
uc = context;
|
||||
mc = &uc->uc_mcontext;
|
||||
sc = (Sigcontext*)mc; // same layout, more conveient names
|
||||
|
||||
if(sig < 0 || sig >= NSIG)
|
||||
printf("Signal %d\n", sig);
|
||||
else
|
||||
printf("%s\n", sigtab[sig].name);
|
||||
|
||||
printf("Faulting address: %p\n", info->si_addr);
|
||||
printf("PC=%X\n", sc->sc_rip);
|
||||
printf("\n");
|
||||
|
||||
if(gotraceback()){
|
||||
traceback((void*)sc->sc_rip, (void*)sc->sc_rsp, (void*)sc->sc_r15);
|
||||
tracebackothers((void*)sc->sc_r15);
|
||||
dumpregs(sc);
|
||||
}
|
||||
|
||||
breakpoint();
|
||||
exit(2);
|
||||
}
|
||||
|
||||
void
|
||||
sigignore(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
signalstack(byte *p, int32 n)
|
||||
{
|
||||
Sigaltstack st;
|
||||
|
||||
st.ss_sp = (int8*)p;
|
||||
st.ss_size = n;
|
||||
st.ss_flags = 0;
|
||||
sigaltstack(&st, nil);
|
||||
}
|
||||
|
||||
void
|
||||
initsig(void)
|
||||
{
|
||||
static Sigaction sa;
|
||||
|
||||
int32 i;
|
||||
sa.sa_flags |= SA_ONSTACK | SA_SIGINFO;
|
||||
sa.sa_mask = ~0x0ull;
|
||||
|
||||
for(i = 0; i < NSIG; i++) {
|
||||
if(sigtab[i].flags) {
|
||||
if(sigtab[i].flags & SigCatch)
|
||||
sa.__sigaction_u.__sa_handler = (void*) sigtramp;
|
||||
else
|
||||
sa.__sigaction_u.__sa_handler = (void*) sigignore;
|
||||
|
||||
if(sigtab[i].flags & SigRestart)
|
||||
sa.sa_flags |= SA_RESTART;
|
||||
else
|
||||
sa.sa_flags &= ~SA_RESTART;
|
||||
|
||||
sigaction(i, &sa, nil);
|
||||
}
|
||||
}
|
||||
}
|
125
src/pkg/runtime/freebsd/amd64/sys.s
Normal file
125
src/pkg/runtime/freebsd/amd64/sys.s
Normal file
@ -0,0 +1,125 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
//
|
||||
// System calls and other sys.stuff for AMD64, FreeBSD
|
||||
// /usr/src/sys/kern/syscalls.master for syscall numbers.
|
||||
//
|
||||
|
||||
#include "amd64/asm.h"
|
||||
|
||||
TEXT sys_umtx_op(SB),7,$0
|
||||
MOVQ 8(SP), DI
|
||||
MOVL 16(SP), SI
|
||||
MOVL 20(SP), DX
|
||||
MOVQ 24(SP), R10
|
||||
MOVQ 32(SP), R8
|
||||
MOVL $454, AX
|
||||
SYSCALL
|
||||
RET
|
||||
|
||||
TEXT thr_new(SB),7,$0
|
||||
MOVQ 8(SP), DI
|
||||
MOVQ 16(SP), SI
|
||||
MOVL $455, AX
|
||||
SYSCALL
|
||||
RET
|
||||
|
||||
TEXT thr_start(SB),7,$0
|
||||
MOVQ DI, m
|
||||
MOVQ m_g0(m), g
|
||||
CALL mstart(SB)
|
||||
MOVQ 0, AX // crash (not reached)
|
||||
|
||||
|
||||
// Exit the entire program (like C exit)
|
||||
TEXT exit(SB),7,$-8
|
||||
MOVL 8(SP), DI // arg 1 exit status
|
||||
MOVL $1, AX
|
||||
SYSCALL
|
||||
CALL notok(SB)
|
||||
RET
|
||||
|
||||
TEXT exit1(SB),7,$-8
|
||||
MOVQ 8(SP), DI // arg 1 exit status
|
||||
MOVL $431, AX
|
||||
SYSCALL
|
||||
CALL notok(SB)
|
||||
RET
|
||||
|
||||
TEXT write(SB),7,$-8
|
||||
MOVL 8(SP), DI // arg 1 fd
|
||||
MOVQ 16(SP), SI // arg 2 buf
|
||||
MOVL 24(SP), DX // arg 3 count
|
||||
MOVL $4, AX
|
||||
SYSCALL
|
||||
JCC 2(PC)
|
||||
CALL notok(SB)
|
||||
RET
|
||||
|
||||
TEXT sigaction(SB),7,$-8
|
||||
MOVL 8(SP), DI // arg 1 sig
|
||||
MOVQ 16(SP), SI // arg 2 act
|
||||
MOVQ 24(SP), DX // arg 3 oact
|
||||
MOVL $416, AX
|
||||
SYSCALL
|
||||
JCC 2(PC)
|
||||
CALL notok(SB)
|
||||
RET
|
||||
|
||||
TEXT sigtramp(SB),7,$24-16
|
||||
MOVQ m_gsignal(m), g
|
||||
MOVQ DI, 0(SP)
|
||||
MOVQ SI, 8(SP)
|
||||
MOVQ DX, 16(SP)
|
||||
CALL sighandler(SB)
|
||||
RET
|
||||
|
||||
TEXT runtime·mmap(SB),7,$-8
|
||||
MOVQ 8(SP), DI // arg 1 addr
|
||||
MOVL 16(SP), SI // arg 2 len
|
||||
MOVL 20(SP), DX // arg 3 prot
|
||||
MOVL 24(SP), R10 // arg 4 flags
|
||||
MOVL 28(SP), R8 // arg 5 fid
|
||||
MOVL 32(SP), R9 // arg 6 offset
|
||||
MOVL $477, AX
|
||||
SYSCALL
|
||||
JCC 2(PC)
|
||||
CALL notok(SB)
|
||||
RET
|
||||
|
||||
TEXT notok(SB),7,$-8
|
||||
MOVL $0xf1, BP
|
||||
MOVQ BP, (BP)
|
||||
RET
|
||||
|
||||
TEXT runtime·memclr(SB),7,$-8
|
||||
MOVQ 8(SP), DI // arg 1 addr
|
||||
MOVL 16(SP), CX // arg 2 count
|
||||
ADDL $7, CX
|
||||
SHRL $3, CX
|
||||
MOVQ $0, AX
|
||||
CLD
|
||||
REP
|
||||
STOSQ
|
||||
RET
|
||||
|
||||
TEXT runtime·getcallerpc+0(SB),7,$0
|
||||
MOVQ x+0(FP),AX // addr of first arg
|
||||
MOVQ -8(AX),AX // get calling pc
|
||||
RET
|
||||
|
||||
TEXT runtime·setcallerpc+0(SB),7,$0
|
||||
MOVQ x+0(FP),AX // addr of first arg
|
||||
MOVQ x+8(FP), BX
|
||||
MOVQ BX, -8(AX) // set calling pc
|
||||
RET
|
||||
|
||||
TEXT sigaltstack(SB),7,$-8
|
||||
MOVQ new+8(SP), DI
|
||||
MOVQ old+16(SP), SI
|
||||
MOVQ $53, AX
|
||||
SYSCALL
|
||||
JCC 2(PC)
|
||||
CALL notok(SB)
|
||||
RET
|
49
src/pkg/runtime/freebsd/defs.c
Normal file
49
src/pkg/runtime/freebsd/defs.c
Normal file
@ -0,0 +1,49 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
/*
|
||||
* Input to godefs.
|
||||
*
|
||||
godefs -f -m64 defs.c >amd64/defs.h
|
||||
godefs defs.c >386/defs.h
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/ucontext.h>
|
||||
#include <sys/umtx.h>
|
||||
#include <sys/_sigset.h>
|
||||
|
||||
enum {
|
||||
$PROT_NONE = PROT_NONE,
|
||||
$PROT_READ = PROT_READ,
|
||||
$PROT_WRITE = PROT_WRITE,
|
||||
$PROT_EXEC = PROT_EXEC,
|
||||
|
||||
$MAP_ANON = MAP_ANON,
|
||||
$MAP_PRIVATE = MAP_PRIVATE,
|
||||
|
||||
$SA_SIGINFO = SA_SIGINFO,
|
||||
$SA_RESTART = SA_RESTART,
|
||||
$SA_ONSTACK = SA_ONSTACK,
|
||||
|
||||
$UMTX_OP_WAIT = UMTX_OP_WAIT,
|
||||
$UMTX_OP_WAKE = UMTX_OP_WAKE,
|
||||
|
||||
$EINTR = EINTR,
|
||||
};
|
||||
|
||||
typedef struct sigaltstack $Sigaltstack;
|
||||
typedef struct __sigset $Sigset;
|
||||
typedef union sigval $Sigval;
|
||||
typedef stack_t $StackT;
|
||||
|
||||
typedef siginfo_t $Siginfo;
|
||||
|
||||
typedef mcontext_t $Mcontext;
|
||||
typedef ucontext_t $Ucontext;
|
||||
typedef struct sigcontext $Sigcontext;
|
19
src/pkg/runtime/freebsd/os.h
Normal file
19
src/pkg/runtime/freebsd/os.h
Normal file
@ -0,0 +1,19 @@
|
||||
// FreeBSD-specific system calls
|
||||
int32 ksem_init(uint64 *, uint32);
|
||||
int32 ksem_wait(uint32);
|
||||
int32 ksem_destroy(uint32);
|
||||
int32 ksem_post(uint32);
|
||||
|
||||
struct thr_param {
|
||||
void (*start_func)(void *); /* thread entry function. */
|
||||
void *arg; /* argument for entry function. */
|
||||
byte *stack_base; /* stack base address. */
|
||||
int64 stack_size; /* stack size. */
|
||||
byte *tls_base; /* tls base address. */
|
||||
int64 tls_size; /* tls size. */
|
||||
int64 *child_tid; /* address to store new TID. */
|
||||
int64 *parent_tid; /* parent accesses the new TID here. */
|
||||
int32 flags; /* thread flags. */
|
||||
void *spare[4]; /* TODO: cpu affinity mask etc. */
|
||||
};
|
||||
int32 thr_new(struct thr_param*, uint64);
|
48
src/pkg/runtime/freebsd/signals.h
Normal file
48
src/pkg/runtime/freebsd/signals.h
Normal file
@ -0,0 +1,48 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
#define C SigCatch
|
||||
#define I SigIgnore
|
||||
#define R SigRestart
|
||||
|
||||
static SigTab sigtab[] = {
|
||||
/* 0 */ 0, "SIGNONE: no trap",
|
||||
/* 1 */ 0, "SIGHUP: terminal line hangup",
|
||||
/* 2 */ 0, "SIGINT: interrupt",
|
||||
/* 3 */ C, "SIGQUIT: quit",
|
||||
/* 4 */ C, "SIGILL: illegal instruction",
|
||||
/* 5 */ C, "SIGTRAP: trace trap",
|
||||
/* 6 */ C, "SIGABRT: abort",
|
||||
/* 7 */ C, "SIGEMT: EMT instruction",
|
||||
/* 8 */ C, "SIGFPE: floating-point exception",
|
||||
/* 9 */ 0, "SIGKILL: kill",
|
||||
/* 10 */ C, "SIGBUS: bus error",
|
||||
/* 11 */ C, "SIGSEGV: segmentation violation",
|
||||
/* 12 */ C, "SIGSYS: bad system call",
|
||||
/* 13 */ I, "SIGPIPE: write to broken pipe",
|
||||
/* 14 */ 0, "SIGALRM: alarm clock",
|
||||
/* 15 */ 0, "SIGTERM: termination",
|
||||
/* 16 */ 0, "SIGURG: urgent condition on socket",
|
||||
/* 17 */ 0, "SIGSTOP: stop, unblockable",
|
||||
/* 18 */ 0, "SIGTSTP: stop from tty",
|
||||
/* 19 */ 0, "SIGCONT: continue",
|
||||
/* 20 */ I+R, "SIGCHLD: child status has changed",
|
||||
/* 21 */ 0, "SIGTTIN: background read from tty",
|
||||
/* 22 */ 0, "SIGTTOU: background write to tty",
|
||||
/* 23 */ 0, "SIGIO: i/o now possible",
|
||||
/* 24 */ 0, "SIGXCPU: cpu limit exceeded",
|
||||
/* 25 */ 0, "SIGXFSZ: file size limit exceeded",
|
||||
/* 26 */ 0, "SIGVTALRM: virtual alarm clock",
|
||||
/* 27 */ 0, "SIGPROF: profiling alarm clock",
|
||||
/* 28 */ I+R, "SIGWINCH: window size change",
|
||||
/* 29 */ 0, "SIGINFO: information request",
|
||||
/* 30 */ 0, "SIGUSR1: user-defined signal 1",
|
||||
/* 31 */ 0, "SIGUSR2: user-defined signal 2",
|
||||
/* 32 */ 0, "SIGTHR: reserved",
|
||||
};
|
||||
#undef C
|
||||
#undef I
|
||||
#undef R
|
||||
|
||||
#define NSIG 33
|
162
src/pkg/runtime/freebsd/thread.c
Normal file
162
src/pkg/runtime/freebsd/thread.c
Normal file
@ -0,0 +1,162 @@
|
||||
// Use of this source file is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.`
|
||||
|
||||
#include "runtime.h"
|
||||
#include "defs.h"
|
||||
#include "signals.h"
|
||||
#include "os.h"
|
||||
|
||||
// FreeBSD's umtx_op syscall is effectively the same as Linux's futex, and
|
||||
// thus the code is largely similar. See linux/thread.c for comments.
|
||||
|
||||
static void
|
||||
umtx_wait(uint32 *addr, uint32 val)
|
||||
{
|
||||
int32 ret;
|
||||
|
||||
ret = sys_umtx_op(addr, UMTX_OP_WAIT, val, nil, nil);
|
||||
if(ret >= 0 || ret == -EINTR)
|
||||
return;
|
||||
|
||||
printf("umtx_wait addr=%p val=%d ret=%d\n", addr, val, ret);
|
||||
*(int32*)0x1005 = 0x1005;
|
||||
}
|
||||
|
||||
static void
|
||||
umtx_wake(uint32 *addr)
|
||||
{
|
||||
int32 ret;
|
||||
|
||||
ret = sys_umtx_op(addr, UMTX_OP_WAKE, 1, nil, nil);
|
||||
if(ret >= 0)
|
||||
return;
|
||||
|
||||
printf("umtx_wake addr=%p ret=%d\n", addr, ret);
|
||||
*(int32*)0x1006 = 0x1006;
|
||||
}
|
||||
|
||||
// See linux/thread.c for comments about the algorithm.
|
||||
static void
|
||||
umtx_lock(Lock *l)
|
||||
{
|
||||
uint32 v;
|
||||
|
||||
again:
|
||||
v = l->key;
|
||||
if((v&1) == 0){
|
||||
if(cas(&l->key, v, v|1))
|
||||
return;
|
||||
goto again;
|
||||
}
|
||||
|
||||
if(!cas(&l->key, v, v+2))
|
||||
goto again;
|
||||
|
||||
umtx_wait(&l->key, v+2);
|
||||
|
||||
for(;;){
|
||||
v = l->key;
|
||||
if(v < 2)
|
||||
throw("bad lock key");
|
||||
if(cas(&l->key, v, v-2))
|
||||
break;
|
||||
}
|
||||
|
||||
goto again;
|
||||
}
|
||||
|
||||
static void
|
||||
umtx_unlock(Lock *l)
|
||||
{
|
||||
uint32 v;
|
||||
|
||||
again:
|
||||
v = l->key;
|
||||
if((v&1) == 0)
|
||||
throw("unlock of unlocked lock");
|
||||
if(!cas(&l->key, v, v&~1))
|
||||
goto again;
|
||||
|
||||
if(v&~1)
|
||||
umtx_wake(&l->key);
|
||||
}
|
||||
|
||||
void
|
||||
lock(Lock *l)
|
||||
{
|
||||
if(m->locks < 0)
|
||||
throw("lock count");
|
||||
m->locks++;
|
||||
umtx_lock(l);
|
||||
}
|
||||
|
||||
void
|
||||
unlock(Lock *l)
|
||||
{
|
||||
m->locks--;
|
||||
if(m->locks < 0)
|
||||
throw("lock count");
|
||||
umtx_unlock(l);
|
||||
}
|
||||
|
||||
// Event notifications.
|
||||
void
|
||||
noteclear(Note *n)
|
||||
{
|
||||
n->lock.key = 0;
|
||||
umtx_lock(&n->lock);
|
||||
}
|
||||
|
||||
void
|
||||
notesleep(Note *n)
|
||||
{
|
||||
umtx_lock(&n->lock);
|
||||
umtx_unlock(&n->lock);
|
||||
}
|
||||
|
||||
void
|
||||
notewakeup(Note *n)
|
||||
{
|
||||
umtx_unlock(&n->lock);
|
||||
}
|
||||
|
||||
void thr_start(void*);
|
||||
|
||||
void
|
||||
newosproc(M *m, G *g, void *stk, void (*fn)(void))
|
||||
{
|
||||
struct thr_param param;
|
||||
|
||||
USED(fn); // thr_start assumes fn == mstart
|
||||
USED(g); // thr_start assumes g == m->g0
|
||||
|
||||
if(0){
|
||||
printf("newosproc stk=%p m=%p g=%p fn=%p id=%d/%d ostk=%p\n",
|
||||
stk, m, g, fn, m->id, m->tls[0], &m);
|
||||
}
|
||||
|
||||
runtime_memclr((byte*)¶m, sizeof param);
|
||||
|
||||
param.start_func = thr_start;
|
||||
param.arg = m;
|
||||
param.stack_base = stk;
|
||||
param.stack_size = g->stackbase - g->stackguard + 256;
|
||||
param.child_tid = (int64*)&m->procid;
|
||||
param.parent_tid = nil;
|
||||
|
||||
thr_new(¶m, sizeof param);
|
||||
}
|
||||
|
||||
void
|
||||
osinit(void)
|
||||
{
|
||||
}
|
||||
|
||||
// Called to initialize a new m (including the bootstrap m).
|
||||
void
|
||||
minit(void)
|
||||
{
|
||||
// Initialize signal handling
|
||||
m->gsignal = malg(32*1024);
|
||||
signalstack(m->gsignal->stackguard, 32*1024);
|
||||
}
|
@ -11,6 +11,7 @@ TEXT _rt0_amd64_linux(SB),7,$-8
|
||||
CALL AX
|
||||
|
||||
MOVQ $_rt0_amd64(SB), AX
|
||||
MOVQ SP, DI
|
||||
JMP AX
|
||||
|
||||
GLOBL initcgo(SB), $8
|
||||
|
77
src/pkg/syscall/asm_freebsd_amd64.s
Normal file
77
src/pkg/syscall/asm_freebsd_amd64.s
Normal file
@ -0,0 +1,77 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//
|
||||
// System call support for AMD64, FreeBSD
|
||||
//
|
||||
|
||||
// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
|
||||
// func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64);
|
||||
// Trap # in AX, args in DI SI DX, return in AX DX
|
||||
|
||||
TEXT syscall·Syscall(SB),7,$0
|
||||
CALL runtime·entersyscall(SB)
|
||||
MOVQ 16(SP), DI
|
||||
MOVQ 24(SP), SI
|
||||
MOVQ 32(SP), DX
|
||||
MOVQ $0, R10
|
||||
MOVQ $0, R8
|
||||
MOVQ $0, R9
|
||||
MOVQ 8(SP), AX // syscall entry
|
||||
SYSCALL
|
||||
JCC ok
|
||||
MOVQ $-1, 40(SP) // r1
|
||||
MOVQ $0, 48(SP) // r2
|
||||
MOVQ AX, 56(SP) // errno
|
||||
CALL runtime·exitsyscall(SB)
|
||||
RET
|
||||
ok:
|
||||
MOVQ AX, 40(SP) // r1
|
||||
MOVQ DX, 48(SP) // r2
|
||||
MOVQ $0, 56(SP) // errno
|
||||
CALL runtime·exitsyscall(SB)
|
||||
RET
|
||||
|
||||
TEXT syscall·Syscall6(SB),7,$0
|
||||
CALL runtime·entersyscall(SB)
|
||||
MOVQ 16(SP), DI
|
||||
MOVQ 24(SP), SI
|
||||
MOVQ 32(SP), DX
|
||||
MOVQ 40(SP), R10
|
||||
MOVQ 48(SP), R8
|
||||
MOVQ 56(SP), R9
|
||||
MOVQ 8(SP), AX // syscall entry
|
||||
SYSCALL
|
||||
JCC ok6
|
||||
MOVQ $-1, 64(SP) // r1
|
||||
MOVQ $0, 72(SP) // r2
|
||||
MOVQ AX, 80(SP) // errno
|
||||
CALL runtime·exitsyscall(SB)
|
||||
RET
|
||||
ok6:
|
||||
MOVQ AX, 64(SP) // r1
|
||||
MOVQ DX, 72(SP) // r2
|
||||
MOVQ $0, 80(SP) // errno
|
||||
CALL runtime·exitsyscall(SB)
|
||||
RET
|
||||
|
||||
TEXT syscall·RawSyscall(SB),7,$0
|
||||
MOVQ 16(SP), DI
|
||||
MOVQ 24(SP), SI
|
||||
MOVQ 32(SP), DX
|
||||
MOVQ $0, R10
|
||||
MOVQ $0, R8
|
||||
MOVQ $0, R9
|
||||
MOVQ 8(SP), AX // syscall entry
|
||||
SYSCALL
|
||||
JCC ok1
|
||||
MOVQ $-1, 40(SP) // r1
|
||||
MOVQ $0, 48(SP) // r2
|
||||
MOVQ AX, 56(SP) // errno
|
||||
RET
|
||||
ok1:
|
||||
MOVQ AX, 40(SP) // r1
|
||||
MOVQ DX, 48(SP) // r2
|
||||
MOVQ $0, 56(SP) // errno
|
||||
RET
|
41
src/pkg/syscall/mksysnum_freebsd.sh
Executable file
41
src/pkg/syscall/mksysnum_freebsd.sh
Executable file
@ -0,0 +1,41 @@
|
||||
#!/usr/bin/perl
|
||||
# Copyright 2009 The Go Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
#
|
||||
# Generate system call table for FreeBSD from master list
|
||||
# (for example, /usr/src/sys/kern/syscalls.master).
|
||||
|
||||
my $command = "mksysnum_freebsd.sh " . join(' ', @ARGV);
|
||||
|
||||
print <<EOF;
|
||||
// $command
|
||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
||||
|
||||
package syscall
|
||||
|
||||
const (
|
||||
EOF
|
||||
|
||||
while(<>){
|
||||
if(/^([0-9]+)\s+\S+\s+STD\s+({ \S+\s+(\w+).*)$/){
|
||||
my $num = $1;
|
||||
my $proto = $2;
|
||||
my $name = "SYS_$3";
|
||||
$name =~ y/a-z/A-Z/;
|
||||
|
||||
# There are multiple entries for enosys and nosys, so comment them out.
|
||||
if($name =~ /^SYS_E?NOSYS$/){
|
||||
$name = "// $name";
|
||||
}
|
||||
if($name eq 'SYS_SYS_EXIT'){
|
||||
$name = 'SYS_EXIT';
|
||||
}
|
||||
|
||||
print " $name = $num; // $proto\n";
|
||||
}
|
||||
}
|
||||
|
||||
print <<EOF;
|
||||
)
|
||||
EOF
|
762
src/pkg/syscall/syscall_freebsd.go
Normal file
762
src/pkg/syscall/syscall_freebsd.go
Normal file
@ -0,0 +1,762 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// FreeBSD system calls.
|
||||
// This file is compiled as ordinary Go code,
|
||||
// but it is also input to mksyscall,
|
||||
// which parses the //sys lines and generates system call stubs.
|
||||
// Note that sometimes we use a lowercase //sys name and
|
||||
// wrap it in our own nicer implementation.
|
||||
|
||||
package syscall
|
||||
|
||||
import "unsafe"
|
||||
|
||||
const OS = "freebsd"
|
||||
|
||||
/*
|
||||
* Pseudo-system calls
|
||||
*/
|
||||
// The const provides a compile-time constant so clients
|
||||
// can adjust to whether there is a working Getwd and avoid
|
||||
// even linking this function into the binary. See ../os/getwd.go.
|
||||
const ImplementsGetwd = false
|
||||
|
||||
func Getwd() (string, int) { return "", ENOTSUP }
|
||||
|
||||
|
||||
/*
|
||||
* Wrapped
|
||||
*/
|
||||
|
||||
//sys getgroups(ngid int, gid *_Gid_t) (n int, errno int)
|
||||
//sys setgroups(ngid int, gid *_Gid_t) (errno int)
|
||||
|
||||
func Getgroups() (gids []int, errno int) {
|
||||
n, err := getgroups(0, nil);
|
||||
if err != 0 {
|
||||
return nil, errno
|
||||
}
|
||||
if n == 0 {
|
||||
return nil, 0
|
||||
}
|
||||
|
||||
// Sanity check group count. Max is 16 on BSD.
|
||||
if n < 0 || n > 1000 {
|
||||
return nil, EINVAL
|
||||
}
|
||||
|
||||
a := make([]_Gid_t, n);
|
||||
n, err = getgroups(n, &a[0]);
|
||||
if err != 0 {
|
||||
return nil, errno
|
||||
}
|
||||
gids = make([]int, n);
|
||||
for i, v := range a[0:n] {
|
||||
gids[i] = int(v)
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
func Setgroups(gids []int) (errno int) {
|
||||
if len(gids) == 0 {
|
||||
return setgroups(0, nil)
|
||||
}
|
||||
|
||||
a := make([]_Gid_t, len(gids));
|
||||
for i, v := range gids {
|
||||
a[i] = _Gid_t(v)
|
||||
}
|
||||
return setgroups(len(a), &a[0]);
|
||||
}
|
||||
|
||||
// Wait status is 7 bits at bottom, either 0 (exited),
|
||||
// 0x7F (stopped), or a signal number that caused an exit.
|
||||
// The 0x80 bit is whether there was a core dump.
|
||||
// An extra number (exit code, signal causing a stop)
|
||||
// is in the high bits.
|
||||
|
||||
type WaitStatus uint32
|
||||
|
||||
const (
|
||||
mask = 0x7F;
|
||||
core = 0x80;
|
||||
shift = 8;
|
||||
|
||||
exited = 0;
|
||||
stopped = 0x7F;
|
||||
)
|
||||
|
||||
func (w WaitStatus) Exited() bool { return w&mask == exited }
|
||||
|
||||
func (w WaitStatus) ExitStatus() int {
|
||||
if w&mask != exited {
|
||||
return -1
|
||||
}
|
||||
return int(w >> shift);
|
||||
}
|
||||
|
||||
func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }
|
||||
|
||||
func (w WaitStatus) Signal() int {
|
||||
sig := int(w & mask);
|
||||
if sig == stopped || sig == 0 {
|
||||
return -1
|
||||
}
|
||||
return sig;
|
||||
}
|
||||
|
||||
func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }
|
||||
|
||||
func (w WaitStatus) Stopped() bool { return w&mask == stopped && w>>shift != SIGSTOP }
|
||||
|
||||
func (w WaitStatus) Continued() bool { return w&mask == stopped && w>>shift == SIGSTOP }
|
||||
|
||||
func (w WaitStatus) StopSignal() int {
|
||||
if !w.Stopped() {
|
||||
return -1
|
||||
}
|
||||
return int(w>>shift) & 0xFF;
|
||||
}
|
||||
|
||||
func (w WaitStatus) TrapCause() int {
|
||||
// Darwin doesn't have trap causes
|
||||
return -1
|
||||
}
|
||||
|
||||
//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, errno int)
|
||||
|
||||
func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, errno int) {
|
||||
var status _C_int;
|
||||
wpid, errno = wait4(pid, &status, options, rusage);
|
||||
if wstatus != nil {
|
||||
*wstatus = WaitStatus(status)
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//sys pipe() (r int, w int, errno int)
|
||||
|
||||
func Pipe(p []int) (errno int) {
|
||||
if len(p) != 2 {
|
||||
return EINVAL
|
||||
}
|
||||
p[0], p[1], errno = pipe();
|
||||
return;
|
||||
}
|
||||
|
||||
func Sleep(ns int64) (errno int) {
|
||||
tv := NsecToTimeval(ns);
|
||||
return Select(0, nil, nil, nil, &tv);
|
||||
}
|
||||
|
||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, errno int)
|
||||
//sys bind(s int, addr uintptr, addrlen _Socklen) (errno int)
|
||||
//sys connect(s int, addr uintptr, addrlen _Socklen) (errno int)
|
||||
//sys socket(domain int, typ int, proto int) (fd int, errno int)
|
||||
//sys setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int)
|
||||
//sys getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
|
||||
//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
|
||||
|
||||
// For testing: clients can set this flag to force
|
||||
// creation of IPv6 sockets to return EAFNOSUPPORT.
|
||||
var SocketDisableIPv6 bool
|
||||
|
||||
type Sockaddr interface {
|
||||
sockaddr() (ptr uintptr, len _Socklen, errno int); // lowercase; only we can define Sockaddrs
|
||||
}
|
||||
|
||||
type SockaddrInet4 struct {
|
||||
Port int;
|
||||
Addr [4]byte;
|
||||
raw RawSockaddrInet4;
|
||||
}
|
||||
|
||||
func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) {
|
||||
if sa.Port < 0 || sa.Port > 0xFFFF {
|
||||
return 0, 0, EINVAL
|
||||
}
|
||||
sa.raw.Len = SizeofSockaddrInet4;
|
||||
sa.raw.Family = AF_INET;
|
||||
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port));
|
||||
p[0] = byte(sa.Port >> 8);
|
||||
p[1] = byte(sa.Port);
|
||||
for i := 0; i < len(sa.Addr); i++ {
|
||||
sa.raw.Addr[i] = sa.Addr[i]
|
||||
}
|
||||
return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), 0;
|
||||
}
|
||||
|
||||
type SockaddrInet6 struct {
|
||||
Port int;
|
||||
Addr [16]byte;
|
||||
raw RawSockaddrInet6;
|
||||
}
|
||||
|
||||
func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
|
||||
if sa.Port < 0 || sa.Port > 0xFFFF {
|
||||
return 0, 0, EINVAL
|
||||
}
|
||||
sa.raw.Len = SizeofSockaddrInet6;
|
||||
sa.raw.Family = AF_INET6;
|
||||
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port));
|
||||
p[0] = byte(sa.Port >> 8);
|
||||
p[1] = byte(sa.Port);
|
||||
for i := 0; i < len(sa.Addr); i++ {
|
||||
sa.raw.Addr[i] = sa.Addr[i]
|
||||
}
|
||||
return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), 0;
|
||||
}
|
||||
|
||||
type SockaddrUnix struct {
|
||||
Name string;
|
||||
raw RawSockaddrUnix;
|
||||
}
|
||||
|
||||
func (sa *SockaddrUnix) sockaddr() (uintptr, _Socklen, int) {
|
||||
name := sa.Name;
|
||||
n := len(name);
|
||||
if n >= len(sa.raw.Path) || n == 0 {
|
||||
return 0, 0, EINVAL
|
||||
}
|
||||
sa.raw.Len = byte(3 + n); // 2 for Family, Len; 1 for NUL
|
||||
sa.raw.Family = AF_UNIX;
|
||||
for i := 0; i < n; i++ {
|
||||
sa.raw.Path[i] = int8(name[i])
|
||||
}
|
||||
return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), 0;
|
||||
}
|
||||
|
||||
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) {
|
||||
switch rsa.Addr.Family {
|
||||
case AF_UNIX:
|
||||
pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa));
|
||||
if pp.Len < 3 || pp.Len > SizeofSockaddrUnix {
|
||||
return nil, EINVAL
|
||||
}
|
||||
sa := new(SockaddrUnix);
|
||||
n := int(pp.Len) - 3; // subtract leading Family, Len, terminating NUL
|
||||
for i := 0; i < n; i++ {
|
||||
if pp.Path[i] == 0 {
|
||||
// found early NUL; assume Len is overestimating
|
||||
n = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]));
|
||||
sa.Name = string(bytes[0:n]);
|
||||
return sa, 0;
|
||||
|
||||
case AF_INET:
|
||||
pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa));
|
||||
sa := new(SockaddrInet4);
|
||||
p := (*[2]byte)(unsafe.Pointer(&pp.Port));
|
||||
sa.Port = int(p[0])<<8 + int(p[1]);
|
||||
for i := 0; i < len(sa.Addr); i++ {
|
||||
sa.Addr[i] = pp.Addr[i]
|
||||
}
|
||||
return sa, 0;
|
||||
|
||||
case AF_INET6:
|
||||
pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa));
|
||||
sa := new(SockaddrInet6);
|
||||
p := (*[2]byte)(unsafe.Pointer(&pp.Port));
|
||||
sa.Port = int(p[0])<<8 + int(p[1]);
|
||||
for i := 0; i < len(sa.Addr); i++ {
|
||||
sa.Addr[i] = pp.Addr[i]
|
||||
}
|
||||
return sa, 0;
|
||||
}
|
||||
return nil, EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
func Accept(fd int) (nfd int, sa Sockaddr, errno int) {
|
||||
var rsa RawSockaddrAny;
|
||||
var len _Socklen = SizeofSockaddrAny;
|
||||
nfd, errno = accept(fd, &rsa, &len);
|
||||
if errno != 0 {
|
||||
return
|
||||
}
|
||||
sa, errno = anyToSockaddr(&rsa);
|
||||
if errno != 0 {
|
||||
Close(nfd);
|
||||
nfd = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
func Getsockname(fd int) (sa Sockaddr, errno int) {
|
||||
var rsa RawSockaddrAny;
|
||||
var len _Socklen = SizeofSockaddrAny;
|
||||
if errno = getsockname(fd, &rsa, &len); errno != 0 {
|
||||
return
|
||||
}
|
||||
return anyToSockaddr(&rsa);
|
||||
}
|
||||
|
||||
func Getpeername(fd int) (sa Sockaddr, errno int) {
|
||||
var rsa RawSockaddrAny;
|
||||
var len _Socklen = SizeofSockaddrAny;
|
||||
if errno = getpeername(fd, &rsa, &len); errno != 0 {
|
||||
return
|
||||
}
|
||||
return anyToSockaddr(&rsa);
|
||||
}
|
||||
|
||||
func Bind(fd int, sa Sockaddr) (errno int) {
|
||||
ptr, n, err := sa.sockaddr();
|
||||
if err != 0 {
|
||||
return err
|
||||
}
|
||||
return bind(fd, ptr, n);
|
||||
}
|
||||
|
||||
func Connect(fd int, sa Sockaddr) (errno int) {
|
||||
ptr, n, err := sa.sockaddr();
|
||||
if err != 0 {
|
||||
return err
|
||||
}
|
||||
return connect(fd, ptr, n);
|
||||
}
|
||||
|
||||
func Socket(domain, typ, proto int) (fd, errno int) {
|
||||
if domain == AF_INET6 && SocketDisableIPv6 {
|
||||
return -1, EAFNOSUPPORT
|
||||
}
|
||||
fd, errno = socket(domain, typ, proto);
|
||||
return;
|
||||
}
|
||||
|
||||
func SetsockoptInt(fd, level, opt int, value int) (errno int) {
|
||||
var n = int32(value);
|
||||
return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), 4);
|
||||
}
|
||||
|
||||
func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (errno int) {
|
||||
return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(tv)), unsafe.Sizeof(*tv))
|
||||
}
|
||||
|
||||
func SetsockoptLinger(fd, level, opt int, l *Linger) (errno int) {
|
||||
return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(l)), unsafe.Sizeof(*l))
|
||||
}
|
||||
|
||||
|
||||
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, errno int)
|
||||
|
||||
func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, errno int) {
|
||||
var rsa RawSockaddrAny;
|
||||
var len _Socklen = SizeofSockaddrAny;
|
||||
if n, errno = recvfrom(fd, p, flags, &rsa, &len); errno != 0 {
|
||||
return
|
||||
}
|
||||
from, errno = anyToSockaddr(&rsa);
|
||||
return;
|
||||
}
|
||||
|
||||
//sys sendto(s int, buf []byte, flags int, to uintptr, addrlen _Socklen) (errno int)
|
||||
|
||||
func Sendto(fd int, p []byte, flags int, to Sockaddr) (errno int) {
|
||||
ptr, n, err := to.sockaddr();
|
||||
if err != 0 {
|
||||
return err
|
||||
}
|
||||
return sendto(fd, p, flags, ptr, n);
|
||||
}
|
||||
|
||||
//sys kevent(kq int, change uintptr, nchange int, event uintptr, nevent int, timeout *Timespec) (n int, errno int)
|
||||
|
||||
func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, errno int) {
|
||||
var change, event uintptr;
|
||||
if len(changes) > 0 {
|
||||
change = uintptr(unsafe.Pointer(&changes[0]))
|
||||
}
|
||||
if len(events) > 0 {
|
||||
event = uintptr(unsafe.Pointer(&events[0]))
|
||||
}
|
||||
return kevent(kq, change, len(changes), event, len(events), timeout);
|
||||
}
|
||||
|
||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (errno int) = SYS___SYSCTL
|
||||
|
||||
// Translate "kern.hostname" to []_C_int{0,1,2,3}.
|
||||
func nametomib(name string) (mib []_C_int, errno int) {
|
||||
const CTL_MAXNAME = 12;
|
||||
const siz = uintptr(unsafe.Sizeof(mib[0]));
|
||||
|
||||
// NOTE(rsc): It seems strange to set the buffer to have
|
||||
// size CTL_MAXNAME+2 but use only CTL_MAXNAME
|
||||
// as the size. I don't know why the +2 is here, but the
|
||||
// kernel uses +2 for its own implementation of this function.
|
||||
// I am scared that if we don't include the +2 here, the kernel
|
||||
// will silently write 2 words farther than we specify
|
||||
// and we'll get memory corruption.
|
||||
var buf [CTL_MAXNAME + 2]_C_int;
|
||||
n := uintptr(CTL_MAXNAME) * siz;
|
||||
|
||||
p := (*byte)(unsafe.Pointer(&buf[0]));
|
||||
bytes := StringByteSlice(name);
|
||||
|
||||
// Magic sysctl: "setting" 0.3 to a string name
|
||||
// lets you read back the array of integers form.
|
||||
if errno = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); errno != 0 {
|
||||
return nil, errno
|
||||
}
|
||||
return buf[0 : n/siz], 0;
|
||||
}
|
||||
|
||||
func Sysctl(name string) (value string, errno int) {
|
||||
// Translate name to mib number.
|
||||
mib, errno := nametomib(name);
|
||||
if errno != 0 {
|
||||
return "", errno
|
||||
}
|
||||
|
||||
// Find size.
|
||||
n := uintptr(0);
|
||||
if errno = sysctl(mib, nil, &n, nil, 0); errno != 0 {
|
||||
return "", errno
|
||||
}
|
||||
if n == 0 {
|
||||
return "", 0
|
||||
}
|
||||
|
||||
// Read into buffer of that size.
|
||||
buf := make([]byte, n);
|
||||
if errno = sysctl(mib, &buf[0], &n, nil, 0); errno != 0 {
|
||||
return "", errno
|
||||
}
|
||||
|
||||
// Throw away terminating NUL.
|
||||
if n > 0 && buf[n-1] == '\x00' {
|
||||
n--
|
||||
}
|
||||
return string(buf[0:n]), 0;
|
||||
}
|
||||
|
||||
func SysctlUint32(name string) (value uint32, errno int) {
|
||||
// Translate name to mib number.
|
||||
mib, errno := nametomib(name);
|
||||
if errno != 0 {
|
||||
return 0, errno
|
||||
}
|
||||
|
||||
// Read into buffer of that size.
|
||||
n := uintptr(4);
|
||||
buf := make([]byte, 4);
|
||||
if errno = sysctl(mib, &buf[0], &n, nil, 0); errno != 0 {
|
||||
return 0, errno
|
||||
}
|
||||
if n != 4 {
|
||||
return 0, EIO
|
||||
}
|
||||
return *(*uint32)(unsafe.Pointer(&buf[0])), 0;
|
||||
}
|
||||
|
||||
// TODO: wrap
|
||||
// Acct(name nil-string) (errno int)
|
||||
// Futimes(fd int, timeval *Timeval) (errno int) // Pointer to 2 timevals!
|
||||
// Gethostuuid(uuid *byte, timeout *Timespec) (errno int)
|
||||
// Getsockopt(s int, level int, name int, val *byte, vallen *int) (errno int)
|
||||
// Madvise(addr *byte, len int, behav int) (errno int)
|
||||
// Mprotect(addr *byte, len int, prot int) (errno int)
|
||||
// Msync(addr *byte, len int, flags int) (errno int)
|
||||
// Munmap(addr *byte, len int) (errno int)
|
||||
// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, errno int)
|
||||
// Recvmsg(s int, msg *Msghdr, flags int) (n int, errno int)
|
||||
// Sendmsg(s int, msg *Msghdr, flags int) (n int, errno int)
|
||||
// Utimes(path string, timeval *Timeval) (errno int) // Pointer to 2 timevals!
|
||||
//sys fcntl(fd int, cmd int, arg int) (val int, errno int)
|
||||
|
||||
|
||||
/*
|
||||
* Exposed directly
|
||||
*/
|
||||
//sys Access(path string, flags int) (errno int)
|
||||
//sys Adjtime(delta *Timeval, olddelta *Timeval) (errno int)
|
||||
//sys Chdir(path string) (errno int)
|
||||
//sys Chflags(path string, flags int) (errno int)
|
||||
//sys Chmod(path string, mode int) (errno int)
|
||||
//sys Chown(path string, uid int, gid int) (errno int)
|
||||
//sys Chroot(path string) (errno int)
|
||||
//sys Close(fd int) (errno int)
|
||||
//sys Dup(fd int) (nfd int, errno int)
|
||||
//sys Dup2(from int, to int) (errno int)
|
||||
//sys Exit(code int)
|
||||
//sys Fchdir(fd int) (errno int)
|
||||
//sys Fchflags(path string, flags int) (errno int)
|
||||
//sys Fchmod(fd int, mode int) (errno int)
|
||||
//sys Fchown(fd int, uid int, gid int) (errno int)
|
||||
//sys Flock(fd int, how int) (errno int)
|
||||
//sys Fpathconf(fd int, name int) (val int, errno int)
|
||||
//sys Fstat(fd int, stat *Stat_t) (errno int)
|
||||
//sys Fstatfs(fd int, stat *Statfs_t) (errno int)
|
||||
//sys Fsync(fd int) (errno int)
|
||||
//sys Ftruncate(fd int, length int64) (errno int)
|
||||
//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, errno int)
|
||||
//sys Getdtablesize() (size int)
|
||||
//sys Getegid() (egid int)
|
||||
//sys Geteuid() (uid int)
|
||||
//sys Getfsstat(buf []Statfs_t, flags int) (n int, errno int)
|
||||
//sys Getgid() (gid int)
|
||||
//sys Getpgid(pid int) (pgid int, errno int)
|
||||
//sys Getpgrp() (pgrp int)
|
||||
//sys Getpid() (pid int)
|
||||
//sys Getppid() (ppid int)
|
||||
//sys Getpriority(which int, who int) (prio int, errno int)
|
||||
//sys Getrlimit(which int, lim *Rlimit) (errno int)
|
||||
//sys Getrusage(who int, rusage *Rusage) (errno int)
|
||||
//sys Getsid(pid int) (sid int, errno int)
|
||||
//sys Gettimeofday(tv *Timeval) (errno int)
|
||||
//sys Getuid() (uid int)
|
||||
//sys Issetugid() (tainted bool)
|
||||
//sys Kill(pid int, signum int, posix int) (errno int)
|
||||
//sys Kqueue() (fd int, errno int)
|
||||
//sys Lchown(path string, uid int, gid int) (errno int)
|
||||
//sys Link(path string, link string) (errno int)
|
||||
//sys Listen(s int, backlog int) (errno int)
|
||||
//sys Lstat(path string, stat *Stat_t) (errno int)
|
||||
//sys Mkdir(path string, mode int) (errno int)
|
||||
//sys Mkfifo(path string, mode int) (errno int)
|
||||
//sys Mknod(path string, mode int, dev int) (errno int)
|
||||
//sys Open(path string, mode int, perm int) (fd int, errno int)
|
||||
//sys Pathconf(path string, name int) (val int, errno int)
|
||||
//sys Pread(fd int, p []byte, offset int64) (n int, errno int)
|
||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, errno int)
|
||||
//sys Read(fd int, p []byte) (n int, errno int)
|
||||
//sys Readlink(path string, buf []byte) (n int, errno int)
|
||||
//sys Rename(from string, to string) (errno int)
|
||||
//sys Revoke(path string) (errno int)
|
||||
//sys Rmdir(path string) (errno int)
|
||||
//sys Seek(fd int, offset int64, whence int) (newoffset int64, errno int) = SYS_LSEEK
|
||||
//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (errno int)
|
||||
//sys Setegid(egid int) (errno int)
|
||||
//sys Seteuid(euid int) (errno int)
|
||||
//sys Setgid(gid int) (errno int)
|
||||
//sys Setlogin(name string) (errno int)
|
||||
//sys Setpgid(pid int, pgid int) (errno int)
|
||||
//sys Setpriority(which int, who int, prio int) (errno int)
|
||||
//sys Setregid(rgid int, egid int) (errno int)
|
||||
//sys Setreuid(ruid int, euid int) (errno int)
|
||||
//sys Setrlimit(which int, lim *Rlimit) (errno int)
|
||||
//sys Setsid() (pid int, errno int)
|
||||
//sys Settimeofday(tp *Timeval) (errno int)
|
||||
//sys Setuid(uid int) (errno int)
|
||||
//sys Stat(path string, stat *Stat_t) (errno int)
|
||||
//sys Statfs(path string, stat *Statfs_t) (errno int)
|
||||
//sys Symlink(path string, link string) (errno int)
|
||||
//sys Sync() (errno int)
|
||||
//sys Truncate(path string, length int64) (errno int)
|
||||
//sys Umask(newmask int) (errno int)
|
||||
//sys Undelete(path string) (errno int)
|
||||
//sys Unlink(path string) (errno int)
|
||||
//sys Unmount(path string, flags int) (errno int)
|
||||
//sys Write(fd int, p []byte) (n int, errno int)
|
||||
//sys read(fd int, buf *byte, nbuf int) (n int, errno int)
|
||||
//sys write(fd int, buf *byte, nbuf int) (n int, errno int)
|
||||
|
||||
|
||||
/*
|
||||
* Unimplemented
|
||||
*/
|
||||
// Profil
|
||||
// Sigaction
|
||||
// Sigprocmask
|
||||
// Getlogin
|
||||
// Sigpending
|
||||
// Sigaltstack
|
||||
// Ioctl
|
||||
// Reboot
|
||||
// Execve
|
||||
// Vfork
|
||||
// Sbrk
|
||||
// Sstk
|
||||
// Ovadvise
|
||||
// Mincore
|
||||
// Setitimer
|
||||
// Swapon
|
||||
// Select
|
||||
// Sigsuspend
|
||||
// Readv
|
||||
// Writev
|
||||
// Nfssvc
|
||||
// Getfh
|
||||
// Quotactl
|
||||
// Mount
|
||||
// Csops
|
||||
// Waitid
|
||||
// Add_profil
|
||||
// Kdebug_trace
|
||||
// Sigreturn
|
||||
// Mmap
|
||||
// Mlock
|
||||
// Munlock
|
||||
// Atsocket
|
||||
// Kqueue_from_portset_np
|
||||
// Kqueue_portset
|
||||
// Getattrlist
|
||||
// Setattrlist
|
||||
// Getdirentriesattr
|
||||
// Searchfs
|
||||
// Delete
|
||||
// Copyfile
|
||||
// Poll
|
||||
// Watchevent
|
||||
// Waitevent
|
||||
// Modwatch
|
||||
// Getxattr
|
||||
// Fgetxattr
|
||||
// Setxattr
|
||||
// Fsetxattr
|
||||
// Removexattr
|
||||
// Fremovexattr
|
||||
// Listxattr
|
||||
// Flistxattr
|
||||
// Fsctl
|
||||
// Initgroups
|
||||
// Posix_spawn
|
||||
// Nfsclnt
|
||||
// Fhopen
|
||||
// Minherit
|
||||
// Semsys
|
||||
// Msgsys
|
||||
// Shmsys
|
||||
// Semctl
|
||||
// Semget
|
||||
// Semop
|
||||
// Msgctl
|
||||
// Msgget
|
||||
// Msgsnd
|
||||
// Msgrcv
|
||||
// Shmat
|
||||
// Shmctl
|
||||
// Shmdt
|
||||
// Shmget
|
||||
// Shm_open
|
||||
// Shm_unlink
|
||||
// Sem_open
|
||||
// Sem_close
|
||||
// Sem_unlink
|
||||
// Sem_wait
|
||||
// Sem_trywait
|
||||
// Sem_post
|
||||
// Sem_getvalue
|
||||
// Sem_init
|
||||
// Sem_destroy
|
||||
// Open_extended
|
||||
// Umask_extended
|
||||
// Stat_extended
|
||||
// Lstat_extended
|
||||
// Fstat_extended
|
||||
// Chmod_extended
|
||||
// Fchmod_extended
|
||||
// Access_extended
|
||||
// Settid
|
||||
// Gettid
|
||||
// Setsgroups
|
||||
// Getsgroups
|
||||
// Setwgroups
|
||||
// Getwgroups
|
||||
// Mkfifo_extended
|
||||
// Mkdir_extended
|
||||
// Identitysvc
|
||||
// Shared_region_check_np
|
||||
// Shared_region_map_np
|
||||
// __pthread_mutex_destroy
|
||||
// __pthread_mutex_init
|
||||
// __pthread_mutex_lock
|
||||
// __pthread_mutex_trylock
|
||||
// __pthread_mutex_unlock
|
||||
// __pthread_cond_init
|
||||
// __pthread_cond_destroy
|
||||
// __pthread_cond_broadcast
|
||||
// __pthread_cond_signal
|
||||
// Setsid_with_pid
|
||||
// __pthread_cond_timedwait
|
||||
// Aio_fsync
|
||||
// Aio_return
|
||||
// Aio_suspend
|
||||
// Aio_cancel
|
||||
// Aio_error
|
||||
// Aio_read
|
||||
// Aio_write
|
||||
// Lio_listio
|
||||
// __pthread_cond_wait
|
||||
// Iopolicysys
|
||||
// Mlockall
|
||||
// Munlockall
|
||||
// __pthread_kill
|
||||
// __pthread_sigmask
|
||||
// __sigwait
|
||||
// __disable_threadsignal
|
||||
// __pthread_markcancel
|
||||
// __pthread_canceled
|
||||
// __semwait_signal
|
||||
// Proc_info
|
||||
// Sendfile
|
||||
// Stat64_extended
|
||||
// Lstat64_extended
|
||||
// Fstat64_extended
|
||||
// __pthread_chdir
|
||||
// __pthread_fchdir
|
||||
// Audit
|
||||
// Auditon
|
||||
// Getauid
|
||||
// Setauid
|
||||
// Getaudit
|
||||
// Setaudit
|
||||
// Getaudit_addr
|
||||
// Setaudit_addr
|
||||
// Auditctl
|
||||
// Bsdthread_create
|
||||
// Bsdthread_terminate
|
||||
// Stack_snapshot
|
||||
// Bsdthread_register
|
||||
// Workq_open
|
||||
// Workq_ops
|
||||
// __mac_execve
|
||||
// __mac_syscall
|
||||
// __mac_get_file
|
||||
// __mac_set_file
|
||||
// __mac_get_link
|
||||
// __mac_set_link
|
||||
// __mac_get_proc
|
||||
// __mac_set_proc
|
||||
// __mac_get_fd
|
||||
// __mac_set_fd
|
||||
// __mac_get_pid
|
||||
// __mac_get_lcid
|
||||
// __mac_get_lctx
|
||||
// __mac_set_lctx
|
||||
// Setlcid
|
||||
// Read_nocancel
|
||||
// Write_nocancel
|
||||
// Open_nocancel
|
||||
// Close_nocancel
|
||||
// Wait4_nocancel
|
||||
// Recvmsg_nocancel
|
||||
// Sendmsg_nocancel
|
||||
// Recvfrom_nocancel
|
||||
// Accept_nocancel
|
||||
// Msync_nocancel
|
||||
// Fcntl_nocancel
|
||||
// Select_nocancel
|
||||
// Fsync_nocancel
|
||||
// Connect_nocancel
|
||||
// Sigsuspend_nocancel
|
||||
// Readv_nocancel
|
||||
// Writev_nocancel
|
||||
// Sendto_nocancel
|
||||
// Pread_nocancel
|
||||
// Pwrite_nocancel
|
||||
// Waitid_nocancel
|
||||
// Poll_nocancel
|
||||
// Msgsnd_nocancel
|
||||
// Msgrcv_nocancel
|
||||
// Sem_wait_nocancel
|
||||
// Aio_suspend_nocancel
|
||||
// __sigwait_nocancel
|
||||
// __semwait_signal_nocancel
|
||||
// __mac_mount
|
||||
// __mac_get_mount
|
||||
// __mac_getfsstat
|
30
src/pkg/syscall/syscall_freebsd_amd64.go
Normal file
30
src/pkg/syscall/syscall_freebsd_amd64.go
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package syscall
|
||||
|
||||
func Getpagesize() int { return 4096 }
|
||||
|
||||
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
|
||||
|
||||
func NsecToTimespec(nsec int64) (ts Timespec) {
|
||||
ts.Sec = nsec / 1e9;
|
||||
ts.Nsec = nsec % 1e9;
|
||||
return;
|
||||
}
|
||||
|
||||
func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }
|
||||
|
||||
func NsecToTimeval(nsec int64) (tv Timeval) {
|
||||
nsec += 999; // round up to microsecond
|
||||
tv.Usec = nsec % 1e9 / 1e3;
|
||||
tv.Sec = int64(nsec / 1e9);
|
||||
return;
|
||||
}
|
||||
|
||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
||||
k.Ident = uint64(fd);
|
||||
k.Filter = int16(mode);
|
||||
k.Flags = uint16(flags);
|
||||
}
|
146
src/pkg/syscall/types_freebsd.c
Normal file
146
src/pkg/syscall/types_freebsd.c
Normal file
@ -0,0 +1,146 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
/*
|
||||
Input to godefs. See also mkerrors.sh and mkall.sh
|
||||
*/
|
||||
|
||||
#define KERNEL
|
||||
#include <sys/cdefs.h>
|
||||
#include <dirent.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/event.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/signal.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
// Machine characteristics; for internal use.
|
||||
|
||||
enum
|
||||
{
|
||||
$sizeofPtr = sizeof(void*),
|
||||
$sizeofShort = sizeof(short),
|
||||
$sizeofInt = sizeof(int),
|
||||
$sizeofLong = sizeof(long),
|
||||
$sizeofLongLong = sizeof(long long),
|
||||
};
|
||||
|
||||
|
||||
// Basic types
|
||||
|
||||
typedef short $_C_short;
|
||||
typedef int $_C_int;
|
||||
typedef long $_C_long;
|
||||
typedef long long $_C_long_long;
|
||||
|
||||
// Time
|
||||
|
||||
typedef struct timespec $Timespec;
|
||||
typedef struct timeval $Timeval;
|
||||
|
||||
// Processes
|
||||
|
||||
typedef struct rusage $Rusage;
|
||||
typedef struct rlimit $Rlimit;
|
||||
|
||||
typedef gid_t $_Gid_t;
|
||||
|
||||
// Files
|
||||
|
||||
enum
|
||||
{
|
||||
$O_CLOEXEC = 0, // not supported
|
||||
};
|
||||
|
||||
enum
|
||||
{ // Directory mode bits
|
||||
$S_IFMT = S_IFMT,
|
||||
$S_IFIFO = S_IFIFO,
|
||||
$S_IFCHR = S_IFCHR,
|
||||
$S_IFDIR = S_IFDIR,
|
||||
$S_IFBLK = S_IFBLK,
|
||||
$S_IFREG = S_IFREG,
|
||||
$S_IFLNK = S_IFLNK,
|
||||
$S_IFSOCK = S_IFSOCK,
|
||||
$S_ISUID = S_ISUID,
|
||||
$S_ISGID = S_ISGID,
|
||||
$S_ISVTX = S_ISVTX,
|
||||
$S_IRUSR = S_IRUSR,
|
||||
$S_IWUSR = S_IWUSR,
|
||||
$S_IXUSR = S_IXUSR,
|
||||
};
|
||||
|
||||
typedef struct stat $Stat_t;
|
||||
typedef struct statfs $Statfs_t;
|
||||
typedef struct flock $Flock_t;
|
||||
|
||||
typedef struct dirent $Dirent;
|
||||
|
||||
// Wait status.
|
||||
|
||||
// Sockets
|
||||
|
||||
union sockaddr_all {
|
||||
struct sockaddr s1; // this one gets used for fields
|
||||
struct sockaddr_in s2; // these pad it out
|
||||
struct sockaddr_in6 s3;
|
||||
struct sockaddr_un s4;
|
||||
};
|
||||
|
||||
struct sockaddr_any {
|
||||
struct sockaddr addr;
|
||||
char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
|
||||
};
|
||||
|
||||
typedef struct sockaddr_in $RawSockaddrInet4;
|
||||
typedef struct sockaddr_in6 $RawSockaddrInet6;
|
||||
typedef struct sockaddr_un $RawSockaddrUnix;
|
||||
typedef struct sockaddr $RawSockaddr;
|
||||
typedef struct sockaddr_any $RawSockaddrAny;
|
||||
typedef socklen_t $_Socklen;
|
||||
typedef struct linger $Linger;
|
||||
typedef struct iovec $Iovec;
|
||||
typedef struct msghdr $Msghdr;
|
||||
typedef struct cmsghdr $Cmsghdr;
|
||||
|
||||
enum {
|
||||
$SizeofSockaddrInet4 = sizeof(struct sockaddr_in),
|
||||
$SizeofSockaddrInet6 = sizeof(struct sockaddr_in6),
|
||||
$SizeofSockaddrAny = sizeof(struct sockaddr_any),
|
||||
$SizeofSockaddrUnix = sizeof(struct sockaddr_un),
|
||||
$SizeofLinger = sizeof(struct linger),
|
||||
$SizeofMsghdr = sizeof(struct msghdr),
|
||||
$SizeofCmsghdr = sizeof(struct cmsghdr),
|
||||
};
|
||||
|
||||
// Ptrace requests
|
||||
enum {
|
||||
$PTRACE_TRACEME = PT_TRACE_ME,
|
||||
$PTRACE_CONT = PT_CONTINUE,
|
||||
$PTRACE_KILL = PT_KILL,
|
||||
};
|
||||
|
||||
|
||||
// Events (kqueue, kevent)
|
||||
|
||||
typedef struct kevent $Kevent_t;
|
||||
|
||||
// Select
|
||||
|
||||
typedef fd_set $FdSet;
|
628
src/pkg/syscall/zerrors_freebsd_amd64.go
Normal file
628
src/pkg/syscall/zerrors_freebsd_amd64.go
Normal file
@ -0,0 +1,628 @@
|
||||
// mkerrors.sh
|
||||
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
||||
|
||||
// godefs -gsyscall _const.c
|
||||
|
||||
// MACHINE GENERATED - DO NOT EDIT.
|
||||
|
||||
package syscall
|
||||
|
||||
// Constants
|
||||
const (
|
||||
AF_APPLETALK = 0x10;
|
||||
AF_ARP = 0x23;
|
||||
AF_ATM = 0x1e;
|
||||
AF_BLUETOOTH = 0x24;
|
||||
AF_CCITT = 0xa;
|
||||
AF_CHAOS = 0x5;
|
||||
AF_CNT = 0x15;
|
||||
AF_COIP = 0x14;
|
||||
AF_DATAKIT = 0x9;
|
||||
AF_DECnet = 0xc;
|
||||
AF_DLI = 0xd;
|
||||
AF_E164 = 0x1a;
|
||||
AF_ECMA = 0x8;
|
||||
AF_HYLINK = 0xf;
|
||||
AF_IEEE80211 = 0x25;
|
||||
AF_IMPLINK = 0x3;
|
||||
AF_INET = 0x2;
|
||||
AF_INET6 = 0x1c;
|
||||
AF_IPX = 0x17;
|
||||
AF_ISDN = 0x1a;
|
||||
AF_ISO = 0x7;
|
||||
AF_LAT = 0xe;
|
||||
AF_LINK = 0x12;
|
||||
AF_LOCAL = 0x1;
|
||||
AF_MAX = 0x26;
|
||||
AF_NATM = 0x1d;
|
||||
AF_NETBIOS = 0x6;
|
||||
AF_NETGRAPH = 0x20;
|
||||
AF_OSI = 0x7;
|
||||
AF_PUP = 0x4;
|
||||
AF_ROUTE = 0x11;
|
||||
AF_SCLUSTER = 0x22;
|
||||
AF_SIP = 0x18;
|
||||
AF_SLOW = 0x21;
|
||||
AF_SNA = 0xb;
|
||||
AF_UNIX = 0x1;
|
||||
AF_UNSPEC = 0;
|
||||
AF_VENDOR00 = 0x27;
|
||||
AF_VENDOR01 = 0x29;
|
||||
AF_VENDOR02 = 0x2b;
|
||||
AF_VENDOR03 = 0x2d;
|
||||
AF_VENDOR04 = 0x2f;
|
||||
AF_VENDOR05 = 0x31;
|
||||
AF_VENDOR06 = 0x33;
|
||||
AF_VENDOR07 = 0x35;
|
||||
AF_VENDOR08 = 0x37;
|
||||
AF_VENDOR09 = 0x39;
|
||||
AF_VENDOR10 = 0x3b;
|
||||
AF_VENDOR11 = 0x3d;
|
||||
AF_VENDOR12 = 0x3f;
|
||||
AF_VENDOR13 = 0x41;
|
||||
AF_VENDOR14 = 0x43;
|
||||
AF_VENDOR15 = 0x45;
|
||||
AF_VENDOR16 = 0x47;
|
||||
AF_VENDOR17 = 0x49;
|
||||
AF_VENDOR18 = 0x4b;
|
||||
AF_VENDOR19 = 0x4d;
|
||||
AF_VENDOR20 = 0x4f;
|
||||
AF_VENDOR21 = 0x51;
|
||||
AF_VENDOR22 = 0x53;
|
||||
AF_VENDOR23 = 0x55;
|
||||
AF_VENDOR24 = 0x57;
|
||||
AF_VENDOR25 = 0x59;
|
||||
AF_VENDOR26 = 0x5b;
|
||||
AF_VENDOR27 = 0x5d;
|
||||
AF_VENDOR28 = 0x5f;
|
||||
AF_VENDOR29 = 0x61;
|
||||
AF_VENDOR30 = 0x63;
|
||||
AF_VENDOR31 = 0x65;
|
||||
AF_VENDOR32 = 0x67;
|
||||
AF_VENDOR33 = 0x69;
|
||||
AF_VENDOR34 = 0x6b;
|
||||
AF_VENDOR35 = 0x6d;
|
||||
AF_VENDOR36 = 0x6f;
|
||||
AF_VENDOR37 = 0x71;
|
||||
AF_VENDOR38 = 0x73;
|
||||
AF_VENDOR39 = 0x75;
|
||||
AF_VENDOR40 = 0x77;
|
||||
AF_VENDOR41 = 0x79;
|
||||
AF_VENDOR42 = 0x7b;
|
||||
AF_VENDOR43 = 0x7d;
|
||||
AF_VENDOR44 = 0x7f;
|
||||
AF_VENDOR45 = 0x81;
|
||||
AF_VENDOR46 = 0x83;
|
||||
AF_VENDOR47 = 0x85;
|
||||
E2BIG = 0x7;
|
||||
EACCES = 0xd;
|
||||
EADDRINUSE = 0x30;
|
||||
EADDRNOTAVAIL = 0x31;
|
||||
EAFNOSUPPORT = 0x2f;
|
||||
EAGAIN = 0x23;
|
||||
EALREADY = 0x25;
|
||||
EAUTH = 0x50;
|
||||
EBADF = 0x9;
|
||||
EBADMSG = 0x59;
|
||||
EBADRPC = 0x48;
|
||||
EBUSY = 0x10;
|
||||
ECANCELED = 0x55;
|
||||
ECHILD = 0xa;
|
||||
ECONNABORTED = 0x35;
|
||||
ECONNREFUSED = 0x3d;
|
||||
ECONNRESET = 0x36;
|
||||
EDEADLK = 0xb;
|
||||
EDESTADDRREQ = 0x27;
|
||||
EDOM = 0x21;
|
||||
EDOOFUS = 0x58;
|
||||
EDQUOT = 0x45;
|
||||
EEXIST = 0x11;
|
||||
EFAULT = 0xe;
|
||||
EFBIG = 0x1b;
|
||||
EFTYPE = 0x4f;
|
||||
EHOSTDOWN = 0x40;
|
||||
EHOSTUNREACH = 0x41;
|
||||
EIDRM = 0x52;
|
||||
EILSEQ = 0x56;
|
||||
EINPROGRESS = 0x24;
|
||||
EINTR = 0x4;
|
||||
EINVAL = 0x16;
|
||||
EIO = 0x5;
|
||||
EISCONN = 0x38;
|
||||
EISDIR = 0x15;
|
||||
ELAST = 0x5c;
|
||||
ELOOP = 0x3e;
|
||||
EMFILE = 0x18;
|
||||
EMLINK = 0x1f;
|
||||
EMSGSIZE = 0x28;
|
||||
EMULTIHOP = 0x5a;
|
||||
ENAMETOOLONG = 0x3f;
|
||||
ENEEDAUTH = 0x51;
|
||||
ENETDOWN = 0x32;
|
||||
ENETRESET = 0x34;
|
||||
ENETUNREACH = 0x33;
|
||||
ENFILE = 0x17;
|
||||
ENOATTR = 0x57;
|
||||
ENOBUFS = 0x37;
|
||||
ENODEV = 0x13;
|
||||
ENOENT = 0x2;
|
||||
ENOEXEC = 0x8;
|
||||
ENOLCK = 0x4d;
|
||||
ENOLINK = 0x5b;
|
||||
ENOMEM = 0xc;
|
||||
ENOMSG = 0x53;
|
||||
ENOPROTOOPT = 0x2a;
|
||||
ENOSPC = 0x1c;
|
||||
ENOSYS = 0x4e;
|
||||
ENOTBLK = 0xf;
|
||||
ENOTCONN = 0x39;
|
||||
ENOTDIR = 0x14;
|
||||
ENOTEMPTY = 0x42;
|
||||
ENOTSOCK = 0x26;
|
||||
ENOTSUP = 0x2d;
|
||||
ENOTTY = 0x19;
|
||||
ENXIO = 0x6;
|
||||
EOPNOTSUPP = 0x2d;
|
||||
EOVERFLOW = 0x54;
|
||||
EPERM = 0x1;
|
||||
EPFNOSUPPORT = 0x2e;
|
||||
EPIPE = 0x20;
|
||||
EPROCLIM = 0x43;
|
||||
EPROCUNAVAIL = 0x4c;
|
||||
EPROGMISMATCH = 0x4b;
|
||||
EPROGUNAVAIL = 0x4a;
|
||||
EPROTO = 0x5c;
|
||||
EPROTONOSUPPORT = 0x2b;
|
||||
EPROTOTYPE = 0x29;
|
||||
ERANGE = 0x22;
|
||||
EREMOTE = 0x47;
|
||||
EROFS = 0x1e;
|
||||
ERPCMISMATCH = 0x49;
|
||||
ESHUTDOWN = 0x3a;
|
||||
ESOCKTNOSUPPORT = 0x2c;
|
||||
ESPIPE = 0x1d;
|
||||
ESRCH = 0x3;
|
||||
ESTALE = 0x46;
|
||||
ETIMEDOUT = 0x3c;
|
||||
ETOOMANYREFS = 0x3b;
|
||||
ETXTBSY = 0x1a;
|
||||
EUSERS = 0x44;
|
||||
EVFILT_AIO = -0x3;
|
||||
EVFILT_FS = -0x9;
|
||||
EVFILT_LIO = -0xa;
|
||||
EVFILT_NETDEV = -0x8;
|
||||
EVFILT_PROC = -0x5;
|
||||
EVFILT_READ = -0x1;
|
||||
EVFILT_SIGNAL = -0x6;
|
||||
EVFILT_SYSCOUNT = 0xa;
|
||||
EVFILT_TIMER = -0x7;
|
||||
EVFILT_VNODE = -0x4;
|
||||
EVFILT_WRITE = -0x2;
|
||||
EV_ADD = 0x1;
|
||||
EV_CLEAR = 0x20;
|
||||
EV_DELETE = 0x2;
|
||||
EV_DISABLE = 0x8;
|
||||
EV_ENABLE = 0x4;
|
||||
EV_EOF = 0x8000;
|
||||
EV_ERROR = 0x4000;
|
||||
EV_FLAG1 = 0x2000;
|
||||
EV_ONESHOT = 0x10;
|
||||
EV_SYSFLAGS = 0xf000;
|
||||
EWOULDBLOCK = 0x23;
|
||||
EXDEV = 0x12;
|
||||
FD_CLOEXEC = 0x1;
|
||||
FD_SETSIZE = 0x400;
|
||||
F_CANCEL = 0x5;
|
||||
F_DUP2FD = 0xa;
|
||||
F_DUPFD = 0;
|
||||
F_GETFD = 0x1;
|
||||
F_GETFL = 0x3;
|
||||
F_GETLK = 0xb;
|
||||
F_GETOWN = 0x5;
|
||||
F_OGETLK = 0x7;
|
||||
F_OSETLK = 0x8;
|
||||
F_OSETLKW = 0x9;
|
||||
F_RDLCK = 0x1;
|
||||
F_SETFD = 0x2;
|
||||
F_SETFL = 0x4;
|
||||
F_SETLK = 0xc;
|
||||
F_SETLKW = 0xd;
|
||||
F_SETLK_REMOTE = 0xe;
|
||||
F_SETOWN = 0x6;
|
||||
F_UNLCK = 0x2;
|
||||
F_UNLCKSYS = 0x4;
|
||||
F_WRLCK = 0x3;
|
||||
IPPROTO_3PC = 0x22;
|
||||
IPPROTO_ADFS = 0x44;
|
||||
IPPROTO_AH = 0x33;
|
||||
IPPROTO_AHIP = 0x3d;
|
||||
IPPROTO_APES = 0x63;
|
||||
IPPROTO_ARGUS = 0xd;
|
||||
IPPROTO_AX25 = 0x5d;
|
||||
IPPROTO_BHA = 0x31;
|
||||
IPPROTO_BLT = 0x1e;
|
||||
IPPROTO_BRSATMON = 0x4c;
|
||||
IPPROTO_CARP = 0x70;
|
||||
IPPROTO_CFTP = 0x3e;
|
||||
IPPROTO_CHAOS = 0x10;
|
||||
IPPROTO_CMTP = 0x26;
|
||||
IPPROTO_CPHB = 0x49;
|
||||
IPPROTO_CPNX = 0x48;
|
||||
IPPROTO_DDP = 0x25;
|
||||
IPPROTO_DGP = 0x56;
|
||||
IPPROTO_DIVERT = 0x102;
|
||||
IPPROTO_DONE = 0x101;
|
||||
IPPROTO_DSTOPTS = 0x3c;
|
||||
IPPROTO_EGP = 0x8;
|
||||
IPPROTO_EMCON = 0xe;
|
||||
IPPROTO_ENCAP = 0x62;
|
||||
IPPROTO_EON = 0x50;
|
||||
IPPROTO_ESP = 0x32;
|
||||
IPPROTO_ETHERIP = 0x61;
|
||||
IPPROTO_FRAGMENT = 0x2c;
|
||||
IPPROTO_GGP = 0x3;
|
||||
IPPROTO_GMTP = 0x64;
|
||||
IPPROTO_GRE = 0x2f;
|
||||
IPPROTO_HELLO = 0x3f;
|
||||
IPPROTO_HMP = 0x14;
|
||||
IPPROTO_HOPOPTS = 0;
|
||||
IPPROTO_ICMP = 0x1;
|
||||
IPPROTO_ICMPV6 = 0x3a;
|
||||
IPPROTO_IDP = 0x16;
|
||||
IPPROTO_IDPR = 0x23;
|
||||
IPPROTO_IDRP = 0x2d;
|
||||
IPPROTO_IGMP = 0x2;
|
||||
IPPROTO_IGP = 0x55;
|
||||
IPPROTO_IGRP = 0x58;
|
||||
IPPROTO_IL = 0x28;
|
||||
IPPROTO_INLSP = 0x34;
|
||||
IPPROTO_INP = 0x20;
|
||||
IPPROTO_IP = 0;
|
||||
IPPROTO_IPCOMP = 0x6c;
|
||||
IPPROTO_IPCV = 0x47;
|
||||
IPPROTO_IPEIP = 0x5e;
|
||||
IPPROTO_IPIP = 0x4;
|
||||
IPPROTO_IPPC = 0x43;
|
||||
IPPROTO_IPV4 = 0x4;
|
||||
IPPROTO_IPV6 = 0x29;
|
||||
IPPROTO_IRTP = 0x1c;
|
||||
IPPROTO_KRYPTOLAN = 0x41;
|
||||
IPPROTO_LARP = 0x5b;
|
||||
IPPROTO_LEAF1 = 0x19;
|
||||
IPPROTO_LEAF2 = 0x1a;
|
||||
IPPROTO_MAX = 0x100;
|
||||
IPPROTO_MAXID = 0x34;
|
||||
IPPROTO_MEAS = 0x13;
|
||||
IPPROTO_MHRP = 0x30;
|
||||
IPPROTO_MICP = 0x5f;
|
||||
IPPROTO_MOBILE = 0x37;
|
||||
IPPROTO_MTP = 0x5c;
|
||||
IPPROTO_MUX = 0x12;
|
||||
IPPROTO_ND = 0x4d;
|
||||
IPPROTO_NHRP = 0x36;
|
||||
IPPROTO_NONE = 0x3b;
|
||||
IPPROTO_NSP = 0x1f;
|
||||
IPPROTO_NVPII = 0xb;
|
||||
IPPROTO_OLD_DIVERT = 0xfe;
|
||||
IPPROTO_OSPFIGP = 0x59;
|
||||
IPPROTO_PFSYNC = 0xf0;
|
||||
IPPROTO_PGM = 0x71;
|
||||
IPPROTO_PIGP = 0x9;
|
||||
IPPROTO_PIM = 0x67;
|
||||
IPPROTO_PRM = 0x15;
|
||||
IPPROTO_PUP = 0xc;
|
||||
IPPROTO_PVP = 0x4b;
|
||||
IPPROTO_RAW = 0xff;
|
||||
IPPROTO_RCCMON = 0xa;
|
||||
IPPROTO_RDP = 0x1b;
|
||||
IPPROTO_ROUTING = 0x2b;
|
||||
IPPROTO_RSVP = 0x2e;
|
||||
IPPROTO_RVD = 0x42;
|
||||
IPPROTO_SATEXPAK = 0x40;
|
||||
IPPROTO_SATMON = 0x45;
|
||||
IPPROTO_SCCSP = 0x60;
|
||||
IPPROTO_SCTP = 0x84;
|
||||
IPPROTO_SDRP = 0x2a;
|
||||
IPPROTO_SEP = 0x21;
|
||||
IPPROTO_SKIP = 0x39;
|
||||
IPPROTO_SPACER = 0x7fff;
|
||||
IPPROTO_SRPC = 0x5a;
|
||||
IPPROTO_ST = 0x7;
|
||||
IPPROTO_SVMTP = 0x52;
|
||||
IPPROTO_SWIPE = 0x35;
|
||||
IPPROTO_TCF = 0x57;
|
||||
IPPROTO_TCP = 0x6;
|
||||
IPPROTO_TLSP = 0x38;
|
||||
IPPROTO_TP = 0x1d;
|
||||
IPPROTO_TPXX = 0x27;
|
||||
IPPROTO_TRUNK1 = 0x17;
|
||||
IPPROTO_TRUNK2 = 0x18;
|
||||
IPPROTO_TTP = 0x54;
|
||||
IPPROTO_UDP = 0x11;
|
||||
IPPROTO_VINES = 0x53;
|
||||
IPPROTO_VISA = 0x46;
|
||||
IPPROTO_VMTP = 0x51;
|
||||
IPPROTO_WBEXPAK = 0x4f;
|
||||
IPPROTO_WBMON = 0x4e;
|
||||
IPPROTO_WSN = 0x4a;
|
||||
IPPROTO_XNET = 0xf;
|
||||
IPPROTO_XTP = 0x24;
|
||||
IP_ADD_MEMBERSHIP = 0xc;
|
||||
IP_ADD_SOURCE_MEMBERSHIP = 0x46;
|
||||
IP_BINDANY = 0x18;
|
||||
IP_BLOCK_SOURCE = 0x48;
|
||||
IP_DEFAULT_MULTICAST_LOOP = 0x1;
|
||||
IP_DEFAULT_MULTICAST_TTL = 0x1;
|
||||
IP_DONTFRAG = 0x43;
|
||||
IP_DROP_MEMBERSHIP = 0xd;
|
||||
IP_DROP_SOURCE_MEMBERSHIP = 0x47;
|
||||
IP_DUMMYNET_CONFIGURE = 0x3c;
|
||||
IP_DUMMYNET_DEL = 0x3d;
|
||||
IP_DUMMYNET_FLUSH = 0x3e;
|
||||
IP_DUMMYNET_GET = 0x40;
|
||||
IP_FAITH = 0x16;
|
||||
IP_FW_ADD = 0x32;
|
||||
IP_FW_DEL = 0x33;
|
||||
IP_FW_FLUSH = 0x34;
|
||||
IP_FW_GET = 0x36;
|
||||
IP_FW_NAT_CFG = 0x38;
|
||||
IP_FW_NAT_DEL = 0x39;
|
||||
IP_FW_NAT_GET_CONFIG = 0x3a;
|
||||
IP_FW_NAT_GET_LOG = 0x3b;
|
||||
IP_FW_RESETLOG = 0x37;
|
||||
IP_FW_TABLE_ADD = 0x28;
|
||||
IP_FW_TABLE_DEL = 0x29;
|
||||
IP_FW_TABLE_FLUSH = 0x2a;
|
||||
IP_FW_TABLE_GETSIZE = 0x2b;
|
||||
IP_FW_TABLE_LIST = 0x2c;
|
||||
IP_FW_ZERO = 0x35;
|
||||
IP_HDRINCL = 0x2;
|
||||
IP_IPSEC_POLICY = 0x15;
|
||||
IP_MAX_GROUP_SRC_FILTER = 0x200;
|
||||
IP_MAX_MEMBERSHIPS = 0xfff;
|
||||
IP_MAX_SOCK_MUTE_FILTER = 0x80;
|
||||
IP_MAX_SOCK_SRC_FILTER = 0x80;
|
||||
IP_MAX_SOURCE_FILTER = 0x400;
|
||||
IP_MINTTL = 0x42;
|
||||
IP_MIN_MEMBERSHIPS = 0x1f;
|
||||
IP_MSFILTER = 0x4a;
|
||||
IP_MULTICAST_IF = 0x9;
|
||||
IP_MULTICAST_LOOP = 0xb;
|
||||
IP_MULTICAST_TTL = 0xa;
|
||||
IP_MULTICAST_VIF = 0xe;
|
||||
IP_ONESBCAST = 0x17;
|
||||
IP_OPTIONS = 0x1;
|
||||
IP_PORTRANGE = 0x13;
|
||||
IP_PORTRANGE_DEFAULT = 0;
|
||||
IP_PORTRANGE_HIGH = 0x1;
|
||||
IP_PORTRANGE_LOW = 0x2;
|
||||
IP_RECVDSTADDR = 0x7;
|
||||
IP_RECVIF = 0x14;
|
||||
IP_RECVOPTS = 0x5;
|
||||
IP_RECVRETOPTS = 0x6;
|
||||
IP_RECVTTL = 0x41;
|
||||
IP_RETOPTS = 0x8;
|
||||
IP_RSVP_OFF = 0x10;
|
||||
IP_RSVP_ON = 0xf;
|
||||
IP_RSVP_VIF_OFF = 0x12;
|
||||
IP_RSVP_VIF_ON = 0x11;
|
||||
IP_SENDSRCADDR = 0x7;
|
||||
IP_TOS = 0x3;
|
||||
IP_TTL = 0x4;
|
||||
IP_UNBLOCK_SOURCE = 0x49;
|
||||
O_ACCMODE = 0x3;
|
||||
O_APPEND = 0x8;
|
||||
O_ASYNC = 0x40;
|
||||
O_CREAT = 0x200;
|
||||
O_DIRECT = 0x10000;
|
||||
O_DIRECTORY = 0x20000;
|
||||
O_EXCL = 0x800;
|
||||
O_EXEC = 0x40000;
|
||||
O_EXLOCK = 0x20;
|
||||
O_FSYNC = 0x80;
|
||||
O_NDELAY = 0x4;
|
||||
O_NOCTTY = 0x8000;
|
||||
O_NOFOLLOW = 0x100;
|
||||
O_NONBLOCK = 0x4;
|
||||
O_RDONLY = 0;
|
||||
O_RDWR = 0x2;
|
||||
O_SHLOCK = 0x10;
|
||||
O_SYNC = 0x80;
|
||||
O_TRUNC = 0x400;
|
||||
O_TTY_INIT = 0x80000;
|
||||
O_WRONLY = 0x1;
|
||||
SIGABRT = 0x6;
|
||||
SIGALRM = 0xe;
|
||||
SIGBUS = 0xa;
|
||||
SIGCHLD = 0x14;
|
||||
SIGCONT = 0x13;
|
||||
SIGEMT = 0x7;
|
||||
SIGFPE = 0x8;
|
||||
SIGHUP = 0x1;
|
||||
SIGILL = 0x4;
|
||||
SIGINFO = 0x1d;
|
||||
SIGINT = 0x2;
|
||||
SIGIO = 0x17;
|
||||
SIGIOT = 0x6;
|
||||
SIGKILL = 0x9;
|
||||
SIGLWP = 0x20;
|
||||
SIGPIPE = 0xd;
|
||||
SIGPROF = 0x1b;
|
||||
SIGQUIT = 0x3;
|
||||
SIGSEGV = 0xb;
|
||||
SIGSTOP = 0x11;
|
||||
SIGSYS = 0xc;
|
||||
SIGTERM = 0xf;
|
||||
SIGTHR = 0x20;
|
||||
SIGTRAP = 0x5;
|
||||
SIGTSTP = 0x12;
|
||||
SIGTTIN = 0x15;
|
||||
SIGTTOU = 0x16;
|
||||
SIGURG = 0x10;
|
||||
SIGUSR1 = 0x1e;
|
||||
SIGUSR2 = 0x1f;
|
||||
SIGVTALRM = 0x1a;
|
||||
SIGWINCH = 0x1c;
|
||||
SIGXCPU = 0x18;
|
||||
SIGXFSZ = 0x19;
|
||||
SOCK_DGRAM = 0x2;
|
||||
SOCK_MAXADDRLEN = 0xff;
|
||||
SOCK_RAW = 0x3;
|
||||
SOCK_RDM = 0x4;
|
||||
SOCK_SEQPACKET = 0x5;
|
||||
SOCK_STREAM = 0x1;
|
||||
SOL_SOCKET = 0xffff;
|
||||
SOMAXCONN = 0x80;
|
||||
SO_ACCEPTCONN = 0x2;
|
||||
SO_ACCEPTFILTER = 0x1000;
|
||||
SO_BINTIME = 0x2000;
|
||||
SO_BROADCAST = 0x20;
|
||||
SO_DEBUG = 0x1;
|
||||
SO_DONTROUTE = 0x10;
|
||||
SO_ERROR = 0x1007;
|
||||
SO_KEEPALIVE = 0x8;
|
||||
SO_LABEL = 0x1009;
|
||||
SO_LINGER = 0x80;
|
||||
SO_LISTENINCQLEN = 0x1013;
|
||||
SO_LISTENQLEN = 0x1012;
|
||||
SO_LISTENQLIMIT = 0x1011;
|
||||
SO_NOSIGPIPE = 0x800;
|
||||
SO_NO_DDP = 0x8000;
|
||||
SO_NO_OFFLOAD = 0x4000;
|
||||
SO_OOBINLINE = 0x100;
|
||||
SO_PEERLABEL = 0x1010;
|
||||
SO_RCVBUF = 0x1002;
|
||||
SO_RCVLOWAT = 0x1004;
|
||||
SO_RCVTIMEO = 0x1006;
|
||||
SO_REUSEADDR = 0x4;
|
||||
SO_REUSEPORT = 0x200;
|
||||
SO_SETFIB = 0x1014;
|
||||
SO_SNDBUF = 0x1001;
|
||||
SO_SNDLOWAT = 0x1003;
|
||||
SO_SNDTIMEO = 0x1005;
|
||||
SO_TIMESTAMP = 0x400;
|
||||
SO_TYPE = 0x1008;
|
||||
SO_USELOOPBACK = 0x40;
|
||||
TCP_CA_NAME_MAX = 0x10;
|
||||
TCP_CONGESTION = 0x40;
|
||||
TCP_INFO = 0x20;
|
||||
TCP_MAXBURST = 0x4;
|
||||
TCP_MAXHLEN = 0x3c;
|
||||
TCP_MAXOLEN = 0x28;
|
||||
TCP_MAXSEG = 0x2;
|
||||
TCP_MAXWIN = 0xffff;
|
||||
TCP_MAX_SACK = 0x4;
|
||||
TCP_MAX_WINSHIFT = 0xe;
|
||||
TCP_MD5SIG = 0x10;
|
||||
TCP_MINMSS = 0xd8;
|
||||
TCP_MSS = 0x200;
|
||||
TCP_NODELAY = 0x1;
|
||||
TCP_NOOPT = 0x8;
|
||||
TCP_NOPUSH = 0x4;
|
||||
WCONTINUED = 0x4;
|
||||
WCOREFLAG = 0x80;
|
||||
WLINUXCLONE = 0x80000000;
|
||||
WNOHANG = 0x1;
|
||||
WNOWAIT = 0x8;
|
||||
WSTOPPED = 0x2;
|
||||
WUNTRACED = 0x2;
|
||||
)
|
||||
|
||||
// Types
|
||||
|
||||
|
||||
// Error table
|
||||
var errors = [...]string{
|
||||
90: "multihop attempted",
|
||||
47: "address family not supported by protocol family",
|
||||
13: "permission denied",
|
||||
39: "destination address required",
|
||||
86: "illegal byte sequence",
|
||||
29: "illegal seek",
|
||||
31: "too many links",
|
||||
74: "RPC prog. not avail",
|
||||
25: "inappropriate ioctl for device",
|
||||
9: "bad file descriptor",
|
||||
34: "result too large",
|
||||
85: "operation canceled",
|
||||
26: "text file busy",
|
||||
12: "cannot allocate memory",
|
||||
36: "operation now in progress",
|
||||
66: "directory not empty",
|
||||
15: "block device required",
|
||||
41: "protocol wrong type for socket",
|
||||
83: "no message of desired type",
|
||||
73: "RPC version wrong",
|
||||
20: "not a directory",
|
||||
37: "operation already in progress",
|
||||
60: "operation timed out",
|
||||
81: "need authenticator",
|
||||
4: "interrupted system call",
|
||||
91: "link has been severed",
|
||||
1: "operation not permitted",
|
||||
50: "network is down",
|
||||
70: "stale NFS file handle",
|
||||
38: "socket operation on non-socket",
|
||||
80: "authentication error",
|
||||
10: "no child processes",
|
||||
32: "broken pipe",
|
||||
87: "attribute not found",
|
||||
89: "bad message",
|
||||
71: "too many levels of remote in path",
|
||||
59: "too many references: can't splice",
|
||||
46: "protocol family not supported",
|
||||
76: "bad procedure for program",
|
||||
48: "address already in use",
|
||||
52: "network dropped connection on reset",
|
||||
21: "is a directory",
|
||||
82: "identifier removed",
|
||||
88: "programming error",
|
||||
22: "invalid argument",
|
||||
58: "can't send after socket shutdown",
|
||||
84: "value too large to be stored in data type",
|
||||
16: "device busy",
|
||||
67: "too many processes",
|
||||
92: "protocol error",
|
||||
19: "operation not supported by device",
|
||||
30: "read-only file system",
|
||||
7: "argument list too long",
|
||||
11: "resource deadlock avoided",
|
||||
54: "connection reset by peer",
|
||||
6: "device not configured",
|
||||
72: "RPC struct is bad",
|
||||
63: "file name too long",
|
||||
44: "socket type not supported",
|
||||
49: "can't assign requested address",
|
||||
43: "protocol not supported",
|
||||
5: "input/output error",
|
||||
51: "network is unreachable",
|
||||
18: "cross-device link",
|
||||
69: "disc quota exceeded",
|
||||
28: "no space left on device",
|
||||
8: "exec format error",
|
||||
40: "message too long",
|
||||
79: "inappropriate file type or format",
|
||||
33: "numerical argument out of domain",
|
||||
27: "file too large",
|
||||
3: "no such process",
|
||||
64: "host is down",
|
||||
77: "no locks available",
|
||||
23: "too many open files in system",
|
||||
78: "function not implemented",
|
||||
57: "socket is not connected",
|
||||
45: "operation not supported",
|
||||
53: "software caused connection abort",
|
||||
56: "socket is already connected",
|
||||
68: "too many users",
|
||||
42: "protocol not available",
|
||||
24: "too many open files",
|
||||
62: "too many levels of symbolic links",
|
||||
55: "no buffer space available",
|
||||
14: "bad address",
|
||||
35: "resource temporarily unavailable",
|
||||
61: "connection refused",
|
||||
17: "file exists",
|
||||
75: "program version wrong",
|
||||
2: "no such file or directory",
|
||||
65: "no route to host",
|
||||
}
|
661
src/pkg/syscall/zsyscall_freebsd_amd64.go
Normal file
661
src/pkg/syscall/zsyscall_freebsd_amd64.go
Normal file
@ -0,0 +1,661 @@
|
||||
// mksyscall.sh syscall_freebsd.go syscall_freebsd_amd64.go
|
||||
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
||||
|
||||
package syscall
|
||||
|
||||
import "unsafe"
|
||||
|
||||
func getgroups(ngid int, gid *_Gid_t) (n int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0);
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func setgroups(ngid int, gid *_Gid_t) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, errno int) {
|
||||
r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0);
|
||||
wpid = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func pipe() (r int, w int, errno int) {
|
||||
r0, r1, e1 := Syscall(SYS_PIPE, 0, 0, 0);
|
||||
r = int(r0);
|
||||
w = int(r1);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)));
|
||||
fd = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func bind(s int, addr uintptr, addrlen _Socklen) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func connect(s int, addr uintptr, addrlen _Socklen) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func socket(domain int, typ int, proto int) (fd int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto));
|
||||
fd = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) {
|
||||
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, errno int) {
|
||||
var _p0 *byte;
|
||||
if len(p) > 0 {
|
||||
_p0 = &p[0]
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func sendto(s int, buf []byte, flags int, to uintptr, addrlen _Socklen) (errno int) {
|
||||
var _p0 *byte;
|
||||
if len(buf) > 0 {
|
||||
_p0 = &buf[0]
|
||||
}
|
||||
_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func kevent(kq int, change uintptr, nchange int, event uintptr, nevent int, timeout *Timespec) (n int, errno int) {
|
||||
r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (errno int) {
|
||||
var _p0 *_C_int;
|
||||
if len(mib) > 0 {
|
||||
_p0 = &mib[0]
|
||||
}
|
||||
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(unsafe.Pointer(_p0)), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func fcntl(fd int, cmd int, arg int) (val int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg));
|
||||
val = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Access(path string, flags int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Adjtime(delta *Timeval, olddelta *Timeval) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Chdir(path string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(StringBytePtr(path))), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Chflags(path string, flags int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Chmod(path string, mode int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Chown(path string, uid int, gid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Chroot(path string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(StringBytePtr(path))), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Close(fd int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Dup(fd int) (nfd int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0);
|
||||
nfd = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Dup2(from int, to int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Exit(code int) {
|
||||
Syscall(SYS_EXIT, uintptr(code), 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fchdir(fd int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fchflags(path string, flags int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fchmod(fd int, mode int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fchown(fd int, uid int, gid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Flock(fd int, how int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fpathconf(fd int, name int) (val int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0);
|
||||
val = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fstat(fd int, stat *Stat_t) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fstatfs(fd int, stat *Statfs_t) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Fsync(fd int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Ftruncate(fd int, length int64) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, errno int) {
|
||||
var _p0 *byte;
|
||||
if len(buf) > 0 {
|
||||
_p0 = &buf[0]
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0);
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getdtablesize() (size int) {
|
||||
r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0);
|
||||
size = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getegid() (egid int) {
|
||||
r0, _, _ := Syscall(SYS_GETEGID, 0, 0, 0);
|
||||
egid = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Geteuid() (uid int) {
|
||||
r0, _, _ := Syscall(SYS_GETEUID, 0, 0, 0);
|
||||
uid = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getfsstat(buf []Statfs_t, flags int) (n int, errno int) {
|
||||
var _p0 *Statfs_t;
|
||||
if len(buf) > 0 {
|
||||
_p0 = &buf[0]
|
||||
}
|
||||
r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getgid() (gid int) {
|
||||
r0, _, _ := Syscall(SYS_GETGID, 0, 0, 0);
|
||||
gid = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getpgid(pid int) (pgid int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_GETPGID, uintptr(pid), 0, 0);
|
||||
pgid = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getpgrp() (pgrp int) {
|
||||
r0, _, _ := Syscall(SYS_GETPGRP, 0, 0, 0);
|
||||
pgrp = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getpid() (pid int) {
|
||||
r0, _, _ := Syscall(SYS_GETPID, 0, 0, 0);
|
||||
pid = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getppid() (ppid int) {
|
||||
r0, _, _ := Syscall(SYS_GETPPID, 0, 0, 0);
|
||||
ppid = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getpriority(which int, who int) (prio int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0);
|
||||
prio = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getrlimit(which int, lim *Rlimit) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getrusage(who int, rusage *Rusage) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getsid(pid int) (sid int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_GETSID, uintptr(pid), 0, 0);
|
||||
sid = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Gettimeofday(tv *Timeval) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Getuid() (uid int) {
|
||||
r0, _, _ := Syscall(SYS_GETUID, 0, 0, 0);
|
||||
uid = int(r0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Issetugid() (tainted bool) {
|
||||
r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0);
|
||||
tainted = bool(r0 != 0);
|
||||
return;
|
||||
}
|
||||
|
||||
func Kill(pid int, signum int, posix int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Kqueue() (fd int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0);
|
||||
fd = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Lchown(path string, uid int, gid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Link(path string, link string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(StringBytePtr(link))), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Listen(s int, backlog int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Lstat(path string, stat *Stat_t) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(stat)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Mkdir(path string, mode int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Mkfifo(path string, mode int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Mknod(path string, mode int, dev int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), uintptr(dev));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Open(path string, mode int, perm int) (fd int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), uintptr(perm));
|
||||
fd = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Pathconf(path string, name int) (val int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(name), 0);
|
||||
val = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Pread(fd int, p []byte, offset int64) (n int, errno int) {
|
||||
var _p0 *byte;
|
||||
if len(p) > 0 {
|
||||
_p0 = &p[0]
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0);
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Pwrite(fd int, p []byte, offset int64) (n int, errno int) {
|
||||
var _p0 *byte;
|
||||
if len(p) > 0 {
|
||||
_p0 = &p[0]
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0);
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Read(fd int, p []byte) (n int, errno int) {
|
||||
var _p0 *byte;
|
||||
if len(p) > 0 {
|
||||
_p0 = &p[0]
|
||||
}
|
||||
r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Readlink(path string, buf []byte) (n int, errno int) {
|
||||
var _p0 *byte;
|
||||
if len(buf) > 0 {
|
||||
_p0 = &buf[0]
|
||||
}
|
||||
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Rename(from string, to string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(StringBytePtr(from))), uintptr(unsafe.Pointer(StringBytePtr(to))), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Revoke(path string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(StringBytePtr(path))), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Rmdir(path string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(StringBytePtr(path))), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Seek(fd int, offset int64, whence int) (newoffset int64, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence));
|
||||
newoffset = int64(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (errno int) {
|
||||
_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setegid(egid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Seteuid(euid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETEUID, uintptr(euid), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setgid(gid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETGID, uintptr(gid), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setlogin(name string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(StringBytePtr(name))), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setpgid(pid int, pgid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setpriority(which int, who int, prio int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio));
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setregid(rgid int, egid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setreuid(ruid int, euid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setrlimit(which int, lim *Rlimit) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setsid() (pid int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_SETSID, 0, 0, 0);
|
||||
pid = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Settimeofday(tp *Timeval) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Setuid(uid int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SETUID, uintptr(uid), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Stat(path string, stat *Stat_t) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(stat)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Statfs(path string, stat *Statfs_t) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(stat)), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Symlink(path string, link string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(StringBytePtr(link))), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Sync() (errno int) {
|
||||
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Truncate(path string, length int64) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(length), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Umask(newmask int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_UMASK, uintptr(newmask), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Undelete(path string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(StringBytePtr(path))), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Unlink(path string) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(StringBytePtr(path))), 0, 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Unmount(path string, flags int) (errno int) {
|
||||
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), 0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func Write(fd int, p []byte) (n int, errno int) {
|
||||
var _p0 *byte;
|
||||
if len(p) > 0 {
|
||||
_p0 = &p[0]
|
||||
}
|
||||
r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func read(fd int, buf *byte, nbuf int) (n int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
||||
|
||||
func write(fd int, buf *byte, nbuf int) (n int, errno int) {
|
||||
r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf));
|
||||
n = int(r0);
|
||||
errno = int(e1);
|
||||
return;
|
||||
}
|
320
src/pkg/syscall/zsysnum_freebsd_amd64.go
Normal file
320
src/pkg/syscall/zsysnum_freebsd_amd64.go
Normal file
@ -0,0 +1,320 @@
|
||||
// mksysnum_freebsd.sh /usr/src/sys/kern/syscalls.master
|
||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
||||
|
||||
package syscall
|
||||
|
||||
const (
|
||||
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
|
||||
SYS_EXIT = 1; // { void sys_exit(int rval); } exit \
|
||||
SYS_FORK = 2; // { int fork(void); }
|
||||
SYS_READ = 3; // { ssize_t read(int fd, void *buf, \
|
||||
SYS_WRITE = 4; // { ssize_t write(int fd, const void *buf, \
|
||||
SYS_OPEN = 5; // { int open(char *path, int flags, int mode); }
|
||||
SYS_CLOSE = 6; // { int close(int fd); }
|
||||
SYS_WAIT4 = 7; // { int wait4(int pid, int *status, \
|
||||
SYS_LINK = 9; // { int link(char *path, char *link); }
|
||||
SYS_UNLINK = 10; // { int unlink(char *path); }
|
||||
SYS_CHDIR = 12; // { int chdir(char *path); }
|
||||
SYS_FCHDIR = 13; // { int fchdir(int fd); }
|
||||
SYS_MKNOD = 14; // { int mknod(char *path, int mode, int dev); }
|
||||
SYS_CHMOD = 15; // { int chmod(char *path, int mode); }
|
||||
SYS_CHOWN = 16; // { int chown(char *path, int uid, int gid); }
|
||||
SYS_OBREAK = 17; // { int obreak(char *nsize); } break \
|
||||
SYS_GETPID = 20; // { pid_t getpid(void); }
|
||||
SYS_MOUNT = 21; // { int mount(char *type, char *path, \
|
||||
SYS_UNMOUNT = 22; // { int unmount(char *path, int flags); }
|
||||
SYS_SETUID = 23; // { int setuid(uid_t uid); }
|
||||
SYS_GETUID = 24; // { uid_t getuid(void); }
|
||||
SYS_GETEUID = 25; // { uid_t geteuid(void); }
|
||||
SYS_PTRACE = 26; // { int ptrace(int req, pid_t pid, \
|
||||
SYS_RECVMSG = 27; // { int recvmsg(int s, struct msghdr *msg, \
|
||||
SYS_SENDMSG = 28; // { int sendmsg(int s, struct msghdr *msg, \
|
||||
SYS_RECVFROM = 29; // { int recvfrom(int s, caddr_t buf, \
|
||||
SYS_ACCEPT = 30; // { int accept(int s, \
|
||||
SYS_GETPEERNAME = 31; // { int getpeername(int fdes, \
|
||||
SYS_GETSOCKNAME = 32; // { int getsockname(int fdes, \
|
||||
SYS_ACCESS = 33; // { int access(char *path, int flags); }
|
||||
SYS_CHFLAGS = 34; // { int chflags(char *path, int flags); }
|
||||
SYS_FCHFLAGS = 35; // { int fchflags(int fd, int flags); }
|
||||
SYS_SYNC = 36; // { int sync(void); }
|
||||
SYS_KILL = 37; // { int kill(int pid, int signum); }
|
||||
SYS_GETPPID = 39; // { pid_t getppid(void); }
|
||||
SYS_DUP = 41; // { int dup(u_int fd); }
|
||||
SYS_PIPE = 42; // { int pipe(void); }
|
||||
SYS_GETEGID = 43; // { gid_t getegid(void); }
|
||||
SYS_PROFIL = 44; // { int profil(caddr_t samples, size_t size, \
|
||||
SYS_KTRACE = 45; // { int ktrace(const char *fname, int ops, \
|
||||
SYS_GETGID = 47; // { gid_t getgid(void); }
|
||||
SYS_GETLOGIN = 49; // { int getlogin(char *namebuf, u_int \
|
||||
SYS_SETLOGIN = 50; // { int setlogin(char *namebuf); }
|
||||
SYS_ACCT = 51; // { int acct(char *path); }
|
||||
SYS_SIGALTSTACK = 53; // { int sigaltstack(stack_t *ss, \
|
||||
SYS_IOCTL = 54; // { int ioctl(int fd, u_long com, \
|
||||
SYS_REBOOT = 55; // { int reboot(int opt); }
|
||||
SYS_REVOKE = 56; // { int revoke(char *path); }
|
||||
SYS_SYMLINK = 57; // { int symlink(char *path, char *link); }
|
||||
SYS_READLINK = 58; // { ssize_t readlink(char *path, char *buf, \
|
||||
SYS_EXECVE = 59; // { int execve(char *fname, char **argv, \
|
||||
SYS_UMASK = 60; // { int umask(int newmask); } umask umask_args \
|
||||
SYS_CHROOT = 61; // { int chroot(char *path); }
|
||||
SYS_MSYNC = 65; // { int msync(void *addr, size_t len, \
|
||||
SYS_VFORK = 66; // { int vfork(void); }
|
||||
SYS_SBRK = 69; // { int sbrk(int incr); }
|
||||
SYS_SSTK = 70; // { int sstk(int incr); }
|
||||
SYS_OVADVISE = 72; // { int ovadvise(int anom); } vadvise \
|
||||
SYS_MUNMAP = 73; // { int munmap(void *addr, size_t len); }
|
||||
SYS_MPROTECT = 74; // { int mprotect(const void *addr, size_t len, \
|
||||
SYS_MADVISE = 75; // { int madvise(void *addr, size_t len, \
|
||||
SYS_MINCORE = 78; // { int mincore(const void *addr, size_t len, \
|
||||
SYS_GETGROUPS = 79; // { int getgroups(u_int gidsetsize, \
|
||||
SYS_SETGROUPS = 80; // { int setgroups(u_int gidsetsize, \
|
||||
SYS_GETPGRP = 81; // { int getpgrp(void); }
|
||||
SYS_SETPGID = 82; // { int setpgid(int pid, int pgid); }
|
||||
SYS_SETITIMER = 83; // { int setitimer(u_int which, struct \
|
||||
SYS_SWAPON = 85; // { int swapon(char *name); }
|
||||
SYS_GETITIMER = 86; // { int getitimer(u_int which, \
|
||||
SYS_GETDTABLESIZE = 89; // { int getdtablesize(void); }
|
||||
SYS_DUP2 = 90; // { int dup2(u_int from, u_int to); }
|
||||
SYS_FCNTL = 92; // { int fcntl(int fd, int cmd, long arg); }
|
||||
SYS_SELECT = 93; // { int select(int nd, fd_set *in, fd_set *ou, \
|
||||
SYS_FSYNC = 95; // { int fsync(int fd); }
|
||||
SYS_SETPRIORITY = 96; // { int setpriority(int which, int who, \
|
||||
SYS_SOCKET = 97; // { int socket(int domain, int type, \
|
||||
SYS_CONNECT = 98; // { int connect(int s, caddr_t name, \
|
||||
SYS_GETPRIORITY = 100; // { int getpriority(int which, int who); }
|
||||
SYS_BIND = 104; // { int bind(int s, caddr_t name, \
|
||||
SYS_SETSOCKOPT = 105; // { int setsockopt(int s, int level, int name, \
|
||||
SYS_LISTEN = 106; // { int listen(int s, int backlog); }
|
||||
SYS_GETTIMEOFDAY = 116; // { int gettimeofday(struct timeval *tp, \
|
||||
SYS_GETRUSAGE = 117; // { int getrusage(int who, \
|
||||
SYS_GETSOCKOPT = 118; // { int getsockopt(int s, int level, int name, \
|
||||
SYS_READV = 120; // { int readv(int fd, struct iovec *iovp, \
|
||||
SYS_WRITEV = 121; // { int writev(int fd, struct iovec *iovp, \
|
||||
SYS_SETTIMEOFDAY = 122; // { int settimeofday(struct timeval *tv, \
|
||||
SYS_FCHOWN = 123; // { int fchown(int fd, int uid, int gid); }
|
||||
SYS_FCHMOD = 124; // { int fchmod(int fd, int mode); }
|
||||
SYS_SETREUID = 126; // { int setreuid(int ruid, int euid); }
|
||||
SYS_SETREGID = 127; // { int setregid(int rgid, int egid); }
|
||||
SYS_RENAME = 128; // { int rename(char *from, char *to); }
|
||||
SYS_FLOCK = 131; // { int flock(int fd, int how); }
|
||||
SYS_MKFIFO = 132; // { int mkfifo(char *path, int mode); }
|
||||
SYS_SENDTO = 133; // { int sendto(int s, caddr_t buf, size_t len, \
|
||||
SYS_SHUTDOWN = 134; // { int shutdown(int s, int how); }
|
||||
SYS_SOCKETPAIR = 135; // { int socketpair(int domain, int type, \
|
||||
SYS_MKDIR = 136; // { int mkdir(char *path, int mode); }
|
||||
SYS_RMDIR = 137; // { int rmdir(char *path); }
|
||||
SYS_UTIMES = 138; // { int utimes(char *path, \
|
||||
SYS_ADJTIME = 140; // { int adjtime(struct timeval *delta, \
|
||||
SYS_SETSID = 147; // { int setsid(void); }
|
||||
SYS_QUOTACTL = 148; // { int quotactl(char *path, int cmd, int uid, \
|
||||
SYS_LGETFH = 160; // { int lgetfh(char *fname, \
|
||||
SYS_GETFH = 161; // { int getfh(char *fname, \
|
||||
SYS_SYSARCH = 165; // { int sysarch(int op, char *parms); }
|
||||
SYS_RTPRIO = 166; // { int rtprio(int function, pid_t pid, \
|
||||
SYS_FREEBSD6_PREAD = 173; // { ssize_t freebsd6_pread(int fd, void *buf, \
|
||||
SYS_FREEBSD6_PWRITE = 174; // { ssize_t freebsd6_pwrite(int fd, \
|
||||
SYS_SETFIB = 175; // { int setfib(int fibnum); }
|
||||
SYS_NTP_ADJTIME = 176; // { int ntp_adjtime(struct timex *tp); }
|
||||
SYS_SETGID = 181; // { int setgid(gid_t gid); }
|
||||
SYS_SETEGID = 182; // { int setegid(gid_t egid); }
|
||||
SYS_SETEUID = 183; // { int seteuid(uid_t euid); }
|
||||
SYS_STAT = 188; // { int stat(char *path, struct stat *ub); }
|
||||
SYS_FSTAT = 189; // { int fstat(int fd, struct stat *sb); }
|
||||
SYS_LSTAT = 190; // { int lstat(char *path, struct stat *ub); }
|
||||
SYS_PATHCONF = 191; // { int pathconf(char *path, int name); }
|
||||
SYS_FPATHCONF = 192; // { int fpathconf(int fd, int name); }
|
||||
SYS_GETRLIMIT = 194; // { int getrlimit(u_int which, \
|
||||
SYS_SETRLIMIT = 195; // { int setrlimit(u_int which, \
|
||||
SYS_GETDIRENTRIES = 196; // { int getdirentries(int fd, char *buf, \
|
||||
SYS_FREEBSD6_MMAP = 197; // { caddr_t freebsd6_mmap(caddr_t addr, \
|
||||
SYS_FREEBSD6_LSEEK = 199; // { off_t freebsd6_lseek(int fd, int pad, \
|
||||
SYS_FREEBSD6_TRUNCATE = 200; // { int freebsd6_truncate(char *path, int pad, \
|
||||
SYS_FREEBSD6_FTRUNCATE = 201; // { int freebsd6_ftruncate(int fd, int pad, \
|
||||
SYS___SYSCTL = 202; // { int __sysctl(int *name, u_int namelen, \
|
||||
SYS_MLOCK = 203; // { int mlock(const void *addr, size_t len); }
|
||||
SYS_MUNLOCK = 204; // { int munlock(const void *addr, size_t len); }
|
||||
SYS_UNDELETE = 205; // { int undelete(char *path); }
|
||||
SYS_FUTIMES = 206; // { int futimes(int fd, struct timeval *tptr); }
|
||||
SYS_GETPGID = 207; // { int getpgid(pid_t pid); }
|
||||
SYS_POLL = 209; // { int poll(struct pollfd *fds, u_int nfds, \
|
||||
SYS_CLOCK_GETTIME = 232; // { int clock_gettime(clockid_t clock_id, \
|
||||
SYS_CLOCK_SETTIME = 233; // { int clock_settime( \
|
||||
SYS_CLOCK_GETRES = 234; // { int clock_getres(clockid_t clock_id, \
|
||||
SYS_KTIMER_CREATE = 235; // { int ktimer_create(clockid_t clock_id, \
|
||||
SYS_KTIMER_DELETE = 236; // { int ktimer_delete(int timerid); }
|
||||
SYS_KTIMER_SETTIME = 237; // { int ktimer_settime(int timerid, int flags, \
|
||||
SYS_KTIMER_GETTIME = 238; // { int ktimer_gettime(int timerid, struct \
|
||||
SYS_KTIMER_GETOVERRUN = 239; // { int ktimer_getoverrun(int timerid); }
|
||||
SYS_NANOSLEEP = 240; // { int nanosleep(const struct timespec *rqtp, \
|
||||
SYS_NTP_GETTIME = 248; // { int ntp_gettime(struct ntptimeval *ntvp); }
|
||||
SYS_MINHERIT = 250; // { int minherit(void *addr, size_t len, \
|
||||
SYS_RFORK = 251; // { int rfork(int flags); }
|
||||
SYS_OPENBSD_POLL = 252; // { int openbsd_poll(struct pollfd *fds, \
|
||||
SYS_ISSETUGID = 253; // { int issetugid(void); }
|
||||
SYS_LCHOWN = 254; // { int lchown(char *path, int uid, int gid); }
|
||||
SYS_GETDENTS = 272; // { int getdents(int fd, char *buf, \
|
||||
SYS_LCHMOD = 274; // { int lchmod(char *path, mode_t mode); }
|
||||
SYS_LUTIMES = 276; // { int lutimes(char *path, \
|
||||
SYS_NSTAT = 278; // { int nstat(char *path, struct nstat *ub); }
|
||||
SYS_NFSTAT = 279; // { int nfstat(int fd, struct nstat *sb); }
|
||||
SYS_NLSTAT = 280; // { int nlstat(char *path, struct nstat *ub); }
|
||||
SYS_PREADV = 289; // { ssize_t preadv(int fd, struct iovec *iovp, \
|
||||
SYS_PWRITEV = 290; // { ssize_t pwritev(int fd, struct iovec *iovp, \
|
||||
SYS_FHOPEN = 298; // { int fhopen(const struct fhandle *u_fhp, \
|
||||
SYS_FHSTAT = 299; // { int fhstat(const struct fhandle *u_fhp, \
|
||||
SYS_MODNEXT = 300; // { int modnext(int modid); }
|
||||
SYS_MODSTAT = 301; // { int modstat(int modid, \
|
||||
SYS_MODFNEXT = 302; // { int modfnext(int modid); }
|
||||
SYS_MODFIND = 303; // { int modfind(const char *name); }
|
||||
SYS_KLDLOAD = 304; // { int kldload(const char *file); }
|
||||
SYS_KLDUNLOAD = 305; // { int kldunload(int fileid); }
|
||||
SYS_KLDFIND = 306; // { int kldfind(const char *file); }
|
||||
SYS_KLDNEXT = 307; // { int kldnext(int fileid); }
|
||||
SYS_KLDSTAT = 308; // { int kldstat(int fileid, struct \
|
||||
SYS_KLDFIRSTMOD = 309; // { int kldfirstmod(int fileid); }
|
||||
SYS_GETSID = 310; // { int getsid(pid_t pid); }
|
||||
SYS_SETRESUID = 311; // { int setresuid(uid_t ruid, uid_t euid, \
|
||||
SYS_SETRESGID = 312; // { int setresgid(gid_t rgid, gid_t egid, \
|
||||
SYS_YIELD = 321; // { int yield(void); }
|
||||
SYS_MLOCKALL = 324; // { int mlockall(int how); }
|
||||
SYS_MUNLOCKALL = 325; // { int munlockall(void); }
|
||||
SYS___GETCWD = 326; // { int __getcwd(u_char *buf, u_int buflen); }
|
||||
SYS_SCHED_SETPARAM = 327; // { int sched_setparam (pid_t pid, \
|
||||
SYS_SCHED_GETPARAM = 328; // { int sched_getparam (pid_t pid, struct \
|
||||
SYS_SCHED_SETSCHEDULER = 329; // { int sched_setscheduler (pid_t pid, int \
|
||||
SYS_SCHED_GETSCHEDULER = 330; // { int sched_getscheduler (pid_t pid); }
|
||||
SYS_SCHED_YIELD = 331; // { int sched_yield (void); }
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 332; // { int sched_get_priority_max (int policy); }
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 333; // { int sched_get_priority_min (int policy); }
|
||||
SYS_SCHED_RR_GET_INTERVAL = 334; // { int sched_rr_get_interval (pid_t pid, \
|
||||
SYS_UTRACE = 335; // { int utrace(const void *addr, size_t len); }
|
||||
SYS_KLDSYM = 337; // { int kldsym(int fileid, int cmd, \
|
||||
SYS_JAIL = 338; // { int jail(struct jail *jail); }
|
||||
SYS_SIGPROCMASK = 340; // { int sigprocmask(int how, \
|
||||
SYS_SIGSUSPEND = 341; // { int sigsuspend(const sigset_t *sigmask); }
|
||||
SYS_SIGPENDING = 343; // { int sigpending(sigset_t *set); }
|
||||
SYS_SIGTIMEDWAIT = 345; // { int sigtimedwait(const sigset_t *set, \
|
||||
SYS_SIGWAITINFO = 346; // { int sigwaitinfo(const sigset_t *set, \
|
||||
SYS___ACL_GET_FILE = 347; // { int __acl_get_file(const char *path, \
|
||||
SYS___ACL_SET_FILE = 348; // { int __acl_set_file(const char *path, \
|
||||
SYS___ACL_GET_FD = 349; // { int __acl_get_fd(int filedes, \
|
||||
SYS___ACL_SET_FD = 350; // { int __acl_set_fd(int filedes, \
|
||||
SYS___ACL_DELETE_FILE = 351; // { int __acl_delete_file(const char *path, \
|
||||
SYS___ACL_DELETE_FD = 352; // { int __acl_delete_fd(int filedes, \
|
||||
SYS___ACL_ACLCHECK_FILE = 353; // { int __acl_aclcheck_file(const char *path, \
|
||||
SYS___ACL_ACLCHECK_FD = 354; // { int __acl_aclcheck_fd(int filedes, \
|
||||
SYS_EXTATTRCTL = 355; // { int extattrctl(const char *path, int cmd, \
|
||||
SYS_EXTATTR_SET_FILE = 356; // { int extattr_set_file( \
|
||||
SYS_EXTATTR_GET_FILE = 357; // { ssize_t extattr_get_file( \
|
||||
SYS_EXTATTR_DELETE_FILE = 358; // { int extattr_delete_file(const char *path, \
|
||||
SYS_GETRESUID = 360; // { int getresuid(uid_t *ruid, uid_t *euid, \
|
||||
SYS_GETRESGID = 361; // { int getresgid(gid_t *rgid, gid_t *egid, \
|
||||
SYS_KQUEUE = 362; // { int kqueue(void); }
|
||||
SYS_KEVENT = 363; // { int kevent(int fd, \
|
||||
SYS_EXTATTR_SET_FD = 371; // { int extattr_set_fd(int fd, \
|
||||
SYS_EXTATTR_GET_FD = 372; // { ssize_t extattr_get_fd(int fd, \
|
||||
SYS_EXTATTR_DELETE_FD = 373; // { int extattr_delete_fd(int fd, \
|
||||
SYS___SETUGID = 374; // { int __setugid(int flag); }
|
||||
SYS_EACCESS = 376; // { int eaccess(char *path, int flags); }
|
||||
SYS_NMOUNT = 378; // { int nmount(struct iovec *iovp, \
|
||||
SYS___MAC_GET_PROC = 384; // { int __mac_get_proc(struct mac *mac_p); }
|
||||
SYS___MAC_SET_PROC = 385; // { int __mac_set_proc(struct mac *mac_p); }
|
||||
SYS___MAC_GET_FD = 386; // { int __mac_get_fd(int fd, \
|
||||
SYS___MAC_GET_FILE = 387; // { int __mac_get_file(const char *path_p, \
|
||||
SYS___MAC_SET_FD = 388; // { int __mac_set_fd(int fd, \
|
||||
SYS___MAC_SET_FILE = 389; // { int __mac_set_file(const char *path_p, \
|
||||
SYS_KENV = 390; // { int kenv(int what, const char *name, \
|
||||
SYS_LCHFLAGS = 391; // { int lchflags(const char *path, int flags); }
|
||||
SYS_UUIDGEN = 392; // { int uuidgen(struct uuid *store, \
|
||||
SYS_SENDFILE = 393; // { int sendfile(int fd, int s, off_t offset, \
|
||||
SYS_MAC_SYSCALL = 394; // { int mac_syscall(const char *policy, \
|
||||
SYS_GETFSSTAT = 395; // { int getfsstat(struct statfs *buf, \
|
||||
SYS_STATFS = 396; // { int statfs(char *path, \
|
||||
SYS_FSTATFS = 397; // { int fstatfs(int fd, struct statfs *buf); }
|
||||
SYS_FHSTATFS = 398; // { int fhstatfs(const struct fhandle *u_fhp, \
|
||||
SYS___MAC_GET_PID = 409; // { int __mac_get_pid(pid_t pid, \
|
||||
SYS___MAC_GET_LINK = 410; // { int __mac_get_link(const char *path_p, \
|
||||
SYS___MAC_SET_LINK = 411; // { int __mac_set_link(const char *path_p, \
|
||||
SYS_EXTATTR_SET_LINK = 412; // { int extattr_set_link( \
|
||||
SYS_EXTATTR_GET_LINK = 413; // { ssize_t extattr_get_link( \
|
||||
SYS_EXTATTR_DELETE_LINK = 414; // { int extattr_delete_link( \
|
||||
SYS___MAC_EXECVE = 415; // { int __mac_execve(char *fname, char **argv, \
|
||||
SYS_SIGACTION = 416; // { int sigaction(int sig, \
|
||||
SYS_SIGRETURN = 417; // { int sigreturn( \
|
||||
SYS_GETCONTEXT = 421; // { int getcontext(struct __ucontext *ucp); }
|
||||
SYS_SETCONTEXT = 422; // { int setcontext( \
|
||||
SYS_SWAPCONTEXT = 423; // { int swapcontext(struct __ucontext *oucp, \
|
||||
SYS_SWAPOFF = 424; // { int swapoff(const char *name); }
|
||||
SYS___ACL_GET_LINK = 425; // { int __acl_get_link(const char *path, \
|
||||
SYS___ACL_SET_LINK = 426; // { int __acl_set_link(const char *path, \
|
||||
SYS___ACL_DELETE_LINK = 427; // { int __acl_delete_link(const char *path, \
|
||||
SYS___ACL_ACLCHECK_LINK = 428; // { int __acl_aclcheck_link(const char *path, \
|
||||
SYS_SIGWAIT = 429; // { int sigwait(const sigset_t *set, \
|
||||
SYS_THR_CREATE = 430; // { int thr_create(ucontext_t *ctx, long *id, \
|
||||
SYS_THR_EXIT = 431; // { void thr_exit(long *state); }
|
||||
SYS_THR_SELF = 432; // { int thr_self(long *id); }
|
||||
SYS_THR_KILL = 433; // { int thr_kill(long id, int sig); }
|
||||
SYS__UMTX_LOCK = 434; // { int _umtx_lock(struct umtx *umtx); }
|
||||
SYS__UMTX_UNLOCK = 435; // { int _umtx_unlock(struct umtx *umtx); }
|
||||
SYS_JAIL_ATTACH = 436; // { int jail_attach(int jid); }
|
||||
SYS_EXTATTR_LIST_FD = 437; // { ssize_t extattr_list_fd(int fd, \
|
||||
SYS_EXTATTR_LIST_FILE = 438; // { ssize_t extattr_list_file( \
|
||||
SYS_EXTATTR_LIST_LINK = 439; // { ssize_t extattr_list_link( \
|
||||
SYS_THR_SUSPEND = 442; // { int thr_suspend( \
|
||||
SYS_THR_WAKE = 443; // { int thr_wake(long id); }
|
||||
SYS_KLDUNLOADF = 444; // { int kldunloadf(int fileid, int flags); }
|
||||
SYS_AUDIT = 445; // { int audit(const void *record, \
|
||||
SYS_AUDITON = 446; // { int auditon(int cmd, void *data, \
|
||||
SYS_GETAUID = 447; // { int getauid(uid_t *auid); }
|
||||
SYS_SETAUID = 448; // { int setauid(uid_t *auid); }
|
||||
SYS_GETAUDIT = 449; // { int getaudit(struct auditinfo *auditinfo); }
|
||||
SYS_SETAUDIT = 450; // { int setaudit(struct auditinfo *auditinfo); }
|
||||
SYS_GETAUDIT_ADDR = 451; // { int getaudit_addr( \
|
||||
SYS_SETAUDIT_ADDR = 452; // { int setaudit_addr( \
|
||||
SYS_AUDITCTL = 453; // { int auditctl(char *path); }
|
||||
SYS__UMTX_OP = 454; // { int _umtx_op(void *obj, int op, \
|
||||
SYS_THR_NEW = 455; // { int thr_new(struct thr_param *param, \
|
||||
SYS_SIGQUEUE = 456; // { int sigqueue(pid_t pid, int signum, void *value); }
|
||||
SYS_ABORT2 = 463; // { int abort2(const char *why, int nargs, void **args); }
|
||||
SYS_THR_SET_NAME = 464; // { int thr_set_name(long id, const char *name); }
|
||||
SYS_RTPRIO_THREAD = 466; // { int rtprio_thread(int function, \
|
||||
SYS_SCTP_PEELOFF = 471; // { int sctp_peeloff(int sd, uint32_t name); }
|
||||
SYS_SCTP_GENERIC_SENDMSG = 472; // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \
|
||||
SYS_SCTP_GENERIC_SENDMSG_IOV = 473; // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \
|
||||
SYS_SCTP_GENERIC_RECVMSG = 474; // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
|
||||
SYS_PREAD = 475; // { ssize_t pread(int fd, void *buf, \
|
||||
SYS_PWRITE = 476; // { ssize_t pwrite(int fd, const void *buf, \
|
||||
SYS_MMAP = 477; // { caddr_t mmap(caddr_t addr, size_t len, \
|
||||
SYS_LSEEK = 478; // { off_t lseek(int fd, off_t offset, \
|
||||
SYS_TRUNCATE = 479; // { int truncate(char *path, off_t length); }
|
||||
SYS_FTRUNCATE = 480; // { int ftruncate(int fd, off_t length); }
|
||||
SYS_THR_KILL2 = 481; // { int thr_kill2(pid_t pid, long id, int sig); }
|
||||
SYS_SHM_OPEN = 482; // { int shm_open(const char *path, int flags, \
|
||||
SYS_SHM_UNLINK = 483; // { int shm_unlink(const char *path); }
|
||||
SYS_CPUSET = 484; // { int cpuset(cpusetid_t *setid); }
|
||||
SYS_CPUSET_SETID = 485; // { int cpuset_setid(cpuwhich_t which, id_t id, \
|
||||
SYS_CPUSET_GETID = 486; // { int cpuset_getid(cpulevel_t level, \
|
||||
SYS_CPUSET_GETAFFINITY = 487; // { int cpuset_getaffinity(cpulevel_t level, \
|
||||
SYS_CPUSET_SETAFFINITY = 488; // { int cpuset_setaffinity(cpulevel_t level, \
|
||||
SYS_FACCESSAT = 489; // { int faccessat(int fd, char *path, int mode, \
|
||||
SYS_FCHMODAT = 490; // { int fchmodat(int fd, char *path, mode_t mode, \
|
||||
SYS_FCHOWNAT = 491; // { int fchownat(int fd, char *path, uid_t uid, \
|
||||
SYS_FEXECVE = 492; // { int fexecve(int fd, char **argv, \
|
||||
SYS_FSTATAT = 493; // { int fstatat(int fd, char *path, \
|
||||
SYS_FUTIMESAT = 494; // { int futimesat(int fd, char *path, \
|
||||
SYS_LINKAT = 495; // { int linkat(int fd1, char *path1, int fd2, \
|
||||
SYS_MKDIRAT = 496; // { int mkdirat(int fd, char *path, mode_t mode); }
|
||||
SYS_MKFIFOAT = 497; // { int mkfifoat(int fd, char *path, mode_t mode); }
|
||||
SYS_MKNODAT = 498; // { int mknodat(int fd, char *path, mode_t mode, \
|
||||
SYS_OPENAT = 499; // { int openat(int fd, char *path, int flag, \
|
||||
SYS_READLINKAT = 500; // { int readlinkat(int fd, char *path, char *buf, \
|
||||
SYS_RENAMEAT = 501; // { int renameat(int oldfd, char *old, int newfd, \
|
||||
SYS_SYMLINKAT = 502; // { int symlinkat(char *path1, int fd, \
|
||||
SYS_UNLINKAT = 503; // { int unlinkat(int fd, char *path, int flag); }
|
||||
SYS_POSIX_OPENPT = 504; // { int posix_openpt(int flags); }
|
||||
SYS_JAIL_GET = 506; // { int jail_get(struct iovec *iovp, \
|
||||
SYS_JAIL_SET = 507; // { int jail_set(struct iovec *iovp, \
|
||||
SYS_JAIL_REMOVE = 508; // { int jail_remove(int jid); }
|
||||
SYS_CLOSEFROM = 509; // { int closefrom(int lowfd); }
|
||||
SYS_LPATHCONF = 513; // { int lpathconf(char *path, int name); }
|
||||
)
|
227
src/pkg/syscall/ztypes_freebsd_amd64.go
Normal file
227
src/pkg/syscall/ztypes_freebsd_amd64.go
Normal file
@ -0,0 +1,227 @@
|
||||
// godefs -gsyscall -f-m64 types_freebsd.c
|
||||
|
||||
// MACHINE GENERATED - DO NOT EDIT.
|
||||
|
||||
package syscall
|
||||
|
||||
// Constants
|
||||
const (
|
||||
sizeofPtr = 0x8;
|
||||
sizeofShort = 0x2;
|
||||
sizeofInt = 0x4;
|
||||
sizeofLong = 0x8;
|
||||
sizeofLongLong = 0x8;
|
||||
O_CLOEXEC = 0;
|
||||
S_IFMT = 0xf000;
|
||||
S_IFIFO = 0x1000;
|
||||
S_IFCHR = 0x2000;
|
||||
S_IFDIR = 0x4000;
|
||||
S_IFBLK = 0x6000;
|
||||
S_IFREG = 0x8000;
|
||||
S_IFLNK = 0xa000;
|
||||
S_IFSOCK = 0xc000;
|
||||
S_ISUID = 0x800;
|
||||
S_ISGID = 0x400;
|
||||
S_ISVTX = 0x200;
|
||||
S_IRUSR = 0x100;
|
||||
S_IWUSR = 0x80;
|
||||
S_IXUSR = 0x40;
|
||||
SizeofSockaddrInet4 = 0x10;
|
||||
SizeofSockaddrInet6 = 0x1c;
|
||||
SizeofSockaddrAny = 0x6c;
|
||||
SizeofSockaddrUnix = 0x6a;
|
||||
SizeofLinger = 0x8;
|
||||
SizeofMsghdr = 0x30;
|
||||
SizeofCmsghdr = 0xc;
|
||||
PTRACE_TRACEME = 0;
|
||||
PTRACE_CONT = 0x7;
|
||||
PTRACE_KILL = 0x8;
|
||||
)
|
||||
|
||||
// Types
|
||||
|
||||
type _C_short int16
|
||||
|
||||
type _C_int int32
|
||||
|
||||
type _C_long int64
|
||||
|
||||
type _C_long_long int64
|
||||
|
||||
type Timespec struct {
|
||||
Sec int64;
|
||||
Nsec int64;
|
||||
}
|
||||
|
||||
type Timeval struct {
|
||||
Sec int64;
|
||||
Usec int64;
|
||||
}
|
||||
|
||||
type Rusage struct {
|
||||
Utime Timeval;
|
||||
Stime Timeval;
|
||||
Maxrss int64;
|
||||
Ixrss int64;
|
||||
Idrss int64;
|
||||
Isrss int64;
|
||||
Minflt int64;
|
||||
Majflt int64;
|
||||
Nswap int64;
|
||||
Inblock int64;
|
||||
Oublock int64;
|
||||
Msgsnd int64;
|
||||
Msgrcv int64;
|
||||
Nsignals int64;
|
||||
Nvcsw int64;
|
||||
Nivcsw int64;
|
||||
}
|
||||
|
||||
type Rlimit struct {
|
||||
Cur int64;
|
||||
Max int64;
|
||||
}
|
||||
|
||||
type _Gid_t uint32
|
||||
|
||||
type Stat_t struct {
|
||||
Dev uint32;
|
||||
Ino uint32;
|
||||
Mode uint16;
|
||||
Nlink uint16;
|
||||
Uid uint32;
|
||||
Gid uint32;
|
||||
Rdev uint32;
|
||||
Atimespec Timespec;
|
||||
Mtimespec Timespec;
|
||||
Ctimespec Timespec;
|
||||
Size int64;
|
||||
Blocks int64;
|
||||
Blksize uint32;
|
||||
Flags uint32;
|
||||
Gen uint32;
|
||||
Lspare int32;
|
||||
Birthtimespec Timespec;
|
||||
Pad0 uint8;
|
||||
Pad1 uint8;
|
||||
}
|
||||
|
||||
type Statfs_t struct {
|
||||
Version uint32;
|
||||
Type uint32;
|
||||
Flags uint64;
|
||||
Bsize uint64;
|
||||
Iosize uint64;
|
||||
Blocks uint64;
|
||||
Bfree uint64;
|
||||
Bavail int64;
|
||||
Files uint64;
|
||||
Ffree int64;
|
||||
Syncwrites uint64;
|
||||
Asyncwrites uint64;
|
||||
Syncreads uint64;
|
||||
Asyncreads uint64;
|
||||
Spare [10]uint64;
|
||||
Namemax uint32;
|
||||
Owner uint32;
|
||||
Fsid [8]byte; /* fsid */
|
||||
Charspare [80]int8;
|
||||
Fstypename [16]int8;
|
||||
Mntfromname [88]int8;
|
||||
Mntonname [88]int8;
|
||||
}
|
||||
|
||||
type Flock_t struct {
|
||||
Start int64;
|
||||
Len int64;
|
||||
Pid int32;
|
||||
Type int16;
|
||||
Whence int16;
|
||||
Sysid int32;
|
||||
Pad0 [4]byte;
|
||||
}
|
||||
|
||||
type Dirent struct {
|
||||
Fileno uint32;
|
||||
Reclen uint16;
|
||||
Type uint8;
|
||||
Namlen uint8;
|
||||
Name [256]int8;
|
||||
}
|
||||
|
||||
type RawSockaddrInet4 struct {
|
||||
Len uint8;
|
||||
Family uint8;
|
||||
Port uint16;
|
||||
Addr [4]byte; /* in_addr */
|
||||
Zero [8]int8;
|
||||
}
|
||||
|
||||
type RawSockaddrInet6 struct {
|
||||
Len uint8;
|
||||
Family uint8;
|
||||
Port uint16;
|
||||
Flowinfo uint32;
|
||||
Addr [16]byte; /* in6_addr */
|
||||
Scope_id uint32;
|
||||
}
|
||||
|
||||
type RawSockaddrUnix struct {
|
||||
Len uint8;
|
||||
Family uint8;
|
||||
Path [104]int8;
|
||||
}
|
||||
|
||||
type RawSockaddr struct {
|
||||
Len uint8;
|
||||
Family uint8;
|
||||
Data [14]int8;
|
||||
}
|
||||
|
||||
type RawSockaddrAny struct {
|
||||
Addr RawSockaddr;
|
||||
Pad [92]int8;
|
||||
}
|
||||
|
||||
type _Socklen uint32
|
||||
|
||||
type Linger struct {
|
||||
Onoff int32;
|
||||
Linger int32;
|
||||
}
|
||||
|
||||
type Iovec struct {
|
||||
Base *byte;
|
||||
Len uint64;
|
||||
}
|
||||
|
||||
type Msghdr struct {
|
||||
Name *byte;
|
||||
Namelen uint32;
|
||||
Pad0 [4]byte;
|
||||
Iov *Iovec;
|
||||
Iovlen int32;
|
||||
Pad1 [4]byte;
|
||||
Control *byte;
|
||||
Controllen uint32;
|
||||
Flags int32;
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint32;
|
||||
Level int32;
|
||||
Type int32;
|
||||
}
|
||||
|
||||
type Kevent_t struct {
|
||||
Ident uint64;
|
||||
Filter int16;
|
||||
Flags uint16;
|
||||
Fflags uint32;
|
||||
Data int64;
|
||||
Udata *byte;
|
||||
}
|
||||
|
||||
type FdSet struct {
|
||||
X__fds_bits [16]uint64;
|
||||
}
|
@ -14,7 +14,7 @@ func init() {
|
||||
// Force US Pacific time for daylight-savings
|
||||
// tests below (localtests). Needs to be set
|
||||
// before the first call into the time library.
|
||||
os.Setenv("TZ", "US/Pacific")
|
||||
os.Setenv("TZ", "America/Los_Angeles")
|
||||
}
|
||||
|
||||
type TimeTest struct {
|
||||
|
Loading…
Reference in New Issue
Block a user