summaryrefslogtreecommitdiff
path: root/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog949
1 files changed, 949 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..12b3fe7
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,949 @@
+2026-10-09 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Release 0.4.0.
+ * Bump version for public release.
+
+2026-10-08 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Release 0.3.35.
+ * Add CPU/system opcodes SETF=0x0010, CLRF=0x0011,
+ CLRCPUF=0x0012 and CLRMPUF=0x0013.
+ * Define writable arithmetic/status flags as PSW bits 0..15: SETF/CLRF
+ accept AF..INXF, modify exactly one selected bit and reject HF/TF/IF.
+ * Define PSW[7:0] as the CPU flag byte and PSW[15:8] as the MPU flag
+ byte; CLRCPUF clears only 0x000000ff and CLRMPUF only 0x0000ff00.
+ * Preserve HF/TF/IF/MODE and every non-selected flag across the new
+ instructions; keep JSET/JCLR read selectors unchanged.
+ * Keep existing LibMPU IADC/ISBB and rotate-through-carry semantics; the
+ new instructions only provide explicit initial flag state.
+ * Update assembler, decoder/executor and mcpu-objdump opcode/disassembly
+ support.
+ * Add regression coverage for flag writes, bulk clears, assembler rejection,
+ IADC/ISBB carry input and objdump output.
+ * Update architecture PDF sources/PDF and English/Russian mcpu-as(1) and
+ libmcpu(7) manual pages.
+ * Keep MELF, syscall, HLL Runtime ABI, CRT, linker, loader and lifecycle
+ contracts unchanged.
+
+2026-10-06 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Release 0.3.34.
+ * Make both PDF reference manuals independent of the LibMCPU package release
+ number; package history remains in NEWS.md/ChangeLog.
+ * Replace the obsolete draft HLL/CRT text with the signed HLL Runtime ABI:
+ int32/int64/PTR64 signatures, normalized fini, mcpu-ld PROGRAM/MODEL
+ classification, automatic CRT insertion, McpuStartup ownership, MCPU Libc
+ hooks, PRE_RUNTIME/RUNNING, life status namespace and finalization.
+ * Add complete reference appendices for mcpu-as directives, every public
+ OPCODE16 with operands/descriptions, PSW selectors and RCONST selectors.
+ * Remove stale release-history and in-tree examples references from the PDF
+ manuals; examples are a separate package.
+ * Correct syscall documentation to the stable host-independent MCPU errno ABI.
+ * Keep ISA, MELF ABI, syscall ABI, HLL ABI, CRT and runtime/linker semantics
+ unchanged from the verified 0.3.33 baseline.
+
+2026-10-06 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Release 0.3.33.
+ * Make README.md version-independent and move release history responsibility
+ explicitly to NEWS.md and ChangeLog.
+ * Remove hard-coded package release numbers from all English and Russian
+ man-page .TH source fields; installed --version/--dump-version remain the
+ authoritative release-number interface.
+ * Expand README.md, libmcpu(7), mcpu-ld(1), mcpu-run(1) and mcpu-as(1) for
+ the signed HLL Runtime ABI v1, automatic PROGRAM/MODEL CRT selection,
+ McpuStartup and low-level/HLL lifecycle ownership.
+ * Document fatal missing-CRT behavior and the canonical
+ <MCPU-root>/lib/mcpu CRT installation path.
+ * Add a regression that prevents release-bound LibMCPU versions from
+ returning to README.md/man sources.
+ * Keep ISA, MELF ABI, syscall ABI, HLL ABI, CRT and runtime/linker semantics
+ unchanged from the user-verified 0.3.32 baseline.
+
+2026-10-06 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Release 0.3.32.
+ * Make successful mcpu-as and mcpu-ld invocations quiet by default and
+ preserve their existing object summaries behind -v/--verbose.
+ * Apply mcpu-ld verbose summaries to partial ET_REL, static ABI-v1
+ ET_EXEC, dynamic ABI-v3 ET_EXEC and ABI-v3 ET_DYN output.
+ * Normalize installed utility --help option descriptions with an aligned
+ " - " separator and aligned continuation lines.
+ * Indent mcpu-run Stage actions by four spaces.
+ * Add regression coverage for quiet defaults and both verbose spellings.
+ * Document -v/--verbose in the English and Russian mcpu-as(1) and
+ mcpu-ld(1) manual pages.
+ * Keep ISA, MELF ABI, syscall ABI, HLL Runtime ABI, CRT and runtime
+ semantics unchanged from 0.3.31.
+
+2026-10-06 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Release 0.3.31.
+ * Remove the complete examples/ tree from LibMCPU; manual/book examples
+ are now intended to be distributed as a separate package.
+ * Move the canonical mcpu-ld.conf source from top-level etc/ to
+ sysroot/etc/ without changing its installed <MCPU-root>/etc path.
+ * Remove the obsolete sysroot/usr/src/mcpu/libc-stub and hll-emul
+ development trees.
+ * Move the HLL/CRT-only assembler regression inputs into
+ tests/fixtures/hll so make check remains self-contained.
+ * Keep ISA, MELF ABI, syscall ABI, HLL Runtime ABI, CRT behavior and
+ runtime/linker semantics unchanged from the verified 0.3.30 baseline.
+
+2026-10-05 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.28.
+ * Implement the signed MCPU HLL Runtime ABI v1 CRT bridge.
+ * Add automatic PROGRAM/MODEL classification and CRT insertion to mcpu-ld
+ without new --program/--model options.
+ * Add crt0.o/crt1.o/crti.o/crtn.o sources and install only the generated
+ CRT objects under the MCPU target root.
+ * Add PRE_RUNTIME/RUNNING startup state, McpuStartup validation, int64 argc
+ bridging, MODEL life-status handling and ordered HLL finalization.
+ * Make HLL roots, CRT-private symbols and internal libc hooks non-preemptible
+ in ABI-v3 executables.
+ * Add never-installed libc-stub and mcpu-cc output emulators under sysroot;
+ keep the complete existing examples tree unchanged.
+ * Add end-to-end HLL CRT regression coverage, including ET_DYN ownership
+ restrictions and pre-runtime startup failure.
+
+2026-10-05 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.27.
+ * Add guest-descriptor dup() and dup2() system calls as __NR_dup=0x126
+ and __NR_dup2=0x127.
+ * Keep guest and HOST descriptor namespaces separate; implement both guest
+ calls over the HOST __cpu_sys_dup() adapter rather than HOST dup2().
+ * Preserve borrowed HOST stdio, POSIX oldfd==newfd behavior, exact dup2
+ target replacement, and descriptor-flag clearing on real duplication.
+ * Add tst-dup regression coverage and manual dup-basic/dup2-basic syscall
+ examples.
+
+2026-10-05 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.26.
+ * Move the canonical public MCPU assembler ABI headers to
+ sysroot/include/sys/asm/.
+ * Install sys/asm headers only from the canonical sysroot tree.
+ * Make tst-errno-abi consume public headers from sysroot, eliminating
+ the regression-test dependency on examples/.
+ * Keep examples/syscalls/include/sys/asm/ as a standalone snapshot and
+ add an explicit maintainer sync target from sysroot to examples.
+ * Copy historical regression assembler inputs into tests/fixtures/ and
+ remove all automatic-test references to examples/.
+
+2026-10-05 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.25.
+ * Replace raw HOST errno syscall results with the stable MCPU errno ABI.
+ * Add HOST-to-MCPU errno translation, public sys/asm/errno.h and the
+ LibMPU-compatible sys/asm/mpu-errno.h Math Processor Unit interface.
+ * Migrate every existing syscall error path and add errno ABI regressions.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.11.
+ * Added stat/fstat/lstat with fixed 128-byte struct __cpu_stat ABI.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.10.
+ * Align examples/syscalls assembler syscall-number names with
+ cpu/cpu-syscalls.c: use __NR_* consistently.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.9.
+ * cpu/Makefile.am: rename sysdeps dependency .Tpo files to .Plo.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.8.
+ * Remove the erroneous top-level dist-hook added while packaging manual
+ examples; rely on the normal EXTRA_DIST rules so make distcheck does not
+ overwrite files in Automake's read-only distribution tree.
+ * Keep every examples subtree except examples/syscalls byte-identical to
+ the 0.3.4 baseline.
+ * Rewrite examples/syscalls run scripts as transparent manual demonstrations
+ without hidden PASS/FAIL tests, and expand its README into book-oriented
+ documentation of the descriptor-I/O ABI and all four examples.
+ * Place scratch read buffers in .bss and use .zero only as the supported
+ NOBITS reservation directive inside .bss.
+ * Preserve the 0.3.7 object-tool version-test fix and the 0.3.5 syscall ABI.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.7.
+ * Make object-tool --version runner checks use Automake PACKAGE_VERSION
+ instead of the historical hard-coded 0.3.4 string.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.6.
+ * Remove tst-syscall-runner.sh and tst-syscall-io-runner.sh from tests.
+ * Keep examples/syscalls as a manual user/documentation tree, use installed
+ mcpu-* tools from PATH, and disable GNU make built-in suffix rules there.
+ * Replace unsupported assembler label-subtraction immediates in examples
+ with MCPU PTR64 arithmetic using LEA/PDIFF.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.5.
+ * Add SYS_read, SYS_write, SYS_lseek, SYS_open and SYS_close using the
+ MINIX-style VFS number block 0x100..0x105, leaving 0x104 reserved.
+ * Add a per-cpu_context 256-entry guest descriptor namespace with borrowed
+ stdin/stdout/stderr and owned descriptors returned by SYS_open.
+ * Add common PTR64 copyin/copyout/copyinstr validation and strict UTF-8
+ pathname validation at the guest/HOST boundary.
+ * Add Linux/x86_64/LP64 sysdeps wrappers for POSIX open/close/read/write/
+ lseek with explicit MCPU-to-HOST flag, mode and whence translation.
+ * Add examples/syscalls with canonical assembler headers, examples, run
+ scripts and book-oriented README; install headers under the MCPU root.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.4.
+ * Add the HOST sysdeps configuration hierarchy for future syscall wrappers,
+ based on the historical LibMPU preconfigure/sysnames/VPATH model.
+ * Add architecture preconfigure.ac/preconfigure fragments for i386, PowerPC,
+ SPARC and x86_64; x86_64 distinguishes x32/ILP32 and 64-bit LP64.
+ * Add ordered Implies inheritance and GNU make vpath selection through the
+ substituted sysnames variable, with cpu/sysdeps/generic always last.
+ * Reject HOST OS/CPU hierarchies not represented by LibMCPU sysdeps instead
+ of accepting a generic-only configuration.
+ * Add no syscall wrappers and change no CPU, MELF or SYS_brk semantics.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * LibMCPU 0.3.3: remove tst-version-runner.sh from TESTS and EXTRA_DIST,
+ and remove the runner itself from the release source tree.
+ * Keep the centralized --version/--dump-version implementation unchanged;
+ version reporting may be verified directly from the installed tools.
+ * No CPU ISA, MELF ABI, linker, loader/runtime or syscall semantic changes.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.2.
+ * Make tests/tst-version-runner.sh self-contained when CPU_AS, CPU_LD,
+ CPU_RUN and the other CPU_* tool variables are not exported. Values
+ supplied by the Automake harness remain authoritative; otherwise the
+ runner resolves freshly built sibling utilities itself.
+ * No CPU, MELF, runtime, binary-utility or syscall semantics changed.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.1.
+ * Normalize --version output for every installed mcpu-* tool as
+ "<program> (MCPU) <version>" and add --dump-version for a bare version.
+ * Add utils/mcpu-version.c/.h as the single implementation of version
+ formatting and link it into all nine command-line utilities.
+ * Add a common regression for both version forms and synchronize bilingual
+ manual pages and command help.
+ * Keep CPU ISA, frozen MELF ABI v3, linker, loader/runtime and syscall
+ semantics unchanged.
+
+2026-10-04 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.3.0.
+ * Start the SYSCALL development stage from the verified LibMCPU 0.2.28
+ binary-utility baseline.
+ * Move English manual-page build/install rules from the top-level
+ Makefile.am to man/Makefile.am and Russian rules to man/ru/Makefile.am.
+ * Add man and man/ru to the recursive Automake/configure output tree.
+ * Keep CPU ISA, frozen MELF ABI v3, linker, loader/runtime, binary-utility
+ and syscall semantics unchanged.
+
+2026-10-03 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * LibMCPU 0.2.28: finalize documentation for the verified 0.2.27
+ binary-utility stage without changing CPU/MELF execution semantics.
+ * Add English and Russian mcpu-*(1) manual pages for every installed
+ utility and libmcpu(7) overview pages; install localized pages below
+ the Russian man tree.
+ * Update both maintained PDF manuals for frozen ABI v3, the complete
+ binary-utility set and the non-ALLOC debug-metadata compatibility rule.
+ * Synchronize README.md, NEWS.md and doc/src documentation sources.
+
+2026-10-03 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.27.
+ * Add mcpu-objcopy as a MELF-to-MELF structural copy/editor with -j/--only-section, -R/--remove-section, --dump-section, --add-section, --update-section and --rename-section.
+ * Restrict mutations to safe non-runtime metadata: added sections are non-ALLOC SHT_PROGBITS, update/rename operate only on safe non-ALLOC PROGBITS, and removal/filtering refuses runtime-critical or ET_REL link-critical sections.
+ * Preserve PT_LOAD contents/program headers and frozen MELF ABI-v3 execution semantics; deliberately omit binary/ihex/srec, VMA/LMA, start-address and section-flag conversion modes.
+ * Support deterministic static archives member-by-member while preserving their symbol-index semantics; reject ambiguous --dump-section on archive input.
+ * Refactor the common MELF section parser/rebuilder from mcpu-strip into mcpu-object-edit.c/.h and use it from both mcpu-strip and mcpu-objcopy.
+ * Add regressions for copy/add/dump/update/rename/remove, protected runtime/link sections, strict --only-section filtering, ET_REL relinking, archive editing and command-line errors.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.26.
+ * Add mcpu-strip with in-place operation and -o/--output for MELF files and deterministic MCPU archives.
+ * Remove ordinary non-allocated SHT_SYMTAB and now-unreferenced ordinary string tables only from ET_EXEC/ET_DYN; preserve ET_REL .symtab/.strtab as required link semantics.
+ * Preserve .dynsym, .dynstr, .dynamic, all retained RELA sections, MCPU target/lifecycle metadata, load/model sections and program headers.
+ * Rebuild and compact the non-ALLOC metadata tail, rebuild .shstrtab, remap surviving section references and retained symbol st_shndx values, and preserve input file mode.
+ * Add regressions for current no-op ET_REL/ET_EXEC/ET_DYN/archive cases and for a synthetic valid ET_EXEC carrying removable ordinary .symtab/.strtab metadata; verify stripping shrinks it and leaves execution unchanged.
+ * Keep frozen MELF ABI-v3, linker/runtime behavior, CPU ISA and archive semantics unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.25.
+ * Add mcpu-objdump for read-only section headers, full section contents, ordinary/dynamic symbol tables, RELA relocations and MCPU disassembly of MELF ET_REL, ET_EXEC, ET_DYN and UNIX static archives.
+ * Add -d/-D/-r/-s/-t/-T/-h/-j with GNU-objdump-like meanings; -j is repeatable and filters section-oriented output.
+ * Add __cpu_decode_at() so inspection code can decode an explicit PROGRAM byte buffer without replacing the live CPU context; retain __cpu_decode() as the runtime wrapper.
+ * Make disassembly symbol-aware and print retained relocation records beside the instruction that contains each relocation field.
+ * Continue through undecodable bytes with explicit .byte output rather than guessing instruction boundaries.
+ * Install mcpu-objdump under the relocatable private MCPU bin directory and create the corresponding public relative symlink.
+ * Add regressions for the common decoder, section filtering, symbols, dynamic symbols, relocations, disassembly, archives, grouped options and malformed input.
+ * Keep frozen MELF ABI-v3, assembler encoding, linker/archive semantics, loader/runtime behavior and CPU execution semantics unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.24.
+ * Add mcpu-nm for read-only symbol inspection of MELF ET_REL, ET_EXEC, ET_DYN and UNIX static archives.
+ * Read .symtab by default and .dynsym with -D; classify code/data/BSS/read-only/undefined/absolute/common/weak symbols with conventional one-letter codes.
+ * Add external/undefined filters, lexical/numeric/reverse/no-sort modes, archive/member display and per-line file prefixes.
+ * Install mcpu-nm under the relocatable private MCPU bin directory with the same public relative-symlink policy as the existing tools.
+ * Add regressions for ordinary/dynamic symbols, filtering, sorting, ET_EXEC/ET_DYN, static archives, prefixes and malformed input.
+ * Keep frozen MELF ABI-v3, mcpu-ld, mcpu-ar archive semantics, runtime loader and CPU ISA unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.23.
+ * Add mcpu-ld --static as a library-selection modifier that forces every -lNAME lookup to use libNAME.a without changing the selected output mode.
+ * Preserve ABI-v3 --dynamic/--shared output under --static while incorporating selected archive members directly and emitting no DT_NEEDED for them.
+ * Preserve directory-major -L search order while skipping shared-only candidates under --static and continuing to later directories for libNAME.a.
+ * Accept --static with ABI-v1 and -r, whose -l lookup is already archive-only, and fail rather than falling back to .so when no archive is available.
+ * Add dedicated forced-static regressions for ABI-v1, ABI-v3 ET_EXEC/ET_DYN, -r, search order, missing archives and help text.
+ * Keep frozen MELF ABI-v3, mcpu-ar archive format, runtime loader, dependency resolver, CPU ISA and runtime symbol-scope semantics unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.22.
+ * Add mcpu-ld -r partial relocatable linking, producing one current MELF ET_REL object from multiple ET_REL inputs.
+ * Merge like-named sections in input order with alignment, rebase defined symbols and relocation offsets, preserve RELA records, and allow unresolved symbols to remain for a later final link.
+ * Preserve LOCAL symbol identity across inputs and apply deterministic GLOBAL/WEAK merging; reject duplicate strong GLOBAL definitions during the partial link.
+ * Allow -r to consume static libNAME.a archives with the existing selective extraction semantics; shared libraries are not eligible in relocatable-link mode.
+ * Reject final-image-only options and modes with -r, including --dynamic, --shared, STACK/HEAP sizing and --soname.
+ * Split release history from README.md into NEWS.md and keep README.md as a concise project/build/tool usage introduction.
+ * Update the Russian MELF ABI manual from doc/src for frozen ABI v3, SONAME/NEEDED dependencies, static archives and mcpu-ld -r.
+ * Add partial-link regressions covering retained relocations, unresolved references, LOCAL/GLOBAL/WEAK semantics, archive extraction and final-link execution.
+ * Keep frozen MELF ABI-v3, runtime loader, dependency resolver, CPU ISA and runtime symbol-scope semantics unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.21.
+ * Teach mcpu-ld to consume UNIX static archives containing current MCPU MELF ET_REL members.
+ * Allow ABI-v1 -lNAME to resolve libNAME.a; for ABI-v3 --dynamic/--shared search each library directory for libNAME.so first and libNAME.a second.
+ * Extract only archive members needed by currently unresolved strong GLOBAL symbols; unresolved WEAK symbols do not trigger extraction.
+ * Recompute unresolved symbols after each extraction and rescan the same archive until stable, including backward dependencies on earlier archive members.
+ * Preserve one-pass ordering across separate -l operands; repeating an archive request can satisfy references introduced by intervening libraries.
+ * Keep statically extracted members out of DT_NEEDED while preserving existing SONAME validation and dependency recording for selected ET_DYN providers.
+ * Parse archive member bytes directly with the strict ET_REL reader rather than via temporary files, and keep correctness independent of the optional archive symbol index.
+ * Add regressions for indexed/non-indexed archives, selective extraction, intra-archive rescans, WEAK behavior, inter-library order, ABI-v1 archive-only lookup and ABI-v3 .so/.a directory precedence.
+ * Keep frozen MELF ABI-v3, runtime loader, CPU ISA, relocation and runtime symbol-scope semantics unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.20.
+ * Add mcpu-ar as a deterministic UNIX static-archive manager for current MCPU MELF ET_REL object modules.
+ * Support r/q/d/t/p/x operations, standalone s, and c/s/v/D modifiers with traditional combined operation strings such as rcs.
+ * Preserve member order; r replaces in place, q appends, and only validated MCPU ET_REL members are accepted.
+ * Support short names, BSD #1/<length> extended names, and reading GNU // long-name tables with /offset references.
+ * Write a real System-V/GNU-style archive symbol index containing defined GLOBAL/WEAK MCPU symbols; preserve/rebuild an existing index after archive mutations.
+ * Make archive output reproducible by using deterministic member metadata and add regressions for create/list/print/extract/replace/append/delete/index/long-name/error behavior.
+ * Install mcpu-ar under the relocatable MCPU private bin directory with the same public relative-symlink policy as the other MCPU utilities.
+ * Keep mcpu-ld archive consumption, static -l fallback and partial relocatable linking deferred to later releases; frozen MELF ABI3 and runtime behavior are unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.19.
+ * Replace mcpu-as historical #line source-location parsing with preprocessing line markers of the form # N, # N "filename" and # N "filename" flags..., with decimal N in 0..2147483647 and trailing flags ignored.
+ * Ignore #pragma and #lang without advancing the logical diagnostic line counter; discard all other #... lines as assembler syntax while counting them as ordinary logical source lines.
+ * Keep preprocessor source-control details out of mcpu-as --help and document them in the technical documentation instead.
+ * Print each mcpu-readelf Section Headers entry on one wide physical line instead of wrapping every section into two lines; keep -W/--wide accepted for compatibility.
+ * Add regressions for line-marker flags, filename retention, empty lines, #pragma/#lang counting, generic # lines, obsolete #line behavior and one-line section-header formatting.
+ * Keep the frozen MELF ABI-v3, CPU ISA, linker, loader, dependency resolver, relocation and runtime symbol-scope semantics unchanged.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.18.
+ * Freeze the completed MELF ABI-v3 wire/runtime dependency contract after the staged SONAME/NEEDED, link-time validation, recursive loading and deterministic symbol-scope work in 0.2.14--0.2.17.
+ * Add MCPU_LD_PRELOAD as the environment counterpart of mcpu-run --ldpreload; environment entries are resolved first and command-line entries are appended after them.
+ * Preserve rightmost-higher-priority explicit-preload semantics, so equal-strength command-line preloads naturally override environment preloads.
+ * Keep MCPU_LD_PRELOAD independent of mcpu-ld.conf, --no-config and --sys-root; it uses the same effective library resolver after search-path/configuration policy has been established.
+ * Make the regression environment explicitly start with an empty MCPU_LD_PRELOAD and add dedicated environment-preload and ABI-v3 freeze/end-to-end regressions.
+ * Keep ABI-v1/ABI-v2 loader compatibility and make no CPU ISA, MELF-v3 wire-format, SONAME/NEEDED, -L/-l, search-path, relocation or symbol-scope changes.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.17.
+ * Define deterministic ABI-v3 runtime symbol scope for mcpu-run: GLOBAL outranks WEAK; explicit --ldpreload is the highest equal-strength scope and remains rightmost-higher-priority; the main executable outranks normal dependencies; normal DT_NEEDED scope is breadth-first and left-to-right.
+ * Replace recursive DFS dependency ordering with a stable breadth-first SONAME queue while preserving cycle termination and deduplication.
+ * Pass the explicit-preload boundary separately from the resolved module list so the low-level loader does not infer scope classes from incidental path order.
+ * Preserve the historical flat-preload behavior of direct cpu_dyn_load() compatibility callers while mcpu-run uses the scoped resolved loader path.
+ * Add regressions for main/dependency priority, direct dependency order, explicit-preload override, GLOBAL/WEAK precedence, WEAK-only ordering, direct/transitive scope and diamond dependency graphs.
+ * Keep MELF ABI version 3 and make no on-disk format, search-path or link-time -l changes.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.16.
+ * Add recursive runtime resolution of ABI-v3 DT_NEEDED dependencies to mcpu-run using the existing MCPU library search policy.
+ * Resolve each dependency by SONAME, validate the selected ABI-v3 ET_DYN image and require its DT_SONAME to match the requested DT_NEEDED identity exactly.
+ * Resolve transitive dependencies recursively, deduplicate already registered SONAMEs and terminate dependency cycles without duplicate loads.
+ * Keep filesystem/configuration search policy in a host-side dependency resolver and pass only the completed module list to a separate resolved low-level load path.
+ * Load normal dependencies before explicit --ldpreload modules so the established explicit-preload override behavior remains intact; an ABI-v3 preload with a matching SONAME may satisfy a normal dependency.
+ * Preserve the legacy no--l plus explicit --ldpreload workflow unchanged.
+ * Add regressions for direct and transitive NEEDED loading, missing transitive dependencies, SONAME mismatch, dependency cycles and preload override of a normal dependency.
+ * Convert the maintained pendulum example to the normal ABI-v3 dependency workflow with a librk4 SONAME symlink chain, -lrk4 link and no --ldpreload at runtime.
+ * Keep MELF ABI version 3; ordinary dependency-graph symbol-scope policy remains a development item for 0.2.17.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.15.
+ * Add mcpu-ld -l NAME / -lNAME for ABI-v3 dynamic outputs; -lNAME searches libNAME.so through explicit -L directories followed by the effective MCPU system library path.
+ * Validate each selected provider as a complete ABI-v3 ET_DYN image, read its mandatory DT_SONAME and record that SONAME rather than the development link name or physical pathname in DT_NEEDED.
+ * Validate strong undefined imports of ABI-v3 ET_EXEC against the exports of explicitly linked libraries before output is written; unresolved WEAK imports keep their existing optional semantics.
+ * Deduplicate repeated direct dependencies by SONAME while preserving first-request order.
+ * Permit ABI-v3 ET_DYN outputs to record direct NEEDED dependencies as well; ABI-v1 static output rejects -l.
+ * Keep the verified explicit-preload workflow unchanged when no -l operands are supplied; recursive DT_NEEDED runtime loading remains deferred to 0.2.16.
+ * Add regressions for SONAME symlink layouts, -L priority, config-based library lookup, missing/malformed providers, missing exports, duplicate SONAMEs and the 0.2.16 runtime boundary.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.14.
+ * Introduce development MELF ABI-v3 dependency metadata while preserving ABI-v1 and ABI-v2 loader compatibility.
+ * Define SHT_DYNAMIC/.dynamic and the 16-byte MElf64_Dyn wire format with DT_NULL, DT_NEEDED and DT_SONAME tags linked to .dynstr.
+ * Make new mcpu-ld --dynamic/--shared outputs ABI-v3; require --soname=NAME for ABI-v3 ET_DYN and reject pathname SONAMEs.
+ * Keep the historical ABI-v2 writer internally for compatibility regressions.
+ * Extend mcpu-run dynamic parsing to accept ABI-v2 and ABI-v3, validate canonical .dynamic metadata and reject DT_NEEDED explicitly until recursive dependency loading is implemented.
+ * Add mcpu-readelf -d/--dynamic and include dynamic metadata in -a.
+ * Update dynamic/shared examples and regressions for ABI-v3 SONAME, ABI-v2 compatibility, ABI-v3 explicit preload and negative SONAME cases.
+ * No recursive dependency loading, -l handling or NEEDED symbol validation is introduced in this release.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.13.
+ * Add a common host-side MCPU library-search resolver shared by mcpu-ld and mcpu-run.
+ * Add --library-path=DIR[:DIR...] / --library-path DIR[:DIR...] to mcpu-run; repeated options append explicit search directories in command-line order.
+ * Resolve bare --ldpreload names through explicit directories followed by the effective MCPU_LD_SYSTEM_LIBRARY_PATH; pathnames containing '/' keep the historical direct-path behavior.
+ * Add -L DIR and -LDIR to mcpu-ld so linker search state and --print-search-dirs use the same common ordering policy.
+ * Keep -l deliberately unsupported until dependency metadata can give it real linker/NEEDED semantics.
+ * Preserve existing --ldpreload list order and rightmost-higher-priority interposition after name resolution.
+ * Add regressions for system/configured lookup, explicit-path priority, search-order changes, empty system paths, missing libraries, invalid path lists and mcpu-ld -L diagnostics.
+ * No CPU ISA, MELF ABI, SONAME/NEEDED, relocation or dynamic-loader semantics change in this release.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.12.
+ * Add --dump-config and --print-search-dirs diagnostic information actions to mcpu-ld and mcpu-run through the common mcpu_tool_options layer.
+ * --dump-config reports the resolved runtime root, configuration enable/disable state, config-file read/not-found state, and effective MCPU_LD_SYSTEM_LIBRARY_PATH.
+ * --print-search-dirs reports the effective MCPU library search order; an empty configured system path yields an empty list without fallback.
+ * Diagnostic actions require no linker input or executable and honor --no-config and --sys-root exactly as normal execution does.
+ * Add regressions for identical mcpu-ld/mcpu-run diagnostics, user overrides, empty search paths, malformed config handling and public help.
+ * No CPU ISA, MELF ABI, library-resolution, NEEDED or existing dynamic-linking semantics change in this release.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.11.
+ * Add a common relocatable MCPU runtime/configuration layer for mcpu-ld and mcpu-run.
+ * Derive the default MCPU root from the real executable and use <runtime-root>/lib as the default MCPU system library tree.
+ * Add the mcpu-ld.conf hierarchy <runtime-root>/etc -> /etc/mcpu -> $HOME/.mcpu/etc, with MCPU_LD_SYSTEM_LIBRARY_PATH as the effective system-library override.
+ * Install only <runtime-root>/etc/mcpu-ld.conf; keep /etc/mcpu and per-user configuration under administrator/user control.
+ * Add --no-config and --sys-root=PATH/--sys-root PATH to mcpu-ld and mcpu-run. --sys-root implies --no-config and accepts absolute or invocation-relative paths.
+ * Introduce mcpu_tool_options plus dedicated mcpu_ld_options and mcpu_run_options structures; pass parsed state explicitly through const option pointers to linker/runner execution components.
+ * Add regressions for user-config location, old-path rejection, empty overrides, malformed-config suppression, absolute/relative sys-root and real mcpu-ld/mcpu-run behavior.
+ * No CPU ISA, MELF ABI, library-search, NEEDED, or existing dynamic-linking semantics change in this release.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.10.
+ * Add mcpu-readelf, a read-only MELF ABI1/ABI2 inspection utility for ET_REL, ET_EXEC and ET_DYN files.
+ * Add -h/-l/-S/-s/-r/-A views for MELF file headers, program headers, section headers, symbol tables, RELA relocations and MCPU target/lifecycle metadata; add -e and -a aggregate modes plus GNU-readelf-like long aliases.
+ * Install mcpu-readelf under $libdir/mcpu/bin and create the corresponding public symlink in $bindir beside mcpu-as, mcpu-ld and mcpu-run.
+ * Add a readelf regression covering ET_REL, ABI-v2 ET_EXEC, ET_DYN, symbols, retained relocations, architecture metadata, --help/--version and rejection of non-MELF input.
+ * No CPU ISA, MELF ABI, assembler, linker, loader or runtime semantics changed from 0.2.9.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.9.
+ * Rework the Autoconf/Automake bootstrap following the MCPU project convention: project-owned macros live in acsite.m4, m4/ is reserved for external/vendor macros, and bootstrap regenerates Libtool/Autotools files while copying system macro packages.
+ * Replace pkg-config dependency checks with AC_CHECK_LIBMPU(1.0.25) and AC_CHECK_LIBMPUIO(1.0.4), using LIBMPU_* and LIBMPUIO_* substitutions supplied by the system macro packages.
+ * Install mcpu-as, mcpu-ld and mcpu-run under $libdir/mcpu/bin and create relative public symlinks in $bindir; libmcpu, public headers and pkg-config metadata keep their existing installation locations.
+ * Add the make tests convenience target alongside make check and add configuration headlines, summary output and post-configure usage help.
+ * No CPU ISA, MELF ABI, assembler, linker, loader or runtime semantics changed from 0.2.8.
+
+2026-10-02 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.8.
+ * Normalize C source and header formatting to the established LibMPU project style.
+ * Keep dense initializer tables compact where they are intentionally tabular.
+ * No functional changes: CPU ISA, MELF ABI, assembler, linker, loader, runtime, tests and examples are unchanged from 0.2.7.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.7.
+ * Documentation-only cosmetic correction of 0.2.6.
+ * Fix overlapping entries in the MELF canonical-section-name list.
+ * Raise the SP line in architecture Figure 9 so it no longer crosses the label text.
+ * Remove generated Markdown companions from doc/src/ and from the documentation build.
+ * CPU, assembler, linker, loader, runtime, tests and examples are unchanged from 0.2.6.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.6.
+ * Documentation-only release.
+ * Restyled both maintained manuals with the memoir/Roboto book style.
+ * Replaced text pseudo-diagrams with vector TikZ figures and restored real tables.
+ * Added the HLL/CRT PROGRAM and MODEL contracts for main(), init(), life(), and optional fini().
+ * Added Markdown companions under doc/src/.
+ * CPU, assembler, linker, loader, runtime, tests and examples are unchanged from 0.2.5.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.5.
+ * Replace the rigid `mcpu-as -c input.s output.o` interface with the normal UNIX-style `mcpu-as -o output.o input.s` command line.
+ * Permit the single input source before or after `-o`; keep `-h/--help` and reject obsolete `-c` as an unknown option.
+ * Update tests, examples, README and both maintained manuals to the new assembler syntax; CPU ISA and MELF ABI are unchanged.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.4.
+ * Documentation-only release; keep library, assembler, linker, loader, runtime, tests, examples, ISA and MELF ABI unchanged from the user-verified 0.2.3 baseline.
+ * Rework doc/libmcpu-bytecode-architecture-ru.pdf using the visual language of the LibCPU programming book sources: DejaVu Serif/Sans typography, proper tables and TikZ diagrams for STACK/SP, CALL argument blocks, FP, stack frames and dynamic stack scopes.
+ * Restore tabular presentation of instruction/ABI layouts that had regressed into code-like pseudo-tables.
+ * Rewrite doc/libmcpu-melf-abi-ru.pdf predominantly in Russian while retaining established technical terms, MELF identifiers and ABI names where appropriate.
+ * Keep all editable XeLaTeX sources in doc/src/ and update them for LibMCPU 0.2.4.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.3.
+ * Regression-test path correction only; keep the library, assembler, linker, loader, runtime, MELF ABI, documentation and examples unchanged from 0.2.2.
+ * Update tests/tst-dynamic-runner.sh to load dynamic-main.s, dynamic-liba.s and dynamic-libb.s from examples/shared-libs/ after the 0.2.2 examples reorganization.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.2.
+ * Examples/documentation-layout release only; keep cpu/, utils/, include/ and tests/ implementation sources unchanged from the verified 0.2.1 release.
+ * Move editable documentation sources and build-docs.sh from doc/ to doc/src/, add doc/src/README, and leave only the maintained PDF manuals directly under doc/.
+ * Add build/run help to every assembler example source.
+ * Move dynamic-liba.s, dynamic-libb.s and dynamic-main.s to examples/shared-libs/, replace the former examples/_as.sh, examples/_ld.sh and examples/_run.sh workflow with examples/shared-libs/Makefile.
+ * Move check-sys-brk.s and the three _ld_check-sys-brk-*.sh scripts to examples/sys-brk/ and adjust their utility paths to ../../utils/.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.1.
+ * Documentation-and-examples release only; keep cpu/, utils/, include/ and tests/ implementation sources unchanged from the verified 0.2.0 release.
+ * Replace doc/libmcpu-bytecode-architecture-ru.pdf with a new standalone current architecture/ABI reference and distribute its XeLaTeX source plus generated opcode/RCONST tables.
+ * Replace doc/libmcpu-melf-abi-ru.pdf with a new standalone MELF reference whose section numbering starts at 1 and which integrates static ABI v1, startup-dynamic ABI v2, lifecycle, STACK/HEAP/startup contracts and the corrected LOCAL ET_DYN runtime-relocation rule.
+ * Supersede the temporary 0.2.0 MELF erratum because its normative correction is now incorporated directly into both maintained PDF manuals.
+ * Add doc/build-docs.sh and shared TeX style source so both PDF manuals are reproducibly rebuilt with XeLaTeX.
+ * Add the user-verified examples/pendulum/ experiment unchanged from the supplied examples.tar.xz: pendulum ET_EXEC plus rk4.so ET_DYN, Makefile/build wrapper and TRACE experiment script.
+
+2026-09-24 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.2.0.
+ * Correct MELF ABI-v2 ET_DYN local relocation semantics: references to LOCAL symbols inside a shared object remain non-preemptible, but are retained as LOCAL runtime relocations so the startup linker can add the final runtime base of the referenced PROGRAM or DATA segment.
+ * Emit LOCAL ET_DYN relocation targets in .dynsym ahead of GLOBAL/WEAK symbols and set the .dynsym sh_info boundary accordingly. LOCAL dynamic symbols are never admitted to the interposition namespace.
+ * Teach the startup dynamic loader to accept LOCAL .dynsym entries and resolve LOCAL runtime relocations strictly against the originating module instead of performing GLOBAL/WEAK winner lookup.
+ * Add low-level PROGRAM/DATA rebasing regression coverage to tst-dynamic and an assembler/linker/loader end-to-end regression with an exported ET_DYN entry calling a private local helper after non-zero module placement.
+ * Add doc/libmcpu-melf-abi-0.2.0-erratum-ru.txt as the normative correction to the pre-0.2.0 PDF wording for LOCAL ET_DYN relocations.
+ * Preserve ABI-v1 static linking and the established ABI-v2 GLOBAL/WEAK interposition rules; MELF ABI version remains 2 because this release corrects the implementation of the existing ET_DYN runtime-address contract rather than introducing a new container ABI.
+
+2026-09-22 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.9.
+ * Add mcpu-run lifecycle stage actions --before-run, --after-init, --on-step and --after-run without changing the MCPU ISA or MELF ABI; existing END boundaries provide INIT/LIFE/FINI synchronization points and BEFORE_RUN is host-side.
+ * Add typed comma-separated scalar/register print and set actions for registers and DATA/CONTROL/HEAP/INPUT/OUTPUT/TRACE. One print action emits its scalar values on one line separated by spaces; repeated stage options remain ordered and supported.
+ * Parse set-int-* and set-real-* values through LibMPUIO mpu_sscanf(), validate a whole action before applying its writes, and preserve guest PSW across host-side numeric parsing.
+ * Keep raw stage access read-only: print-raw-* accepts exactly one dump per action, supports the existing binary raw-size suffixes and boundary clipping, and no set-raw-* actions are provided.
+ * Add the explicit mcpu-run -- separator: the preferred syntax is "mcpu-run [runtime-options] -- executable [program-args...]" while the previous no-separator form remains compatible. Tokens after -- are passed to the guest argv unchanged.
+ * Add examples/life-print.s for two-register one-line output after every LIFE END and examples/argc-argv.s for argc/argv inspection with option-looking guest arguments.
+ * Add end-to-end regression coverage for stage ordering, empty INIT stage behavior, LIFE actions, FINI-before-AFTER_RUN ordering, typed set/print lists, explicit -- argv separation, raw-list rejection and the deliberate absence of set-raw-*.
+ * Document mcpu-run lifecycle test-bench actions, explicit argv separation and their relationship to MELF lifecycle boundaries in both bundled PDF documents.
+
+2026-09-22 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.8.
+ * Extend mcpu-run integer, real and raw-memory inspection to CONTROL, HEAP, INPUT, OUTPUT and TRACE in addition to the existing DATA/register output options.
+ * Add binary K/KiB, M/MiB and G/GiB suffixes to the <bytes> operand of every mcpu-run --raw-* option, with overflow checks and clipping at the selected memory/section boundary.
+ * Keep --raw-data bounded by the linked .data section while CONTROL/INPUT/OUTPUT/TRACE raw dumps are bounded by their segment sizes and HEAP raw dumps by the prepared HEAP size.
+ * Align the mcpu-run --help option descriptions in one vertical column and document the --raw-* binary size suffixes there.
+ * Add end-to-end regression coverage for integer/real inspection of DATA, CONTROL, HEAP, INPUT, OUTPUT and TRACE, all six raw-size suffix spellings, clipping, boundary rejection and overflow rejection.
+ * Add the verified SYS_brk examples check-sys-brk.s and the grow/limit/shrink link-and-run scripts; keep the legacy MELF ABI-v1 main-basic invocation commented out in examples/_run.sh.
+
+2026-09-22 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.7.
+ * Add the first MCPU system-call ABI with the zero-operand SYSCALL opcode and fixed overlapping-register syscall area at the top of the register file.
+ * Add SYS_brk as system call number 10, dispatched inside LibMCPU through a local table of function pointers; unimplemented system-call numbers return -ENOSYS.
+ * Add _heap_brk as the architectural upper boundary of guest-accessible HEAP memory and implement internal __cpu_heap_brk() with immutable _heap_limit, transactional host-backing growth, stable PTR64 offsets and deterministic zeroing of released memory on shrink.
+ * Define linker-owned _end as the non-preemptible executable HEAP pointer HEAP:16; _end is also the initial and minimum program break.
+ * Extend mcpu-ld size parsing with binary K/KiB/M/MiB/G/GiB suffixes for STACK/HEAP options.
+ * Document the HEAP/program-break model, _end, SYSCALL register ABI, SYS_brk semantics and future -host_errno syscall convention in both bundled PDF documents.
+ * Add unit and end-to-end regressions for SYSCALL/SYS_brk, HEAP shrink/regrowth zeroing, host-backing growth, immutable HEAP limits, overlapping syscall registers, linker-defined _end in static/dynamic ET_EXEC, and binary size suffixes.
+
+2026-09-22 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.6.
+ * Edit the bundled PDF documentation for the LibMCPU rename: replace legacy LibCPU/libcpu.h/cpu-elf.h and cpu-as/cpu-ld/cpu-run references with LibMCPU/libmcpu.h/mcpu-elf.h and mcpu-as/mcpu-ld/mcpu-run, and update tools/cpu-* source paths to utils/mcpu-* where they appear.
+ * No library, ISA, MELF ABI, assembler, linker, loader or runtime semantics changed from 0.1.5.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.4.
+ * Packaging-only release; preserve the working 0.1.3 assembler, linker, loader, runtime, ABI and tests source code unchanged.
+ * Regenerate the distributed Autotools files after the version bump and ensure generated files are newer than their input files, so an ordinary release build does not try to invoke aclocal/automake/autoconf.
+ * No MELF ABI v1/v2, ISA, CALL ABI, #line, dynamic-linking or runtime semantics changed from 0.1.3.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.3.
+ * Fix mcpu-as #line logical-line accounting across physically empty source lines.
+ * Keep the assembler core diagnostic counter synchronized with physical source lines by preserving empty lines as whitespace-only parser lines; assembly semantics are unchanged.
+ * Add tst-line-runner.sh regressions for native physical-line counting and the reported preprocessor shape: #line 4 "dyn.s", an empty line, .text, a label, then an error must report dyn.s:7.
+ * Document that the logical #line counter advances across empty and comment-only lines.
+ * No MELF ABI v1/v2, ISA, CALL ABI, dynamic-linking or runtime semantics changed from 0.1.2.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.2.
+ * Fix tests/tst-immediate-exactness-runner.sh for the source-location diagnostics introduced in 0.1.1: mcpu-as errors now have the form "mcpu-as: file:line: error: ...", so the regression checks the source filename and line number instead of the obsolete contiguous "mcpu-as: error:" prefix.
+ * No assembler, MELF ABI, ISA, dynamic-linking or runtime semantics changed from 0.1.1.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.1.
+ * Add mcpu-as -h/--help with a detailed assembler/source-location help page.
+ * Add mcpu-as #line decimal source-location directives for future preprocessor output.
+ * #line controls the logical line of the immediately following source line and optionally changes the diagnostic filename; omitting the filename preserves the previous one.
+ * Parse #line numbers strictly in decimal even with leading zeroes and accept the C99/C++11 range 0..2147483647.
+ * Do not add __LINE__/__FILE__ assembler symbols; #line affects diagnostics only and is accepted for both .s and .S input names.
+ * Add runner regression coverage for --help, filename/line remapping, decimal leading zeroes, zero and range rejection.
+ * No MELF ABI v1/v2, ISA, CALL ABI, dynamic-linking or runtime semantics changed from 0.1.0.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.1.0.
+ * Add MELF ABI version 2 startup dynamic linking while retaining ABI-v1 static ET_EXEC compatibility.
+ * Add mcpu-ld --shared for ET_DYN helper libraries and mcpu-ld --dynamic for ABI-v2 ET_EXEC.
+ * ABI-v2 ET_DYN permits only .text/.data/.bss allocated content and has no lifecycle, model segments, STACK or HEAP.
+ * Add .dynsym/.dynstr as the runtime symbol ABI, separate from optional developer .symtab/.strtab information.
+ * Retain GLOBAL/WEAK runtime RELA records in ABI-v2 outputs; LOCAL and lifecycle references remain statically bound.
+ * Add mcpu-run --ldpreload=a.so:b.so explicit colon-separated preload list; no DT_NEEDED, implicit search paths, PLT/GOT, lazy binding or dlopen API.
+ * Implement startup interposition immediately: strong GLOBAL beats WEAK; among equal bindings the rightmost preload wins, including preemption of definitions already present in main.
+ * Keep _start/_life/_fini executable-private and non-preemptible.
+ * Shared libraries have per-segment relative PROGRAM/DATA images; mcpu-run assigns final process bases and preserves one process-owned DATA NULL guard.
+ * Permit explicit cross-library and cyclic symbol resolution because all preload modules are parsed before runtime RELA application.
+ * Add dynamic-link regression coverage, shared/dynamic examples and strict --shared STACK/HEAP-option rejection.
+ * Extend both doc/*.pdf references with a detailed MELF ABI-v2 startup-linking chapter and preserve the complete architecture PDF outline.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.25.
+ * Add mcpu-run --int-data=<bits>@<addr> to print a signed integer object from DATA memory.
+ * Add mcpu-run --raw-data=<bytes>@<addr> to dump bytes from the linked .data section with a 16-byte hexadecimal/ASCII view.
+ * Raw DATA dumps are clipped at the end of .data and never read into .bss or other DATA-segment bytes.
+ * Extend runner regression coverage for integer DATA output, raw dump formatting and .data-bound clipping.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.24.
+ * Add the missing <stdint.h> include to tests/tst-melf.c so UINT64_MAX is declared explicitly.
+ * Add -h/--help handling and detailed option help to mcpu-ld, matching mcpu-run style.
+ * Add lifecycle-main-model.s demonstrating .init, CONTROL/INPUT/OUTPUT/TRACE, McpuStartup argc/argv handling and a normal main() that increments a counter by 2.
+ * Add lifecycle-main-basic.s demonstrating the same _life -> main(argc, argv) bridge with _start_life: and ordinary DATA, without .init or model segments.
+ * No MELF ABI or CPU execution semantics changed from 0.0.23.
+
+2026-09-21 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.23.
+ * Correct MELF target endian selection to use LibMPU boolean byte/word-order selector macros; MPU_BYTE_ORDER/MPU_WORD_ORDER themselves are numeric order tags (for example 1234), not 0/1 selectors.
+ * Replaced the temporary LCPUOBJ1/raw executable path with the permanent MELF (MCPU ELF-derived) static object/executable ABI.
+ * Added public include/mcpu-elf.h covering MELF identification, headers, sections, symbols, RELA relocations, target/lifecycle metadata, Program Headers and loader/startup contract.
+ * mcpu-as -c now emits MELF64 ET_REL with .symtab/.strtab/.shstrtab, SHT_RELA, .mcpu.target and section-relative symbols.
+ * Added .weak symbol declarations and ELF-style strong/weak resolution; unresolved weak pointer relocations with zero addend resolve to NULL.
+ * Added real SHT_NOBITS .bss support; linker places .bss after file-backed DATA and preserves contribution alignment without storing zero payload bytes.
+ * mcpu-ld now consumes MELF ET_REL, applies all five fixed relocation kinds, inserts the single DATA NULL guard and emits complete MELF ET_EXEC images.
+ * Added mandatory _start and _life ET_EXEC lifecycle contract, optional _fini and assembler-only _start_life: shorthand for coincident _start/_life when .init is absent.
+ * Added .mcpu.target and .mcpu.lifecycle metadata validation and full PTR64 sh_addr/st_value/p_vaddr semantics.
+ * Added MELF Program Headers for PROGRAM/DATA/CONTROL/INPUT/OUTPUT/TRACE plus PT_MCPU_STACK and optional PT_MCPU_HEAP with explicit p_maxsz.
+ * Removed mcpu-run STACK/HEAP sizing overrides; STACK/HEAP sizes are executable ABI selected by mcpu-ld and recorded in Program Headers.
+ * Added persistent McpuStartup ABI with version, argc, argv and guest PTR64 argument strings in the high end of STACK.
+ * mcpu-run now validates MELF ET_EXEC before allocating guest memory and follows the rule 'loader validates, never repairs'.
+ * Added MELF ET_REL/ET_EXEC, BSS, startup, lifecycle, weak-symbol, relocation and malformed-loader regression coverage.
+ * Updated assembler examples for the mandatory lifecycle ABI and MELF toolchain.
+ * Expanded doc/*.pdf with the MELF ABI, linker/loader contract, startup ABI and 0.0.23 implementation model.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.22.
+ * Added an explicit relocatable-object/linker model before fixing the final ELF representation.
+ * Added .global/.globl and .extern symbol declarations; ordinary labels remain local unless exported.
+ * Added .ptr for generic target-representation PTR64 data objects; .cptr remains the PROGRAM-pointer form.
+ * Added relocation semantics for CODE64, DATA ADDR64, LEA PTR64 immediates and PTR64 data objects.
+ * Relocatable expressions are restricted to SYMBOL + signed constant addend; absolute arithmetic remains assembler-evaluated.
+ * Added per-object section alignment so linker concatenation preserves leading .align requirements.
+ * Moved the DATA NULL guard responsibility to the linker for relocatable objects: each object DATA starts at offset zero, the final image gets one 16-byte guard.
+ * Added temporary .lco development relocatable container with canonical MSB-first metadata and raw architectural section payloads.
+ * Added mcpu-as -c and mcpu-ld development tools; mcpu-ld emits the existing raw executable sidecars for mcpu-run.
+ * Added cross-object global/extern resolution, duplicate/undefined-symbol diagnostics, relocation application and lifecycle entry resolution.
+ * Added relocatable/linker regression coverage and a two-module example returning 42.
+ * Expanded the architecture PDF with symbols, bindings, addends, relocation types, alignment, DATA guard ownership, linker algorithm and future ELF mapping.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.21.
+ * Assign PTR64 selectors 0x3..0x7 to CONTROL, INPUT, OUTPUT, TRACE and HEAP; selectors 0x8..0xF remain reserved.
+ * Add independent anonymous mmap-backed CONTROL/INPUT/OUTPUT/TRACE/HEAP regions with guest access permissions.
+ * Define TRACE as the current telemetry frame; accumulated history belongs to the runtime collector.
+ * Add .control/.input/.output/.trace data sections and .init/.fini executable sections; .init/.text/.fini share one PROGRAM address space.
+ * Define lifecycle ABI entries _start, _life and _fini and expose their numeric raw-image metadata.
+ * Add END for cooperative phase completion and EXIT r32 for graceful final termination, plus explicit stop-reason/exit-status API.
+ * Generalize LEA to emit a complete PTR64 immediate for data-like and PROGRAM labels without changing its binary size.
+ * Add runtime HEAP SEG=0x7 with a 16-byte low guard, initial size and maximum limit; allocator and dynamic-growth services remain library/runtime concerns.
+ * Extend mcpu-run with --heap-size, --heap-limit, --init-only and --steps and add a model lifecycle example/regression.
+ * Keep the emitted .meta file a temporary raw-development manifest, not the final object/executable format.
+ * Expand the architecture PDF with the model-memory map, lifecycle state/entry ABI, END/EXIT/HALT/fault distinctions, permissions, LEA PTR64 behavior and future heap allocator design.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.20.
+ * Fix assembler source encoding as UTF-8.
+ * Add .ucs2 for strict UTF-8-to-UCS-2 conversion with target-endian
+ 16-bit DATA objects and a terminating zero code unit.
+ * Add locale-independent .utf8 for exact UTF-8 bytes plus terminating zero.
+ * Add raw .byte directive and .int as an alias of .integer.
+ * Extend .integer/.int to accept value lists.
+ * Add section-independent .equ absolute symbols with forward .equ references.
+ * Add integer arithmetic expressions with +, -, *, /, %, unary +/- and
+ parentheses; DATA/CODE address fixups accept section-label expressions.
+ * Add symbolic register addresses such as r64@table_ptr and expression
+ addresses such as r64@(table_ptr+8).
+ * Add assembler directives/expressions regression coverage and example.
+ * Expand the architecture PDF with the assembler/preprocessor boundary,
+ string encodings, expression grammar and directive semantics.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.19.
+ * Enforce exact assembler immediate semantics for LDI/LDR/LDC.
+ * LDR r32 literals must be exactly representable as Real32; r64 and
+ wider destinations must be exactly representable as Real64.
+ * LDC components must be exactly representable as Real32; c64 remains
+ the minimum complex destination width.
+ * LDI rejects signed-value loss in destinations narrower than 64 bits
+ and values outside signed Integer64 immediate range.
+ * Diagnostics direct wider/higher-precision constants to DATA directives
+ and LOAD.
+ * Add immediate-exactness regression tests and documentation.
+ * Preserve PSW[15:0] around LibMPU conversion helpers used by LDI/LDR/LDC,
+ ICVT/RCVT, integer<->Real conversion, CCVT and CRTOC.
+ * Add conversion-flag regression coverage so conversion implementation
+ details cannot clobber guest status flags.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.18.
+ * Audited LibMCPU opcodes against the configured LibMPU 1.0.25 public value-level API.
+ * Added all remaining non-modular integer shifts/rotates, INC/DEC/XCHG, copy/convert, full multiply, quotient+remainder divide and bit-length instructions.
+ * Extended decoded instructions to four operands for IDIV/ISDIV.
+ * Added missing Real sign/copy/compare, decomposition, rounding, remainder, log1p/expm1, inverse hyperbolic, integer/Real conversion and classification instructions.
+ * Expanded RCONST with EPSILON, InD, signed NaN/Inf/min/max and signed-zero generators while retaining the complete mathematical constant family.
+ * Added Complex real/imag extraction, Real-to-Complex, general/polar construction, conjugate, abs/norm/arg, equality predicates and copy/convert instructions.
+ * Deliberately excluded modular arithmetic, textual conversion, Real-format metadata queries and LibMPU runtime/flag accessors from the CPU ISA.
+ * Added direct LibMPU-vs-LibMCPU coverage regression and an executable assembler audit example.
+ * Expanded the architecture PDF with the complete coverage matrix, instruction forms, width rules and assembler examples.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.17.
+ * Fixed PTR64 comparison conventions: full-width equality and same-selector PDIFF ordering.
+ * Fixed the normal stack ABI red-zone size at zero bytes.
+ * Fixed reserved PTR64 selector rules for non-dereferencing versus address-space operations.
+ * Added generic BSWAP raw-byte reversal for equal-width r8..r65536 register views.
+ * BSWAP preserves PSW and uses source-snapshot semantics for in-place operation.
+ * Added pointer-policy, reserved-segment and BSWAP regression coverage plus a runner example.
+ * Expanded the architecture PDF with normative pointer comparison, red-zone, reserved-segment and external-byte-order guidance.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.16.
+ * Fixed the split byte-order ABI: PROGRAM fields are canonical MSB-first, architectural data objects follow the configured LibMPU target representation.
+ * Added __cpu_code_get_u16/u32/u64 and __cpu_code_put_u16/u32/u64 helpers for canonical bytecode fields.
+ * Added __cpu_data_get_u16/u32/u64 and __cpu_data_put_u16/u32/u64 helpers for target data-object representation.
+ * Exposed LibMCPU target byte-order/word-order aliases derived from LibMPU in libmcpu.h.
+ * Reworked decoder, pointer/stack/control-flow object accesses and assembler fixups to use the explicit code/data helper domains.
+ * Made .cptr the canonical assembler directive for PROGRAM PTR64 DATA objects; retained .codeptr as a compatibility alias.
+ * Added byte-order/object-representation regression coverage for IMM64, integer/real/complex DATA objects, PTR64, CALL return PC and LOAD/BMOV/LOAD byte preservation.
+ * Expanded the architecture PDF with the normative byte-order/object-representation model and assembler examples.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.15.
+ * Fixed the normal-function PSW calling convention without adding PSW-writing opcodes.
+ * Defined PSW[15:0] (all LibMPU arithmetic/status flags) as volatile across CALL.
+ * Defined TF, IF and MODE as persistent control state that a normal callee must preserve.
+ * Classified HF as execution state outside the ordinary function-call save/restore contract.
+ * Kept CALL, CALLP and RET themselves PSW-neutral: they perform no hidden PSW save/restore.
+ * Added public ABI masks for volatile status, persistent control and execution-state PSW domains.
+ * Added PSW call-ABI regression tests and an assembler example showing callee flag clobbering.
+ * Expanded the architecture PDF with normative PSW calling-convention rules and examples.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.14.
+ * Added JMPP r64(PROGRAM PTR64) indirect jump instruction (opcode 0x4003).
+ * Added CALLP r64(PROGRAM PTR64) indirect call instruction (opcode 0x4012).
+ * CALLP pushes the same raw 64-bit next-PC CODE64 used by direct CALL; RET is unchanged.
+ * Added atomic PROGRAM-pointer/range/stack validation for indirect control flow.
+ * Added assembler JMPP/CALLP syntax with physical r64 operand checks.
+ * Added .codeptr CODE-label DATA directive for PROGRAM PTR64 tables and forward fixups.
+ * Added indirect-control assembler example covering CALLP and JMPP through a DATA table.
+ * Added decoder/executor/fault/atomicity/.codeptr regression coverage and runner test.
+ * Expanded the architecture PDF with indirect control-flow formats, detailed state transitions and jump-table pattern.
+
+2026-09-20 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.13.
+ * Replaced malloc-backed PROGRAM/DATA/STACK buffers with independent anonymous mmap() mappings.
+ * Added separate internal architectural size and page-rounded host mapping capacity for every segment.
+ * Added __cpu_program_protect(); PROGRAM is writable while loading and read-only after protection.
+ * mcpu-run now loads .code/.data with open/fstat/read into anonymous mappings; image files are never mmap()ed.
+ * Added 16-byte ABI maximum natural alignment, stack/call alignment and argument-block alignment constants.
+ * Defined NULL PTR64 as all zero and reserved DATA[0..15] as the assembler NULL guard.
+ * LOADP/STOREP/BMOV dereference of NULL now raises CPU_EXEC_POINTER_FAULT.
+ * The assembler reserves the 16-byte DATA NULL guard and retains explicit-only .align semantics with no implicit directive alignment.
+ * Updated ABI examples to use 16-byte call argument blocks where required and changed the real4096 example from .align 512 to ABI-natural .align 16.
+ * Added anonymous-mmap/page-alignment/PROGRAM-protection regression coverage.
+ * Expanded the architecture PDF with host-backing rules, DATA NULL guard, alignment/data-layout rules and formal argument-block layout.
+ * HEAP is explicitly outside DATA and remains reserved for a future independent memory segment.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.12.
+ * Added memory-to-memory block-copy instructions BMOV and BMOVI.
+ * BMOV uses a runtime unsigned r64 byte count; BMOVI embeds an unsigned IMM64 byte count.
+ * Block copies use memmove semantics, including overlap inside one architectural segment.
+ * DATA and STACK are readable/writable block-copy spaces; PROGRAM is readable but never writable.
+ * Added complete-range validation before modification, preserving destination memory on faults.
+ * Added block-copy assembler support, example and regression tests.
+ * Expanded the architecture PDF with compiler lowering for struct assignment, by-value aggregates and VLA/runtime copies.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.11.
+ * Added dedicated 64-bit architectural FP as a STACK byte offset.
+ * Empty allocated STACK now initializes SP = FP = stack_size.
+ * Added PUSHFP, SETFP, RESTSP and POPFP frame-management instructions.
+ * Added LDFP, STFP and LEAFP signed FP-relative addressing instructions.
+ * Added SETSP for installing a validated STACK PTR64 as the dynamic stack top.
+ * Added atomic bounds/fault handling for FP/SP management operations.
+ * Added optional-FP prologue/epilogue and dynamic stack allocation ABI rules.
+ * Added frame-pointer/dynamic-stack assembler example and regression tests.
+ * Expanded the architecture PDF with compiler-oriented frame/VLA examples and diagrams.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.10.
+ * Added PTR64 byte-offset arithmetic: PADD, PADDI, PSUB, PSUBI and PDIFF.
+ * Pointer arithmetic preserves the 4-bit segment selector and operates only on the 60-bit offset.
+ * Added signed OFF64 immediate forms and signed r64 displacement forms.
+ * Added same-segment signed byte difference with PDIFF.
+ * Added atomic 60-bit pointer overflow/underflow checks and PSW preservation.
+ * Switched assembler signed-64 parsing paths to LibMPU fixed __mpu_int64_t values.
+ * Added pointer-arithmetic assembler example and regression tests.
+ * Updated the architecture PDF with normative pointer-arithmetic semantics and diagrams.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.9.
+ * Added PTR64 segmented virtual pointers: 4-bit segment + 60-bit byte offset.
+ * Defined DATA, STACK and read-only PROGRAM pointer segments; reserved 0x3..0xf.
+ * Added LEA, LEASP, LOADP and STOREP machine instructions and assembler syntax.
+ * Added public PTR64 construction/inspection helpers and pointer-fault status.
+ * Fixed the C-like ABI for scalar/pointer/aggregate arguments and stack locals.
+ * Fixed hidden PTR64 caller-provided storage for struct/union return values.
+ * Added pointer and aggregate ABI examples and regression tests.
+ * Rebuilt the architecture PDF with detailed PTR64 and C-like ABI diagrams.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.8.
+ * Added CALL CODE64 and RET machine instructions.
+ * CALL pushes the 64-bit next PC on STACK; RET pops it back to PC.
+ * Added right-to-left stack argument convention and caller cleanup ABI.
+ * Added 8 KiB Return Value Area at 0x7e000..0x7ffff.
+ * Added canonical ABI return-register helper and public return-area constants.
+ * Added CALL/RET assembler support, example and regression tests.
+ * Updated the architecture PDF with detailed CALL ABI diagrams and examples.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.7.
+ * Added malloc-backed STACK memory and downward-growing SP semantics.
+ * Added signed 64-bit stack displacement encoding (OFF64).
+ * Added PUSH, POP, LDSP, STSP and ADJSP machine instructions.
+ * Added STACK bounds checking with atomic stack faults.
+ * Added stack syntax to the test assembler and stack regression tests.
+ * Added --int-reg and --stack-size options to mcpu-run.
+ * Updated the architecture PDF with STACK, SP and SP-relative addressing.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.6.
+ * Added 64-bit PROGRAM branch address encoding (CODE64).
+ * Added JMP, JSET and JCLR machine instructions.
+ * Added PSWBIT8 selectors for individual PSW flags.
+ * Added forward/backward CODE labels to the test assembler.
+ * Added JZ/JNZ/JC/JNC/JO/JNO/JS/JNS assembler aliases.
+ * Updated __cpu_step() PC handling for taken branches.
+ * Added control-flow example and regression test.
+ * Updated the architecture PDF with CODE64 and branch semantics.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.5.
+ * Require LibMPU 1.0.25 or later.
+ * Added mcpu-run utility for loading and executing .code/.data images.
+ * Added LibMPUIO 1.0.3 dependency for mcpu-run real-number output.
+ * Added --real-reg, --real-data and --digits mcpu-run options.
+ * Added 4096-bit 2.0 + PI assembler/runner example and regression test.
+
+2026-09-19 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.4.
+ * Added REG24, OPCODE16, IMM64 and ADDR64 machine encodings.
+ * Added malloc-backed PROGRAM and DATA memory to the CPU context.
+ * Added bytecode decoder, single-step and run execution.
+ * Added LDI, LDR, LDC, LOAD, STORE and RCONST.
+ * Added real and complex LibMPU-backed instruction families.
+ * Added source-level c<bits>@addr complex views with physical width semantics.
+ * Added test assembler and DATA directives for integer, real and complex constants.
+ * Added detailed bytecode/operand architecture PDF in doc/.
+ * Added bytecode and assembler regression tests.
+
+2026-09-18 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.3.
+ * Added decoded instruction and operand representation.
+ * Added common instruction executor.
+ * Added NOP, HALT, MOV and CLR instructions.
+ * Added IADD, IADC, ISUB and ISBB integer instructions using LibMPU backend.
+ * Added instruction/operand/register validation in the executor.
+ * Added instruction and integer FLAGS regression test.
+
+2026-09-18 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.2.
+ * Added physical register-view resolver for r8 ... r65536.
+ * Added register width, natural-alignment and bounds validation.
+ * Added register-file width/alignment/bounds regression test.
+ * Added overlapping register-view regression test.
+
+2026-09-18 Andrey V. Kosteltsev <support@radix-linux.su>
+
+ * Version 0.0.1.
+ * Added thread-local CPU context with 512 KiB register file.
+ * Added PC, SP and logical 32-bit PSW integration with LibMPU flags.
+ * Added HF, TF, IF and MODE control/status fields.
+ * Added context/PSW regression test.