]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: fix NaCl
authorRuss Cox <rsc@golang.org>
Mon, 20 Sep 2010 03:28:45 +0000 (23:28 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 20 Sep 2010 03:28:45 +0000 (23:28 -0400)
missing from last CL, sorry

R=r
CC=golang-dev
https://golang.org/cl/2214043

src/pkg/syscall/mksyscall.sh

index d63d9e69fa922e7e2930dd0c1d4ebd49d0305bd9..d785823b149dac5c9a25c8a2f4dd5a33fba75bf1 100755 (executable)
@@ -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") {