diff options
author | Russ Cox <rsc@golang.org> | 2010-09-19 23:28:45 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-09-19 23:28:45 -0400 |
commit | 950ee183661ce8dd1dfe1bc0e85f384c849ab1a4 (patch) | |
tree | 62dc18890499f52e8c49d70914fb40cb2a86131a | |
parent | 33c4ff06693cc7b12e1b4f6a1250aa3d01016bfc (diff) | |
download | go-950ee183661ce8dd1dfe1bc0e85f384c849ab1a4.tar.gz go-950ee183661ce8dd1dfe1bc0e85f384c849ab1a4.zip |
syscall: fix NaCl
missing from last CL, sorry
R=r
CC=golang-dev
https://golang.org/cl/2214043
-rwxr-xr-x | src/pkg/syscall/mksyscall.sh | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/pkg/syscall/mksyscall.sh b/src/pkg/syscall/mksyscall.sh index d63d9e69fa..d785823b14 100755 --- a/src/pkg/syscall/mksyscall.sh +++ b/src/pkg/syscall/mksyscall.sh @@ -16,6 +16,7 @@ $cmdline = "mksyscall.sh " . join(' ', @ARGV); $errors = 0; $_32bit = ""; +$nacl = 0; if($ARGV[0] eq "-b32") { $_32bit = "big-endian"; @@ -24,6 +25,10 @@ if($ARGV[0] eq "-b32") { $_32bit = "little-endian"; shift; } +if($ARGV[0] eq "-nacl") { + $nacl = 1; + shift; +} if($ARGV[0] =~ /^-/) { print STDERR "usage: mksyscall.sh [-b32 | -l32] [file ...]\n"; @@ -89,9 +94,15 @@ while(<>) { # Convert slice into pointer, length. # Have to be careful not to take address of &a[0] if len == 0: # pass nil in that case. - $text .= "\tvar _p$n *$1\n"; - $text .= "\tif len($name) > 0 {\n\t\t_p$n = \&${name}[0]\n\t}\n"; - push @args, "uintptr(unsafe.Pointer(_p$n))", "uintptr(len($name))"; + $text .= "\tvar _p$n unsafe.Pointer\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; + if($nacl) { + # NaCl rejects zero length write with nil pointer, + # so use non-nil pointer. + $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero[0])\n\t}"; + } + $text .= "\n"; + push @args, "uintptr(_p$n)", "uintptr(len($name))"; $n++; } elsif($type eq "int64" && $_32bit ne "") { if($_32bit eq "big-endian") { |