diff options
Diffstat (limited to 'vendor/golang.org/x/sys/unix/gccgo_c.c')
| -rw-r--r-- | vendor/golang.org/x/sys/unix/gccgo_c.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c new file mode 100644 index 0000000..d468b7b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_c.c | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | // Copyright 2015 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | //go:build gccgo && !aix && !hurd | ||
| 6 | |||
| 7 | #include <errno.h> | ||
| 8 | #include <stdint.h> | ||
| 9 | #include <unistd.h> | ||
| 10 | |||
| 11 | #define _STRINGIFY2_(x) #x | ||
| 12 | #define _STRINGIFY_(x) _STRINGIFY2_(x) | ||
| 13 | #define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__) | ||
| 14 | |||
| 15 | // Call syscall from C code because the gccgo support for calling from | ||
| 16 | // Go to C does not support varargs functions. | ||
| 17 | |||
| 18 | struct ret { | ||
| 19 | uintptr_t r; | ||
| 20 | uintptr_t err; | ||
| 21 | }; | ||
| 22 | |||
| 23 | struct ret gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) | ||
| 24 | __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscall"); | ||
| 25 | |||
| 26 | struct ret | ||
| 27 | gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) | ||
| 28 | { | ||
| 29 | struct ret r; | ||
| 30 | |||
| 31 | errno = 0; | ||
| 32 | r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); | ||
| 33 | r.err = errno; | ||
| 34 | return r; | ||
| 35 | } | ||
| 36 | |||
| 37 | uintptr_t gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) | ||
| 38 | __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscallNoError"); | ||
| 39 | |||
| 40 | uintptr_t | ||
| 41 | gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) | ||
| 42 | { | ||
| 43 | return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); | ||
| 44 | } | ||