powerpc/ptrace: create ppc_gethwdinfo()
Create ippc_gethwdinfo() to handle PPC_PTRACE_GETHWDBGINFO and reduce ifdef mess Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/82fefcc1ec75b96cece792878217a5d85ecda0c2.1582848567.git.christophe.leroy@c-s.fr
This commit is contained in:
parent
e08227d25a
commit
da529d4739
|
@ -56,6 +56,21 @@ void user_disable_single_step(struct task_struct *task)
|
|||
clear_tsk_thread_flag(task, TIF_SINGLESTEP);
|
||||
}
|
||||
|
||||
void ppc_gethwdinfo(struct ppc_debug_info *dbginfo)
|
||||
{
|
||||
dbginfo->version = 1;
|
||||
dbginfo->num_instruction_bps = CONFIG_PPC_ADV_DEBUG_IACS;
|
||||
dbginfo->num_data_bps = CONFIG_PPC_ADV_DEBUG_DACS;
|
||||
dbginfo->num_condition_regs = CONFIG_PPC_ADV_DEBUG_DVCS;
|
||||
dbginfo->data_bp_alignment = 4;
|
||||
dbginfo->sizeof_condition = 4;
|
||||
dbginfo->features = PPC_DEBUG_FEATURE_INSN_BP_RANGE |
|
||||
PPC_DEBUG_FEATURE_INSN_BP_MASK;
|
||||
if (IS_ENABLED(CONFIG_PPC_ADV_DEBUG_DAC_RANGE))
|
||||
dbginfo->features |= PPC_DEBUG_FEATURE_DATA_BP_RANGE |
|
||||
PPC_DEBUG_FEATURE_DATA_BP_MASK;
|
||||
}
|
||||
|
||||
int ptrace_get_debugreg(struct task_struct *child, unsigned long addr,
|
||||
unsigned long __user *datalp)
|
||||
{
|
||||
|
|
|
@ -176,6 +176,7 @@ int tm_cgpr32_set(struct task_struct *target, const struct user_regset *regset,
|
|||
extern const struct user_regset_view user_ppc_native_view;
|
||||
|
||||
/* ptrace-(no)adv */
|
||||
void ppc_gethwdinfo(struct ppc_debug_info *dbginfo);
|
||||
int ptrace_get_debugreg(struct task_struct *child, unsigned long addr,
|
||||
unsigned long __user *datalp);
|
||||
int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, unsigned long data);
|
||||
|
|
|
@ -39,6 +39,26 @@ void user_disable_single_step(struct task_struct *task)
|
|||
clear_tsk_thread_flag(task, TIF_SINGLESTEP);
|
||||
}
|
||||
|
||||
void ppc_gethwdinfo(struct ppc_debug_info *dbginfo)
|
||||
{
|
||||
dbginfo->version = 1;
|
||||
dbginfo->num_instruction_bps = 0;
|
||||
if (ppc_breakpoint_available())
|
||||
dbginfo->num_data_bps = 1;
|
||||
else
|
||||
dbginfo->num_data_bps = 0;
|
||||
dbginfo->num_condition_regs = 0;
|
||||
dbginfo->data_bp_alignment = sizeof(long);
|
||||
dbginfo->sizeof_condition = 0;
|
||||
if (IS_ENABLED(CONFIG_HAVE_HW_BREAKPOINT)) {
|
||||
dbginfo->features = PPC_DEBUG_FEATURE_DATA_BP_RANGE;
|
||||
if (dawr_enabled())
|
||||
dbginfo->features |= PPC_DEBUG_FEATURE_DATA_BP_DAWR;
|
||||
} else {
|
||||
dbginfo->features = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int ptrace_get_debugreg(struct task_struct *child, unsigned long addr,
|
||||
unsigned long __user *datalp)
|
||||
{
|
||||
|
|
|
@ -139,37 +139,7 @@ long arch_ptrace(struct task_struct *child, long request,
|
|||
case PPC_PTRACE_GETHWDBGINFO: {
|
||||
struct ppc_debug_info dbginfo;
|
||||
|
||||
dbginfo.version = 1;
|
||||
#ifdef CONFIG_PPC_ADV_DEBUG_REGS
|
||||
dbginfo.num_instruction_bps = CONFIG_PPC_ADV_DEBUG_IACS;
|
||||
dbginfo.num_data_bps = CONFIG_PPC_ADV_DEBUG_DACS;
|
||||
dbginfo.num_condition_regs = CONFIG_PPC_ADV_DEBUG_DVCS;
|
||||
dbginfo.data_bp_alignment = 4;
|
||||
dbginfo.sizeof_condition = 4;
|
||||
dbginfo.features = PPC_DEBUG_FEATURE_INSN_BP_RANGE |
|
||||
PPC_DEBUG_FEATURE_INSN_BP_MASK;
|
||||
#ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
|
||||
dbginfo.features |=
|
||||
PPC_DEBUG_FEATURE_DATA_BP_RANGE |
|
||||
PPC_DEBUG_FEATURE_DATA_BP_MASK;
|
||||
#endif
|
||||
#else /* !CONFIG_PPC_ADV_DEBUG_REGS */
|
||||
dbginfo.num_instruction_bps = 0;
|
||||
if (ppc_breakpoint_available())
|
||||
dbginfo.num_data_bps = 1;
|
||||
else
|
||||
dbginfo.num_data_bps = 0;
|
||||
dbginfo.num_condition_regs = 0;
|
||||
dbginfo.data_bp_alignment = sizeof(long);
|
||||
dbginfo.sizeof_condition = 0;
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
dbginfo.features = PPC_DEBUG_FEATURE_DATA_BP_RANGE;
|
||||
if (dawr_enabled())
|
||||
dbginfo.features |= PPC_DEBUG_FEATURE_DATA_BP_DAWR;
|
||||
#else
|
||||
dbginfo.features = 0;
|
||||
#endif /* CONFIG_HAVE_HW_BREAKPOINT */
|
||||
#endif /* CONFIG_PPC_ADV_DEBUG_REGS */
|
||||
ppc_gethwdinfo(&dbginfo);
|
||||
|
||||
if (copy_to_user(datavp, &dbginfo,
|
||||
sizeof(struct ppc_debug_info)))
|
||||
|
|
Loading…
Reference in New Issue