From: Paolo 'Blaisorblade' Giarrusso <[email protected]>
Add some comments about the "uml-sysemu-fixes" patch of 2.6.10-mm1 (merged in 2.6.11-rc1).
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---
linux-2.6.11-paolo/arch/um/kernel/tt/tracer.c | 14 ++++++++++++++
1 files changed, 14 insertions(+)
diff -puN arch/um/kernel/tt/tracer.c~uml-comment-fix-sysemu-tt arch/um/kernel/tt/tracer.c
--- linux-2.6.11/arch/um/kernel/tt/tracer.c~uml-comment-fix-sysemu-tt 2005-01-13 01:56:56.494835760 +0100
+++ linux-2.6.11-paolo/arch/um/kernel/tt/tracer.c 2005-01-13 01:56:56.498835152 +0100
@@ -313,6 +313,15 @@ int tracer(int (*init_proc)(void *), voi
sig = 0;
op = do_proc_op(task, proc_id);
switch(op){
+ /*
+ * This is called when entering user mode; after
+ * this, we start intercepting syscalls.
+ *
+ * In fact, a process is started in kernel mode,
+ * so with is_tracing() == 0 (and that is reset
+ * when executing syscalls, since UML kernel has
+ * the right to do syscalls);
+ */
case OP_TRACE_ON:
arch_leave_kernel(task, pid);
tracing = 1;
@@ -347,6 +356,11 @@ int tracer(int (*init_proc)(void *), voi
continue;
}
tracing = 0;
+ /* local_using_sysemu has been already set
+ * below, since if we are here, is_tracing() on
+ * the traced task was 1, i.e. the process had
+ * already run through one iteration of the
+ * loop which executed a OP_TRACE_ON request.*/
do_syscall(task, pid, local_using_sysemu);
sig = SIGUSR2;
break;
_