diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-08-04 10:26:03 +1000 | 
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-08-04 10:26:03 +1000 | 
| commit | 412a4ac5e9cf7fdeb6af562c25547a9b9da7674f (patch) | |
| tree | a8ce13cbc9c47c99799e5e3e3ad26ba78274ee73 /arch/arm/kernel/kprobes-decode.c | |
| parent | e8e5c2155b0035b6e04f29be67f6444bc914005b (diff) | |
| parent | 0c2daaafcdec726e89cbccca61d576de8429c537 (diff) | |
| download | olio-linux-3.10-412a4ac5e9cf7fdeb6af562c25547a9b9da7674f.tar.xz olio-linux-3.10-412a4ac5e9cf7fdeb6af562c25547a9b9da7674f.zip  | |
Merge commit 'gcl/next' into next
Diffstat (limited to 'arch/arm/kernel/kprobes-decode.c')
| -rw-r--r-- | arch/arm/kernel/kprobes-decode.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/arm/kernel/kprobes-decode.c b/arch/arm/kernel/kprobes-decode.c index da1f94906a4..8bccbfa693f 100644 --- a/arch/arm/kernel/kprobes-decode.c +++ b/arch/arm/kernel/kprobes-decode.c @@ -583,13 +583,14 @@ static void __kprobes emulate_ldr(struct kprobe *p, struct pt_regs *regs)  {  	insn_llret_3arg_fn_t *i_fn = (insn_llret_3arg_fn_t *)&p->ainsn.insn[0];  	kprobe_opcode_t insn = p->opcode; +	long ppc = (long)p->addr + 8;  	union reg_pair fnr;  	int rd = (insn >> 12) & 0xf;  	int rn = (insn >> 16) & 0xf;  	int rm = insn & 0xf;  	long rdv; -	long rnv  = regs->uregs[rn]; -	long rmv  = regs->uregs[rm]; /* rm/rmv may be invalid, don't care. */ +	long rnv = (rn == 15) ? ppc : regs->uregs[rn]; +	long rmv = (rm == 15) ? ppc : regs->uregs[rm];  	long cpsr = regs->ARM_cpsr;  	fnr.dr = insnslot_llret_3arg_rflags(rnv, 0, rmv, cpsr, i_fn);  |