mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-06 16:07:09 +08:00

It turns out that the standard "syscall" library is not recommended for new programs. runC will need to eventually move to this, but for now include it in vendor so we can use it for new features. Signed-off-by: Aleksa Sarai <asarai@suse.de>
42 lines
1014 B
C
42 lines
1014 B
C
// Copyright 2015 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.
|
|
|
|
// +build gccgo
|
|
|
|
#include <errno.h>
|
|
#include <stdint.h>
|
|
#include <unistd.h>
|
|
|
|
#define _STRINGIFY2_(x) #x
|
|
#define _STRINGIFY_(x) _STRINGIFY2_(x)
|
|
#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)
|
|
|
|
// Call syscall from C code because the gccgo support for calling from
|
|
// Go to C does not support varargs functions.
|
|
|
|
struct ret {
|
|
uintptr_t r;
|
|
uintptr_t err;
|
|
};
|
|
|
|
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)
|
|
{
|
|
struct ret r;
|
|
|
|
errno = 0;
|
|
r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
|
r.err = errno;
|
|
return r;
|
|
}
|
|
|
|
// Define the use function in C so that it is not inlined.
|
|
|
|
extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline));
|
|
|
|
void
|
|
use(void *p __attribute__ ((unused)))
|
|
{
|
|
}
|