mirror of
https://github.com/golang/go
synced 2024-10-05 06:21:24 -06:00
c1e20720f7
R=rsc CC=golang-dev https://golang.org/cl/1381041
94 lines
2.0 KiB
Plaintext
94 lines
2.0 KiB
Plaintext
// 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) {
|
|
StdcallParams p;
|
|
p.fn = (void*)LoadLibraryEx;
|
|
p.args[0] = filename;
|
|
p.args[1] = 0;
|
|
p.args[2] = 0;
|
|
·entersyscall();
|
|
syscall(&p);
|
|
·exitsyscall();
|
|
handle = p.r;
|
|
}
|
|
|
|
func getprocaddress(handle uint32, procname uintptr) (proc uintptr) {
|
|
StdcallParams p;
|
|
p.fn = (void*)GetProcAddress;
|
|
p.args[0] = handle;
|
|
p.args[1] = procname;
|
|
·entersyscall();
|
|
syscall(&p);
|
|
·exitsyscall();
|
|
proc = p.r;
|
|
}
|
|
|
|
func Syscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
|
|
StdcallParams p;
|
|
p.fn = (void*)trap;
|
|
p.args[0] = a1;
|
|
p.args[1] = a2;
|
|
p.args[2] = a3;
|
|
·entersyscall();
|
|
syscall(&p);
|
|
·exitsyscall();
|
|
r1 = p.r;
|
|
r2 = 0;
|
|
err = p.err;
|
|
}
|
|
|
|
func Syscall6(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
|
|
StdcallParams p;
|
|
p.fn = (void*)trap;
|
|
p.args[0] = a1;
|
|
p.args[1] = a2;
|
|
p.args[2] = a3;
|
|
p.args[3] = a4;
|
|
p.args[4] = a5;
|
|
p.args[5] = a6;
|
|
·entersyscall();
|
|
syscall(&p);
|
|
·exitsyscall();
|
|
r1 = p.r;
|
|
r2 = 0;
|
|
err = p.err;
|
|
}
|
|
|
|
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) {
|
|
StdcallParams p;
|
|
p.fn = (void*)trap;
|
|
p.args[0] = a1;
|
|
p.args[1] = a2;
|
|
p.args[2] = a3;
|
|
p.args[3] = a4;
|
|
p.args[4] = a5;
|
|
p.args[5] = a6;
|
|
p.args[6] = a7;
|
|
p.args[7] = a8;
|
|
p.args[8] = a9;
|
|
·entersyscall();
|
|
syscall(&p);
|
|
·exitsyscall();
|
|
r1 = p.r;
|
|
r2 = 0;
|
|
lasterr = p.err;
|
|
}
|
|
|
|
func RawSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
|
|
StdcallParams p;
|
|
p.fn = (void*)trap;
|
|
p.args[0] = a1;
|
|
p.args[1] = a2;
|
|
p.args[2] = a3;
|
|
syscall(&p);
|
|
r1 = p.r;
|
|
r2 = 0;
|
|
err = p.err;
|
|
}
|