diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2013-05-27 12:13:41 -0400 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2013-06-22 09:53:22 -0400 |
commit | 16f9afe651e8197fb7ce6df0990d8e2ad779e1af (patch) | |
tree | c6482028a0ceced44e7e4819f7741c2fd8084e3e /arch/arc/kernel/ptrace.c | |
parent | 2fa919045b72ec892e17d56f888e6af4260b7629 (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.c | 6 |
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 */ |