The problem lies in the function: static inline long do_syscall_stub(struct mm_id * mm_idp, void **addr) { int n, i; long ret, offset; unsigned long * data; unsigned long * syscall; int err, pid = mm_idp->u.pid;
if (proc_mm) /* FIXME: Need to look up userspace_pid by cpu */ pid = userspace_pid[0]; multi_count++; n = ptrace_setregs(pid, syscall_regs); if (n < 0) { printk(UM_KERN_ERR "Registers - \n"); for (i = 0; i < MAX_REG_NR; i++) printk(UM_KERN_ERR "\t%d\t0x%lx\n", i, syscall_regs[i]); panic("do_syscall_stub : PTRACE_SETREGS failed, errno = %d\n", -n); } Where the ptrace_setregs() above returned a value less than zero. Breakpoint 2, do_syscall_stub (mm_idp=0xfdaee9c, addr=0xfc5ce44) at /mnt/hd0/download/linux-2.6-latest/arch/um/os-Linux/skas/mem.c:76 76 printk(UM_KERN_ERR "\t%d\t0x%lx\n", i, syscall_regs[i]); (gdb) 16 0x0 75 for (i = 0; i < MAX_REG_NR; i++) (gdb) 77 panic("do_syscall_stub : PTRACE_SETREGS failed, errno = %d\n", (gdb) Kernel panic - not syncing: do_syscall_stub : PTRACE_SETREGS failed, errno = 5 And ptrace_setregs() calling ptrace() seemed to returned -errno almost immediately: (gdb) s ptrace_setregs (pid=19131, regs=0x820aae0) at /mnt/hd0/download/linux-2.6-latest/arch/um/sys-i386/ptrace_user.c:18 18 if (ptrace(PTRACE_SETREGS, pid, 0, regs) < 0) (gdb) s 19 return -errno; (gdb) s Why is it so? ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel