4.4 KiB
libs/libcmt/nlsdata2.obj exact-match ledger
This atomic lane reconstructs a previously unstarted CRT locale-data object on
a fresh worktree based on campaign commit 8df3ea9e. The source types and
layout are recovered from January plus the matching XDK 3911 archive member,
not inferred from symbol names alone.
Plain-English behavior
This object owns the CRT's process-wide locale state. It starts in the simple
"C" locale, represented by __lc_clike == 1. Six Windows locale handles, the
active code page, and the collation code page all begin at zero until locale
initialization fills them. The unit contains no executable code.
Primary provenance and target inventory
The January target owns:
- a four-byte
.datasection containing integer value 1, externally owned by___lc_clikeat offset zero; - a 32-byte
.bsssection, four-byte aligned and relocation-free, with___lc_handleat+0x00,___lc_codepageat+0x18, and___lc_collate_cpat+0x1c; - no
.textor target-owned.rdata.
The locally archived XDK 3911 libcmt.lib has SHA-256
60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55.
Its obj\i386\nlsdata2.obj member records source filename ..\nlsdata2.c,
compiler id 0x001c2426, and the same runtime sections, values, symbol offsets,
linkage, alignment, and relocation counts as January.
The member's CodeView records prove the source types: __lc_clike is signed
32-bit int (primitive type 0x74), __lc_codepage and __lc_collate_cp are
unsigned 32-bit int (0x75), and __lc_handle is an array record whose
element type is unsigned long (0x22) and whose total byte size is 0x18.
Thus the typed six-element declaration is evidence-backed rather than a raw
32-byte placeholder.
The XDK member also emits unrelated select-any XDK header tables in .rdata.
Those COMDAT definitions are header side effects, not symbols owned by the
January nlsdata2 target after link splitting. They must not be copied into
this source or credited as part of this object.
Source-shape experiment
The direct typed definitions are the only evidence-backed family:
int __lc_clike = 1;
unsigned long __lc_handle[6] = { 0 };
unsigned int __lc_codepage = 0;
unsigned int __lc_collate_cp = 0;
| ID | Source shape | Runtime measurement | Decision |
|---|---|---|---|
| E01 | Typed definitions in target symbol order | .data 4/4, .bss 32/32; zero relocations; all four aliases at the target offsets |
accepted: both owned sections strict-exact |
No packing, anonymous byte array, alignment directive, assembly, volatile,
undefined behavior, byte patch, compiler override, or comparator exception is
permitted or needed.
Strict production verification
The object was rebuilt, then force-cleaned and rebuilt again, with XDK 3911 CL
13.00.9254.1 and the configured libcmt flags
/O1 /Gy /I"xbox/include". Both builds produced the same strict result:
.data:4/4bytes,0/0relocations, SHA-25667abdd721024f0ff4e0b3f4c2fc13bc5bad42d0b7851d456d88d203d15aaa450;.bss:32/32bytes,0/0relocations, SHA-25666687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925;___lc_clike: external,.data+0x00;___lc_handle: external,.bss+0x00;___lc_codepage: external,.bss+0x18;___lc_collate_cp: external,.bss+0x1c.
section_infos_equal passes when the two sections are addressed through all
four symbols, so the result proves bytes, section sizes, relocation absence,
aliases, addends, and ownership. The candidate's .drectve and .debug$S
sections are normal compiler metadata and contain no January-owned runtime
state.
The complete halobetacache_build and libcmt_build both pass. progress
reports 304/833 objects overall, 267/468 Halo objects, and 37/212 libcmt
objects; this data-only admission raises matched libcmt data to 260/8637
bytes and correctly adds no function credit. The semantic audit scans 410
units, accepts 3,386 exact functions, and reports zero unit errors. All 179
tooling tests pass. The post-commit regression snapshot/check for
libs/libcmt/nlsdata2 passes with no failures or warnings; its function lists
are correctly empty because this object contains data only.
House/Berth audit
All runtime storage has recovered scalar or array types; no raw offsets or anonymous padding substitutes are used. Function-formatting rules do not apply because the unit has no functions. There is no original behavioral bug and no bug-preservation comment is needed.