mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-23 13:00:35 +02:00
79 lines
3.8 KiB
Markdown
79 lines
3.8 KiB
Markdown
# `libs/libcmt/vsprintf.obj` exact-match ledger
|
|
|
|
This atomic lane started from campaign commit `96b66de9`. The object was
|
|
`MISSING` at config index 709, absent from `config/parked.json`, production
|
|
source, object logs, all refs, and active worktrees. Root announced the claim
|
|
before editing and excluded the concurrent CRT lanes.
|
|
|
|
## Plain-English behavior
|
|
|
|
`vsprintf` creates a temporary string-backed `FILE`, points it at the caller's
|
|
buffer, gives it an effectively unlimited count, and passes the caller's
|
|
`va_list` to the shared formatter. It then appends a zero terminator and
|
|
returns the formatter's count. `_vscprintf` uses the same formatter with a
|
|
null destination so callers can learn how much space formatted output needs.
|
|
|
|
## Primary provenance and January inventory
|
|
|
|
The XDK 3911 `libcmt.lib` archive has SHA-256
|
|
`60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55`.
|
|
Its `obj\i386\vsprintf.obj` member has SHA-256
|
|
`2e6e6ad629cd4b7378887ab5af1efe91a40d425a644f99cb7fc31851f91d7c5f`,
|
|
compiler identifier `0x001c2426`, ordinary C CodeView records, and source path
|
|
`d:\xbox-finalfre\private\sdktools\crt\crtw32\stdio\vsprintf.c`. The
|
|
authenticated Microsoft source is pinned by Git blob
|
|
`3b824fa99ffb05adf539ee2437726959f44cecbf`. January remains authoritative.
|
|
|
|
The target owns two external pick-no-duplicates code COMDATs and no runtime
|
|
`.rdata`, `.data`, or BSS:
|
|
|
|
| Function | Bytes | Relocs | Normalized SHA-256 |
|
|
|---|---:|---:|---|
|
|
| `_vsprintf` | 87 | 2 | `89c0f1413a39fcdb249b07c38a8beae895f1322c743d58562cecfe9e3b642683` |
|
|
| `__vscprintf` | 48 | 1 | `62335b099989ed9762f9d60201922d800de3ce206965f80169363d4bf48904e3` |
|
|
|
|
`_vsprintf` relocates at `+0x2A` to `__output+0` and `+0x4B` to
|
|
`__flsbuf+0`; `__vscprintf` relocates at `+0x27` to `__output+0`. Target,
|
|
candidate, and authentic archive member match in bytes, relocation identity,
|
|
COMDAT selection/alignment, and public symbol ownership.
|
|
|
|
## Experiment matrix
|
|
|
|
| ID | Source factor | Total bytes T/B | Relocs T/B | Result | Decision |
|
|
|---|---|---:|---:|---|---|
|
|
| E01 | Authenticated Microsoft topology, chained `_ptr = _base = ...`, standard `putc` macro | `135/135` | `3/3` | both functions strict exact on first compile | accepted |
|
|
|
|
No code-shape sweep was needed. Together with the already admitted
|
|
`snprintf.obj` and `vsnprint.obj`, this independently validates one readable
|
|
`FILE`-backed formatter family across variadic, `va_list`, bounded, unbounded,
|
|
and count-only entry points.
|
|
|
|
## Strict verification
|
|
|
|
XDK 3911 CL `13.00.9254.1` compiled with unchanged libcmt `/O1 /Gy` flags.
|
|
`tools.coff_compare` reports `all_equal=true` for both candidate functions and
|
|
independently for both authentic archive-member functions.
|
|
|
|
The full `halobetacache_build`, `libcmt_build`, and `progress` targets pass.
|
|
The lane reports 346/833 completed objects, 3,470/11,060 exact functions, and
|
|
413,774 exact code bytes overall; libcmt reports 79/212 objects, 122/476
|
|
functions, 7,768 exact code bytes, and 1,728 exact data bytes. Semantic
|
|
progress reports zero unit errors.
|
|
|
|
The clean-commit regression snapshot/check forced a fresh XDK rebuild and
|
|
retained both functions as `still_exact`, with no failures or warnings. The
|
|
complete repository tool suite passes 179/179 tests.
|
|
|
|
## House/Berth and behavior audit
|
|
|
|
The implementation uses the real `FILE` layout and named fields, a typed
|
|
formatter declaration, standard `va_list`, vertical signatures, chained
|
|
assignments from the authenticated source, and one return per function. It
|
|
contains no assembly, `volatile`, forced inline, undefined sequencing, opaque
|
|
layout, raw offset, byte forcing, flag change, or comparator exception.
|
|
|
|
`vsprintf` is historically unbounded: it assumes the caller supplied enough
|
|
storage for the formatted result and terminator. That unsafe legacy contract
|
|
is preserved rather than disguised; defensive code should use the admitted
|
|
bounded formatter or call `_vscprintf` first.
|