<feed xmlns='http://www.w3.org/2005/Atom'>
<title>threadx.git/test/smp/cmake/CMakeLists.txt, branch v6.4.1_cert</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.</subtitle>
<id>http://cgit.235523.xyz/threadx.git/atom/test/smp/cmake/CMakeLists.txt?h=v6.4.1_cert</id>
<link rel='self' href='http://cgit.235523.xyz/threadx.git/atom/test/smp/cmake/CMakeLists.txt?h=v6.4.1_cert'/>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/threadx.git/'/>
<updated>2026-09-17T13:43:54Z</updated>
<entry>
<title>Instrumented an eighth configuration for the SMP debug entry insert</title>
<updated>2026-09-17T13:43:54Z</updated>
<author>
<name>Frédéric Desbiens</name>
<email>frederic.desbiens@eclipse-foundation.org</email>
</author>
<published>2026-09-17T13:43:54Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/threadx.git/commit/?id=4e72fae6936c2bebaac255b1283c9baf61d2445f'/>
<id>urn:sha1:4e72fae6936c2bebaac255b1283c9baf61d2445f</id>
<content type='text'>
common_smp/src/tx_thread_smp_debug_entry_insert.c is 222 lines of certified
source sitting entirely under TX_THREAD_SMP_DEBUG_ENABLE. No build configuration
defined that macro, so the file compiled to nothing in all seven and was absent
from the coverage denominator rather than uncovered in it. Eight further files
carry regions behind the same macro, twenty-two regions in nine files.

This is the same argument that added misra_build, on a second whole-file macro,
and it has no monoprocessor counterpart: TX_THREAD_SMP_DEBUG_ENABLE does not
exist in common/src.

One configuration is enough. Every region is a top-level ifdef sitting beside
other guards rather than nested inside one, and the file's own inner guards
resolve without help, so no combination build of the kind misra_trace_build
needed is required here.

It brings in 54 lines and 12 branch outcomes, of which all 54 lines and 10
outcomes arrive covered with no new test written, and the file itself reads 32/32
lines and 8/10 branches. The merged report now covers 194 of the 194 files in
common_smp/src, so the scope statement needs no caveat about which files
contribute code. 108/108 tests pass in the new configuration in every run made.

The two residual outcomes are infinite spin-on-error loops and no terminating
test can cover them: the taken arm never returns, by design.
_tx_thread_smp_system_error is written in one place in the certified source, set
false at initialisation, and read only by that loop.

The gates are re-derived on the union basis: 5386/5450 lines and 2810/3608
branches at best, 5384/5450 and 2805/3608 at worst across three runs.

The suite is not yet reliably green, for reasons this configuration does not
cause and does not share. Three runs produced four hangs on the full ctest
timeout, in four other configurations, on threadx_smp_random_resume_suspend_
exclusion_pt_test, its non-pt twin and threadx_event_flag_isr_set_clear_test;
the last of those timed out on both attempts and failed. Retrying until pass
hides the rest.

Assisted-by: Claude Code (Opus 5) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Added the MISRA event trace configuration, completing the denominator</title>
<updated>2026-09-16T22:49:00Z</updated>
<author>
<name>Frédéric Desbiens</name>
<email>frederic.desbiens@eclipse-foundation.org</email>
</author>
<published>2026-09-16T22:49:00Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/threadx.git/commit/?id=1ce1ecacd190ec421aaa6a30b20a77003101fcfb'/>
<id>urn:sha1:1ce1ecacd190ec421aaa6a30b20a77003101fcfb</id>
<content type='text'>
common_smp/src/tx_misra.c holds a region behind TX_ENABLE_EVENT_TRACE with six
functions in it: the MISRA form of the in-line trace insert and five pointer
conversions the trace sources use. No build configuration compiled it.
misra_build defines TX_MISRA_ENABLE alone and trace_build defines
TX_ENABLE_EVENT_TRACE alone, so the region was absent from the coverage
denominator rather than uncovered in it - which is the reason misra_build was
added in the first place.

misra_trace_build defines both. It needs TX_SOURCE_CODE as well, because
tx_misra.c is the only one of the 194 files in common_smp/src that does not
define it for itself and the prototypes for those five conversions sit behind it
in tx_trace.h. This tree does not build with -Werror, so without the define the
file merely warns five times about functions with no previous declaration rather
than failing outright as it does in the monoprocessor tree. That is easier to
miss and no less wrong: the coverage evidence would otherwise come from a
translation unit in which five certified functions have no visible prototype.

The define goes on the kernel target rather than on every target, because
TX_SOURCE_CODE also suppresses the public API mappings that the tests and the
sample need. Its empty value matches the plain define the other 193 files carry,
and it changes no code: across all seven configurations, 0 of 194 objects differ
once debug information is stripped. Stripping is required to see that. The build
carries -g3, which records macro definitions in DWARF, so every raw object
differs on the macro section alone and a whole-object comparison answers a
different question than the one asked.

108/108 tests pass in each of the seven configurations. The merged report reads
5332/5396 lines and 5494/6334 branches over the seven, against 5283/5343 and
4534/5340 over the six.

Assisted-by: Claude Code (Opus 5) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Instrumented a sixth build configuration that defines TX_MISRA_ENABLE</title>
<updated>2026-09-16T22:32:09Z</updated>
<author>
<name>Frédéric Desbiens</name>
<email>frederic.desbiens@eclipse-foundation.org</email>
</author>
<published>2026-09-16T22:32:09Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/threadx.git/commit/?id=0d998addc3eae93ca08607081f63cc0f9460fa4e'/>
<id>urn:sha1:0d998addc3eae93ca08607081f63cc0f9460fa4e</id>
<content type='text'>
common_smp/src/tx_misra.c is 832 lines of certified source whose whole body sits
under TX_MISRA_ENABLE, with no else branch at all. None of the five build
configurations defined that macro, so the file compiled to nothing in every one
of them: an object and a note file existed, no instrumented code did, and the
merged report covered 186 of the 194 files in common_smp/src while claiming to
cover common_smp/src.

The decisive argument is not the file count. The shim exists to make the
kernel's pointer conversions MISRA compliant, and the MISRA analysis will be run
against the source with the macro defined. Without this configuration the build
that is analysed and the build that is covered are different builds of the same
tree, and two certificates assessed together would be making different claims
about the same shim.

The configuration is instrumented and merged like the other five. All 108 tests
pass in it unchanged.

The port empties six more files without the macro. ports_smp defines
TX_INLINE_INITIALIZATION only when TX_MISRA_ENABLE is absent, so the six
*_initialize.c files carry their bodies here, and the report covers 193 files
rather than 186.

The gates are re-baselined rather than carried forward. The denominator gained
165 lines and 567 branches that were never counted before, so the line
percentage falls while the covered line count rises: 5283/5343 lines and
4528/5340 branches over the six configurations, against 5150/5178 and 3991/4773
over the five re-merged from the same tracefiles.

One file is still absent from the denominator and this configuration does not
reach it. common_smp/src/tx_thread_smp_debug_entry_insert.c sits entirely under
TX_THREAD_SMP_DEBUG_ENABLE, which nothing defines, and eight further files carry
regions behind it. That is the same shape as this commit and has no
monoprocessor counterpart.

Assisted-by: Claude Code (Opus 5) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Instrumented every build configuration and merged their coverage</title>
<updated>2026-09-14T21:37:19Z</updated>
<author>
<name>Frédéric Desbiens</name>
<email>frederic.desbiens@eclipse-foundation.org</email>
</author>
<published>2026-09-14T21:37:19Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/threadx.git/commit/?id=56ba96c1c5910a40f48597d70c6b1aa3badec8f5'/>
<id>urn:sha1:56ba96c1c5910a40f48597d70c6b1aa3badec8f5</id>
<content type='text'>
Only default_build_coverage carried -fprofile-arcs, because the gate was the
build type and it is the only one of five configurations whose name ends in
_coverage. The other four built and ran every test and their coverage was
discarded. That is not redundancy thrown away: each configuration selects a
different set of TX_ feature macros, so the code the other four compile was
absent from the denominator rather than uncovered in it, and 100% against that
report would not have been a measurement of the kernel.

TX_COVERAGE instruments a build regardless of its name, defaulting to OFF so a
single configuration built by hand behaves as before. coverage.sh gains a
--merge mode that unions the per-configuration JSON tracefiles, and
cmake_bootstrap.sh runs it after the test loop so a local run produces the same
merged report CI reads. The workflow template sets TX_COVERAGE for build and
test, and coverage_name moves to the merged report.

Measured on the ThreadX suite, all 95 tests passing in each configuration:

  default_build_coverage           3827 valid   3827 covered
  disable_notify_callbacks_build   3767         3767
  stack_checking_build             3857         3856
  stack_checking_rand_fill_build   3862         3861
  trace_build                      4123         4108
  merged                           4220         4204

The denominator grows by 393 lines and the figure moves from 100.00% to 99.62%.
The second one is honest, and the drop is the point rather than a regression:
the denominator now includes code the old report never counted. The union also
contains a file the old report did not contain at all --
tx_thread_stack_error_handler.c compiles only under TX_ENABLE_STACK_CHECKING, so
it was not listed at 0%, it was simply absent. 177 files becomes 178.

The scoping is the positional search path, not --object-directory. Left as
--object-directory while the gcovr root moved to the repository root, all five
configurations reported the union of every configuration's gcda: five identical
reports, and a merge of five copies of the same thing. Nothing about the
resulting percentage looks wrong, which is what makes it worth stating here.

Coverage collection moved out of test(). A failing ctest used to abort the
function before coverage.sh was reached, so the run whose behaviour changed was
the one that produced no report, and the gcda already existed by that point.
Collection now runs after the whole test loop, one configuration at a time,
which is also what --merge needs: every tracefile has to exist before the union
is taken. A coverage failure turns the run red but does not overwrite a test
failure's status.

Per-configuration output moved under coverage_report/per_configuration/ and is
excluded from the deployed artifact. The deploy merges the ThreadX and SMP
artifacts into one tree and every configuration directory has the same name in
both, so left at the top level one suite's would overwrite the other's on the
published site.

coverage.sh now fails when a report contains no files. gcovr treats an empty
report as success: it exits 0 and writes line-rate="1.0" alongside
lines-valid="0", so every downstream consumer reads "no data at all" as "100%
covered", and a coverage threshold cannot catch it because an empty report
passes any threshold.

The tx and smp runners are symlinks to scripts/cmake_bootstrap.sh, so they are
covered by the one change there.

Assisted-by: Claude Code (Opus 5) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add random number stack filling option. (#257)</title>
<updated>2023-05-12T02:13:42Z</updated>
<author>
<name>Xiuwen Cai</name>
<email>50469933+xiuwencai@users.noreply.github.com</email>
</author>
<published>2023-05-12T02:13:42Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/threadx.git/commit/?id=6b8ece0ff28fb0160a2fdf51c09df09d587f4575'/>
<id>urn:sha1:6b8ece0ff28fb0160a2fdf51c09df09d587f4575</id>
<content type='text'>
Co-authored-by: TiejunZhou &lt;50469179+TiejunMS@users.noreply.github.com&gt;</content>
</entry>
<entry>
<title>Release ThreadX regression system</title>
<updated>2023-04-04T09:40:54Z</updated>
<author>
<name>Tiejun Zhou</name>
<email>tizho@microsoft.com</email>
</author>
<published>2023-04-03T07:24:52Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/threadx.git/commit/?id=ebeb02b95828ca100c3f24de5f9603a41049f8ff'/>
<id>urn:sha1:ebeb02b95828ca100c3f24de5f9603a41049f8ff</id>
<content type='text'>
</content>
</entry>
</feed>
