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
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel