Re: Fix 32-bit thread debugging on x86_64
On Sun, Jul 31, 2005 at 04:05:58PM -0400, Daniel Jacobowitz wrote: > The IA32 ptrace emulation currently returns the wrong registers for > fs/gs; it's returning what x86_64 calls gs_base. We need regs.gsindex > in order for GDB to correctly locate the TLS area. Without this patch, > the 32-bit GDB testsuite bombs on a 64-bit kernel. With it, results > look about like I'd expect, although there are still a handful of > kernel-related failures (vsyscall related?). Looks good. Thanks. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: Fix 32-bit thread debugging on x86_64
On Sun, Jul 31, 2005 at 04:05:58PM -0400, Daniel Jacobowitz wrote: The IA32 ptrace emulation currently returns the wrong registers for fs/gs; it's returning what x86_64 calls gs_base. We need regs.gsindex in order for GDB to correctly locate the TLS area. Without this patch, the 32-bit GDB testsuite bombs on a 64-bit kernel. With it, results look about like I'd expect, although there are still a handful of kernel-related failures (vsyscall related?). Looks good. Thanks. -Andi - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Fix 32-bit thread debugging on x86_64
The IA32 ptrace emulation currently returns the wrong registers for fs/gs; it's returning what x86_64 calls gs_base. We need regs.gsindex in order for GDB to correctly locate the TLS area. Without this patch, the 32-bit GDB testsuite bombs on a 64-bit kernel. With it, results look about like I'd expect, although there are still a handful of kernel-related failures (vsyscall related?). Signed-off-by: Daniel Jacobowitz <[EMAIL PROTECTED]> diff -r -p -u z/linux-2.6.11/arch/x86_64/ia32/ptrace32.c linux-2.6.11/arch/x86_64/ia32/ptrace32.c --- linux-2.6.12.3.orig/arch/x86_64/ia32/ptrace32.c 2005-03-02 02:37:52.0 -0500 +++ linux-2.6.12.3/arch/x86_64/ia32/ptrace32.c 2005-07-31 15:29:48.0 -0400 @@ -43,11 +43,11 @@ static int putreg32(struct task_struct * switch (regno) { case offsetof(struct user32, regs.fs): if (val && (val & 3) != 3) return -EIO; - child->thread.fs = val & 0x; + child->thread.fsindex = val & 0x; break; case offsetof(struct user32, regs.gs): if (val && (val & 3) != 3) return -EIO; - child->thread.gs = val & 0x; + child->thread.gsindex = val & 0x; break; case offsetof(struct user32, regs.ds): if (val && (val & 3) != 3) return -EIO; @@ -138,10 +138,10 @@ static int getreg32(struct task_struct * switch (regno) { case offsetof(struct user32, regs.fs): - *val = child->thread.fs; + *val = child->thread.fsindex; break; case offsetof(struct user32, regs.gs): - *val = child->thread.gs; + *val = child->thread.gsindex; break; case offsetof(struct user32, regs.ds): *val = child->thread.ds; -- Daniel Jacobowitz CodeSourcery, LLC - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Fix 32-bit thread debugging on x86_64
The IA32 ptrace emulation currently returns the wrong registers for fs/gs; it's returning what x86_64 calls gs_base. We need regs.gsindex in order for GDB to correctly locate the TLS area. Without this patch, the 32-bit GDB testsuite bombs on a 64-bit kernel. With it, results look about like I'd expect, although there are still a handful of kernel-related failures (vsyscall related?). Signed-off-by: Daniel Jacobowitz [EMAIL PROTECTED] diff -r -p -u z/linux-2.6.11/arch/x86_64/ia32/ptrace32.c linux-2.6.11/arch/x86_64/ia32/ptrace32.c --- linux-2.6.12.3.orig/arch/x86_64/ia32/ptrace32.c 2005-03-02 02:37:52.0 -0500 +++ linux-2.6.12.3/arch/x86_64/ia32/ptrace32.c 2005-07-31 15:29:48.0 -0400 @@ -43,11 +43,11 @@ static int putreg32(struct task_struct * switch (regno) { case offsetof(struct user32, regs.fs): if (val (val 3) != 3) return -EIO; - child-thread.fs = val 0x; + child-thread.fsindex = val 0x; break; case offsetof(struct user32, regs.gs): if (val (val 3) != 3) return -EIO; - child-thread.gs = val 0x; + child-thread.gsindex = val 0x; break; case offsetof(struct user32, regs.ds): if (val (val 3) != 3) return -EIO; @@ -138,10 +138,10 @@ static int getreg32(struct task_struct * switch (regno) { case offsetof(struct user32, regs.fs): - *val = child-thread.fs; + *val = child-thread.fsindex; break; case offsetof(struct user32, regs.gs): - *val = child-thread.gs; + *val = child-thread.gsindex; break; case offsetof(struct user32, regs.ds): *val = child-thread.ds; -- Daniel Jacobowitz CodeSourcery, LLC - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/