diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/um/include/syscall.h | 12 | ||||
| -rw-r--r-- | arch/um/include/syscall_user.h | 23 | ||||
| -rw-r--r-- | arch/um/include/sysdep-i386/syscalls.h | 2 | ||||
| -rw-r--r-- | arch/um/include/sysdep-x86_64/syscalls.h | 2 | ||||
| -rw-r--r-- | arch/um/kernel/Makefile | 2 | ||||
| -rw-r--r-- | arch/um/kernel/skas/Makefile | 2 | ||||
| -rw-r--r-- | arch/um/kernel/skas/syscall.c | 50 | ||||
| -rw-r--r-- | arch/um/kernel/skas/syscall_kern.c | 43 | ||||
| -rw-r--r-- | arch/um/kernel/skas/syscall_user.c | 44 | ||||
| -rw-r--r-- | arch/um/kernel/syscall.c | 36 | ||||
| -rw-r--r-- | arch/um/kernel/syscall_user.c | 48 | ||||
| -rw-r--r-- | arch/um/kernel/tt/syscall_kern.c | 47 | ||||
| -rw-r--r-- | arch/um/kernel/tt/syscall_user.c | 35 |
13 files changed, 131 insertions, 215 deletions
diff --git a/arch/um/include/syscall.h b/arch/um/include/syscall.h new file mode 100644 index 000000000000..dda1df901a08 --- /dev/null +++ b/arch/um/include/syscall.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef __SYSCALL_USER_H | ||
| 7 | #define __SYSCALL_USER_H | ||
| 8 | |||
| 9 | extern int record_syscall_start(int syscall); | ||
| 10 | extern void record_syscall_end(int index, long result); | ||
| 11 | |||
| 12 | #endif | ||
diff --git a/arch/um/include/syscall_user.h b/arch/um/include/syscall_user.h deleted file mode 100644 index 811d0ec2445e..000000000000 --- a/arch/um/include/syscall_user.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef __SYSCALL_USER_H | ||
| 7 | #define __SYSCALL_USER_H | ||
| 8 | |||
| 9 | extern int record_syscall_start(int syscall); | ||
| 10 | extern void record_syscall_end(int index, long result); | ||
| 11 | |||
| 12 | #endif | ||
| 13 | |||
| 14 | /* | ||
| 15 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
| 16 | * Emacs will notice this stuff at the end of the file and automatically | ||
| 17 | * adjust the settings for this buffer only. This must remain at the end | ||
| 18 | * of the file. | ||
| 19 | * --------------------------------------------------------------------------- | ||
| 20 | * Local variables: | ||
| 21 | * c-file-style: "linux" | ||
| 22 | * End: | ||
| 23 | */ | ||
diff --git a/arch/um/include/sysdep-i386/syscalls.h b/arch/um/include/sysdep-i386/syscalls.h index be0a3e3469eb..a0d5b74d3731 100644 --- a/arch/um/include/sysdep-i386/syscalls.h +++ b/arch/um/include/sysdep-i386/syscalls.h | |||
| @@ -16,6 +16,8 @@ extern syscall_handler_t sys_rt_sigaction; | |||
| 16 | 16 | ||
| 17 | extern syscall_handler_t old_mmap_i386; | 17 | extern syscall_handler_t old_mmap_i386; |
| 18 | 18 | ||
| 19 | extern syscall_handler_t *sys_call_table[]; | ||
| 20 | |||
| 19 | #define EXECUTE_SYSCALL(syscall, regs) \ | 21 | #define EXECUTE_SYSCALL(syscall, regs) \ |
| 20 | ((long (*)(struct syscall_args)) (*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs)) | 22 | ((long (*)(struct syscall_args)) (*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs)) |
| 21 | 23 | ||
diff --git a/arch/um/include/sysdep-x86_64/syscalls.h b/arch/um/include/sysdep-x86_64/syscalls.h index 67923cca5691..e06f83e80f4a 100644 --- a/arch/um/include/sysdep-x86_64/syscalls.h +++ b/arch/um/include/sysdep-x86_64/syscalls.h | |||
| @@ -14,6 +14,8 @@ typedef long syscall_handler_t(void); | |||
| 14 | 14 | ||
| 15 | extern syscall_handler_t *ia32_sys_call_table[]; | 15 | extern syscall_handler_t *ia32_sys_call_table[]; |
| 16 | 16 | ||
| 17 | extern syscall_handler_t *sys_call_table[]; | ||
| 18 | |||
| 17 | #define EXECUTE_SYSCALL(syscall, regs) \ | 19 | #define EXECUTE_SYSCALL(syscall, regs) \ |
| 18 | (((long (*)(long, long, long, long, long, long)) \ | 20 | (((long (*)(long, long, long, long, long, long)) \ |
| 19 | (*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(®s->regs), \ | 21 | (*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(®s->regs), \ |
diff --git a/arch/um/kernel/Makefile b/arch/um/kernel/Makefile index a8918e80df96..a9cdd00775a3 100644 --- a/arch/um/kernel/Makefile +++ b/arch/um/kernel/Makefile | |||
| @@ -18,7 +18,7 @@ obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o | |||
| 18 | obj-$(CONFIG_GPROF) += gprof_syms.o | 18 | obj-$(CONFIG_GPROF) += gprof_syms.o |
| 19 | obj-$(CONFIG_GCOV) += gmon_syms.o | 19 | obj-$(CONFIG_GCOV) += gmon_syms.o |
| 20 | obj-$(CONFIG_TTY_LOG) += tty_log.o | 20 | obj-$(CONFIG_TTY_LOG) += tty_log.o |
| 21 | obj-$(CONFIG_SYSCALL_DEBUG) += syscall_user.o | 21 | obj-$(CONFIG_SYSCALL_DEBUG) += syscall.o |
| 22 | 22 | ||
| 23 | obj-$(CONFIG_MODE_TT) += tt/ | 23 | obj-$(CONFIG_MODE_TT) += tt/ |
| 24 | obj-$(CONFIG_MODE_SKAS) += skas/ | 24 | obj-$(CONFIG_MODE_SKAS) += skas/ |
diff --git a/arch/um/kernel/skas/Makefile b/arch/um/kernel/skas/Makefile index d296d55ade4b..db36c7c95940 100644 --- a/arch/um/kernel/skas/Makefile +++ b/arch/um/kernel/skas/Makefile | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | # | 4 | # |
| 5 | 5 | ||
| 6 | obj-y := clone.o exec_kern.o mem.o mem_user.o mmu.o process.o process_kern.o \ | 6 | obj-y := clone.o exec_kern.o mem.o mem_user.o mmu.o process.o process_kern.o \ |
| 7 | syscall_kern.o syscall_user.o tlb.o trap_user.o uaccess.o \ | 7 | syscall.o tlb.o trap_user.o uaccess.o |
| 8 | 8 | ||
| 9 | subdir- := util | 9 | subdir- := util |
| 10 | 10 | ||
diff --git a/arch/um/kernel/skas/syscall.c b/arch/um/kernel/skas/syscall.c new file mode 100644 index 000000000000..51fb94076fcf --- /dev/null +++ b/arch/um/kernel/skas/syscall.c | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include "linux/sys.h" | ||
| 7 | #include "linux/ptrace.h" | ||
| 8 | #include "asm/errno.h" | ||
| 9 | #include "asm/unistd.h" | ||
| 10 | #include "asm/ptrace.h" | ||
| 11 | #include "asm/current.h" | ||
| 12 | #include "sysdep/syscalls.h" | ||
| 13 | #include "kern_util.h" | ||
| 14 | #include "syscall.h" | ||
| 15 | |||
| 16 | void handle_syscall(union uml_pt_regs *r) | ||
| 17 | { | ||
| 18 | struct pt_regs *regs = container_of(r, struct pt_regs, regs); | ||
| 19 | long result; | ||
| 20 | int syscall; | ||
| 21 | #ifdef UML_CONFIG_SYSCALL_DEBUG | ||
| 22 | int index; | ||
| 23 | |||
| 24 | index = record_syscall_start(UPT_SYSCALL_NR(r)); | ||
| 25 | #endif | ||
| 26 | syscall_trace(r, 0); | ||
| 27 | |||
| 28 | current->thread.nsyscalls++; | ||
| 29 | nsyscalls++; | ||
| 30 | |||
| 31 | /* This should go in the declaration of syscall, but when I do that, | ||
| 32 | * strace -f -c bash -c 'ls ; ls' breaks, sometimes not tracing | ||
| 33 | * children at all, sometimes hanging when bash doesn't see the first | ||
| 34 | * ls exit. | ||
| 35 | * The assembly looks functionally the same to me. This is | ||
| 36 | * gcc version 4.0.1 20050727 (Red Hat 4.0.1-5) | ||
| 37 | * in case it's a compiler bug. | ||
| 38 | */ | ||
| 39 | syscall = UPT_SYSCALL_NR(r); | ||
| 40 | if((syscall >= NR_syscalls) || (syscall < 0)) | ||
| 41 | result = -ENOSYS; | ||
| 42 | else result = EXECUTE_SYSCALL(syscall, regs); | ||
| 43 | |||
| 44 | REGS_SET_SYSCALL_RETURN(r->skas.regs, result); | ||
| 45 | |||
| 46 | syscall_trace(r, 1); | ||
| 47 | #ifdef UML_CONFIG_SYSCALL_DEBUG | ||
| 48 | record_syscall_end(index, result); | ||
| 49 | #endif | ||
| 50 | } | ||
diff --git a/arch/um/kernel/skas/syscall_kern.c b/arch/um/kernel/skas/syscall_kern.c deleted file mode 100644 index bdf040ce5b8e..000000000000 --- a/arch/um/kernel/skas/syscall_kern.c +++ /dev/null | |||
| @@ -1,43 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 - 2003 Jeff Dike (jdike@addtoit.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include "linux/sys.h" | ||
| 7 | #include "linux/ptrace.h" | ||
| 8 | #include "asm/errno.h" | ||
| 9 | #include "asm/unistd.h" | ||
| 10 | #include "asm/ptrace.h" | ||
| 11 | #include "asm/current.h" | ||
| 12 | #include "sysdep/syscalls.h" | ||
| 13 | #include "kern_util.h" | ||
| 14 | |||
| 15 | extern syscall_handler_t *sys_call_table[]; | ||
| 16 | |||
| 17 | long execute_syscall_skas(void *r) | ||
| 18 | { | ||
| 19 | struct pt_regs *regs = r; | ||
| 20 | long res; | ||
| 21 | int syscall; | ||
| 22 | |||
| 23 | current->thread.nsyscalls++; | ||
| 24 | nsyscalls++; | ||
| 25 | syscall = UPT_SYSCALL_NR(®s->regs); | ||
| 26 | |||
| 27 | if((syscall >= NR_syscalls) || (syscall < 0)) | ||
| 28 | res = -ENOSYS; | ||
| 29 | else res = EXECUTE_SYSCALL(syscall, regs); | ||
| 30 | |||
| 31 | return(res); | ||
| 32 | } | ||
| 33 | |||
| 34 | /* | ||
| 35 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
| 36 | * Emacs will notice this stuff at the end of the file and automatically | ||
| 37 | * adjust the settings for this buffer only. This must remain at the end | ||
| 38 | * of the file. | ||
| 39 | * --------------------------------------------------------------------------- | ||
| 40 | * Local variables: | ||
| 41 | * c-file-style: "linux" | ||
| 42 | * End: | ||
| 43 | */ | ||
diff --git a/arch/um/kernel/skas/syscall_user.c b/arch/um/kernel/skas/syscall_user.c deleted file mode 100644 index 6b0664970147..000000000000 --- a/arch/um/kernel/skas/syscall_user.c +++ /dev/null | |||
| @@ -1,44 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <stdlib.h> | ||
| 7 | #include <signal.h> | ||
| 8 | #include "kern_util.h" | ||
| 9 | #include "uml-config.h" | ||
| 10 | #include "syscall_user.h" | ||
| 11 | #include "sysdep/ptrace.h" | ||
| 12 | #include "sysdep/sigcontext.h" | ||
| 13 | #include "skas.h" | ||
| 14 | |||
| 15 | void handle_syscall(union uml_pt_regs *regs) | ||
| 16 | { | ||
| 17 | long result; | ||
| 18 | #ifdef UML_CONFIG_SYSCALL_DEBUG | ||
| 19 | int index; | ||
| 20 | |||
| 21 | index = record_syscall_start(UPT_SYSCALL_NR(regs)); | ||
| 22 | #endif | ||
| 23 | |||
| 24 | syscall_trace(regs, 0); | ||
| 25 | result = execute_syscall_skas(regs); | ||
| 26 | |||
| 27 | REGS_SET_SYSCALL_RETURN(regs->skas.regs, result); | ||
| 28 | |||
| 29 | syscall_trace(regs, 1); | ||
| 30 | #ifdef UML_CONFIG_SYSCALL_DEBUG | ||
| 31 | record_syscall_end(index, result); | ||
| 32 | #endif | ||
| 33 | } | ||
| 34 | |||
| 35 | /* | ||
| 36 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
| 37 | * Emacs will notice this stuff at the end of the file and automatically | ||
| 38 | * adjust the settings for this buffer only. This must remain at the end | ||
| 39 | * of the file. | ||
| 40 | * --------------------------------------------------------------------------- | ||
| 41 | * Local variables: | ||
| 42 | * c-file-style: "linux" | ||
| 43 | * End: | ||
| 44 | */ | ||
diff --git a/arch/um/kernel/syscall.c b/arch/um/kernel/syscall.c new file mode 100644 index 000000000000..1429c131879d --- /dev/null +++ b/arch/um/kernel/syscall.c | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include "kern_util.h" | ||
| 7 | #include "syscall.h" | ||
| 8 | #include "os.h" | ||
| 9 | |||
| 10 | struct { | ||
| 11 | int syscall; | ||
| 12 | int pid; | ||
| 13 | long result; | ||
| 14 | unsigned long long start; | ||
| 15 | unsigned long long end; | ||
| 16 | } syscall_record[1024]; | ||
| 17 | |||
| 18 | int record_syscall_start(int syscall) | ||
| 19 | { | ||
| 20 | int max, index; | ||
| 21 | |||
| 22 | max = sizeof(syscall_record)/sizeof(syscall_record[0]); | ||
| 23 | index = next_syscall_index(max); | ||
| 24 | |||
| 25 | syscall_record[index].syscall = syscall; | ||
| 26 | syscall_record[index].pid = current_pid(); | ||
| 27 | syscall_record[index].result = 0xdeadbeef; | ||
| 28 | syscall_record[index].start = os_usecs(); | ||
| 29 | return(index); | ||
| 30 | } | ||
| 31 | |||
| 32 | void record_syscall_end(int index, long result) | ||
| 33 | { | ||
| 34 | syscall_record[index].result = result; | ||
| 35 | syscall_record[index].end = os_usecs(); | ||
| 36 | } | ||
diff --git a/arch/um/kernel/syscall_user.c b/arch/um/kernel/syscall_user.c deleted file mode 100644 index 01b711e00a85..000000000000 --- a/arch/um/kernel/syscall_user.c +++ /dev/null | |||
| @@ -1,48 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <stdlib.h> | ||
| 7 | #include <sys/time.h> | ||
| 8 | #include "kern_util.h" | ||
| 9 | #include "syscall_user.h" | ||
| 10 | |||
| 11 | struct { | ||
| 12 | int syscall; | ||
| 13 | int pid; | ||
| 14 | long result; | ||
| 15 | struct timeval start; | ||
| 16 | struct timeval end; | ||
| 17 | } syscall_record[1024]; | ||
| 18 | |||
| 19 | int record_syscall_start(int syscall) | ||
| 20 | { | ||
| 21 | int max, index; | ||
| 22 | |||
| 23 | max = sizeof(syscall_record)/sizeof(syscall_record[0]); | ||
| 24 | index = next_syscall_index(max); | ||
| 25 | |||
| 26 | syscall_record[index].syscall = syscall; | ||
| 27 | syscall_record[index].pid = current_pid(); | ||
| 28 | syscall_record[index].result = 0xdeadbeef; | ||
| 29 | gettimeofday(&syscall_record[index].start, NULL); | ||
| 30 | return(index); | ||
| 31 | } | ||
| 32 | |||
| 33 | void record_syscall_end(int index, long result) | ||
| 34 | { | ||
| 35 | syscall_record[index].result = result; | ||
| 36 | gettimeofday(&syscall_record[index].end, NULL); | ||
| 37 | } | ||
| 38 | |||
| 39 | /* | ||
| 40 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
| 41 | * Emacs will notice this stuff at the end of the file and automatically | ||
| 42 | * adjust the settings for this buffer only. This must remain at the end | ||
| 43 | * of the file. | ||
| 44 | * --------------------------------------------------------------------------- | ||
| 45 | * Local variables: | ||
| 46 | * c-file-style: "linux" | ||
| 47 | * End: | ||
| 48 | */ | ||
diff --git a/arch/um/kernel/tt/syscall_kern.c b/arch/um/kernel/tt/syscall_kern.c index 2650a628719e..3d29c90514cc 100644 --- a/arch/um/kernel/tt/syscall_kern.c +++ b/arch/um/kernel/tt/syscall_kern.c | |||
| @@ -12,36 +12,41 @@ | |||
| 12 | #include "asm/uaccess.h" | 12 | #include "asm/uaccess.h" |
| 13 | #include "asm/stat.h" | 13 | #include "asm/stat.h" |
| 14 | #include "sysdep/syscalls.h" | 14 | #include "sysdep/syscalls.h" |
| 15 | #include "sysdep/sigcontext.h" | ||
| 15 | #include "kern_util.h" | 16 | #include "kern_util.h" |
| 17 | #include "syscall.h" | ||
| 16 | 18 | ||
| 17 | extern syscall_handler_t *sys_call_table[]; | 19 | void syscall_handler_tt(int sig, struct pt_regs *regs) |
| 18 | |||
| 19 | long execute_syscall_tt(void *r) | ||
| 20 | { | 20 | { |
| 21 | struct pt_regs *regs = r; | 21 | void *sc; |
| 22 | long res; | 22 | long result; |
| 23 | int syscall; | 23 | int syscall; |
| 24 | |||
| 25 | #ifdef CONFIG_SYSCALL_DEBUG | 24 | #ifdef CONFIG_SYSCALL_DEBUG |
| 25 | int index; | ||
| 26 | index = record_syscall_start(syscall); | ||
| 27 | #endif | ||
| 28 | sc = UPT_SC(®s->regs); | ||
| 29 | SC_START_SYSCALL(sc); | ||
| 30 | |||
| 31 | syscall_trace(®s->regs, 0); | ||
| 32 | |||
| 26 | current->thread.nsyscalls++; | 33 | current->thread.nsyscalls++; |
| 27 | nsyscalls++; | 34 | nsyscalls++; |
| 28 | #endif | ||
| 29 | syscall = UPT_SYSCALL_NR(®s->regs); | 35 | syscall = UPT_SYSCALL_NR(®s->regs); |
| 30 | 36 | ||
| 31 | if((syscall >= NR_syscalls) || (syscall < 0)) | 37 | if((syscall >= NR_syscalls) || (syscall < 0)) |
| 32 | res = -ENOSYS; | 38 | result = -ENOSYS; |
| 33 | else res = EXECUTE_SYSCALL(syscall, regs); | 39 | else result = EXECUTE_SYSCALL(syscall, regs); |
| 34 | 40 | ||
| 35 | return(res); | 41 | /* regs->sc may have changed while the system call ran (there may |
| 36 | } | 42 | * have been an interrupt or segfault), so it needs to be refreshed. |
| 43 | */ | ||
| 44 | UPT_SC(®s->regs) = sc; | ||
| 37 | 45 | ||
| 38 | /* | 46 | SC_SET_SYSCALL_RETURN(sc, result); |
| 39 | * Overrides for Emacs so that we follow Linus's tabbing style. | 47 | |
| 40 | * Emacs will notice this stuff at the end of the file and automatically | 48 | syscall_trace(®s->regs, 1); |
| 41 | * adjust the settings for this buffer only. This must remain at the end | 49 | #ifdef CONFIG_SYSCALL_DEBUG |
| 42 | * of the file. | 50 | record_syscall_end(index, result); |
| 43 | * --------------------------------------------------------------------------- | 51 | #endif |
| 44 | * Local variables: | 52 | } |
| 45 | * c-file-style: "linux" | ||
| 46 | * End: | ||
| 47 | */ | ||
diff --git a/arch/um/kernel/tt/syscall_user.c b/arch/um/kernel/tt/syscall_user.c index b218316cfdb2..902987bf379b 100644 --- a/arch/um/kernel/tt/syscall_user.c +++ b/arch/um/kernel/tt/syscall_user.c | |||
| @@ -13,42 +13,9 @@ | |||
| 13 | #include "task.h" | 13 | #include "task.h" |
| 14 | #include "user_util.h" | 14 | #include "user_util.h" |
| 15 | #include "kern_util.h" | 15 | #include "kern_util.h" |
| 16 | #include "syscall_user.h" | 16 | #include "syscall.h" |
| 17 | #include "tt.h" | 17 | #include "tt.h" |
| 18 | 18 | ||
| 19 | |||
| 20 | void syscall_handler_tt(int sig, union uml_pt_regs *regs) | ||
| 21 | { | ||
| 22 | void *sc; | ||
| 23 | long result; | ||
| 24 | int syscall; | ||
| 25 | #ifdef UML_CONFIG_DEBUG_SYSCALL | ||
| 26 | int index; | ||
| 27 | #endif | ||
| 28 | |||
| 29 | syscall = UPT_SYSCALL_NR(regs); | ||
| 30 | sc = UPT_SC(regs); | ||
| 31 | SC_START_SYSCALL(sc); | ||
| 32 | |||
| 33 | #ifdef UML_CONFIG_DEBUG_SYSCALL | ||
| 34 | index = record_syscall_start(syscall); | ||
| 35 | #endif | ||
| 36 | syscall_trace(regs, 0); | ||
| 37 | result = execute_syscall_tt(regs); | ||
| 38 | |||
| 39 | /* regs->sc may have changed while the system call ran (there may | ||
| 40 | * have been an interrupt or segfault), so it needs to be refreshed. | ||
| 41 | */ | ||
| 42 | UPT_SC(regs) = sc; | ||
| 43 | |||
| 44 | SC_SET_SYSCALL_RETURN(sc, result); | ||
| 45 | |||
| 46 | syscall_trace(regs, 1); | ||
| 47 | #ifdef UML_CONFIG_DEBUG_SYSCALL | ||
| 48 | record_syscall_end(index, result); | ||
| 49 | #endif | ||
| 50 | } | ||
| 51 | |||
| 52 | void do_sigtrap(void *task) | 19 | void do_sigtrap(void *task) |
| 53 | { | 20 | { |
| 54 | UPT_SYSCALL_NR(TASK_REGS(task)) = -1; | 21 | UPT_SYSCALL_NR(TASK_REGS(task)) = -1; |
