[PATCH 15/27] x86-32 ptrace: use task_pt_regs

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Andrew Morton <akpm@...>, Linus Torvalds <torvalds@...>
Cc: <linux-kernel@...>, Thomas Gleixner <tglx@...>, Ingo Molnar <mingo@...>, H. Peter Anvin <hpa@...>
Date: Sunday, November 25, 2007 - 6:04 pm

This cleans up the 32-bit ptrace code to use task_pt_regs instead of its
own redundant code that does the same thing a different way.

Signed-off-by: Roland McGrath <roland@redhat.com>
---
 arch/x86/kernel/ptrace_32.c |   68 ++++++++++--------------------------------
 1 files changed, 16 insertions(+), 52 deletions(-)

diff --git a/arch/x86/kernel/ptrace_32.c b/arch/x86/kernel/ptrace_32.c
index 50882b3..7c33244 100644
--- a/arch/x86/kernel/ptrace_32.c
+++ b/arch/x86/kernel/ptrace_32.c
@@ -37,53 +37,20 @@
  */
 #define FLAG_MASK 0x00050dd5
 
-/*
- * Offset of eflags on child stack..
- */
-#define EFL_OFFSET offsetof(struct pt_regs, eflags)
-
-static inline struct pt_regs *get_child_regs(struct task_struct *task)
-{
-	void *stack_top = (void *)task->thread.esp0;
-	return stack_top - sizeof(struct pt_regs);
-}
-
-/*
- * This routine will get a word off of the processes privileged stack.
- * the offset is bytes into the pt_regs structure on the stack.
- * This routine assumes that all the privileged stacks are in our
- * data space.
- */
-static inline int get_stack_long(struct task_struct *task, int offset)
+static long *pt_regs_access(struct pt_regs *regs, unsigned long regno)
 {
-	unsigned char *stack;
-
-	stack = (unsigned char *)task->thread.esp0 - sizeof(struct pt_regs);
-	stack += offset;
-	return (*((int *)stack));
-}
-
-/*
- * This routine will put a word on the processes privileged stack.
- * the offset is bytes into the pt_regs structure on the stack.
- * This routine assumes that all the privileged stacks are in our
- * data space.
- */
-static inline int put_stack_long(struct task_struct *task, int offset,
-	unsigned long data)
-{
-	unsigned char * stack;
-
-	stack = (unsigned char *)task->thread.esp0 - sizeof(struct pt_regs);
-	stack += offset;
-	*(unsigned long *) stack = data;
-	return 0;
+	BUILD_BUG_ON(offsetof(struct pt_regs, ebx) != 0);
+	if (regno > FS)
+		--regno;
+	return &regs->ebx + regno;
 }
 
 static int putreg(struct task_struct *child,
 	unsigned long regno, unsigned long value)
 {
-	switch (regno >> 2) {
+	struct pt_regs *regs = task_pt_regs(child);
+	regno >>= 2;
+	switch (regno) {
 		case GS:
 			if (value && (value & 3) != 3)
 				return -EIO;
@@ -113,26 +80,25 @@ static int putreg(struct task_struct *child,
 				clear_tsk_thread_flag(child, TIF_FORCED_TF);
 			else if (test_tsk_thread_flag(child, TIF_FORCED_TF))
 				value |= X86_EFLAGS_TF;
-			value |= get_stack_long(child, EFL_OFFSET) & ~FLAG_MASK;
+			value |= regs->eflags & ~FLAG_MASK;
 			break;
 	}
-	if (regno > FS*4)
-		regno -= 1*4;
-	put_stack_long(child, regno, value);
+	*pt_regs_access(regs, regno) = value;
 	return 0;
 }
 
-static unsigned long getreg(struct task_struct *child,
-	unsigned long regno)
+static unsigned long getreg(struct task_struct *child, unsigned long regno)
 {
+	struct pt_regs *regs = task_pt_regs(child);
 	unsigned long retval = ~0UL;
 
-	switch (regno >> 2) {
+	regno >>= 2;
+	switch (regno) {
 		case EFL:
 			/*
 			 * If the debugger set TF, hide it from the readout.
 			 */
-			retval = get_stack_long(child, EFL_OFFSET);
+			retval = regs->eflags;
 			if (test_tsk_thread_flag(child, TIF_FORCED_TF))
 				retval &= ~X86_EFLAGS_TF;
 			break;
@@ -147,9 +113,7 @@ static unsigned long getreg(struct task_struct *child,
 			retval = 0xffff;
 			/* fall through */
 		default:
-			if (regno > FS*4)
-				regno -= 1*4;
-			retval &= get_stack_long(child, regno);
+			retval &= *pt_regs_access(regs, regno);
 	}
 	return retval;
 }
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Sun Nov 25, 5:55 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Andrew Morton, (Tue Nov 27, 4:53 am)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Tue Nov 27, 7:05 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Ingo Molnar, (Tue Nov 27, 7:58 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Tue Nov 27, 8:08 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Ingo Molnar, (Tue Nov 27, 6:38 am)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Christoph Hellwig, (Sun Nov 25, 6:22 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Sun Nov 25, 6:59 pm)
[PATCH 27/27] x86: PTRACE_SINGLEBLOCK, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 26/27] x86: debugctlmsr kprobes, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 25/27] x86: debugctlmsr arch_has_block_step, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 24/27] x86: debugctlmsr context switch, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 23/27] x86: debugctlmsr kconfig, Roland McGrath, (Sun Nov 25, 6:08 pm)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Dave Jones, (Sun Nov 25, 9:57 pm)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Roland McGrath, (Mon Nov 26, 4:06 am)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Denys Vlasenko, (Sun Nov 25, 9:09 pm)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Roland McGrath, (Mon Nov 26, 3:51 am)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Denys Vlasenko, (Mon Nov 26, 6:52 pm)
[PATCH 22/27] x86: debugctlmsr constants, Roland McGrath, (Sun Nov 25, 6:06 pm)
[PATCH 19/27] x86-32 ptrace debugreg cleanup, Roland McGrath, (Sun Nov 25, 6:05 pm)
[PATCH 21/27] ptrace: generic PTRACE_SINGLEBLOCK, Roland McGrath, (Sun Nov 25, 6:06 pm)
[PATCH 20/27] ptrace: arch_has_block_step, Roland McGrath, (Sun Nov 25, 6:05 pm)
Re: [PATCH 20/27] ptrace: arch_has_block_step, David Wilder, (Wed Nov 28, 7:39 pm)
Re: [PATCH 20/27] ptrace: arch_has_block_step, Roland McGrath, (Wed Nov 28, 7:58 pm)
[PATCH 17/27] x86-64 ptrace debugreg cleanup, Roland McGrath, (Sun Nov 25, 6:04 pm)
[PATCH 18/27] x86-64 ia32 ptrace debugreg cleanup, Roland McGrath, (Sun Nov 25, 6:05 pm)
[PATCH 16/27] x86-64 ptrace: use task_pt_regs, Roland McGrath, (Sun Nov 25, 6:04 pm)
[PATCH 13/27] powerpc: arch_has_single_step, Roland McGrath, (Sun Nov 25, 6:03 pm)
[PATCH 15/27] x86-32 ptrace: use task_pt_regs, Roland McGrath, (Sun Nov 25, 6:04 pm)
[PATCH 14/27] powerpc: ptrace generic resume, Roland McGrath, (Sun Nov 25, 6:04 pm)
Re: [PATCH 14/27] powerpc: ptrace generic resume, Srinivasa Ds, (Mon Dec 3, 4:12 am)
[PATCH 09/27] x86 single_step: TIF_FORCED_TF, Roland McGrath, (Sun Nov 25, 6:00 pm)
[PATCH 11/27] x86-64: ptrace generic resume, Roland McGrath, (Sun Nov 25, 6:01 pm)
[PATCH 10/27] ptrace: generic resume, Roland McGrath, (Sun Nov 25, 6:01 pm)
Re: [PATCH 10/27] ptrace: generic resume, Christoph Hellwig, (Sun Nov 25, 6:23 pm)
Re: [PATCH 10/27] ptrace: generic resume, Roland McGrath, (Sun Nov 25, 6:37 pm)
[PATCH 12/27] x86-32: ptrace generic resume, Roland McGrath, (Sun Nov 25, 6:01 pm)
[PATCH 05/27] x86: single_step moved, Roland McGrath, (Sun Nov 25, 5:59 pm)
[PATCH 08/27] x86: single_step: share code, Roland McGrath, (Sun Nov 25, 6:00 pm)
[PATCH 06/27] x86: single_step segment macros, Roland McGrath, (Sun Nov 25, 5:59 pm)
[PATCH 07/27] x86: single_step 0xf0, Roland McGrath, (Sun Nov 25, 6:00 pm)
[PATCH 03/27] x86: remove TRAP_FLAG, Roland McGrath, (Sun Nov 25, 5:58 pm)
[PATCH 04/27] x86: arch_has_single_step, Roland McGrath, (Sun Nov 25, 5:59 pm)
[PATCH 02/27] x86: segment selector macros, Roland McGrath, (Sun Nov 25, 5:58 pm)