diff -Nru linux-2.6.21/arch/arm/kernel/ptrace.c.orig linux-2.6.21/arch/arm/kernel/ptrace.c --- linux-2.6.21/arch/arm/kernel/ptrace.c.orig 2008-11-13 09:41:47.000000000 -0800 +++ linux-2.6.21/arch/arm/kernel/ptrace.c 2008-11-18 14:52:53.000000000 -0800 @@ -523,12 +523,24 @@ { unsigned long tmp; - if (off & 3 || off >= sizeof(struct user)) + /* [jsun] Hack to get gdbserver working; + * Inspired by http://www.ucdot.org/article.pl?sid=03/01/07/0214244&mode=thread */ + + if (off & 3) return -EIO; tmp = 0; - if (off < sizeof(struct pt_regs)) + if (off < sizeof(struct pt_regs)) { tmp = get_user_reg(tsk, off >> 2); + } else if (off == 4*49) { + tmp = tsk->mm->start_code; + } else if (off == 4*50) { + tmp = tsk->mm->start_data; + } else if (off == 4*51) { + tmp = tsk->mm->end_code; + } else if (off == 4*52) { + tmp = tsk->mm->end_data; + } return put_user(tmp, ret); }