summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/mingw/syscall.goc
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/mingw/syscall.goc')
-rw-r--r--src/pkg/runtime/mingw/syscall.goc45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/pkg/runtime/mingw/syscall.goc b/src/pkg/runtime/mingw/syscall.goc
new file mode 100644
index 000000000..6bccc486d
--- /dev/null
+++ b/src/pkg/runtime/mingw/syscall.goc
@@ -0,0 +1,45 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package syscall
+#include "runtime.h"
+#include "os.h"
+
+func loadlibraryex(filename uintptr) (handle uint32) {
+ handle = (uint32)stdcall(LoadLibraryEx, filename, 0, 0);
+}
+
+func getprocaddress(handle uint32, procname uintptr) (proc uintptr) {
+ proc = (uintptr)stdcall(GetProcAddress, handle, procname);
+}
+
+func Syscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
+ ·entersyscall();
+ r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3);
+ r2 = 0;
+ err = (uintptr)stdcall_raw(GetLastError);
+ ·exitsyscall();
+}
+
+func Syscall6(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
+ ·entersyscall();
+ r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3, a4, a5, a6);
+ r2 = 0;
+ err = (uintptr)stdcall_raw(GetLastError);
+ ·exitsyscall();
+}
+
+func Syscall9(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr, a7 uintptr, a8 uintptr, a9 uintptr) (r1 uintptr, r2 uintptr, lasterr uintptr) {
+ ·entersyscall();
+ r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ r2 = 0;
+ lasterr = (uintptr)stdcall_raw(GetLastError);
+ ·exitsyscall();
+}
+
+func RawSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
+ r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3);
+ r2 = 0;
+ err = (uintptr)stdcall_raw(GetLastError);
+}