ARC: disasm: handle ARCv2 case in kprobe get/set functions
Current implementation of get_reg/set_reg implies ARCompact layout of pt_regs structure. Meanwhile pt_regs structure differs between ARCompact and ARCv2. Update those functions to handle ARCv2. Tested-by: kernel test robot <lkp@intel.com> Signed-off-by: Sergey Matyukevich <sergey.matyukevich@synopsys.com> Signed-off-by: Vineet Gupta <vgupta@kernel.org>
This commit is contained in:
parent
fb0b54909b
commit
9a78a8a8bb
@ -434,11 +434,28 @@ long __kprobes get_reg(int reg, struct pt_regs *regs,
|
|||||||
{
|
{
|
||||||
long *p;
|
long *p;
|
||||||
|
|
||||||
|
#if defined(CONFIG_ISA_ARCOMPACT)
|
||||||
if (reg <= 12) {
|
if (reg <= 12) {
|
||||||
p = ®s->r0;
|
p = ®s->r0;
|
||||||
return p[-reg];
|
return p[-reg];
|
||||||
}
|
}
|
||||||
|
#else /* CONFIG_ISA_ARCV2 */
|
||||||
|
if (reg <= 11) {
|
||||||
|
p = ®s->r0;
|
||||||
|
return p[reg];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg == 12)
|
||||||
|
return regs->r12;
|
||||||
|
if (reg == 30)
|
||||||
|
return regs->r30;
|
||||||
|
#ifdef CONFIG_ARC_HAS_ACCL_REGS
|
||||||
|
if (reg == 58)
|
||||||
|
return regs->r58;
|
||||||
|
if (reg == 59)
|
||||||
|
return regs->r59;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
if (cregs && (reg <= 25)) {
|
if (cregs && (reg <= 25)) {
|
||||||
p = &cregs->r13;
|
p = &cregs->r13;
|
||||||
return p[13 - reg];
|
return p[13 - reg];
|
||||||
@ -461,6 +478,7 @@ void __kprobes set_reg(int reg, long val, struct pt_regs *regs,
|
|||||||
{
|
{
|
||||||
long *p;
|
long *p;
|
||||||
|
|
||||||
|
#if defined(CONFIG_ISA_ARCOMPACT)
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0 ... 12:
|
case 0 ... 12:
|
||||||
p = ®s->r0;
|
p = ®s->r0;
|
||||||
@ -487,6 +505,48 @@ void __kprobes set_reg(int reg, long val, struct pt_regs *regs,
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#else /* CONFIG_ISA_ARCV2 */
|
||||||
|
switch (reg) {
|
||||||
|
case 0 ... 11:
|
||||||
|
p = ®s->r0;
|
||||||
|
p[reg] = val;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
regs->r12 = val;
|
||||||
|
break;
|
||||||
|
case 13 ... 25:
|
||||||
|
if (cregs) {
|
||||||
|
p = &cregs->r13;
|
||||||
|
p[13 - reg] = val;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 26:
|
||||||
|
regs->r26 = val;
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
regs->fp = val;
|
||||||
|
break;
|
||||||
|
case 28:
|
||||||
|
regs->sp = val;
|
||||||
|
break;
|
||||||
|
case 30:
|
||||||
|
regs->r30 = val;
|
||||||
|
break;
|
||||||
|
case 31:
|
||||||
|
regs->blink = val;
|
||||||
|
break;
|
||||||
|
#ifdef CONFIG_ARC_HAS_ACCL_REGS
|
||||||
|
case 58:
|
||||||
|
regs->r58 = val;
|
||||||
|
break;
|
||||||
|
case 59:
|
||||||
|
regs->r59 = val;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user