2424from ..core import exceptions
2525from ..core .target import Target
2626from ..core .memory_map import MemoryType
27+ from ..coresight .core_ids import CortexMExtension
2728from . import signals
2829
2930LOG = logging .getLogger (__name__ )
@@ -249,31 +250,66 @@ def get_memory_map_xml(self):
249250 prop .text = hex (r .blocksize ).rstrip ("L" )
250251 return MAP_XML_HEADER + ElementTree .tostring (root )
251252
252- def _define_xpsr_control_fields (self , xml_feature ):
253- """@brief Define XPSR and CONTROL register types with fields."""
253+ def _define_m_profile_types (self , xml_feature ):
254+ """@brief Define 'org.gnu.gdb.arm.m-profile' types."""
255+ xpsr = ElementTree .SubElement (xml_feature , 'flags' , id = "xpsr" , size = "4" )
256+ # APSR fields
257+ ElementTree .SubElement (xpsr , "field" , name = "N" , start = "31" , end = "31" , type = "bool" )
258+ ElementTree .SubElement (xpsr , "field" , name = "Z" , start = "30" , end = "30" , type = "bool" )
259+ ElementTree .SubElement (xpsr , "field" , name = "C" , start = "29" , end = "29" , type = "bool" )
260+ ElementTree .SubElement (xpsr , "field" , name = "V" , start = "28" , end = "28" , type = "bool" )
261+ ElementTree .SubElement (xpsr , "field" , name = "Q" , start = "27" , end = "27" , type = "bool" )
262+ ElementTree .SubElement (xpsr , "field" , name = "GE" , start = "16" , end = "19" , type = "int" )
263+ #IPSR fields
264+ ElementTree .SubElement (xpsr , "field" , name = "EXC" , start = "0" , end = "8" , type = "int" )
265+ #EPSR fields
266+ ElementTree .SubElement (xpsr , "field" , name = "T" , start = "24" , end = "24" , type = "bool" )
267+
268+ def _define_m_system_types (self , xml_feature ):
269+ """@brief Define 'org.gnu.gdb.arm.m-system' types."""
254270 control = ElementTree .SubElement (xml_feature , 'flags' , id = "control" , size = "4" )
255271 ElementTree .SubElement (control , "field" , name = "nPRIV" , start = "0" , end = "0" , type = "bool" )
256272 ElementTree .SubElement (control , "field" , name = "SPSEL" , start = "1" , end = "1" , type = "bool" )
257273 if self ._context .core .has_fpu :
258274 ElementTree .SubElement (control , "field" , name = "FPCA" , start = "2" , end = "2" , type = "bool" )
259- if Target .SecurityState .SECURE in self ._context .core .supported_security_states :
260- ElementTree .SubElement (control , "field" , name = "SFPA" , start = "3" , end = "3" , type = "bool" )
261-
262- apsr = ElementTree .SubElement (xml_feature , 'flags' , id = "apsr" , size = "4" )
263- ElementTree .SubElement (apsr , "field" , name = "N" , start = "31" , end = "31" , type = "bool" )
264- ElementTree .SubElement (apsr , "field" , name = "Z" , start = "30" , end = "30" , type = "bool" )
265- ElementTree .SubElement (apsr , "field" , name = "C" , start = "29" , end = "29" , type = "bool" )
266- ElementTree .SubElement (apsr , "field" , name = "V" , start = "28" , end = "28" , type = "bool" )
267- ElementTree .SubElement (apsr , "field" , name = "Q" , start = "27" , end = "27" , type = "bool" )
268- ElementTree .SubElement (apsr , "field" , name = "GE" , start = "16" , end = "19" , type = "int" )
269-
270- ipsr = ElementTree .SubElement (xml_feature , 'struct' , id = "ipsr" , size = "4" )
271- ElementTree .SubElement (ipsr , "field" , name = "EXC" , start = "0" , end = "8" , type = "int" )
272-
273- xpsr = ElementTree .SubElement (xml_feature , 'union' , id = "xpsr" )
274- ElementTree .SubElement (xpsr , "field" , name = "xpsr" , type = "uint32" )
275- ElementTree .SubElement (xpsr , "field" , name = "apsr" , type = "apsr" )
276- ElementTree .SubElement (xpsr , "field" , name = "ipsr" , type = "ipsr" )
275+ if Target .SecurityState .SECURE in self ._context .core .supported_security_states :
276+ ElementTree .SubElement (control , "field" , name = "SFPA" , start = "3" , end = "3" , type = "bool" )
277+ if (CortexMExtension .PACBTI in self ._context .core .extensions ):
278+ ElementTree .SubElement (control , "field" , name = "BTI_EN" , start = "4" , end = "4" , type = "bool" )
279+ ElementTree .SubElement (control , "field" , name = "UBTI_EN" , start = "5" , end = "5" , type = "bool" )
280+ ElementTree .SubElement (control , "field" , name = "PAC_EN" , start = "6" , end = "6" , type = "bool" )
281+ ElementTree .SubElement (control , "field" , name = "UPAC_EN" , start = "7" , end = "7" , type = "bool" )
282+
283+ def _define_m_profile_mve_types (self , xml_feature ):
284+ """@brief Define 'org.gnu.gdb.arm.m-profile-mve' types."""
285+ vpr = ElementTree .SubElement (xml_feature , 'flags' , id = "vpr" , size = "4" )
286+ ElementTree .SubElement (vpr , "field" , name = "P0" , start = "0" , end = "15" , type = "int" )
287+ ElementTree .SubElement (vpr , "field" , name = "MASK01" , start = "16" , end = "19" , type = "int" )
288+ ElementTree .SubElement (vpr , "field" , name = "MASK23" , start = "20" , end = "23" , type = "int" )
289+
290+ def _define_vfp_types (self , xml_feature ):
291+ """@brief Define 'org.gnu.gdb.arm.vfp' types."""
292+ fpscr = ElementTree .SubElement (xml_feature , 'flags' , id = "fpscr" , size = "4" )
293+ ElementTree .SubElement (fpscr , "field" , name = "N" , start = "31" , end = "31" , type = "bool" )
294+ ElementTree .SubElement (fpscr , "field" , name = "Z" , start = "30" , end = "30" , type = "bool" )
295+ ElementTree .SubElement (fpscr , "field" , name = "C" , start = "29" , end = "29" , type = "bool" )
296+ ElementTree .SubElement (fpscr , "field" , name = "V" , start = "28" , end = "28" , type = "bool" )
297+ if (CortexMExtension .MVE in self ._context .core .extensions ):
298+ ElementTree .SubElement (fpscr , "field" , name = "QC" , start = "27" , end = "27" , type = "bool" )
299+ ElementTree .SubElement (fpscr , "field" , name = "AHP" , start = "26" , end = "26" , type = "bool" )
300+ ElementTree .SubElement (fpscr , "field" , name = "DN" , start = "25" , end = "25" , type = "bool" )
301+ ElementTree .SubElement (fpscr , "field" , name = "FZ" , start = "24" , end = "24" , type = "bool" )
302+ ElementTree .SubElement (fpscr , "field" , name = "RMode" , start = "22" , end = "23" , type = "int" )
303+ if (CortexMExtension .FPU_HP in self ._context .core .extensions ):
304+ ElementTree .SubElement (fpscr , "field" , name = "FZ16" , start = "19" , end = "19" , type = "bool" )
305+ if (self ._context .core .architecture_version == (8 , 1 )):
306+ ElementTree .SubElement (fpscr , "field" , name = "LTPSIZE" , start = "16" , end = "18" , type = "int" )
307+ ElementTree .SubElement (fpscr , "field" , name = "IDC" , start = "7" , end = "7" , type = "bool" )
308+ ElementTree .SubElement (fpscr , "field" , name = "IXC" , start = "4" , end = "4" , type = "bool" )
309+ ElementTree .SubElement (fpscr , "field" , name = "UFC" , start = "3" , end = "3" , type = "bool" )
310+ ElementTree .SubElement (fpscr , "field" , name = "OFC" , start = "2" , end = "2" , type = "bool" )
311+ ElementTree .SubElement (fpscr , "field" , name = "DZC" , start = "1" , end = "1" , type = "bool" )
312+ ElementTree .SubElement (fpscr , "field" , name = "IOC" , start = "0" , end = "0" , type = "bool" )
277313
278314 def _build_target_xml (self ):
279315 # Extract list of registers, group into gdb features.
@@ -290,7 +326,7 @@ def _build_target_xml(self):
290326 # Add any remaining features at the end of the feature list.
291327 features += unordered_features
292328
293- use_xpsr_control_fields = self ._context .session .options .get ('xpsr_control_fields ' )
329+ use_register_fields = self ._context .session .options .get ('register_fields ' )
294330
295331 xml_root = ElementTree .Element ('target' )
296332
@@ -299,13 +335,20 @@ def _build_target_xml(self):
299335
300336 xml_feature = ElementTree .SubElement (xml_root , "feature" , name = feature_name )
301337
302- # Special case for XPSR and CONTROL bitfield presentation.
303- if (feature_name == "org.gnu.gdb.arm.m-profile" ) and use_xpsr_control_fields :
304- self ._define_xpsr_control_fields (xml_feature )
338+ # Define feature types when option 'register_fields' is enabled.
339+ if use_register_fields :
340+ if feature_name == "org.gnu.gdb.arm.m-profile" :
341+ self ._define_m_profile_types (xml_feature )
342+ elif feature_name == "org.gnu.gdb.arm.m-system" :
343+ self ._define_m_system_types (xml_feature )
344+ elif feature_name == "org.gnu.gdb.arm.m-profile-mve" :
345+ self ._define_m_profile_mve_types (xml_feature )
346+ elif feature_name == "org.gnu.gdb.arm.vfp" :
347+ self ._define_vfp_types (xml_feature )
305348
306349 # Add XML for the registers in this feature.
307350 for reg in regs :
308- if use_xpsr_control_fields and (reg .name in ('xpsr' , 'control' )):
351+ if use_register_fields and (reg .name in ('xpsr' , 'control' , 'vpr' , 'fpscr ' )):
309352 reg_type = reg .name
310353 else :
311354 reg_type = reg .gdb_type
0 commit comments