Skip to content

Commit 21be541

Browse files
gdbserver: report target architecture
1 parent 5eec8e8 commit 21be541

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

pyocd/gdbserver/context_facade.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from ..core import exceptions
2525
from ..core.target import Target
2626
from ..core.memory_map import MemoryType
27-
from ..coresight.core_ids import CortexMExtension
27+
from ..coresight.core_ids import (CoreArchitecture, CortexMExtension)
2828
from . import signals
2929

3030
LOG = logging.getLogger(__name__)
@@ -312,6 +312,29 @@ def _define_vfp_types(self, xml_feature):
312312
ElementTree.SubElement(fpscr, "field", name="IOC", start="0", end="0", type="bool")
313313

314314
def _build_target_xml(self):
315+
xml_root = ElementTree.Element('target')
316+
317+
# Add architecture element.
318+
architecture = 'arm'
319+
arch = self._context.core.architecture
320+
if arch == CoreArchitecture.ARMv6M:
321+
architecture = 'armv6s-m'
322+
elif arch == CoreArchitecture.ARMv7M:
323+
if (CortexMExtension.DSP in self._context.core.extensions):
324+
architecture = 'armv7e-m'
325+
else:
326+
# gdb does not recognize 'armv7-m', use 'armv7e-m' instead.
327+
# architecture = 'armv7-m'
328+
architecture = 'armv7e-m'
329+
elif arch == CoreArchitecture.ARMv8M_BASE:
330+
architecture = 'armv8-m.base'
331+
elif arch == CoreArchitecture.ARMv8M_MAIN:
332+
if self._context.core.architecture_version == (8, 1):
333+
architecture = 'armv8.1-m.main'
334+
else:
335+
architecture = 'armv8-m.main'
336+
ElementTree.SubElement(xml_root, 'architecture').text = architecture
337+
315338
# Extract list of registers, group into gdb features.
316339
regs_sorted_by_feature = sorted(self._register_list, key=lambda r: r.gdb_feature) # Must sort for groupby().
317340
regs_by_feature = {k: list(g) for k, g in groupby(regs_sorted_by_feature, key=lambda r: r.gdb_feature)}
@@ -328,12 +351,10 @@ def _build_target_xml(self):
328351

329352
use_register_fields = self._context.session.options.get('register_fields')
330353

331-
xml_root = ElementTree.Element('target')
332-
333354
for feature_name in features:
334355
regs = regs_by_feature[feature_name]
335356

336-
xml_feature = ElementTree.SubElement(xml_root, "feature", name=feature_name)
357+
xml_feature = ElementTree.SubElement(xml_root, 'feature', name=feature_name)
337358

338359
# Define feature types when option 'register_fields' is enabled.
339360
if use_register_fields:

0 commit comments

Comments
 (0)