Releases: bloombloombloom/Bloom
Bloom v2.0.0
Major release
This release contains breaking changes. If you're upgrading from a previous version of Bloom, you'll need to carefully consider the changes made in this release. Please follow the instructions provided in the migration tutorial.
Breaking changes
-
With Bloom's new TDF format, the use of TDF keys (which use snake casing:
some_value
) is going to become more prominent in project configuration files (bloom.yaml). In addition, the inconsistency of casing in bloom.yaml was beginning to bother me. For these reasons, I have decided to change all keys and values to snake case:tool: # Old: name: "atmel-ice" physicalInterface: "debug-wire" # New: name: "atmel_ice" physical_interface: "debug_wire" server: # Old: name: "avr-gdb-rsp" # New: name: "avr_gdb_rsp" # Same applies to all other keys and values that used to use kebab-casing or camelCasing...
-
The
variantName
target config parameter has been removed. See the newdefault_variant_key
Insight config parameter for similar functionality. It's worth noting that this functionality may no longer be required, as the Insight GUI will now persist the selected variant across debug sessions, eliminating the need for specifying the variant in bloom.yaml, for most cases. -
The
svd
GDB monitor command has been removed. SVDs can be generated via the new target details page on the Bloom website (e.g. https://bloom.oscillate.io/docs/target/atmega4809).
RISC-V support
Support for RISC-V has been introduced in this release, with initial support being limited to a handful of RISC-V targets from WCH:
- WCH CH32V003
- CH32V003F4P6
- CH32V003F4U6
- CH32V003A4M6
- CH32V003J4M6
- WCH CH32X035
- CH32X035R8T6
- CH32X035C8T6
- CH32X035G8U6
- CH32X035G8R6
- CH32X035F8U6
- CH32X035F8P6
WCH-LinkE
Support for the WCH-LinkE debug tool has been introduced in this release, alongside an implementation of a RISC-V debug translator. The wch_linke
configuration value can be used to select the tool in bloom.yaml:
tool:
name: "wch_linke"
# ...
RISC-V GDB debug server
A RISC-V compatible GDB debug server has been introduced in this release. The riscv_gdb_rsp
configuration value can be used to select the server in bloom.yaml:
server:
name: "riscv_gdb_rsp"
# ...
Delta programming
Delta programming allows Bloom to significantly reduce programming times when uploading small changes to the program binary, during a debug session. Only the changes are programmed. Delta programming is enabled by default. It can be disabled via the new delta_programming
target config parameter:
target:
# ...
delta_programming: false
Delta programming is only supported on AVR UPDI, debugWIRE and WCH RISC-V targets. AVR PDI and JTAG targets do not support delta programming.
Support for additional AVR targets
AVR Target | Config value |
---|---|
ATtiny3224 | attiny3224 |
ATtiny3226 | attiny3226 |
ATtiny3227 | attiny3227 |
AVR16EA28 | avr16ea28 |
AVR16EA32 | avr16ea32 |
AVR16EA48 | avr16ea48 |
AVR16EB14 | avr16eb14 |
AVR16EB20 | avr16eb20 |
AVR16EB28 | avr16eb28 |
AVR16EB32 | avr16eb32 |
AVR32EA28 | avr32ea28 |
AVR32EA32 | avr32ea32 |
AVR32EA48 | avr32ea48 |
AVR32EB14 | avr32eb14 |
AVR32EB20 | avr32eb20 |
AVR32EB28 | avr32eb28 |
AVR32EB32 | avr32eb32 |
AVR16DU14 | avr16du14 |
AVR16DU20 | avr16du20 |
AVR16DU28 | avr16du28 |
AVR16DU32 | avr16du32 |
AVR32DU14 | avr32du14 |
AVR32DU20 | avr32du20 |
AVR32DU28 | avr32du28 |
AVR32DU32 | avr32du32 |
AVR64DU28 | avr64du28 |
AVR64DU32 | avr64du32 |
Register access GDB monitor commands
The list regisers (lr
), read register (rr
), write register (wr
) and write register bit field (wrb
) GDB monitor commands have been introduced in this release. See Accessing target registers via GDB for more.
Automatic enabling of EDBG/AVR mode on MPLAB Snap and PICkit4 tools
Bloom will now detect the MPLAB Snap and PICkit 4 tools in "PIC mode", and perform the switch operation to enable EDBG/AVR mode.
Other changes
-
Included program counter in the output of the
monitor reset
GDB command. -
The format of the GDB monitor
eeprom fill
command has changed. It now expects the fill value to be provided as the third argument, without the--value
prefix. Somon eeprom fill AABBCC
instead ofmon eeprom fill --value=AABBCC
. The--value
prefix incorrectly implied that the argument was optional. -
GDB packet acknowledgement has been disabled by default in the GDB debug server. This means Bloom will attempt to disable packet acknowledgment with GDB at the beginning of each connection. This comes with some fairly significant performance improvements, as GDB was taking over 40 ms to acknowledge receipt of response packets, causing delays of almost 1 second, in some cases. For those who wish to keep packet acknowledgment enabled, set the new
packet_acknowledgement
debug server config param totrue
:server: packet_acknowledgement: true # <- Bloom will keep packet acknowledgment enabled # ...
-
New target driver pass-through commands, for invoking target-specific functionality via GDB monitor commands.
-
Added the
--capabilities-machine
CLI command, to list the build's capabilities (supported targets, insight GUI, etc), in JSON format. -
Disabled the CMSIS-DAP command delay by default for all EDBG tools, as it was choking the EDBG driver and causing a noticeable drag on Bloom's performance. Introduced a new debug tool config param to enable it, if needed:
tool: edbg_driver: cmsis_command_delay: 35 # <- Delay (in milliseconds) for all CMSIS-DAP commands sent via Bloom's EDBG driver. 35 ms was the old default # ...
-
Introduced headless builds - these are builds that exclude the Insight GUI at build time, reducing Bloom's CPU and memory footprint. Headless builds can be run on resource-constrained hardware, such as Raspberry Pi. They have no GUI dependencies.
-
Added
default_variant_key
Insight config parameterinsight: default_variant_key: "atmega328pb_an" # ...
The Insight GUI will use this when selecting a target variant at startup.
-
The selected target variant in the Insight GUI will now be persisted across debug sessions.
Bug fixes
- Target signature verification was failing on some Xplained Nano development boards, in certain circumstances. Reported by @fakr00n
- Bloom was sending a null byte to GDB, when an empty response was expected. This did not appear to cause any issues with typical usage. Reported by @ccrause
- The Insight GUI wasn't correctly selecting the target variant at startup. Reported by @lkoepsel
- Flashing AVR targets with pending software breakpoint removal requests was resulting in program memory corruption, when debugging with an EDBG tool. The tool was attempting to remove the breakpoints that had already been overwritten as a result of the programming session.
Bloom v1.0.0
Major release
This release contains breaking and behavioural changes. If you're upgrading from a previous version of Bloom, you'll need to carefully consider the changes made in this release. Please follow the instructions provided in the migration tutorial.
Breaking changes
- JSON project configuration files (bloom.json) are no longer supported.
- The
avr8
target has been removed - you must now specify the exact target name in your project configuration file. - The
enabled
Insight config parameter has been removed. See theactivateOnStartup
parameter. - The
releasePostDebugSession
debug tool config parameter has been removed. If you want Bloom to give up control of the debug tool, trigger a shutdown. - The old
updateDwenFuseBit
AVR8 config parameter was renamed tomanageDwenFuseBit
in version 0.11.0. The old parameter name was still accepted, but has been removed in this release. - The
debugTool
configuration key (in bloom.yaml) has been renamed totool
. - The
debugServer
configuration key (in bloom.yaml) has been renamed toserver
.
Behavioural changes
- By default, the Insight GUI will no longer activate on startup. It can be activated, on-demand, via the new
monitor insight
GDB command. This behaviour can be changed via the newactivateOnStartup
insight config parameter. - Closing the Insight window will no longer trigger a shutdown. This behaviour can be changed via the new
shutdownOnClose
insight config parameter. - Bloom will no longer go into a suspended state when control of the debug tool is lost. Instead, it will just shutdown abruptly.
New Insight config parameters:
insight:
activateOnStartup: false # <- If true, the Insight GUI will be activated immediately after startup (which is what it used to do, prior to v1.0.0).
shutdownOnClose: false # <- If true, Bloom will shutdown when the user closes the main Insight window (which is what it used to do, prior to v1.0.0).
Support for additional AVR-DD targets
-
Support for the following targets is included in this release:
- AVR16DD14 (untested)
- AVR16DD20 (untested)
- AVR16DD28 (untested)
- AVR16DD32 (untested)
- AVR32DD14 (untested)
- AVR32DD20 (untested)
- AVR32DD28 (untested)
- AVR32DD32 (untested)
Hardware breakpoints
-
Bloom will now make use of any hardware breakpoints available on the target.
-
Once all hardware breakpoint resources have been exhausted, Bloom will fall back to software breakpoints.
-
This functionality can be disabled via the new
hardwareBreakpoints
target config param:target: name: "atmega4809" physicalInterface: "updi" hardwareBreakpoints: false # <-- Setting this param to false will disable Bloom's use of HW breakpoints.
-
This functionality is enabled by default (
hardwareBreakpoints
defaults totrue
). -
Upon target activation, Bloom will report the number of available hardware breakpoints on the target:
2023-09-20 20:36:45.768 BST [TC] [52]: [INFO] Target activated 2023-09-20 20:36:45.768 BST [TC] [53]: [INFO] Target ID: 0x1e9651 2023-09-20 20:36:45.768 BST [TC] [54]: [INFO] Target name: ATmega4809 2023-09-20 20:36:45.768 BST [TC] [55]: [INFO] Available hardware breakpoints: 1 2023-09-20 20:36:45.809 BST [DS] [58]: [INFO] Starting DebugServer
Program memory caching
-
Bloom will now cache the target's program memory
-
This functionality can be enabled/disabled via the new
programMemoryCache
target config param:target: name: "atmega4809" physicalInterface: "updi" programMemoryCache: false # <-- Setting this param to false will disable program memory caching.
-
This functionality is enabled by default (
programMemoryCache
defaults totrue
). -
Users should disable this if their application can update program memory (e.g. bootloaders).
Range stepping
-
Bloom is now able to decode and analyse AVR8 opcodes from the target's program memory. This enables the ability to perform range stepping on the target, where GDB will instruct Bloom to step within a PC range and only halt target execution when it goes out of the given range.
-
Bloom will use breakpoints (hardware or software) to intercept any instructions within the given range, that may result in the target leaving the range.
-
In most cases, this results in improved stepping performance. There's at least one known case where this can have a negative effect on stepping performance. See http://bloom.oscillate.io/docs/limitations#stepping-performance for more.
-
This functionality can be enabled/disabled via the new
rangeStepping
server config param:server: name: "avr-gdb-rsp" ipAddress: "127.0.0.1" port: 1442 rangeStepping: true # <-- Setting this param to true will enable range stepping.
-
This functionality is enabled by default (
rangeStepping
defaults totrue
).
Other changes
- Changed implementation of
preserveEeprom
function to make use of the target's EESAVE fuse bit, which is faster than the backup-erase-restore approach. - The Insight component can be removed at build time, via the
EXCLUDE_INSIGHT
parameter. See the root README.md for more. - Added key press event handlers to some Insight windows.
- Added change list in snapshot diff window.
- Fractional second added to logs.
- Renamed
debugLoggingEnabled
parameter todebugLogging
. The old name is still accepted, for now.
Bug fixes
- The size of the main Insight window was not being properly restored on startup.
- Missing includes resulting in failing builds with GCC 13+, reported and fixed by @jpf91
- Breakpoints set by GDB were not being restored after a programming session. This was only noticeable when GDB was configured to keep breakpoints inserted.
Bloom v0.12.3
Bug fix release
- Bloom was failing to manage the DWEN fuse bit on some development boards (Xplained Mini, possibly others). See Debugging debugWire targets with Bloom for more.
- Intersecting memory regions were not being detected properly.
- Premature enabling of the hex viewer in the memory inspection pane, after a programming session, was resulting in seg faults.
- Difference count in the snapshot diff window was including excluded bytes.
- Fixed version number comparison bug.
Bloom v0.12.2
Bug fix release
- Corrected seg fault which was occurring on some Arch-based distros. Was caused by the distributed libstdc++ shared object (which was incompatible with libGLX_mesa.so). I've removed the distributed libstdc++ from the Arch package, as the package manager can satisfy the dependency.
Bloom v0.12.1
Bug fix release
- Fixed "Unknown family name" error for new AVR EA targets.
Bloom v0.12.0
Feature release
EEPROM access via GDB
- Support for EEPROM access via GDB - all GDB memory access commands can now be used with EEPROM. The
0x00810000
offset must be applied to EEPROM addresses. - Support for loading ELFs with EEPROM sections.
- New
monitor eeprom fill
command, to fill EEPROM with a given value.
Support for new AVR-EA targets
-
Support for the following targets is included in this release:
- AVR64EA28 (untested)
- AVR64EA32 (untested)
- AVR64EA48 (untested)
-
See https://bloom.oscillate.io/docs/supported-targets for target config values.
Insight hex viewer performance improvements (in preparation for memory snapshot viewer and diffs)
- Refactored the HexViewer to limit the number of QGraphicsItem objects - significantly reducing RAM usage and improving performance when inspecting large memories.
- Stress tested with memories up to 5MB (meaning over 5 million byte items) - more than enough for current use cases.
- Additional work done in preparation for nested group items (for object annotations - something that will be looked at later on).
Memory snapshots via Insight
- A snapshot of the entire contents of RAM, EEPROM or FLASH can now be captured and stored in the project directory.
- Snapshots can be viewed, individually.
- Snapshots can be compared to others, or to the current memory.
- Snapshots can be restored (RAM and EEPROM only).
Flash memory inspection via Insight
- Flash memory can now be inspected via Insight
- Snapshots can be taken and be compared against.
- Worth keeping in mind: Given the sizes of flash memory on some AVR targets, the hex viewer can consume a considerable amount of RAM.
Other improvements
- The Insight window now uses ~60% less RAM, and is much more responsive.
- Focused memory regions can now span multiple lines.
- Replaced stack highlighting with stack grouping in RAM inspection pane - stack memory is now displayed as a separate group, with additional annotations, to clearly distinguish it from the rest of the target's RAM.
- Background tasks window
- Task progress bar on memory inspection pane
- Added some new "Copy Selection" actions to hex viewer
- Added
preserveEeprom
AVR8 target config boolean parameter, to control the backup-then-restore function employed for JTAG and UPDI targets. Setting this tofalse
will improve upload times for those who don't care about losing EEPROM data when uploading program changes. - Added OCDEN fuse bit management for JTAG-enabled targets. Controlled via the new
manageOcdenFuseBit
AVR8 target config boolean parameter. See https://bloom.oscillate.io/docs/configuration - Improved error messages
- For hybrid debug tools (MPLAB Snap and PICkit 4), Bloom will now check if the device is in AVR mode and report back to the user if the device was found on the system, but not in AVR mode.
Bug fixes
- Memory inspection panes were remaining disabled when switching between them.
- From CLion version 2023.1, Bloom was failing to detect CLion managing its process, resulting in the known shutdown bug.
- Interrupts from GDB were not being properly handled, resulting in some being ignored.
Bloom v0.11.1
Bug fix release
Fixes:
-
YAML parsing exceptions were not being properly handled
Exceptions thrown by the yaml-cpp library, when processing the user's project configuration file (bloom.yaml), were not being handled properly. This was resulting in syntax errors in bloom.yaml causing Bloom's process to unexpectedly abort. -
Intermittent 'illegal target state' error on AVR8 targets, after a target reset
After resetting an AVR8 target, the EDBG debug tool would sometimes report an 'illegal target state' error in response to any command that was sent immediately after receiving the break event (triggered by the reset). It seems as if the target is not fully reset (or stopped?), even after the point of receiving the break event. This was fixed by ensuring that the target is given some time after a reset, before sending any other commands. -
Incorrect value annotation font style in hex viewer
Due to a bug in the AnnotationItem class, annotation item labels were not being rendered correctly. This issue was intermittent.
Bloom v0.11.0
Feature release
Project configuration
- Project configuration files are now expected to be in YAML format.
- The
init
command will now produce a YAML configuration file (bloom.yaml). - To minimise disruption for current users, JSON configuration is still accepted. In the absence of a bloom.yaml file, Bloom will fall back to bloom.json.
- Renamed the
updateDwenFuseBit
AVR8 config param tomanageDwenFuseBit
. The old param is still supported but will be removed in a later release.
Insight
- Memory inspection panes
- Can now be detached from the main Insight window
- Auto-refresh is disabled by default (can be enabled by right-clicking the refresh tool button)
- Individual bytes can be selected in the hex viewer and copied to the clipboard
- Address labels in the hex viewer can be configured to display absolute or relative addresses (via a context menu presented when right-clicking any address label). This setting is persisted through debug sessions.
- Added endianness/first-byte indicator on value annotations of focused memory regions, in the hex viewer.
- Stale memory indicator
- Some minor style tweaks to the bitset widget on the register inspection window.
SVD generation via GDB monitor
command
monitor svd
- Generates SVD and outputs to a file in the project directory.monitor svd --out
- Generates SVD and sends the output to GDB, to display as command output. GDB front-ends (IDEs) can utilise this without requiring any user action.- The
monitor target-info machine
command has been removed.
Other
- Upgraded Qt dependency to 6.2.4 LTS
- Verifying AVR8 physical interface configuration
- Before activating the AVR8 target, Bloom will now confirm the selected physical interface is supported by the selected target. Upon confirmation failure, Bloom will warn the user and provide a list of the physical interfaces supported by the selected target.
- Bloom will not abandon the startup routine upon confirmation failure, due to the possibility of false-positives.
- Bloom can only perform this check in environments where the specific AVR8 target name has been provided in the environment configuration. Use of the generic
avr8
target name will disable Bloom's ability to perform this check.
Bug fixes
- Widgets on the Insight window were overlapping on KDE Plasma desktops, due to the minimum window size being ignored. This was fixed by moving away from fixed minimum sizes on the memory inspection panel widget. See #48 for more.
- Bloom was failing to program some UPDI targets due to some buffers from GDB being misaligned, along with the lack of grouped flash writes. This was affecting targets such as the Atmega4809 on the Xplained Pro evaluation board.
- Bloom wasn't resetting the target after programming.
- Long memory reads issued by the Insight GUI were occupying the TargetController for too long, preventing it from servicing commands from the GDB debug server, resulting in GDB timeouts (which GDB would report as packet errors). These memory reads have now been split into batches, so that the TargetController can service other commands in-between, reducing the likelihood of timeouts when servicing a GDB command.
- Some instances of the error dialogue were displaying escaped characters.
- When using CLion's 'Embedded GDB Server' configuration, CLion was not allowing Bloom any opportunity to shutdown safely. As a result, the connected hardware was being left in an unknown state, which sometimes resulted in startup failures upon the user starting a new debug session. For information on how this was fixed, see #53.
Bloom v0.10.0
Feature release
Support for programming
Bloom can now write to the target's program memory. GDB's load
command can be used to program the target. Bloom users no longer need to rely on other software to apply code changes during their debug sessions.
Bug fixes:
- Alignment bug that resulted in EDBG-based debug tools returning an error when attempting to access non-word-aligned addresses in flash memory.
- A typo was resulting in invalid CMSIS command packet sizes, taking the size above the HID report size, resulting in an error when attempting to send commands with a large payload. This was affecting the EDBG driver.
- Incorrect buffering was resulting in invalid CMSIS AVR command sizes, resulting in a similar issue as described above. As with above, this issue only affected the EDBG driver and only became apparent when sending commands with a large payload.
- Insight was needlessly refreshing data upon the start of a debug session.
Bloom v0.9.1
Bug fix release
Fixes:
-
GDB generating invalid backtraces for debugWire sessions
Bloom was incorrectly applying an offset to all paged flash memory reads. This meant that it was reading the wrong areas in memory. This was resulting in GDB generating invalid backtraces. This bug only affected debugWIre sessions. See #40 -
GDB attempting to access flash memory at invalid addresses
Bloom was not providing GDB with a target memory map, so GDB would attempt to access flash memory at invalid addresses. Bloom now supports theqXfer:memory-map:read::
GDB command packet - meaning we now provide GDB with a memory map upon request.