Path: blob/main/vendor/golang.org/x/sys/unix/gccgo_c.c
2880 views
// Copyright 2015 The Go Authors. All rights reserved.1// Use of this source code is governed by a BSD-style2// license that can be found in the LICENSE file.34//go:build gccgo && !aix && !hurd56#include <errno.h>7#include <stdint.h>8#include <unistd.h>910#define _STRINGIFY2_(x) #x11#define _STRINGIFY_(x) _STRINGIFY2_(x)12#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)1314// Call syscall from C code because the gccgo support for calling from15// Go to C does not support varargs functions.1617struct ret {18uintptr_t r;19uintptr_t err;20};2122struct 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)23__asm__(GOSYM_PREFIX GOPKGPATH ".realSyscall");2425struct ret26gccgoRealSyscall(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)27{28struct ret r;2930errno = 0;31r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);32r.err = errno;33return r;34}3536uintptr_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)37__asm__(GOSYM_PREFIX GOPKGPATH ".realSyscallNoError");3839uintptr_t40gccgoRealSyscallNoError(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)41{42return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);43}444546