2010-03-09 16:09:09 -07:00
|
|
|
// 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) {
|
2010-06-11 02:38:12 -06:00
|
|
|
StdcallParams p;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
p.fn = (void*)runtime·LoadLibraryEx;
|
2010-06-11 02:38:12 -06:00
|
|
|
p.args[0] = filename;
|
|
|
|
p.args[1] = 0;
|
|
|
|
p.args[2] = 0;
|
2010-09-11 19:45:16 -06:00
|
|
|
p.n = 3;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
runtime·syscall(&p);
|
2010-06-11 02:38:12 -06:00
|
|
|
handle = p.r;
|
2010-03-09 16:09:09 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func getprocaddress(handle uint32, procname uintptr) (proc uintptr) {
|
2010-06-11 02:38:12 -06:00
|
|
|
StdcallParams p;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
p.fn = (void*)runtime·GetProcAddress;
|
2010-06-11 02:38:12 -06:00
|
|
|
p.args[0] = handle;
|
|
|
|
p.args[1] = procname;
|
2010-09-11 19:45:16 -06:00
|
|
|
p.n = 2;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
runtime·syscall(&p);
|
2010-06-11 02:38:12 -06:00
|
|
|
proc = p.r;
|
2010-03-09 16:09:09 -07:00
|
|
|
}
|
|
|
|
|
2011-01-21 19:55:53 -07:00
|
|
|
func compileCallback(code *byte, fn uintptr, argsize uint32) {
|
|
|
|
runtime·compilecallback(code, (void*)fn, argsize);
|
|
|
|
}
|
|
|
|
|
2010-03-09 16:09:09 -07:00
|
|
|
func Syscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
|
2010-06-11 02:38:12 -06:00
|
|
|
StdcallParams p;
|
|
|
|
p.fn = (void*)trap;
|
|
|
|
p.args[0] = a1;
|
|
|
|
p.args[1] = a2;
|
|
|
|
p.args[2] = a3;
|
2010-09-11 19:45:16 -06:00
|
|
|
p.n = 3;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
runtime·syscall(&p);
|
2010-06-11 02:38:12 -06:00
|
|
|
r1 = p.r;
|
|
|
|
r2 = 0;
|
|
|
|
err = p.err;
|
2010-03-09 16:09:09 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func Syscall6(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
|
2010-06-11 02:38:12 -06:00
|
|
|
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;
|
2010-09-11 19:45:16 -06:00
|
|
|
p.n = 6;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
runtime·syscall(&p);
|
2010-06-11 02:38:12 -06:00
|
|
|
r1 = p.r;
|
|
|
|
r2 = 0;
|
|
|
|
err = p.err;
|
2010-03-17 00:10:07 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
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) {
|
2010-06-11 02:38:12 -06:00
|
|
|
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;
|
2010-09-11 19:45:16 -06:00
|
|
|
p.n = 9;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
runtime·syscall(&p);
|
2010-06-11 02:38:12 -06:00
|
|
|
r1 = p.r;
|
|
|
|
r2 = 0;
|
|
|
|
lasterr = p.err;
|
2010-03-09 16:09:09 -07:00
|
|
|
}
|
|
|
|
|
2010-07-25 17:43:35 -06:00
|
|
|
func Syscall12(trap 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) (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;
|
|
|
|
p.args[9] = a10;
|
|
|
|
p.args[10] = a11;
|
|
|
|
p.args[11] = a12;
|
2010-09-11 19:45:16 -06:00
|
|
|
p.n = 12;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
runtime·syscall(&p);
|
2010-07-25 17:43:35 -06:00
|
|
|
r1 = p.r;
|
|
|
|
r2 = 0;
|
|
|
|
lasterr = p.err;
|
|
|
|
}
|
|
|
|
|
2010-03-09 16:09:09 -07:00
|
|
|
func RawSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) {
|
2010-06-11 02:38:12 -06:00
|
|
|
StdcallParams p;
|
|
|
|
p.fn = (void*)trap;
|
|
|
|
p.args[0] = a1;
|
|
|
|
p.args[1] = a2;
|
|
|
|
p.args[2] = a3;
|
2010-09-11 19:45:16 -06:00
|
|
|
p.n = 3;
|
runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almost
Prefix all external symbols in runtime by runtime·,
to avoid conflicts with possible symbols of the same
name in linked-in C libraries. The obvious conflicts
are printf, malloc, and free, but hide everything to
avoid future pain.
The symbols left alone are:
** known to cgo **
_cgo_free
_cgo_malloc
libcgo_thread_start
initcgo
ncgocall
** known to linker **
_rt0_$GOARCH
_rt0_$GOARCH_$GOOS
text
etext
data
end
pclntab
epclntab
symtab
esymtab
** known to C compiler **
_divv
_modv
_div64by32
etc (arch specific)
Tested on darwin/386, darwin/amd64, linux/386, linux/amd64.
Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386.
R=r, PeterGo
CC=golang-dev
https://golang.org/cl/2899041
2010-11-04 12:00:19 -06:00
|
|
|
runtime·syscall(&p);
|
2010-06-11 02:38:12 -06:00
|
|
|
r1 = p.r;
|
2010-03-09 16:09:09 -07:00
|
|
|
r2 = 0;
|
2010-06-11 02:38:12 -06:00
|
|
|
err = p.err;
|
2010-03-09 16:09:09 -07:00
|
|
|
}
|