summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/or1k/syscall.c
blob: 2f4356737cf8330dd96c25f7771a3b1444f1a0bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
 *  Copyright (C) 2017 Joel Stanley <joel@jms.id.au>
 *  Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
 */

#include <stdarg.h>
#include <sys/syscall.h>
#include <unistd.h>

long int syscall (long num, ...)
{
	unsigned long arg1 = 0;
	unsigned long arg2 = 0;
	unsigned long arg3 = 0;
	unsigned long arg4 = 0;
	unsigned long arg5 = 0;
	unsigned long arg6 = 0;
	va_list arg;

	va_start (arg, num);
	arg1 = va_arg (arg, unsigned long);
	arg2 = va_arg (arg, unsigned long);
	arg3 = va_arg (arg, unsigned long);
	arg4 = va_arg (arg, unsigned long);
	arg5 = va_arg (arg, unsigned long);
	arg6 = va_arg (arg, unsigned long);
	va_end (arg);

        __asm__ volatile ( "" ::: "memory" );

	return INLINE_SYSCALL_NCS(num, 6, arg1, arg2, arg3, arg4, arg5, arg6);
}