public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Fix 32-bit thread debugging on x86_64
@ 2005-07-31 20:05 Daniel Jacobowitz
  2005-08-03  9:10 ` Andi Kleen
  0 siblings, 1 reply; 2+ messages in thread
From: Daniel Jacobowitz @ 2005-07-31 20:05 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel

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 <dan@codesourcery.com>

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.000000000 -0500
+++ linux-2.6.12.3/arch/x86_64/ia32/ptrace32.c	2005-07-31 15:29:48.000000000 -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 & 0xffff; 
+		child->thread.fsindex = val & 0xffff; 
 		break;
 	case offsetof(struct user32, regs.gs):
 		if (val && (val & 3) != 3) return -EIO; 
-		child->thread.gs = val & 0xffff;
+		child->thread.gsindex = val & 0xffff;
 		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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Fix 32-bit thread debugging on x86_64
  2005-07-31 20:05 Fix 32-bit thread debugging on x86_64 Daniel Jacobowitz
@ 2005-08-03  9:10 ` Andi Kleen
  0 siblings, 0 replies; 2+ messages in thread
From: Andi Kleen @ 2005-08-03  9:10 UTC (permalink / raw)
  To: Andi Kleen, linux-kernel

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-08-03  9:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-31 20:05 Fix 32-bit thread debugging on x86_64 Daniel Jacobowitz
2005-08-03  9:10 ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox