mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-11 09:56:29 +00:00
106 lines
2.4 KiB
C
106 lines
2.4 KiB
C
#ifndef SVC_H
|
|
#define SVC_H
|
|
#include <asm/unistd.h>
|
|
#include <sys/syscall.h>
|
|
|
|
static inline long
|
|
svc0(int num)
|
|
{
|
|
register int _num asm("1") = num;
|
|
register long ret asm("2");
|
|
|
|
asm volatile( "svc 0\n"
|
|
:"=d"(ret)
|
|
: "d" (_num)
|
|
: "cc", "memory");
|
|
return ret;
|
|
}
|
|
|
|
static inline long
|
|
svc1(int num, unsigned long arg1)
|
|
{
|
|
register int _num asm("1") = num;
|
|
register long ret asm("2");
|
|
register unsigned long _arg1 asm("2") = arg1;
|
|
|
|
asm volatile( "svc 0\n"
|
|
:"=d"(ret)
|
|
: "d" (_num), "d" (_arg1)
|
|
: "cc", "memory");
|
|
return ret;
|
|
}
|
|
|
|
static inline long
|
|
svc2(int num, unsigned long arg1, unsigned long arg2)
|
|
{
|
|
register int _num asm("1") = num;
|
|
register long ret asm("2");
|
|
register unsigned long _arg1 asm("2") = arg1;
|
|
register unsigned long _arg2 asm("3") = arg2;
|
|
|
|
asm volatile( "svc 0\n"
|
|
:"=d"(ret)
|
|
: "d" (_num), "d" (_arg1), "d" (_arg2)
|
|
: "cc", "memory");
|
|
return ret;
|
|
}
|
|
|
|
|
|
static inline long
|
|
svc3(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3)
|
|
{
|
|
register int _num asm("1") = num;
|
|
register long ret asm("2");
|
|
register unsigned long _arg1 asm("2") = arg1;
|
|
register unsigned long _arg2 asm("3") = arg2;
|
|
register unsigned long _arg3 asm("4") = arg3;
|
|
|
|
asm volatile( "svc 0\n"
|
|
:"=d"(ret)
|
|
: "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3)
|
|
: "cc", "memory");
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
static inline long
|
|
svc4(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4)
|
|
{
|
|
register int _num asm("1") = num;
|
|
register long ret asm("2");
|
|
register unsigned long _arg1 asm("2") = arg1;
|
|
register unsigned long _arg2 asm("3") = arg2;
|
|
register unsigned long _arg3 asm("4") = arg3;
|
|
register unsigned long _arg4 asm("5") = arg4;
|
|
|
|
asm volatile( "svc 0\n"
|
|
:"=d"(ret)
|
|
: "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3), "d" (_arg4)
|
|
: "cc", "memory");
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
static inline long
|
|
svc5(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4,
|
|
unsigned long arg5)
|
|
{
|
|
register int _num asm("1") = num;
|
|
register long ret asm("2");
|
|
register unsigned long _arg1 asm("2") = arg1;
|
|
register unsigned long _arg2 asm("3") = arg2;
|
|
register unsigned long _arg3 asm("4") = arg3;
|
|
register unsigned long _arg4 asm("5") = arg4;
|
|
register unsigned long _arg5 asm("6") = arg5;
|
|
|
|
asm volatile( "svc 0\n"
|
|
:"=d"(ret)
|
|
: "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3), "d" (_arg4), "d" (_arg5)
|
|
: "cc", "memory");
|
|
return ret;
|
|
}
|
|
|
|
#endif /* SVC_H */
|