Revert syscall split (of commit 55d38162be
);
just copy the two syscalls I need for __raise instead. * lib/linux/arm-mes-gcc/syscall-internal.c (__sys_call_internal): New procedure. (__sys_call2_internal): New procedure. (__raise): Use them. (__sys_call, __sys_call2, __sys_call3, __sys_call4, __sys_call6): Move to... * lib/linux/arm-mes-gcc/syscall.c: ...here. * lib/linux/arm-mes-mescc/syscall-internal.c (__sys_call_internal): New procedure. (__sys_call2_internal): New procedure. (__raise): Use them. (__sys_call, __sys_call2, __sys_call3, __sys_call4, __sys_call6): Move to... * lib/linux/arm-mes-mescc/syscall.c: ...here. * lib/linux/x86-mes-gcc/syscall-internal.c (__sys_call_internal): New procedure. (__sys_call2_internal): New procedure. (__raise): Use them. (__sys_call, __sys_call2, __sys_call3, __sys_call4, __sys_call6): Move to... * lib/linux/x86-mes-gcc/syscall.c: ...here. * lib/linux/x86-mes-mescc/syscall-internal.c (__sys_call_internal): New procedure. (__sys_call2_internal): New procedure. (__raise): Use them. (__sys_call, __sys_call2, __sys_call3, __sys_call4, __sys_call6): Move to... * lib/linux/x86-mes-mescc/syscall.c: ...here.
This commit is contained in:
parent
3ed3b51371
commit
9db916bba1
|
@ -21,8 +21,8 @@
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
// *INDENT-OFF*
|
// *INDENT-OFF*
|
||||||
long
|
static long
|
||||||
__sys_call (long sys_call)
|
__sys_call_internal (long sys_call)
|
||||||
{
|
{
|
||||||
long r;
|
long r;
|
||||||
asm (
|
asm (
|
||||||
|
@ -36,24 +36,8 @@ __sys_call (long sys_call)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
long
|
static long
|
||||||
__sys_call1 (long sys_call, long one)
|
__sys_call2_internal (long sys_call, long one, long two)
|
||||||
{
|
|
||||||
long r;
|
|
||||||
asm (
|
|
||||||
"mov r7, %1\n\t"
|
|
||||||
"mov r0, %2\n\t"
|
|
||||||
"swi $0\n\t"
|
|
||||||
"mov %0, r0\n\t"
|
|
||||||
: "=r" (r)
|
|
||||||
: "r" (sys_call), "r" (one)
|
|
||||||
: "r0", "r7"
|
|
||||||
);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
long
|
|
||||||
__sys_call2 (long sys_call, long one, long two)
|
|
||||||
{
|
{
|
||||||
long r;
|
long r;
|
||||||
asm (
|
asm (
|
||||||
|
@ -68,74 +52,15 @@ __sys_call2 (long sys_call, long one, long two)
|
||||||
);
|
);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
// *INDENT-ON*
|
||||||
long
|
|
||||||
__sys_call3 (long sys_call, long one, long two, long three)
|
|
||||||
{
|
|
||||||
long r;
|
|
||||||
asm (
|
|
||||||
"mov r7, %1\n\t"
|
|
||||||
"mov r0, %2\n\t"
|
|
||||||
"mov r1, %3\n\t"
|
|
||||||
"mov r2, %4\n\t"
|
|
||||||
"swi $0\n\t"
|
|
||||||
"mov %0, r0\n\t"
|
|
||||||
: "=r" (r)
|
|
||||||
: "r" (sys_call), "r" (one), "r" (two), "r" (three)
|
|
||||||
: "r0", "r1", "r2", "r7"
|
|
||||||
);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
long
|
|
||||||
__sys_call4 (long sys_call, long one, long two, long three, long four)
|
|
||||||
{
|
|
||||||
long r;
|
|
||||||
asm (
|
|
||||||
"mov r7, %1\n\t"
|
|
||||||
"mov r0, %2\n\t"
|
|
||||||
"mov r1, %3\n\t"
|
|
||||||
"mov r2, %4\n\t"
|
|
||||||
"mov r3, %5\n\t"
|
|
||||||
"swi $0\n\t"
|
|
||||||
"mov %0, r0\n\t"
|
|
||||||
: "=r" (r)
|
|
||||||
: "r" (sys_call), "r" (one), "r" (two), "r" (three), "r" (four)
|
|
||||||
: "r0", "r1", "r2", "r3", "r7"
|
|
||||||
);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
long
|
|
||||||
__sys_call6 (long sys_call, long one, long two, long three, long four, long five, long six)
|
|
||||||
{
|
|
||||||
long r;
|
|
||||||
asm (
|
|
||||||
"mov r7, %1\n\t"
|
|
||||||
"mov r0, %2\n\t"
|
|
||||||
"mov r1, %3\n\t"
|
|
||||||
"mov r2, %4\n\t"
|
|
||||||
"mov r3, %5\n\t"
|
|
||||||
"mov r4, %6\n\t"
|
|
||||||
"mov r5, %7\n\t"
|
|
||||||
"swi $0\n\t"
|
|
||||||
"mov %0, r0\n\t"
|
|
||||||
: "=r" (r)
|
|
||||||
: "r" (sys_call), "r" (one), "r" (two), "r" (three), "r" (four), "r" (five), "r" (six)
|
|
||||||
: "r0", "r1", "r2", "r3", "r4", "r5" //, "r7" FIXME
|
|
||||||
);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Returns < 0 on error (errno-like value from kernel), or 0 on success */
|
/* Returns < 0 on error (errno-like value from kernel), or 0 on success */
|
||||||
int
|
int
|
||||||
__raise (int signum)
|
__raise (int signum)
|
||||||
{
|
{
|
||||||
long pid = __sys_call (SYS_getpid);
|
long pid = __sys_call_internal (SYS_getpid);
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
return pid;
|
return pid;
|
||||||
else
|
else
|
||||||
return __sys_call2 (SYS_kill, pid, signum);
|
return __sys_call2_internal (SYS_kill, pid, signum);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,14 +21,117 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
long __sys_call (long sys_call);
|
|
||||||
long __sys_call1 (long sys_call, long one);
|
|
||||||
long __sys_call2 (long sys_call, long one, long two);
|
|
||||||
long __sys_call3 (long sys_call, long one, long two, long three);
|
|
||||||
long __sys_call4 (long sys_call, long one, long two, long three, long four);
|
|
||||||
long __sys_call6 (long sys_call, long one, long two, long three, long four, long five, long six);
|
|
||||||
|
|
||||||
// *INDENT-OFF*
|
// *INDENT-OFF*
|
||||||
|
long
|
||||||
|
__sys_call (long sys_call)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov r7, %1\n\t"
|
||||||
|
"swi $0\n\t"
|
||||||
|
"mov %0, r0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "r" (sys_call)
|
||||||
|
: "r0", "r7"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call1 (long sys_call, long one)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov r7, %1\n\t"
|
||||||
|
"mov r0, %2\n\t"
|
||||||
|
"swi $0\n\t"
|
||||||
|
"mov %0, r0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "r" (sys_call), "r" (one)
|
||||||
|
: "r0", "r7"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call2 (long sys_call, long one, long two)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov r7, %1\n\t"
|
||||||
|
"mov r0, %2\n\t"
|
||||||
|
"mov r1, %3\n\t"
|
||||||
|
"swi $0\n\t"
|
||||||
|
"mov %0, r0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "r" (sys_call), "r" (one), "r" (two)
|
||||||
|
: "r0", "r1", "r7"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call3 (long sys_call, long one, long two, long three)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov r7, %1\n\t"
|
||||||
|
"mov r0, %2\n\t"
|
||||||
|
"mov r1, %3\n\t"
|
||||||
|
"mov r2, %4\n\t"
|
||||||
|
"swi $0\n\t"
|
||||||
|
"mov %0, r0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "r" (sys_call), "r" (one), "r" (two), "r" (three)
|
||||||
|
: "r0", "r1", "r2", "r7"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call4 (long sys_call, long one, long two, long three, long four)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov r7, %1\n\t"
|
||||||
|
"mov r0, %2\n\t"
|
||||||
|
"mov r1, %3\n\t"
|
||||||
|
"mov r2, %4\n\t"
|
||||||
|
"mov r3, %5\n\t"
|
||||||
|
"swi $0\n\t"
|
||||||
|
"mov %0, r0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "r" (sys_call), "r" (one), "r" (two), "r" (three), "r" (four)
|
||||||
|
: "r0", "r1", "r2", "r3", "r7"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
long
|
||||||
|
__sys_call6 (long sys_call, long one, long two, long three, long four, long five, long six)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov r7, %1\n\t"
|
||||||
|
"mov r0, %2\n\t"
|
||||||
|
"mov r1, %3\n\t"
|
||||||
|
"mov r2, %4\n\t"
|
||||||
|
"mov r3, %5\n\t"
|
||||||
|
"mov r4, %6\n\t"
|
||||||
|
"mov r5, %7\n\t"
|
||||||
|
"swi $0\n\t"
|
||||||
|
"mov %0, r0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "r" (sys_call), "r" (one), "r" (two), "r" (three), "r" (four), "r" (five), "r" (six)
|
||||||
|
: "r0", "r1", "r2", "r3", "r4", "r5" //, "r7" FIXME
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// *INDENT-ON*
|
||||||
|
|
||||||
long
|
long
|
||||||
_sys_call (long sys_call)
|
_sys_call (long sys_call)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,23 +20,15 @@
|
||||||
|
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
int
|
static int
|
||||||
__sys_call (int sys_call)
|
__sys_call_internal (int sys_call)
|
||||||
{
|
{
|
||||||
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
asm ("swi____$0");
|
asm ("swi____$0");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
__sys_call1 (int sys_call, int one)
|
__sys_call2_internal (int sys_call, int one, int two)
|
||||||
{
|
|
||||||
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
|
||||||
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
|
||||||
asm ("swi____$0");
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
__sys_call2 (int sys_call, int one, int two)
|
|
||||||
{
|
{
|
||||||
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
||||||
|
@ -44,47 +36,13 @@ __sys_call2 (int sys_call, int one, int two)
|
||||||
asm ("swi____$0");
|
asm ("swi____$0");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
__sys_call3 (int sys_call, int one, int two, int three)
|
|
||||||
{
|
|
||||||
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
|
||||||
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
|
||||||
asm ("!16 ldr____%r1,(%fp,+#$i8)");
|
|
||||||
asm ("!20 ldr____%r2,(%fp,+#$i8)");
|
|
||||||
asm ("swi____$0");
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
__sys_call4 (int sys_call, int one, int two, int three, int four)
|
|
||||||
{
|
|
||||||
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
|
||||||
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
|
||||||
asm ("!16 ldr____%r1,(%fp,+#$i8)");
|
|
||||||
asm ("!20 ldr____%r2,(%fp,+#$i8)");
|
|
||||||
asm ("!24 ldr____%r3,(%fp,+#$i8)");
|
|
||||||
asm ("swi____$0");
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
__sys_call6 (int sys_call, int one, int two, int three, int four, int five, int six)
|
|
||||||
{
|
|
||||||
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
|
||||||
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
|
||||||
asm ("!16 ldr____%r1,(%fp,+#$i8)");
|
|
||||||
asm ("!20 ldr____%r2,(%fp,+#$i8)");
|
|
||||||
asm ("!24 ldr____%r3,(%fp,+#$i8)");
|
|
||||||
asm ("!28 ldr____%r4,(%fp,+#$i8)");
|
|
||||||
asm ("!32 ldr____%r5,(%fp,+#$i8)");
|
|
||||||
asm ("swi____$0");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns < 0 on error (errno-like value from kernel), or 0 on success */
|
/* Returns < 0 on error (errno-like value from kernel), or 0 on success */
|
||||||
int
|
int
|
||||||
__raise (int signum)
|
__raise (int signum)
|
||||||
{
|
{
|
||||||
int pid = __sys_call (SYS_getpid);
|
int pid = __sys_call_internal (SYS_getpid);
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
return pid;
|
return pid;
|
||||||
else
|
else
|
||||||
return __sys_call2 (SYS_kill, pid, signum);
|
return __sys_call2_internal (SYS_kill, pid, signum);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,12 +21,63 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
int __sys_call (int sys_call);
|
int
|
||||||
int __sys_call1 (int sys_call, int one);
|
__sys_call (int sys_call)
|
||||||
int __sys_call2 (int sys_call, int one, int two);
|
{
|
||||||
int __sys_call3 (int sys_call, int one, int two, int three);
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
int __sys_call4 (int sys_call, int one, int two, int three, int four);
|
asm ("swi____$0");
|
||||||
int __sys_call6 (int sys_call, int one, int two, int three, int four, int five, int six);
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call1 (int sys_call, int one)
|
||||||
|
{
|
||||||
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
|
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
||||||
|
asm ("swi____$0");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call2 (int sys_call, int one, int two)
|
||||||
|
{
|
||||||
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
|
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
||||||
|
asm ("!16 ldr____%r1,(%fp,+#$i8)");
|
||||||
|
asm ("swi____$0");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call3 (int sys_call, int one, int two, int three)
|
||||||
|
{
|
||||||
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
|
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
||||||
|
asm ("!16 ldr____%r1,(%fp,+#$i8)");
|
||||||
|
asm ("!20 ldr____%r2,(%fp,+#$i8)");
|
||||||
|
asm ("swi____$0");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call4 (int sys_call, int one, int two, int three, int four)
|
||||||
|
{
|
||||||
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
|
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
||||||
|
asm ("!16 ldr____%r1,(%fp,+#$i8)");
|
||||||
|
asm ("!20 ldr____%r2,(%fp,+#$i8)");
|
||||||
|
asm ("!24 ldr____%r3,(%fp,+#$i8)");
|
||||||
|
asm ("swi____$0");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call6 (int sys_call, int one, int two, int three, int four, int five, int six)
|
||||||
|
{
|
||||||
|
asm ("!8 ldr____%r7,(%fp,+#$i8)");
|
||||||
|
asm ("!12 ldr____%r0,(%fp,+#$i8)");
|
||||||
|
asm ("!16 ldr____%r1,(%fp,+#$i8)");
|
||||||
|
asm ("!20 ldr____%r2,(%fp,+#$i8)");
|
||||||
|
asm ("!24 ldr____%r3,(%fp,+#$i8)");
|
||||||
|
asm ("!28 ldr____%r4,(%fp,+#$i8)");
|
||||||
|
asm ("!32 ldr____%r5,(%fp,+#$i8)");
|
||||||
|
asm ("swi____$0");
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
_sys_call (int sys_call)
|
_sys_call (int sys_call)
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
// *INDENT-OFF*
|
// *INDENT-OFF*
|
||||||
long
|
static long
|
||||||
__sys_call (long sys_call)
|
__sys_call_internal (long sys_call)
|
||||||
{
|
{
|
||||||
long r;
|
long r;
|
||||||
asm (
|
asm (
|
||||||
|
@ -36,24 +36,9 @@ __sys_call (long sys_call)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
long
|
|
||||||
__sys_call1 (long sys_call, long one)
|
|
||||||
{
|
|
||||||
long r;
|
|
||||||
asm (
|
|
||||||
"mov %1,%%eax\n\t"
|
|
||||||
"mov %2,%%ebx\n\t"
|
|
||||||
"int $0x80\n\t"
|
|
||||||
"mov %%eax,%0\n\t"
|
|
||||||
: "=r" (r)
|
|
||||||
: "rm" (sys_call), "rm" (one)
|
|
||||||
: "eax", "ebx"
|
|
||||||
);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
long
|
static long
|
||||||
__sys_call2 (long sys_call, long one, long two)
|
__sys_call2_internal (long sys_call, long one, long two)
|
||||||
{
|
{
|
||||||
long r;
|
long r;
|
||||||
asm (
|
asm (
|
||||||
|
@ -68,51 +53,15 @@ __sys_call2 (long sys_call, long one, long two)
|
||||||
);
|
);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
// *INDENT-ON*
|
||||||
|
|
||||||
long
|
/* Return < 0 on error (errno-like value from kernel), or 0 on success */
|
||||||
__sys_call3 (long sys_call, long one, long two, long three)
|
|
||||||
{
|
|
||||||
long r;
|
|
||||||
asm (
|
|
||||||
"mov %2,%%ebx\n\t"
|
|
||||||
"mov %3,%%ecx\n\t"
|
|
||||||
"mov %4,%%edx\n\t"
|
|
||||||
"mov %1,%%eax\n\t"
|
|
||||||
"int $0x80\n\t"
|
|
||||||
"mov %%eax,%0\n\t"
|
|
||||||
: "=r" (r)
|
|
||||||
: "rm" (sys_call), "rm" (one), "rm" (two), "rm" (three)
|
|
||||||
: "eax", "ebx", "ecx", "edx"
|
|
||||||
);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
long
|
|
||||||
__sys_call4 (long sys_call, long one, long two, long three, long four)
|
|
||||||
{
|
|
||||||
long r;
|
|
||||||
asm (
|
|
||||||
"mov %2,%%ebx\n\t"
|
|
||||||
"mov %3,%%ecx\n\t"
|
|
||||||
"mov %4,%%edx\n\t"
|
|
||||||
"mov %5,%%esi\n\t"
|
|
||||||
"mov %1,%%eax\n\t"
|
|
||||||
"int $0x80\n\t"
|
|
||||||
"mov %%eax,%0\n\t"
|
|
||||||
: "=r" (r)
|
|
||||||
: "rm" (sys_call), "rm" (one), "rm" (two), "rm" (three), "rm" (four)
|
|
||||||
: "eax", "ebx", "ecx", "edx", "esi"
|
|
||||||
);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns < 0 on error (errno-like value from kernel), or 0 on success */
|
|
||||||
int
|
int
|
||||||
__raise (int signum)
|
__raise (int signum)
|
||||||
{
|
{
|
||||||
long pid = __sys_call (SYS_getpid);
|
long pid = __sys_call_internal (SYS_getpid);
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
return pid;
|
return pid;
|
||||||
else
|
else
|
||||||
return __sys_call2 (SYS_kill, pid, signum);
|
return __sys_call2_internal (SYS_kill, pid, signum);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,13 +21,99 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
|
// *INDENT-OFF*
|
||||||
|
long
|
||||||
|
__sys_call (long sys_call)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov %1,%%eax\n\t"
|
||||||
|
"int $0x80\n\t"
|
||||||
|
"mov %%eax,%0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "rm" (sys_call)
|
||||||
|
: "eax"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call1 (long sys_call, long one)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov %1,%%eax\n\t"
|
||||||
|
"mov %2,%%ebx\n\t"
|
||||||
|
"int $0x80\n\t"
|
||||||
|
"mov %%eax,%0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "rm" (sys_call), "rm" (one)
|
||||||
|
: "eax", "ebx"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call2 (long sys_call, long one, long two)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov %1,%%eax\n\t"
|
||||||
|
"mov %2,%%ebx\n\t"
|
||||||
|
"mov %3,%%ecx\n\t"
|
||||||
|
"int $0x80\n\t"
|
||||||
|
"mov %%eax,%0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "rm" (sys_call), "rm" (one), "rm" (two)
|
||||||
|
: "eax", "ebx", "ecx"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call3 (long sys_call, long one, long two, long three)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov %2,%%ebx\n\t"
|
||||||
|
"mov %3,%%ecx\n\t"
|
||||||
|
"mov %4,%%edx\n\t"
|
||||||
|
"mov %1,%%eax\n\t"
|
||||||
|
"int $0x80\n\t"
|
||||||
|
"mov %%eax,%0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "rm" (sys_call), "rm" (one), "rm" (two), "rm" (three)
|
||||||
|
: "eax", "ebx", "ecx", "edx"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call4 (long sys_call, long one, long two, long three, long four)
|
||||||
|
{
|
||||||
|
long r;
|
||||||
|
asm (
|
||||||
|
"mov %2,%%ebx\n\t"
|
||||||
|
"mov %3,%%ecx\n\t"
|
||||||
|
"mov %4,%%edx\n\t"
|
||||||
|
"mov %5,%%esi\n\t"
|
||||||
|
"mov %1,%%eax\n\t"
|
||||||
|
"int $0x80\n\t"
|
||||||
|
"mov %%eax,%0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "rm" (sys_call), "rm" (one), "rm" (two), "rm" (three), "rm" (four)
|
||||||
|
: "eax", "ebx", "ecx", "edx", "esi"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
// *INDENT-ON*
|
||||||
|
|
||||||
long __sys_call (long sys_call);
|
long __sys_call (long sys_call);
|
||||||
long __sys_call1 (long sys_call, long one);
|
long __sys_call1 (long sys_call, long one);
|
||||||
long __sys_call2 (long sys_call, long one, long two);
|
long __sys_call2 (long sys_call, long one, long two);
|
||||||
long __sys_call3 (long sys_call, long one, long two, long three);
|
long __sys_call3 (long sys_call, long one, long two, long three);
|
||||||
long __sys_call4 (long sys_call, long one, long two, long three, long four);
|
long __sys_call4 (long sys_call, long one, long two, long three, long four);
|
||||||
|
|
||||||
// *INDENT-OFF*
|
|
||||||
long
|
long
|
||||||
_sys_call (long sys_call)
|
_sys_call (long sys_call)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,23 +20,15 @@
|
||||||
|
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
int
|
static int
|
||||||
__sys_call (int sys_call)
|
__sys_call_internal (int sys_call)
|
||||||
{
|
{
|
||||||
asm ("mov____0x8(%ebp),%eax !8");
|
asm ("mov____0x8(%ebp),%eax !8");
|
||||||
asm ("int____$0x80");
|
asm ("int____$0x80");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
__sys_call1 (int sys_call, int one)
|
__sys_call2_internal (int sys_call, int one, int two)
|
||||||
{
|
|
||||||
asm ("mov____0x8(%ebp),%eax !8");
|
|
||||||
asm ("mov____0x8(%ebp),%ebx !12");
|
|
||||||
asm ("int____$0x80");
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
__sys_call2 (int sys_call, int one, int two)
|
|
||||||
{
|
{
|
||||||
asm ("mov____0x8(%ebp),%eax !8");
|
asm ("mov____0x8(%ebp),%eax !8");
|
||||||
asm ("mov____0x8(%ebp),%ebx !12");
|
asm ("mov____0x8(%ebp),%ebx !12");
|
||||||
|
@ -44,34 +36,13 @@ __sys_call2 (int sys_call, int one, int two)
|
||||||
asm ("int____$0x80");
|
asm ("int____$0x80");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
/* Return < 0 on error (errno-like value from kernel), or 0 on success */
|
||||||
__sys_call3 (int sys_call, int one, int two, int three)
|
|
||||||
{
|
|
||||||
asm ("mov____0x8(%ebp),%eax !8");
|
|
||||||
asm ("mov____0x8(%ebp),%ebx !12");
|
|
||||||
asm ("mov____0x8(%ebp),%ecx !16");
|
|
||||||
asm ("mov____0x8(%ebp),%edx !20");
|
|
||||||
asm ("int____$0x80");
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
__sys_call4 (int sys_call, int one, int two, int three, int four)
|
|
||||||
{
|
|
||||||
asm ("mov____0x8(%ebp),%eax !8");
|
|
||||||
asm ("mov____0x8(%ebp),%ebx !12");
|
|
||||||
asm ("mov____0x8(%ebp),%ecx !16");
|
|
||||||
asm ("mov____0x8(%ebp),%edx !20");
|
|
||||||
asm ("mov____0x8(%ebp),%esi !24");
|
|
||||||
asm ("int____$0x80");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns < 0 on error (errno-like value from kernel), or 0 on success */
|
|
||||||
int
|
int
|
||||||
__raise (int signum)
|
__raise (int signum)
|
||||||
{
|
{
|
||||||
int pid = __sys_call (SYS_getpid);
|
int pid = __sys_call_internal (SYS_getpid);
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
return pid;
|
return pid;
|
||||||
else
|
else
|
||||||
return __sys_call2 (SYS_kill, pid, signum);
|
return __sys_call2_internal (SYS_kill, pid, signum);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,50 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <linux/x86/syscall.h>
|
#include <linux/x86/syscall.h>
|
||||||
|
|
||||||
int __sys_call (int sys_call);
|
int
|
||||||
int __sys_call1 (int sys_call, int one);
|
__sys_call (int sys_call)
|
||||||
int __sys_call2 (int sys_call, int one, int two);
|
{
|
||||||
int __sys_call3 (int sys_call, int one, int two, int three);
|
asm ("mov____0x8(%ebp),%eax !8");
|
||||||
int __sys_call4 (int sys_call, int one, int two, int three, int four);
|
asm ("int____$0x80");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call1 (int sys_call, int one)
|
||||||
|
{
|
||||||
|
asm ("mov____0x8(%ebp),%eax !8");
|
||||||
|
asm ("mov____0x8(%ebp),%ebx !12");
|
||||||
|
asm ("int____$0x80");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call2 (int sys_call, int one, int two)
|
||||||
|
{
|
||||||
|
asm ("mov____0x8(%ebp),%eax !8");
|
||||||
|
asm ("mov____0x8(%ebp),%ebx !12");
|
||||||
|
asm ("mov____0x8(%ebp),%ecx !16");
|
||||||
|
asm ("int____$0x80");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call3 (int sys_call, int one, int two, int three)
|
||||||
|
{
|
||||||
|
asm ("mov____0x8(%ebp),%eax !8");
|
||||||
|
asm ("mov____0x8(%ebp),%ebx !12");
|
||||||
|
asm ("mov____0x8(%ebp),%ecx !16");
|
||||||
|
asm ("mov____0x8(%ebp),%edx !20");
|
||||||
|
asm ("int____$0x80");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sys_call4 (int sys_call, int one, int two, int three, int four)
|
||||||
|
{
|
||||||
|
asm ("mov____0x8(%ebp),%eax !8");
|
||||||
|
asm ("mov____0x8(%ebp),%ebx !12");
|
||||||
|
asm ("mov____0x8(%ebp),%ecx !16");
|
||||||
|
asm ("mov____0x8(%ebp),%edx !20");
|
||||||
|
asm ("mov____0x8(%ebp),%esi !24");
|
||||||
|
asm ("int____$0x80");
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
_sys_call (int sys_call)
|
_sys_call (int sys_call)
|
||||||
|
|
Loading…
Reference in a new issue