Repository navigation
0.21.0: a second name for a file, and the requests to end counted (openkal 0.25) - #46
Merged
Merged
Conversation
…enkal 0.25) - kal_fs_hard_link: NtSetInformationFile with the link record; KAL_FS_PROP_HARD_LINKS where the volume reports FILE_SUPPORTS_HARD_LINKS; a directory is kal_err_is_directory and STATUS_NOT_SAME_DEVICE kal_err_not_supported - the stop word counts each console event atomically and skips zero on wrap - openkal follows the specification's branch feat/0.25.0 until 0.25.0 is released
- the conformance suite runs through the pinned mtest engine (MTEST, set by .github/actions/mtest): one case per interface, its observations within it - mcpp 2026.11.9.1: `mcpp test` keeps this package's runs in the mtest store (target/mtest), one case per test program - each job's runs in its summary and as an artifact; one report over every job The test programs stay programs of their own (protocol level 0): the mtest library reaches mcpplibs.os, which depends on openkal and on this implementation, so a dev-dependency on it would close a cycle through the package under test.
Every test under tests/ declares its cases as mtest UTest objects, with the same assertions as before; what a test reported as not observed is an mtest skip. A test that starts a copy of itself declares what the copy does as a child and starts it with child_command. The copy that reads the environment first from two contexts is entered from the system's command line before mtest reads its own variables, which would fill the tables the copy observes; the copy that writes through a handle number is started without the runner's report variables. mcpplibs.mtest 0.5.2 is a dev-dependency.
-fno-exceptions and -fno-rtti applied to every unit of the build, the tests included; the tests now import the mtest library, which imports std, and mcpp refuses a dialect flag that the prebuilt std interface was not compiled with. The flags are attached to src/** as openkal-linux attaches its own; the objects the checks examine are compiled as before.
…the link accepts GCC's repeated std static
console_input declares the console functions and the key record it uses
beside src/win32.h: GCC on PE refuses <windows.h> together with the
imported std ("conflicting language linkage for imported declaration
std::__is_constant_evaluated()").
GCC on PE emits the function-local static
std::_Sp_make_shared_tag::_S_ti()::__tag of an imported std as a
definition that is not COMDAT, in every object importing std and in
libstdc++.a, so every test link was refused. The CI step of the gcc leg
writes -Wl,--allow-multiple-definition into its working copy of the
manifest for the tests and restores the manifest afterwards; the
committed manifest does not carry it.
The link option that GCC's repeated std static needs on PE is stated in a profile, [profile.gnu-odr]: the dev profile with -Wl,--allow-multiple-definition. A profile is the root's own and never reaches a consumer's link. The CI step no longer edits its working copy of the manifest. console_input's watchdog returns after ExitProcess, which src/win32.h does not declare as not returning (msvc C4716).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
kal_fs_hard_linkandKAL_FS_PROP_HARD_LINKS(openkal 0.25, clause 11 entry 59): see README, "What 0.21.0 adds".kal_process_stop_requestedcounts each request and skips zero on wrap (entry 60).openkal = "0.25.0", as released (0.25.0: a second name for a file, the requests to end counted, one interface set stated three times openkal#64, tag 0.25.0).Test plan
Old suite: CI run 42675285217 green at ab227a5 (this package's tests and the specification branch's conformance suite, as they were).
New suite: CI run 42679092276 green at 9f441f4 — the conformance suite through the pinned mtest engine (one case per interface, its observations within it),
mcpp test2026.11.9.1 keeping this package's runs in the mtest store, each job's report in its summary, one report over every job.Tests ported to the mtest library, and the switch to
openkal = "0.25.0": CI run 42695429206 green at 1ffab79 on every leg (msvc, llvm with the MSVC ABI, gcc with the GNU CRT: 13 passed; the wine cross job; the report). Every file undertests/declares its cases asUTestobjects with the assertions it had; what a test printed as not observed is an mtest skip. Copies arechildobjects started withchild_command(null_device_at_a_position,openkal_0_23,what_a_started_program_receives,environment_read_from_two_threads). Two copies need care. The environment-race copy is entered fromGetCommandLineWduring the file's initialisation: mtest's state reads its variables throughkal_env_varwhen the first case is declared, which would fill the tables the copy observes. The handle-number copy is started withoutMTEST_REPORT/MTEST_PROTOCOL, so the number cannot name the report file.mcpplibs.mtest0.5.2 is a dev-dependency.The gnu ABI's
-fno-exceptions -fno-rtti -fno-builtinare attached tosrc/**. The tests import std through mtest, and mcpp refuses dialect flags that the prebuilt std was not compiled with. The objects the checks examine are compiled as before.A toolchain defect on the gcc/gnu-CRT leg: GCC on PE emits the function-local static
std::_Sp_make_shared_tag::_S_ti()::__tagof an imported std as a non-COMDAT definition, in every object importing std and in libstdc++.a, and every test link was refused. That leg runsmcpp test --profile gnu-odr: the dev profile (opt 0, debug) with-Wl,--allow-multiple-definition. A profile is the root's own and never reaches a consumer's link. The leg still builds and runs every test.console_inputdeclares its four console functions and the key record besidesrc/win32.h, because GCC refuses<windows.h>together with the imported std ("conflicting language linkage").