8#include "libmicroemu/register_details.h"
10#include "libmicroemu/types.h"
27 template <
typename TCpuAccessor>
static bool IsThreadMode(
const TCpuAccessor &cpua) {
28 const auto sys_ctrl = cpua.template ReadSpecialRegister<SpecialRegisterId::kSysCtrl>();
29 const auto exec_mode = sys_ctrl & SysCtrlRegister::kExecModeMsk;
30 return exec_mode == SysCtrlRegister::kExecModeThread;
38 template <
typename TCpuAccessor>
static bool IsHandlerMode(
const TCpuAccessor &cpua) {
39 const auto sys_ctrl = cpua.template ReadSpecialRegister<SpecialRegisterId::kSysCtrl>();
40 const auto exec_mode = sys_ctrl & SysCtrlRegister::kExecModeMsk;
41 return exec_mode == SysCtrlRegister::kExecModeHandler;
49 template <
typename TCpuAccessor>
static bool IsMainStack(
const TCpuAccessor &cpua) {
51 auto sys_ctrl = cpua.template ReadSpecialRegister<SId::kSysCtrl>();
52 auto spsel = sys_ctrl & SysCtrlRegister::kControlSpSelMsk;
61 template <
typename TCpuAccessor>
static bool IsProcessStack(
const TCpuAccessor &cpua) {
63 auto sys_ctrl = cpua.template ReadSpecialRegister<SId::kSysCtrl>();
64 auto spsel = sys_ctrl & SysCtrlRegister::kControlSpSelMsk;
75 auto sys_ctrl = cpua.template ReadSpecialRegister<SpecialRegisterId::kSysCtrl>();
76 const auto exec_mode = sys_ctrl & SysCtrlRegister::kExecModeMsk;
77 const auto is_handler_mode = exec_mode == SysCtrlRegister::kExecModeHandler;
78 const auto is_privileged = (sys_ctrl & SysCtrlRegister::kControlNPrivMsk) == 0U;
80 return (is_handler_mode || is_privileged);
88 template <
typename TCpuAccessor>
static bool IsThumbMode(TCpuAccessor &cpua) {
89 const auto epsr = cpua.template ReadSpecialRegister<SpecialRegisterId::kEpsr>();
90 const bool is_thumb = (epsr &
static_cast<u32
>(EpsrRegister::kTMsk)) != 0U;
Provides predicates for certain cpu states.
Definition predicates.h:20
static bool IsCurrentModePrivileged(TCpuAccessor &cpua)
Check if the cpu is in privileged mode.
Definition predicates.h:73
static bool IsProcessStack(const TCpuAccessor &cpua)
Check if the cpu is using the process stack.
Definition predicates.h:61
static bool IsHandlerMode(const TCpuAccessor &cpua)
Check if the cpu is in handler mode.
Definition predicates.h:38
static bool IsMainStack(const TCpuAccessor &cpua)
Check if the cpu is using the main stack.
Definition predicates.h:49
static bool IsThumbMode(TCpuAccessor &cpua)
Check if the cpu is in thumb mode.
Definition predicates.h:88
static bool IsThreadMode(const TCpuAccessor &cpua)
Check if the cpu is in thread mode.
Definition predicates.h:27
The libmicroemu::internal namespace contains all classes and functions of libmicroemu which are priva...
Definition bkpt_flags.h:6
SpecialRegisterId
Enumeration of special register IDs.
Definition special_register_id.h:18
Contains the Result class which is used to return the result of a function.
This file contains the declaration of the SpecialRegisterId enumeration and related functions.