]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: implement Syscall15
authorAlex Brainman <alex.brainman@gmail.com>
Mon, 28 Nov 2011 23:24:19 +0000 (10:24 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Mon, 28 Nov 2011 23:24:19 +0000 (10:24 +1100)
Fixes #2251.

R=golang-dev, rsc
CC=golang-dev, jp
https://golang.org/cl/5440050

src/pkg/runtime/windows/amd64/sys.s
src/pkg/runtime/windows/syscall.goc
src/pkg/syscall/dll_windows.go
src/pkg/syscall/mksyscall_windows.pl

index 113db2004bb996a3573363f3fe4e7cec67dffddc..04e36855466120fb46d2933683e1268377e4f103 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "amd64/asm.h"
 
-#define maxargs 12
+#define maxargs 15
 
 // void runtime·asmstdcall(void *c);
 TEXT runtime·asmstdcall(SB),7,$0
index 8997fd3a44dad3bc06ffbbdb17495e337ab888d7..d97a6cafd6ddac5b9674110e7b57775e9798cf31 100644 (file)
@@ -117,3 +117,29 @@ func Syscall12(fn uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4
        r1 = c.r1;
        r2 = c.r2;
 }
+
+func Syscall15(fn uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr, a7 uintptr, a8 uintptr, a9 uintptr, a10 uintptr, a11 uintptr, a12 uintptr, a13 uintptr, a14 uintptr, a15 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
+       WinCall c;
+
+       USED(a2);
+       USED(a3);
+       USED(a4);
+       USED(a5);
+       USED(a6);
+       USED(a7);
+       USED(a8);
+       USED(a9);
+       USED(a10);
+       USED(a11);
+       USED(a12);
+       USED(a13);
+       USED(a14);
+       USED(a15);
+       c.fn = (void*)fn;
+       c.n = nargs;
+       c.args = &a1;
+       runtime·cgocall(runtime·asmstdcall, &c);
+       err = c.err;
+       r1 = c.r1;
+       r2 = c.r2;
+}
index c6acdfce2c35e6c35d314b875e6e6b74fde1f4b7..88f5a75777b6ac934b99c81079ef24a2e2fc70f4 100644 (file)
@@ -37,6 +37,7 @@ func Syscall(trap, nargs, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 func Syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 func Syscall9(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
 func Syscall12(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 uintptr) (r1, r2 uintptr, err Errno)
+func Syscall15(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2 uintptr, err Errno)
 func loadlibrary(filename *uint16) (handle, err Errno)
 func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err Errno)
 
@@ -147,6 +148,12 @@ func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, err error) {
                return Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0)
        case 12:
                return Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11])
+       case 13:
+               return Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0)
+       case 14:
+               return Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0)
+       case 15:
+               return Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14])
        default:
                panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".")
        }
index 7ea227e631860ebee499cde0a0bdd9a131990c53..3b3df92bb7246ad8bfa31b03c303a70076ecb05c 100755 (executable)
@@ -190,6 +190,11 @@ while(<>) {
                while(@args < 12) {
                        push @args, "0";
                }
+       } elsif(@args <= 15) {
+               $asm = "${syscalldot}Syscall15";
+               while(@args < 15) {
+                       push @args, "0";
+               }
        } else {
                print STDERR "$ARGV:$.: too many arguments to system call\n";
        }