aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arc/kernel/ptrace.c
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2013-05-27 12:13:41 -0400
committerVineet Gupta <vgupta@synopsys.com>2013-06-22 09:53:22 -0400
commit16f9afe651e8197fb7ce6df0990d8e2ad779e1af (patch)
treec6482028a0ceced44e7e4819f7741c2fd8084e3e /arch/arc/kernel/ptrace.c
parent2fa919045b72ec892e17d56f888e6af4260b7629 (diff)
ARC: pt_regs update #3: Remove unused gutter at start of callee_regs
This is trickier than prev two: * context switching code saves kernel mode callee regs in the format of struct callee_regs thus needs adjustment. This also reduces the height of topmost kernel stack frame by 1 word. * Since kernel stack unwinder is sensitive to height of topmost kernel stack frame, that needs a word of adjustment too. ptrace needs a bit of updating since pt_regs now diverges from user_regs_struct. Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc/kernel/ptrace.c')
-rw-r--r--arch/arc/kernel/ptrace.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/arc/kernel/ptrace.c b/arch/arc/kernel/ptrace.c
index 6e467e3585b0..333238564b67 100644
--- a/arch/arc/kernel/ptrace.c
+++ b/arch/arc/kernel/ptrace.c
@@ -48,6 +48,7 @@ static int genregs_get(struct task_struct *target,
48 48
49 REG_O_ZERO(pad); 49 REG_O_ZERO(pad);
50 REG_O_CHUNK(scratch, callee, ptregs); 50 REG_O_CHUNK(scratch, callee, ptregs);
51 REG_O_ZERO(pad2);
51 REG_O_CHUNK(callee, efa, cregs); 52 REG_O_CHUNK(callee, efa, cregs);
52 REG_O_CHUNK(efa, stop_pc, &target->thread.fault_address); 53 REG_O_CHUNK(efa, stop_pc, &target->thread.fault_address);
53 54
@@ -96,8 +97,9 @@ static int genregs_set(struct task_struct *target,
96 offsetof(struct user_regs_struct, LOC) + 4); 97 offsetof(struct user_regs_struct, LOC) + 4);
97 98
98 REG_IGNORE_ONE(pad); 99 REG_IGNORE_ONE(pad);
99 /* TBD: disallow updates to STATUS32, orig_r8 etc*/ 100 /* TBD: disallow updates to STATUS32 etc*/
100 REG_IN_CHUNK(scratch, callee, ptregs); /* pt_regs[bta..orig_r8] */ 101 REG_IN_CHUNK(scratch, pad2, ptregs); /* pt_regs[bta..sp] */
102 REG_IGNORE_ONE(pad2);
101 REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */ 103 REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */
102 REG_IGNORE_ONE(efa); /* efa update invalid */ 104 REG_IGNORE_ONE(efa); /* efa update invalid */
103 REG_IN_ONE(stop_pc, &ptregs->ret); /* stop_pc: PC update */ 105 REG_IN_ONE(stop_pc, &ptregs->ret); /* stop_pc: PC update */