LLDB mainline
|
This class manages the storage and detection of register field information. More...
#include <RegisterFlagsDetector_arm64.h>
Classes | |
struct | RegisterEntry |
Public Member Functions | |
void | DetectFields (uint64_t hwcap, uint64_t hwcap2) |
For the registers listed in this class, detect which fields are present. | |
void | UpdateRegisterInfo (const RegisterInfo *reg_info, uint32_t num_regs) |
Add the field information of any registers named in this class, to the relevant RegisterInfo instances. | |
bool | HasDetected () const |
Returns true if field detection has been run at least once. | |
Private Types | |
using | Fields = std::vector< RegisterFlags::Field > |
using | DetectorFn = std::function< Fields(uint64_t, uint64_t)> |
Static Private Member Functions | |
static Fields | DetectCPSRFields (uint64_t hwcap, uint64_t hwcap2) |
static Fields | DetectFPSRFields (uint64_t hwcap, uint64_t hwcap2) |
static Fields | DetectFPCRFields (uint64_t hwcap, uint64_t hwcap2) |
static Fields | DetectMTECtrlFields (uint64_t hwcap, uint64_t hwcap2) |
static Fields | DetectSVCRFields (uint64_t hwcap, uint64_t hwcap2) |
Private Attributes | |
struct lldb_private::Arm64RegisterFlagsDetector::RegisterEntry | m_registers [5] |
bool | m_has_detected = false |
This class manages the storage and detection of register field information.
The same register may have different fields on different CPUs. This class abstracts out the field detection process so we can use it on live processes and core files.
The way to use this class is:
This must be done in that order, and you should ensure that if multiple threads will reference the information, a mutex is used to make sure only one calls DetectFields.
Definition at line 36 of file RegisterFlagsDetector_arm64.h.
|
private |
Definition at line 56 of file RegisterFlagsDetector_arm64.h.
|
private |
Definition at line 55 of file RegisterFlagsDetector_arm64.h.
|
staticprivate |
Definition at line 125 of file RegisterFlagsDetector_arm64.cpp.
References HWCAP2_BTI, HWCAP2_MTE, HWCAP_DIT, and HWCAP_SSBS.
void Arm64RegisterFlagsDetector::DetectFields | ( | uint64_t | hwcap, |
uint64_t | hwcap2 | ||
) |
For the registers listed in this class, detect which fields are present.
Must be called before UpdateRegisterInfos. If called more than once, fields will be redetected each time from scratch. If the target would not have this register at all, the list of fields will be left empty.
Definition at line 170 of file RegisterFlagsDetector_arm64.cpp.
References m_has_detected, and m_registers.
Referenced by RegisterContextCorePOSIX_arm64::RegisterContextCorePOSIX_arm64().
|
staticprivate |
Definition at line 66 of file RegisterFlagsDetector_arm64.cpp.
References HWCAP2_AFP, HWCAP2_EBF16, HWCAP_ASIMDHP, and HWCAP_FPHP.
|
staticprivate |
Definition at line 105 of file RegisterFlagsDetector_arm64.cpp.
|
staticprivate |
Definition at line 46 of file RegisterFlagsDetector_arm64.cpp.
References HWCAP2_MTE.
|
staticprivate |
Definition at line 30 of file RegisterFlagsDetector_arm64.cpp.
References HWCAP2_SME.
|
inline |
Returns true if field detection has been run at least once.
Definition at line 52 of file RegisterFlagsDetector_arm64.h.
References m_has_detected.
void Arm64RegisterFlagsDetector::UpdateRegisterInfo | ( | const RegisterInfo * | reg_info, |
uint32_t | num_regs | ||
) |
Add the field information of any registers named in this class, to the relevant RegisterInfo instances.
Note that this will be done with a pointer to the instance of this class that you call this on, so the lifetime of that instance must be at least that of the register info.
Definition at line 176 of file RegisterFlagsDetector_arm64.cpp.
References lldb_private::RegisterInfo::flags_type, m_has_detected, and m_registers.
Referenced by RegisterContextCorePOSIX_arm64::RegisterContextCorePOSIX_arm64().
|
private |
Definition at line 81 of file RegisterFlagsDetector_arm64.h.
Referenced by DetectFields(), HasDetected(), and UpdateRegisterInfo().
|
private |
Referenced by DetectFields(), and UpdateRegisterInfo().