OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [sysdeps/] [m68k/] [syscall.c] - Rev 1765

Compare with Previous | Blame | View Log

/* syscall.c - generalized linux system call interface - rick sladkey */
 
#include <stdarg.h>
#include <syscall.h>
#include <errno.h>
 
#ifdef PTHREAD_KERNEL
 
#pragma weak machdep_syscall = __machdep_syscall
 
int
__machdep_syscall (int number, ...)
{
  register long res asm ("%d0");
  register long d1 asm ("%d1"), d2 asm ("%d2"), d3 asm ("%d3");
  register long d4 asm ("%d4"), d5 asm ("%d5");
  va_list args;
 
  va_start (args, number);
  d1 = va_arg (args, int);
  d2 = va_arg (args, int);
  d3 = va_arg (args, int);
  d4 = va_arg (args, int);
  d5 = va_arg (args, int);
  va_end (args);
  __asm__ volatile ("trap  #0\n\t"
		    : "=g" (res)
		    : "0" (number), "g" (d1), "g" (d2), "g" (d3), "g" (d4),
		      "g" (d5)
		    : "%d0");
  return res;
}
 
#else /* PTHREAD_KERNEL */
 
/* No weak syscall?.  */
#undef _POSIX_THREADS
 
#ifdef _POSIX_THREADS
#pragma weak syscall
#endif
 
int
syscall(int number, ...)
{
	long res;
	register long d0 asm("%d0");
	register long d1 asm("%d1"), d2 asm("%d2"), d3 asm("%d3"),
		      d4 asm("%d4"), d5 asm("%d5");
	va_list args;
 
	va_start(args, number);
	d1 = va_arg(args, int);
	d2 = va_arg(args, int);
	d3 = va_arg(args, int);
	d4 = va_arg(args, int);
	d5 = va_arg(args, int);
	va_end(args);
	__asm__ volatile ("trap  #0\n\t"
		: "=g" (d0)
		: "0" (number), "g" (d1), "g" (d2), "g" (d3), "g" (d4),
                          "g" (d5)
		: "%d0");
	res = d0;
	if (res < 0) {
		errno = -res;
		res = -1;
	}
	return res;
}
 
#endif /* PTHREAD_KERNEL */
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.