a³ release 22.04

Improved Symbols view

Improved trace statistics

Introducing TraceVisualizer

New analysis type

Introducing the new analysis type TraceVisualizer that extracts measured task executions from given trace data and displays them in a flame graph.

Improved documentation

  • New application notes for aiT, StackAnalyzer and TimeWeaver that provide additional information on how to apply each tool to real-world industrial programs. The notes are accessible from the Welcome page, as well as via the Help menu.
  • Updated design of user manuals and other documents shipped with the software.
  • Updated sections about EN 50128 and EN 60657 in the Safety Manual.

Improved Unicode support

Improved support for Unicode file names in all tools. On Unices, it is assumed that the locale is set to a UTF-8 variant for the wanted language.

Qualification Support Kits

  • New QSKs:
    • aiT for e300 with gcc-3.3.2
    • aiT for MPC5674F
  • All QSKs now come with the QSLCD report included.
  • New naming scheme for reports:
    • each file now has an identifying prefix (tor, tovvcp,..)
    • operational-requirements-*.htm has been renamed into tor_*.htm
    • verification-test-plan-*.htm has been renamed into tovvcp_*.htm
  • New test cases:
    qk_computation_entriesall architectures
    qk_ais2_expression_number_of_elementsall architectures
  • Several test cases have been reworked to cover multiple different offset indices, including the wildcard index:
    • qk_ais2_program_point_offset_return
    • qk_ais2_program_point_offset_call_pp
    • qk_ais2_program_point_offset_read
    • qk_ais2_program_point_offset_unconditional
    • qk_ais2_program_point_offset_write
  • Reworked qk_ais2_attribute_predefined to check for the new immutable attribute target_type.
  • Reworked qk_ais2_area_properties_copied to additionally check for multiple area copy annotations to the same target address.
  • Added --timeout time to the command line of QSK tool runs (change of qualified workflow).
  • Improved qk_setting_expected_result to explicitly test AIS2 language components in the expected result expression.


  • Significantly improved performance for projects with a large number of analyses.
  • Improved handling of workspace files.

Visualization and results

  • Improved filtering in contextual statistics views.
  • Symbols view: Improved searching for addresses that point inside class member functions.


  • New functor entries(@groupid) that returns the number of analyses in the group.
  • For a failed analysis, the result is now assumed to be “?”.


  • Trace interrupt statistics now show the total interrupt blocking time per trace snippet.
  • Improved look-and-feel of trace segment and interrupt statistics views.
  • Trace segment and interrupt statistics views no longer filter by non-zero standard deviation.
  • Trace statistics now additionally include the summary trace time.
  • The symbol table view can now show the occurrences of traced entries.


  • Introducing a new program point construct for TriCore, “trapEntry(<TCN>)”, to determine the address of a trap handler associated with the given trap class number (TCN).
  • Improved handling of annotations that change the instruction type.
  • Improved handling of global restrict and global default memory access annotations for architectures with a 64-bit address space.
  • Changed the AIS2 grammar such that an instruction annotation scope nested in another instruction annotation scope now has to be enclosed by braces.
    For example, the following is no longer accepted:
    instruction "main" instruction -> 8 bytes { ... }
    and instead needs to be written as:
    instruction "main" {
        instruction -> 8 bytes { ... }
  • The “area ... count accesses” annotation is now also available for TimeWeaver analyses. In addition to global statistics, per-block statistics are output to the XML report file and included in the call graph.
  • New annotation to specify that the stack pointer has been aligned to a power-of-two, multiple-of-element-size boundary:
    instruction <pp> {
           stack <stack_name> alignment: <n> bytes;
  • Improved “routine/loop takes xxx cycles” annotations. The tool now honors program exits in routines/loops cut out with such annotations even though all other effects are still ignored.
  • Fixed imprecision in value partitioning annotation when applied to multiple program points, which sometimes resulted in unwanted additional partitions with unknown values.


  • Improved resolving of C++ virtual member function calls.
  • Improved resolving of virtual member function calls in the presence of multiple inheritance.
  • Improved handling of computed calls whose call targets have been partially resolved and where all call targets are annotated to never return.

Value analysis

  • Added a heuristic that warns the user if a "tail call" annotation has been applied to an instruction usually causing a regular call and vice versa. Example:
    isa-arm: Warning #3177: In "minmax.c", line 14:
    In routine 'min', at address 0x800000ad8:
    In "<suite>/bugs/31872/test.ais", line 2:
    Instruction 'b 0x800000acc <0x800000acc>' is considered to be a regular call but might rather be a tail call.
    This could be caused by an annotation.
    isa-arm: Warning #3177: In "scenarios_a3.c", line 242:
    In routine 'ISR2_minmax', at address 0x800000f04:
    In "<suite>/bugs/31872/test.ais", line 7:
    Instruction 'bl 0x800000adc <max>' is considered to be a tail call but might rather be a regular call.
    This could be caused by an annotation.
  • Improved handling of nullptr in type domain.
  • Improved precision for shift operations.
  • Improved handling of stack alignment operations.
  • Improve precision for population count operations.
  • Improved handling of code snippets using mixed calling conventions, e. g. fcall/fret and call/ret on TriCore.


  • Improved reading address information from DWARF debug information.
  • Improved handling of instruction-level DWARF debug information.
  • Improved extraction of type information about local variables inside inlined functions.
  • Improved handling of enumerator tags used in template specifiers.
  • Improved handling of template argument lists in function names.


  • Improved handling of illegal opcodes during decoding.
  • Improved iterative decoding.
  • Improved automatic C++ virtual member function call resolving.
  • Clang compiler:
    • Improved automatic decoding of computed control-flow transitions.
    • Improved automatic switch table decoding.
    • Improved resolving of virtual member function calls inside template classes.


  • GNAT compiler: Improved automatic switch table decoding.
  • Assume calling convention for routines that use the instruction “bctr” to return to their callers if the instruction has been manually annotated to be a return instruction.
  • PPC64: Improved handling of function pointers referenced via the .opd section.
  • Improved precision of the relational domain for the instructions e_cmph, se_cmph, e_cmph16i, e_cmphl, se_cmphl, and e_cmphl16i.

Cache and pipeline analysis

  • Improved handling of memory-access errors in all pipeline analyses.
  • ARM:
    • Improved analysis performance and memory usage for the Cortex-R5F pipeline.
    • Cortex-R4F/R5F: improved pipeline analysis.
    • Improved peripheral handling for TMS570LS3137 (Cortex-R4F). Updated memory-timing annotations for AXI peripherals are required.
    • Support for locked instruction-cache area annotations in the pipeline model for Cortex-R5F.
  • ColdFire: Improved MCF5307 pipeline model with revised store-buffer handling.
  • e200: Improved handling of TLB for the MPC5674F
  • TriCore:
    • Improved handling of peripheral memory with zero-cycle wait states.
    • Improved handling of DLMU read accesses that hit the store buffer.


  • Improved handling of recursive entry points.
  • Improved handling of entry points that begin with a loop.
  • Improved handling of not-analyzed routines.
  • Improved detection of trace snippet ends.
  • Improved checks that verify whether input traces match the analyzed binary.
  • Improved interrupt handling for Lauterbach ASCII/FLOW export traces.
  • Improved current active stack frame handling.
  • Improved trace file coverage statistics by excluding trace lines that are spent outside the analyzed task in interrupt handlers.
  • Improved PPC BHM trace parser speed.