@@ -454,43 +454,37 @@ func syscall_getprocaddress(handle uintptr, procname *byte) (outhandle, err uint
454
454
//go:linkname syscall_Syscall syscall.Syscall
455
455
//go:nosplit
456
456
func syscall_Syscall (fn , nargs , a1 , a2 , a3 uintptr ) (r1 , r2 , err uintptr ) {
457
- args := [... ]uintptr {a1 , a2 , a3 }
458
- return syscall_SyscallN (fn , args [:nargs ]... )
457
+ return syscall_syscalln (fn , nargs , a1 , a2 , a3 )
459
458
}
460
459
461
460
//go:linkname syscall_Syscall6 syscall.Syscall6
462
461
//go:nosplit
463
462
func syscall_Syscall6 (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 uintptr ) (r1 , r2 , err uintptr ) {
464
- args := [... ]uintptr {a1 , a2 , a3 , a4 , a5 , a6 }
465
- return syscall_SyscallN (fn , args [:nargs ]... )
463
+ return syscall_syscalln (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 )
466
464
}
467
465
468
466
//go:linkname syscall_Syscall9 syscall.Syscall9
469
467
//go:nosplit
470
468
func syscall_Syscall9 (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 uintptr ) (r1 , r2 , err uintptr ) {
471
- args := [... ]uintptr {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 }
472
- return syscall_SyscallN (fn , args [:nargs ]... )
469
+ return syscall_syscalln (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 )
473
470
}
474
471
475
472
//go:linkname syscall_Syscall12 syscall.Syscall12
476
473
//go:nosplit
477
474
func syscall_Syscall12 (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 uintptr ) (r1 , r2 , err uintptr ) {
478
- args := [... ]uintptr {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 }
479
- return syscall_SyscallN (fn , args [:nargs ]... )
475
+ return syscall_syscalln (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 )
480
476
}
481
477
482
478
//go:linkname syscall_Syscall15 syscall.Syscall15
483
479
//go:nosplit
484
480
func syscall_Syscall15 (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 uintptr ) (r1 , r2 , err uintptr ) {
485
- args := [... ]uintptr {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 }
486
- return syscall_SyscallN (fn , args [:nargs ]... )
481
+ return syscall_syscalln (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 )
487
482
}
488
483
489
484
//go:linkname syscall_Syscall18 syscall.Syscall18
490
485
//go:nosplit
491
486
func syscall_Syscall18 (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 uintptr ) (r1 , r2 , err uintptr ) {
492
- args := [... ]uintptr {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 }
493
- return syscall_SyscallN (fn , args [:nargs ]... )
487
+ return syscall_syscalln (fn , nargs , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 )
494
488
}
495
489
496
490
// maxArgs should be divisible by 2, as Windows stack
@@ -503,7 +497,15 @@ const maxArgs = 42
503
497
//go:linkname syscall_SyscallN syscall.SyscallN
504
498
//go:nosplit
505
499
func syscall_SyscallN (fn uintptr , args ... uintptr ) (r1 , r2 , err uintptr ) {
506
- if len (args ) > maxArgs {
500
+ return syscall_syscalln (fn , uintptr (len (args )), args ... )
501
+ }
502
+
503
+ //go:nosplit
504
+ func syscall_syscalln (fn , n uintptr , args ... uintptr ) (r1 , r2 , err uintptr ) {
505
+ if n > uintptr (len (args )) {
506
+ panic ("syscall: n > len(args)" ) // should not be reachable from user code
507
+ }
508
+ if n > maxArgs {
507
509
panic ("runtime: SyscallN has too many arguments" )
508
510
}
509
511
@@ -512,7 +514,7 @@ func syscall_SyscallN(fn uintptr, args ...uintptr) (r1, r2, err uintptr) {
512
514
// calls back into Go.
513
515
c := & getg ().m .winsyscall
514
516
c .fn = fn
515
- c .n = uintptr ( len ( args ))
517
+ c .n = n
516
518
if c .n != 0 {
517
519
c .args = uintptr (noescape (unsafe .Pointer (& args [0 ])))
518
520
}
0 commit comments