Menu

Searches titles, sections and text. ↑ ↓ to move, Enter to open, Esc to close. Opens with / or Ctrl+K.

    Contact

    Reliable object to source code mapping

    Trace observes object code, verification obligations live in source, and optimization stands between them.
    CEDARtools.Anchor makes attribution verifiable.


    In brief

    Anchor* supplements processor-trace observation where optimization removes the control-flow distinctions needed to establish a source-level condition outcome. It introduces bounded, semantically neutral control-flow anchors before compilation, records their identity in an anchor manifest, and evaluates the resulting executable from trace. The method does not write coverage state from the application, but the anchors are part of the measured executable and their effects must be characterized.

    The idea

    At the points of interest - the places a coverage metric needs to tell apart - the source is supplemented with control-flow blocks that are

    • functionally neutral - they do not change what the program computes;
    • preserved through optimization - preservation is verified rather than assumed, per compiler, version and optimization setting;
    • free of memory operations on analysis state - the application maintains no coverage counters and no software trace buffer.

    Preservation of the anchors is verified for each supported compiler, version, optimization setting and target configuration. The build process checks the generated object code against the anchor manifest and rejects a configuration in which an anchor is missing, merged or mapped ambiguously.

    The third property is the one that matters. Conventional instrumentation writes coverage state from the application, and those writes can touch caches, timing and the memory budget, depending on configuration. An anchor produces no store to analysis state. The anchors still execute as part of the program and therefore have an instruction-level effect that is measured separately.

    The anchors are visible in the trace stream. Evaluation happens outside the target and is mapped back to source through the anchor manifest - a static observation mapping between source-level points and their binary representations - together with symbol-table associations. As disclosed in the published application, that mapping metadata can draw on debugging data, symbol-table data, or both; the anchor attribution does not have to rest on DWARF debug information.

    if (a) {
    cov[ 17 ]++;
    fire();
    if (a) {...
    store to RAM
    analysis state on the target
    store to RAM...
    if (a) {
    __anchor_17:
    fire();
    if (a) {...
    trace port
    marker in the trace stream,
    no memory access
    trace port...
    evaluated outside
    evaluated outside
    Conventional instrumentation
    Conventional instrumentation
    timing changes
    footprint grows
    optimizer interacts
    timing changes...
    Trace-visible anchor
    Trace-visible anchor
    The anchor survives -O2/-O3:
    it is protected against relocation and removal.
    Probe-effect-minimal, not probe-effect-free .
    The anchor survives -O2/-O3:...
    Both approaches make the same point of interest observable; only one of them writes to memory on the target.

    Where CEDARtools.Anchor fits

    Passive processor trace is an excellent observation channel - but compiler optimization can remove source-level distinctions that a verification obligation still needs.

    For a human expert, that creates an interpretation problem. For an automated feedback loop, it creates a machine-readability problem: the loop needs a stable, reviewable relationship between the requirement-level obligation and what is observable in the optimized executable.

    Anchor* restores selected observability only where it is needed. Bounded, trace-visible control-flow anchors preserve the distinctions required for the analysis without maintaining coverage state in application memory. Their effect is measured and reported as part of the evidence.

    This makes Anchor* not only a coverage technique, but an enabling layer for reliable, source-attributed feedback from highly optimized embedded software.

    What CEDARtools.Anchor changes - and what it does not

    Anchor* changes the program representation by adding observation anchors. It does not add coverage counters, a logging runtime or application-side trace-buffer writes. The anchors are intended not to change the functional result, but they can change code size, layout and execution timing. Functional equivalence and perturbation therefore remain project evidence, not assumptions.

    What comes out

    • MC/DC on the optimized build, with condition-level detail - which pairs were exercised and which are still missing. Not a single percentage that averages the answer away.
    • Object code to source mapping through the anchor manifest and symbol-table associations - a mapping that does not have to rest on DWARF debug information.
    • Orphan object code flagged explicitly. Machine code that cannot be attributed to any source line is marked as such rather than quietly dropped. For a DO-178C or ED-12C review that distinction is the point - an assessor needs to see what was not accounted for, not a report that looks complete because the awkward parts were omitted.
    • No custom compiler build required. The supported workflow does not require a custom compiler build. It remains compiler-dependent in the ordinary assurance sense: anchor preservation, object mapping and perturbation are verified for named compiler versions, targets and optimization settings. The supplemented source stays readable, and you can diff it against the original.
    Passive trace analysis
    no application-side
    coverage counters
    Passive trace analysis...
    CEDARtools.Anchor
    declared observation anchors
    measured effect reported
    CEDARtools.Anchor...
    Trace
    acquisition
    Trace...
    Validity checks
    Validity checks
    Control-flow
    reconstruction
    Control-flow...
    Object execution
    Object execution
    Source statement / branch
    Source statement / branch
    Condition / MC/DC
    Condition / MC/DC
    supplemented
    supplemented
    Timing
    Timing
    Shared evidence chain
    acquire · validate · reconstruct · map · report
    Shared evidence chain...
    Both modes feed the same acquisition, validation and reconstruction chain; results derived with Anchor* carry a persistent supplemented badge.

    Status

    Patent applications covering the relevant aspects of the technology have been filed. A patent application describes the claimed invention at a legal level of generality; implementation details and measured product behavior are documented separately. The application status and our granted patent families are listed on the patents page.

    Anchor* is used in the documented TESSY Hyper Coverage integration for the tested versions and artifact flow listed on the integration page.

    The method was developed at Accemic before 2024 and is documented in our peer-reviewed work on trace-based coverage; see publications.