diff --git a/plan9/asm.s b/plan9/asm.s new file mode 100644 index 00000000..d4ca868f --- /dev/null +++ b/plan9/asm.s @@ -0,0 +1,8 @@ +// Copyright 2014 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 "textflag.h" + +TEXT ·use(SB),NOSPLIT,$0 + RET diff --git a/plan9/mksyscall.pl b/plan9/mksyscall.pl index 81c09ea7..ce8e1e4f 100755 --- a/plan9/mksyscall.pl +++ b/plan9/mksyscall.pl @@ -132,6 +132,7 @@ while(<>) { # Prepare arguments to Syscall. my @args = (); + my @uses = (); my $n = 0; foreach my $p (@in) { my ($name, $type) = parseparam($p); @@ -142,12 +143,14 @@ while(<>) { $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; $n++; } elsif($type eq "string") { print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; $text .= "\tvar _p$n *byte\n"; $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; $n++; } elsif($type =~ /^\[\](.*)/) { # Convert slice into pointer, length. @@ -278,6 +281,9 @@ while(<>) { } else { $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; } + foreach my $use (@uses) { + $text .= "\t$use\n"; + } $text .= $body; if ($plan9 && $ret[2] eq "e1") { diff --git a/plan9/zsyscall_plan9_386.go b/plan9/zsyscall_plan9_386.go index 0714cc2f..abfab742 100644 --- a/plan9/zsyscall_plan9_386.go +++ b/plan9/zsyscall_plan9_386.go @@ -1,4 +1,4 @@ -// mksyscall.pl -l32 -plan9 syscall_plan9.go syscall_plan9_386.go +// mksyscall.pl -l32 -plan9 syscall_plan9.go // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT package plan9 @@ -15,7 +15,7 @@ func fd2path(fd int, buf []byte) (err error) { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -25,7 +25,7 @@ func fd2path(fd int, buf []byte) (err error) { func pipe(p *[2]_C_int) (err error) { r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -42,7 +42,7 @@ func await(s []byte) (n int, err error) { } r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) n = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -53,7 +53,7 @@ func await(s []byte) (n int, err error) { func Dup(oldfd int, newfd int) (fd int, err error) { r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) fd = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -68,8 +68,9 @@ func Open(path string, mode int) (fd int, err error) { return } r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) fd = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -84,8 +85,9 @@ func Create(path string, mode int, perm uint32) (fd int, err error) { return } r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) fd = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -100,7 +102,8 @@ func Remove(path string) (err error) { return } r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if int(r0) == -1 { + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { err = e1 } return @@ -117,7 +120,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { } r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) n = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -134,7 +137,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { } r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) n = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -144,7 +147,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { func Close(fd int) (err error) { r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -159,7 +162,8 @@ func Chdir(path string) (err error) { return } r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if int(r0) == -1 { + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { err = e1 } return @@ -179,7 +183,9 @@ func Bind(name string, old string, flag int) (err error) { return } r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) - if int(r0) == -1 { + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { err = e1 } return @@ -199,7 +205,9 @@ func Mount(fd int, afd int, old string, flag int, aname string) (err error) { return } r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) - if int(r0) == -1 { + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { err = e1 } return @@ -220,8 +228,9 @@ func Stat(path string, edir []byte) (n int, err error) { _p1 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) n = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -238,7 +247,7 @@ func Fstat(fd int, edir []byte) (n int, err error) { } r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) n = int(r0) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return @@ -259,7 +268,8 @@ func Wstat(path string, edir []byte) (err error) { _p1 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) - if int(r0) == -1 { + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { err = e1 } return @@ -275,7 +285,7 @@ func Fwstat(fd int, edir []byte) (err error) { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) - if int(r0) == -1 { + if int32(r0) == -1 { err = e1 } return diff --git a/plan9/zsyscall_plan9_amd64.go b/plan9/zsyscall_plan9_amd64.go index 4fc7b2e1..abfab742 100644 --- a/plan9/zsyscall_plan9_amd64.go +++ b/plan9/zsyscall_plan9_amd64.go @@ -1,4 +1,4 @@ -// mksyscall.pl -l32 -plan9 syscall_plan9.go syscall_plan9_amd64.go +// mksyscall.pl -l32 -plan9 syscall_plan9.go // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT package plan9 @@ -68,6 +68,7 @@ func Open(path string, mode int) (fd int, err error) { return } r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) fd = int(r0) if int32(r0) == -1 { err = e1 @@ -84,6 +85,7 @@ func Create(path string, mode int, perm uint32) (fd int, err error) { return } r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) fd = int(r0) if int32(r0) == -1 { err = e1 @@ -100,6 +102,7 @@ func Remove(path string) (err error) { return } r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) if int32(r0) == -1 { err = e1 } @@ -159,6 +162,7 @@ func Chdir(path string) (err error) { return } r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) if int32(r0) == -1 { err = e1 } @@ -179,6 +183,8 @@ func Bind(name string, old string, flag int) (err error) { return } r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) if int32(r0) == -1 { err = e1 } @@ -199,6 +205,8 @@ func Mount(fd int, afd int, old string, flag int, aname string) (err error) { return } r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) if int32(r0) == -1 { err = e1 } @@ -220,6 +228,7 @@ func Stat(path string, edir []byte) (n int, err error) { _p1 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) n = int(r0) if int32(r0) == -1 { err = e1 @@ -259,6 +268,7 @@ func Wstat(path string, edir []byte) (err error) { _p1 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) if int32(r0) == -1 { err = e1 }