4.5 KiB
libs/libcmt/time.obj exact-match ledger
This atomic lane independently revalidates an older completed result on a
fresh worktree based on campaign commit 63501296. The historical branch was
used only to identify the candidate; target provenance and every admission
measurement below were repeated in this lane.
Plain-English behavior
time asks Windows for the current system clock as a 64-bit count of
100-nanosecond ticks since 1601. It subtracts the difference between the
Windows and Unix epochs, divides by the number of ticks in one second,
optionally stores that Unix timestamp through the caller's pointer, and returns
the same value.
Primary provenance and target inventory
The locally archived XDK 3911 libcmt.lib has SHA-256
60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55.
Its member obj\i386\time.obj records both ..\time.c and the full original
path d:\xbox-finalfre\private\sdktools\crt\crtw32\time\time.c, plus compiler
id 0x001c2426. The member's _time COMDAT is already strict-equal to the
January split target:
- code size
56/56bytes; - two
IMAGE_REL_I386_REL32relocations, at+0x0ato_GetSystemTimeAsFileTime@4and+0x29to__aulldiv, both addend zero; - identical normalized SHA-256
f481c71336d955df61673ad2844701121e93e39d9392cce86c4c261bfd870d7f; - no target-owned
.data,.bss, or.rdata.
This proves the target is Microsoft's readable CRT C translation unit rather than a vendored-assembly object, and gives a primary reference object for the function, relocation destinations, ownership, compiler identity, and size.
Recovered representation and experiments
The retained source overlays the two 32-bit FILETIME halves with an unsigned
64-bit tick value in a named union. That is the ordinary VC7/XDK representation
for this Windows structure and lets the compiler perform the epoch subtraction
directly on the two halves before calling its unsigned 64-bit divide helper.
The constants are typed 64-bit values: 116444736000000000ui64 ticks between
the epochs and 10000000ui64 ticks per second.
| ID | Source shape | Size T/B | Relocs T/B | Result |
|---|---|---|---|---|
| E01 | Named union with parts and ticks views |
56/56 |
2/2 |
retained; strict exact |
| E02 | Build the 64-bit value explicitly with shift and OR | 65/56 |
2/2 |
rejected; redundant zero/OR work and an extra saved register |
No raw offsets, pointer-cast punning, packing, assembly, volatile, forced
inlining, undefined behavior, object-byte patch, comparator exception, or
compiler-flag override is used.
Strict production verification
The production object was rebuilt with XDK 3911 CL 13.00.9254.1 under the
configured libcmt flags /O1 /Gy /I"xbox/include". The fresh result is strict
exact:
| symbol | target | candidate | relocs | normalized SHA-256 |
|---|---|---|---|---|
_time |
56 B | 56 B | 2 / 2 | f481c71336d955df61673ad2844701121e93e39d9392cce86c4c261bfd870d7f |
Both relocations match in address, type, destination, and addend: +0x0a
targets _GetSystemTimeAsFileTime@4 + 0, and +0x29 targets
__aulldiv + 0. tools.coff_compare.section_infos_equal returned true. Both
objects contain one 56-byte .text COMDAT with identical flags, externally
owned by function symbol _time at offset zero; neither owns runtime data.
The candidate's other sections are ordinary compiler directives and debug
metadata.
The complete halobetacache_build and libcmt_build succeeded. A forced clean
rebuild again emitted the configured /O1 /Gy command and reproduced strict
equality, ruling out stale-object credit. The regenerated semantic audit
scanned 405 implemented units with zero unit errors and 3,381 accepted exact
functions. Progress reported 295/833 exact objects overall and 28/212 libcmt
objects; libcmt had 1,981/55,015 exact code bytes and 196/8,637 exact data
bytes at this lane's snapshot. The full tooling suite passed 179/179 tests.
After the atomic commit, the fail-closed per-unit regression manifest was
snapshotted and checked successfully with no failures, warnings, regressions,
ownership changes, or unexpected new matches. git diff --check and the final
scope/policy audit were also clean.
House/Berth audit
The implementation is ordinary readable C with its sole parameter on its own line and one explicit final return. It uses named typed members rather than raw structure offsets. No tag, datum, or object access is involved. No original January bug was found, so no bug-preservation comment is needed.