MIPS: Move register dump routines out of ptrace code
Current register dump methods for MIPS are implemented inside ptrace methods, but there will be other uses in the kernel for them, so keep them separately in process.c and use those definitions for ptrace instead. Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14587/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:

committed by
Ralf Baechle

parent
bff323d565
commit
08c941bf6e
@@ -729,3 +729,47 @@ int mips_set_process_fp_mode(struct task_struct *task, unsigned int value)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_32BIT) || defined(CONFIG_MIPS32_O32)
|
||||
void mips_dump_regs32(u32 *uregs, const struct pt_regs *regs)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = MIPS32_EF_R1; i <= MIPS32_EF_R31; i++) {
|
||||
/* k0/k1 are copied as zero. */
|
||||
if (i == MIPS32_EF_R26 || i == MIPS32_EF_R27)
|
||||
uregs[i] = 0;
|
||||
else
|
||||
uregs[i] = regs->regs[i - MIPS32_EF_R0];
|
||||
}
|
||||
|
||||
uregs[MIPS32_EF_LO] = regs->lo;
|
||||
uregs[MIPS32_EF_HI] = regs->hi;
|
||||
uregs[MIPS32_EF_CP0_EPC] = regs->cp0_epc;
|
||||
uregs[MIPS32_EF_CP0_BADVADDR] = regs->cp0_badvaddr;
|
||||
uregs[MIPS32_EF_CP0_STATUS] = regs->cp0_status;
|
||||
uregs[MIPS32_EF_CP0_CAUSE] = regs->cp0_cause;
|
||||
}
|
||||
#endif /* CONFIG_32BIT || CONFIG_MIPS32_O32 */
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
void mips_dump_regs64(u64 *uregs, const struct pt_regs *regs)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = MIPS64_EF_R1; i <= MIPS64_EF_R31; i++) {
|
||||
/* k0/k1 are copied as zero. */
|
||||
if (i == MIPS64_EF_R26 || i == MIPS64_EF_R27)
|
||||
uregs[i] = 0;
|
||||
else
|
||||
uregs[i] = regs->regs[i - MIPS64_EF_R0];
|
||||
}
|
||||
|
||||
uregs[MIPS64_EF_LO] = regs->lo;
|
||||
uregs[MIPS64_EF_HI] = regs->hi;
|
||||
uregs[MIPS64_EF_CP0_EPC] = regs->cp0_epc;
|
||||
uregs[MIPS64_EF_CP0_BADVADDR] = regs->cp0_badvaddr;
|
||||
uregs[MIPS64_EF_CP0_STATUS] = regs->cp0_status;
|
||||
uregs[MIPS64_EF_CP0_CAUSE] = regs->cp0_cause;
|
||||
}
|
||||
#endif /* CONFIG_64BIT */
|
||||
|
@@ -294,23 +294,8 @@ static int gpr32_get(struct task_struct *target,
|
||||
{
|
||||
struct pt_regs *regs = task_pt_regs(target);
|
||||
u32 uregs[ELF_NGREG] = {};
|
||||
unsigned i;
|
||||
|
||||
for (i = MIPS32_EF_R1; i <= MIPS32_EF_R31; i++) {
|
||||
/* k0/k1 are copied as zero. */
|
||||
if (i == MIPS32_EF_R26 || i == MIPS32_EF_R27)
|
||||
continue;
|
||||
|
||||
uregs[i] = regs->regs[i - MIPS32_EF_R0];
|
||||
}
|
||||
|
||||
uregs[MIPS32_EF_LO] = regs->lo;
|
||||
uregs[MIPS32_EF_HI] = regs->hi;
|
||||
uregs[MIPS32_EF_CP0_EPC] = regs->cp0_epc;
|
||||
uregs[MIPS32_EF_CP0_BADVADDR] = regs->cp0_badvaddr;
|
||||
uregs[MIPS32_EF_CP0_STATUS] = regs->cp0_status;
|
||||
uregs[MIPS32_EF_CP0_CAUSE] = regs->cp0_cause;
|
||||
|
||||
mips_dump_regs32(uregs, regs);
|
||||
return user_regset_copyout(&pos, &count, &kbuf, &ubuf, uregs, 0,
|
||||
sizeof(uregs));
|
||||
}
|
||||
@@ -373,23 +358,8 @@ static int gpr64_get(struct task_struct *target,
|
||||
{
|
||||
struct pt_regs *regs = task_pt_regs(target);
|
||||
u64 uregs[ELF_NGREG] = {};
|
||||
unsigned i;
|
||||
|
||||
for (i = MIPS64_EF_R1; i <= MIPS64_EF_R31; i++) {
|
||||
/* k0/k1 are copied as zero. */
|
||||
if (i == MIPS64_EF_R26 || i == MIPS64_EF_R27)
|
||||
continue;
|
||||
|
||||
uregs[i] = regs->regs[i - MIPS64_EF_R0];
|
||||
}
|
||||
|
||||
uregs[MIPS64_EF_LO] = regs->lo;
|
||||
uregs[MIPS64_EF_HI] = regs->hi;
|
||||
uregs[MIPS64_EF_CP0_EPC] = regs->cp0_epc;
|
||||
uregs[MIPS64_EF_CP0_BADVADDR] = regs->cp0_badvaddr;
|
||||
uregs[MIPS64_EF_CP0_STATUS] = regs->cp0_status;
|
||||
uregs[MIPS64_EF_CP0_CAUSE] = regs->cp0_cause;
|
||||
|
||||
mips_dump_regs64(uregs, regs);
|
||||
return user_regset_copyout(&pos, &count, &kbuf, &ubuf, uregs, 0,
|
||||
sizeof(uregs));
|
||||
}
|
||||
|
Reference in New Issue
Block a user