Skip to content

Commit a929c3a

Browse files
committed
x/sys/windows: use SyscallN in mkwinsyscall
The mkwinsyscall command has a hard limit of 15 on the number of syscall arguments. Windows has several system calls with more than 15 arguments, for example CreateFontPackage has 18 arguments. If the number of arguments is higher than 15 we use SyscallN. Updates golang/go#57914
1 parent 552c4e8 commit a929c3a

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

windows/mkwinsyscall/mkwinsyscall.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ import (
5757
"go/parser"
5858
"go/token"
5959
"io"
60-
"io/ioutil"
6160
"log"
6261
"os"
6362
"path/filepath"
@@ -568,6 +567,8 @@ func (f *Fn) SyscallParamCount() int {
568567
return 12
569568
case n <= 15:
570569
return 15
570+
case n <= 42: // current SyscallN limit
571+
return n
571572
default:
572573
panic("too many arguments to system call")
573574
}
@@ -578,11 +579,13 @@ func (f *Fn) Syscall() string {
578579
c := f.SyscallParamCount()
579580
if c == 3 {
580581
return syscalldot() + "Syscall"
582+
} else if c > 15 {
583+
return syscalldot() + "SyscallN"
581584
}
582585
return syscalldot() + "Syscall" + strconv.Itoa(c)
583586
}
584587

585-
// SyscallParamList returns source code for SyscallX parameters for function f.
588+
// SyscallParamList returns source code for SyscallN parameters for function f.
586589
func (f *Fn) SyscallParamList() string {
587590
a := make([]string, 0)
588591
for _, p := range f.Params {
@@ -923,7 +926,7 @@ func main() {
923926
if *filename == "" {
924927
_, err = os.Stdout.Write(data)
925928
} else {
926-
err = ioutil.WriteFile(*filename, data, 0644)
929+
err = os.WriteFile(*filename, data, 0644)
927930
}
928931
if err != nil {
929932
log.Fatal(err)
@@ -1011,7 +1014,7 @@ func {{.HelperName}}({{.HelperParamList}}) {{template "results" .}}{
10111014
10121015
{{define "results"}}{{if .Rets.List}}{{.Rets.List}} {{end}}{{end}}
10131016
1014-
{{define "syscall"}}{{.Rets.SetReturnValuesCode}}{{.Syscall}}(proc{{.DLLFuncName}}.Addr(), {{.ParamCount}}, {{.SyscallParamList}}){{end}}
1017+
{{define "syscall"}}{{.Rets.SetReturnValuesCode}}{{.Syscall}}(proc{{.DLLFuncName}}.Addr(), {{if le .ParamCount 15}}{{.ParamCount}},{{end}} {{.SyscallParamList}}){{end}}
10151018
10161019
{{define "tmpvarsreadback"}}{{range .Params}}{{if .TmpVarReadbackCode}}
10171020
{{.TmpVarReadbackCode}}{{end}}{{end}}{{end}}

0 commit comments

Comments
 (0)