All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ralf Baechle <ralf@linux-mips.org>
To: David Daney <ddaney@avtrex.com>
Cc: andreev <andreev@niisi.msk.ru>, linux-mips@linux-mips.org
Subject: Re: Strace doesn't work on linux-2.4.28 and later
Date: Mon, 7 Feb 2005 21:08:25 +0000	[thread overview]
Message-ID: <20050207210825.GA6703@linux-mips.org> (raw)
In-Reply-To: <4207C3E0.7070405@avtrex.com>

On Mon, Feb 07, 2005 at 11:39:12AM -0800, David Daney wrote:

> >    offset("#define PT_SCRATCH0 ", struct pt_regs, pad0[4]);
> >    offset("#define PT_SCRATCH1 ", struct pt_regs, pad0[5]);
> >
> >I am thinking of testing a patch where I change them to:
> >
> >    offset("#define PT_SCRATCH0 ", struct pt_regs, pad0[0]);
> >    offset("#define PT_SCRATCH1 ", struct pt_regs, pad0[1]);
> >
> >Any needed argument registers are already saved in and restored from the 
> >regs array so overwriting the stack area reserved for them should be OK.
> >
> I now think that is bogus reasoning as the first four slots can be 
> clobbered by the compiler.
> 
> It seems that t2 must be saved somewhere in the regs list.  I am not 
> sure what the problem with PT_R1(sp) was, but it seems like a good 
> candidate.  Perhaps PT_R26 or PT_R27 (k0, k1) would be a better place to 
> store t2 as I don't think k0 or k1 are ever stored.

I was always planning to backport the newer fix from 2.6 which is simply
storing the value in a caller saved register.  You now reminded me of
that omission ;-)

Patch below,

  Ralf

Index: arch/mips/kernel/scall_o32.S
===================================================================
RCS file: /home/cvs/linux/arch/mips/kernel/Attic/scall_o32.S,v
retrieving revision 1.18.2.14
diff -u -r1.18.2.14 scall_o32.S
--- arch/mips/kernel/scall_o32.S	25 Nov 2004 09:43:59 -0000	1.18.2.14
+++ arch/mips/kernel/scall_o32.S	7 Feb 2005 21:12:53 -0000
@@ -121,15 +121,14 @@
 
 trace_a_syscall:
 	SAVE_STATIC
-	sw	t2, PT_SCRATCH0(sp)
+	move	s0, sp
 	jal	syscall_trace
-	lw	t2, PT_SCRATCH0(sp)
 
 	lw	a0, PT_R4(sp)		# Restore argument registers
 	lw	a1, PT_R5(sp)
 	lw	a2, PT_R6(sp)
 	lw	a3, PT_R7(sp)
-	jalr	t2
+	jalr	s0
 
 	li	t0, -EMAXERRNO - 1	# error?
 	sltu	t0, t0, v0
Index: arch/mips/tools/offset.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/tools/Attic/offset.c,v
retrieving revision 1.16.4.12
diff -u -r1.16.4.12 offset.c
--- arch/mips/tools/offset.c	25 Nov 2004 09:43:59 -0000	1.16.4.12
+++ arch/mips/tools/offset.c	7 Feb 2005 21:12:53 -0000
@@ -12,7 +12,6 @@
 #include <linux/types.h>
 #include <linux/sched.h>
 #include <linux/mm.h>
-#include <linux/signal.h>
 
 #include <asm/ptrace.h>
 #include <asm/processor.h>
@@ -37,9 +36,6 @@
 void output_ptreg_defines(void)
 {
 	text("/* MIPS pt_regs offsets. */");
-	offset("#define PT_SCRATCH0 ", struct pt_regs, pad0[4]);
-	offset("#define PT_SCRATCH1 ", struct pt_regs, pad0[5]);
-
 	offset("#define PT_R0     ", struct pt_regs, regs[0]);
 	offset("#define PT_R1     ", struct pt_regs, regs[1]);
 	offset("#define PT_R2     ", struct pt_regs, regs[2]);
Index: arch/mips64/kernel/scall_64.S
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/Attic/scall_64.S,v
retrieving revision 1.20.2.20
diff -u -r1.20.2.20 scall_64.S
--- arch/mips64/kernel/scall_64.S	25 Nov 2004 09:43:59 -0000	1.20.2.20
+++ arch/mips64/kernel/scall_64.S	7 Feb 2005 21:12:53 -0000
@@ -102,15 +102,14 @@
 
 trace_a_syscall:
 	SAVE_STATIC
-	sd	t2, PT_SCRATCH0(sp)
+	move	s0, t2
 	jal	syscall_trace
-	ld	t2, PT_SCRATCH0(sp)
 
 	ld	a0, PT_R4(sp)		# Restore argument registers
 	ld	a1, PT_R5(sp)
 	ld	a2, PT_R6(sp)
 	ld	a3, PT_R7(sp)
-	jalr	t2
+	jalr	s0
 
 	li	t0, -EMAXERRNO - 1	# error?
 	sltu	t0, t0, v0
Index: arch/mips64/kernel/scall_n32.S
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/Attic/scall_n32.S,v
retrieving revision 1.2.2.17
diff -u -r1.2.2.17 scall_n32.S
--- arch/mips64/kernel/scall_n32.S	25 Nov 2004 09:43:59 -0000	1.2.2.17
+++ arch/mips64/kernel/scall_n32.S	7 Feb 2005 21:12:53 -0000
@@ -106,15 +106,14 @@
 
 trace_a_syscall:
 	SAVE_STATIC
-	sd	t2, PT_SCRATCH0(sp)
+	move	s0, t2
 	jal	syscall_trace
-	ld	t2, PT_SCRATCH0(sp)
 
 	ld	a0, PT_R4(sp)		# Restore argument registers
 	ld	a1, PT_R5(sp)
 	ld	a2, PT_R6(sp)
 	ld	a3, PT_R7(sp)
-	jalr	t2
+	jalr	s0
 
 	li	t0, -EMAXERRNO - 1	# error?
 	sltu	t0, t0, v0
Index: arch/mips64/kernel/scall_o32.S
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/Attic/scall_o32.S,v
retrieving revision 1.48.2.33
diff -u -r1.48.2.33 scall_o32.S
--- arch/mips64/kernel/scall_o32.S	25 Nov 2004 09:43:59 -0000	1.48.2.33
+++ arch/mips64/kernel/scall_o32.S	7 Feb 2005 21:12:53 -0000
@@ -118,9 +118,8 @@
 	sd	a6, PT_R10(sp)
 	sd	a7, PT_R11(sp)
 
-	sd	t2, PT_SCRATCH0(sp)
+	move	s0, t2
 	jal	syscall_trace
-	ld	t2, PT_SCRATCH0(sp)
 
 	ld	a0, PT_R4(sp)		# Restore argument registers
 	ld	a1, PT_R5(sp)
@@ -129,7 +128,7 @@
 	ld	a4, PT_R8(sp)
 	ld	a5, PT_R9(sp)
 
-	jalr	t2
+	jalr	s0
 
 	li	t0, -EMAXERRNO - 1	# error?
 	sltu	t0, t0, v0

  reply	other threads:[~2005-02-07 21:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-01 13:43 Strace doesn't work on linux-2.4.28 and later andreev
2005-02-07 19:28 ` David Daney
2005-02-07 19:39   ` David Daney
2005-02-07 21:08     ` Ralf Baechle [this message]
2005-02-07 21:20       ` David Daney
2005-02-07 21:17         ` Ralf Baechle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050207210825.GA6703@linux-mips.org \
    --to=ralf@linux-mips.org \
    --cc=andreev@niisi.msk.ru \
    --cc=ddaney@avtrex.com \
    --cc=linux-mips@linux-mips.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.