7
32
Fork
You've already forked blackmagic
23

Buffer handling issues in the SWO code #2050

Open
opened 2025年01月13日 06:10:28 +01:00 by dragonmux · 0 comments

Currently when the SWO buffer fills up, and swo_buffer_bytes_available reaches SWO_BUFFER_SIZE, the buffer management code will fail to cap the availability count. This results in the implementation sending the same buffer of data multiple times to the host till the transfer amount has been satisfied.

This is not correct, and requires the management code to detect this over-filling and advance the read index appropriately while capping the availability count. This will prevent us sending garbage.

Note that there are actually two approaches needed - if the data excess is from the Manchester decoder then the extra bytes should be thrown away and an artificial overflow inserted into the buffer, meanwhile if the extra bytes are from the UART decoder, then DMA requires we do the read index tracking change instead. In this latter case, we will get a glitch in SWO data output that we cannot prevent and we cannot easily mark the overflow. The only way to work around this would be to suspend DMA till the overflow condition is cleared, including setting up the extra overflow marker, before resuming DMA This is doable but more complicated.

Currently when the SWO buffer fills up, and [`swo_buffer_bytes_available`](https://github.com/blackmagic-debug/blackmagic/blob/362d736c2f30bb04f9b21e1ea941e0fb3dbd944b/src/platforms/common/stm32/swo.c#L61) reaches `SWO_BUFFER_SIZE`, the buffer management code will fail to cap the availability count. This results in the implementation sending the same buffer of data multiple times to the host till the transfer amount has been satisfied. This is not correct, and requires the management code to detect this over-filling and advance the read index appropriately while capping the availability count. This will prevent us sending garbage. Note that there are actually two approaches needed - if the data excess is from the Manchester decoder then the extra bytes should be thrown away and an artificial overflow inserted into the buffer, meanwhile if the extra bytes are from the UART decoder, then DMA requires we do the read index tracking change instead. In this latter case, we will get a glitch in SWO data output that we cannot prevent and we cannot easily mark the overflow. The only way to work around this would be to suspend DMA till the overflow condition is cleared, including setting up the extra overflow marker, before resuming DMA This is doable but more complicated.
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#2050
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?