8
33
Fork
You've already forked blackmagic
23

cortexm : mistmatch between gdb regnum and internal logic #2099

Open
opened 2025年03月21日 07:52:48 +01:00 by mean00 · 2 comments
mean00 commented 2025年03月21日 07:52:48 +01:00 (Migrated from github.com)
Copy link

Hi,
There seems to be several issues when matching the gdb representation of the registers and the internal representation.
1- xPSR is forced to be 25, leaving a gap in the gdb register numbering (16->25). That breaks the conversion between regnum and actual register index >= xPSR (that's relevant when reading/writing a single register). msp and psp cannot be set individually for example.

2- Similarily, the matching is problematic due to optional registers such as basepri.
Trustzone is simply offset by CORTEXM_GENERAL_REGCOUNT (20), while the value is actually ~22 for cortex m33.

The first one is easy to fix, but it looks difficult to do a simple/quick fix for the 2nd one that works for cortex M0 and M33 without rewriting a significant part of the logic.

An option would be to have more gaps in the registers, so that a given register is always at the same place/index whatever the chip is, rather than strictly following the registers that are present on the current chip.

Hi, There seems to be several issues when matching the gdb representation of the registers and the internal representation. 1- xPSR is forced to be 25, leaving a gap in the gdb register numbering (16->25). That breaks the conversion between regnum and actual register index >= xPSR (that's relevant when reading/writing a single register). msp and psp cannot be set individually for example. 2- Similarily, the matching is problematic due to optional registers such as basepri. Trustzone is simply offset by CORTEXM_GENERAL_REGCOUNT (20), while the value is actually ~22 for cortex m33. The first one is easy to fix, but it looks difficult to do a simple/quick fix for the 2nd one that works for cortex M0 and M33 without rewriting a significant part of the logic. An option would be to have more gaps in the registers, so that a given register is always at the same place/index whatever the chip is, rather than strictly following the registers that are present on the current chip.
mean00 commented 2025年03月21日 08:06:01 +01:00 (Migrated from github.com)
Copy link

actually they seems to be always presented in the xml description
so just adding them to the internal tables and bumping CORTEXM_GENERAL_REGCOUNT to ~ 23 may do the trick

actually they seems to be always presented in the xml description so just adding them to the internal tables and bumping CORTEXM_GENERAL_REGCOUNT to ~ 23 may do the trick
mean00 commented 2025年03月22日 16:29:30 +01:00 (Migrated from github.com)
Copy link

There is a probably a need for a small translation layer between gdb view and internal view
As far as i can see, the read_reg functions are used directly for internal use and from gdb
Most of the access are for the low number registers so it does not hurt much, if at all

There is a probably a need for a small translation layer between gdb view and internal view As far as i can see, the read_reg functions are used directly for internal use and from gdb Most of the access are for the low number registers so it does not hurt much, if at all
Sign in to join this conversation.
No Branch/Tag specified
main
fix/pre-bmp-v3-cross-file-cleanup
feature/bmda-remote-comms
ALTracer/feature/aarch64-ident
feature/better-meson-optimisation-handling
feature/am335x-support
feature/esp32-c3-support
feature/cortex-ar-software-breakpoints
feature/unit-testing
feature/windows-usb-serial-interface-naming
fix/bmp-external-spi
ALTracer/feature/bluepillplus-platform
ALTracer/feature/at32f43x-unrdp
feature/const-correctness
ALTracer/feature/fault_handlers
ALTracer/feature/hazard3-ice40-support
fix/ci-cleanup
ALTracer/fix/gdb-10-12-thread
ALTracer/feature/blackpill-f4-adc
ALTracer/fix/cortex-desc-allocfail-report
ALTracer/feature/spi-perf
ALTracer/feature/calibrate_swd
ALTracer/feature/blank-check
feature/avr
v2.0
v1.9
v1.10
v1.8
v2.1.0-rc1
v2.0.0
v2.0.0-rc2
v2.0.0-rc1
v1.9.3
v1.10.2
v1.10.1
v1.10.0
v1.10.0-rc1
v1.10.0-rc0
v1.9.2
v1.8.3
v1.9.1
v1.9.0
v1.9.0-rc1
v1.9.0-rc0
v1.8.2
v1.8.1
v1.8.0
v1.7.1
v1.7
v1.6.2-rc1
1.6.2-rc0
v1.6.1
v1.6
v1.6-rc1
v1.6-rc0
production_01
production_00
Labels
Clear labels
BMD App
Black Magic Debug App (aka. PC hosted) (not firmware)
BMP Firmware
Black Magic Probe Firmware (not PC hosted software)
Bug
Confirmed bug
Build system
Build system
Can't reproduce
Maintainers can't reproduce this problem
CI
Continuous Integration System
Contribution wanted
User contributions welcome
Documentation
Project documentation
Draft
Work in progress draft
Duplicate
This issue or pull request already exists
Enhancement
General project improvement
Feedback wanted
Requires additional submitter feedback
Foreign Host Board
Non Native hardware to runing Black Magic firmware on
GDB
Issue/PR related to GDB
Good first issue
Good for newcommers
HwIssue Mitigation
Solving or mitigating a Hardware issue in Software
Information Needed
Maintainers need more information
NativeHardware
Official Black Magic Debug Hardware
New Host Board
New hardware to run Black Magic firmware on
New Target
New debug target
Off Topic
Something that does not involve the project in any way
Potential Bug
A potential, unconfirmed or very special circumstance bug
Regression
Bug caused by a regression
User Interest Needed
More user interest required before consideration
User Testing Needed
Looking for user testing reports
Won't fix
Outside of the project scope or works as intended
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
blackmagic-debug/blackmagic#2099
Reference in a new issue
blackmagic-debug/blackmagic
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?