staticinlinebool can_single_step(u32 inst)
{ switch (get_op(inst)) { case OP_TRAP_64: returnfalse; case OP_TRAP: returnfalse; case OP_SC: returnfalse; case OP_19: switch (get_xop(inst)) { case OP_19_XOP_RFID: returnfalse; case OP_19_XOP_RFMCI: returnfalse; case OP_19_XOP_RFDI: returnfalse; case OP_19_XOP_RFI: returnfalse; case OP_19_XOP_RFCI: returnfalse; case OP_19_XOP_RFSCV: returnfalse; case OP_19_XOP_HRFID: returnfalse; case OP_19_XOP_URFID: returnfalse; case OP_19_XOP_STOP: returnfalse; case OP_19_XOP_DOZE: returnfalse; case OP_19_XOP_NAP: returnfalse; case OP_19_XOP_SLEEP: returnfalse; case OP_19_XOP_RVWINKLE: returnfalse;
} break; case OP_31: switch (get_xop(inst)) { case OP_31_XOP_TRAP: returnfalse; case OP_31_XOP_TRAP_64: returnfalse; case OP_31_XOP_MTMSR: returnfalse; case OP_31_XOP_MTMSRD: returnfalse;
} break;
} returntrue;
}
/* Enable single stepping for the current task */ staticinlinevoid enable_single_step(struct pt_regs *regs)
{
regs_set_return_msr(regs, regs->msr | MSR_SINGLESTEP); #ifdef CONFIG_PPC_ADV_DEBUG_REGS /* * We turn off Critical Input Exception(CE) to ensure that the single * step will be for the instruction we have the probe on; if we don't, * it is possible we'd get the single step reported for CE.
*/
regs_set_return_msr(regs, regs->msr & ~MSR_CE);
mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | DBCR0_IC | DBCR0_IDM); #ifdef CONFIG_PPC_47x
isync(); #endif #endif
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.