5.8 KiB
thread_win32.obj exact-match strategy ledger
Scope and required toolchain
- Translation unit:
source/bungie_net/common/thread_win32.c - Target: January 2002
thread_win32.obj - Compiler: XDK 3911 CL 13.00.9254.1
- Flags:
/O2 /Oy- /DDEBUG /Dxbox - Strict gate:
tools/coff_compare.pyand whole-object data/ownership checks - Detailed historical analysis:
CREATE_THREAD_TIE_ANALYSIS.md
Current validated baseline
Seven of nine functions are strict exact:
| Function | Target/base size | Target/base relocs | Result |
|---|---|---|---|
code_0006fc30 |
48/48 | 2/2 | exact |
code_0006fc60 |
64/64 | 3/3 | code bytes exact; strict relocation-owner alias differs |
create_thread |
240/240 | 14/14 | nonexact; one underlying NULL-store codegen site |
thread_has_exited |
80/80 | 5/5 | exact |
dispose_thread |
112/112 | 9/9 | exact |
create_mutex |
144/144 | 10/10 | exact |
take_mutex |
96/96 | 5/5 | exact |
release_mutex |
64/64 | 5/5 | exact |
dispose_mutex |
112/112 | 9/9 | exact |
_bss_0031c728 is a defined, exact 1,544-byte BSS section. The current source
uses = { 0 } deliberately so the symbol belongs to this translation unit
instead of becoming a COMMON symbol.
code_0006fc60 residual
The normalized code hash, size, and relocation count are identical. The only strict difference is the one-past mutex-array relocation:
- target:
_bss_0031cd30 + 36 - candidate:
_bss_0031c728 + 1580
Both resolve to the same address, but the strict comparator conservatively refuses the ownership/alias mismatch. No exact credit is claimed.
create_thread residual
The target and candidate are identical through offset 0xD9. The sole
underlying difference is the priority/resume-failure output store:
target: xor eax,eax; mov [ebx],eax
candidate: mov dword ptr [ebx],0
The two-byte encoding-length difference shifts the following epilogue bytes. All 14 relocation identities remain exact.
Accepted source controls
- A distinct
unsigned long thread_idlocal preserves the measured January register allocation aroundCreateThread. _ReadWriteBarrier()immediately after the inlined reference allocator is a zero-byte compiler intrinsic that preserves the January join topology.- The function, assertions, API calls, priority mapping, return behavior, and preserved slot-leak bugs are reconstructed and documented in source.
create_mutexuses a single-result/shared-write source shape that is strict exact and serves as the two-live-value NULL-output donor.
Rejected or exhausted source families
Approximately 180 measured legal-C variants are catalogued in
CREATE_THREAD_TIE_ANALYSIS.md. Do not repeat them. They include:
- single-write, split-write, nested, ternary,
goto, and multi-return layouts; - all tested placements of
_ReadWriteBarrier,_ReadBarrier, and_WriteBarrier; - 24 declaration orders,
register, value-copy, output-local, and thread-ID spellings; - inlined allocator loop rewrites; and
- diagnostic pragma/flag probes, none retained.
Two additional forced-inline helper families were measured on 2026-07-28:
| Experiment | Target/base size | Relocs | Base normalized hash | Outcome |
|---|---|---|---|---|
| forced-inline helper couples output store and boolean return | 240/240 | 14/14 | f6340b3e...00341 |
byte-identical to baseline; rejected |
| forced-inline void helper performs only the output store | 240/240 | 14/14 | f6340b3e...00341 |
byte-identical to baseline; rejected |
Both experiments were fully reverted; the tracked source hashes exactly to HEAD afterward.
Provenance and compiler audit
- Every locally present XDK compiler set examined has the same hashes for
C1.dll,C1xx.dll,C2.dll, andCL.Exe; no alternate local QFE exists. - The HCEA prototype PDB contains
create_threadwith parametersflags,function,function_input, andthread_reference, plus the localunused_thread_id. This corroborates the source lineage and local role. - The later HCEA body is not a January donor: it stores the selected reference
immediately after
CreateThreadand does not clear the output on the priority/resume failure path. - No public or local exact C donor with the full three-live-pointer plus register-zero NULL-output topology has been found.
The remaining compiler-QFE explanation is therefore unproven. The accurate classification is an exhausted compiler register/materialization tie under current source knowledge, not proof of a different compiler binary.
Do-not-repeat list
- Do not retry barrier placement, declaration permutations, shared/split
output writes, ternaries,
gotolayouts,register, allocator-loop rewrites, or inline output helpers. - Do not use inline assembly, volatile byte forcing, undefined behavior, object-byte patches, or compiler-flag changes.
- Do not transplant the later HCEA control flow as January-authoritative.
- Do not accept the
code_0006fc60address-equivalent relocation alias as strict exact without a separately reviewed ownership rule.
Reopen criteria
Reopen only if at least one of these appears:
- January source/debug provenance reveals a genuinely new control-flow or declaration topology.
- A strict-exact donor has three live pointer-like values and a distinct register-zero NULL-output exit.
- A different authentic Bungie-era 13.00.9254 compiler binary improves the unchanged source.
- A newly demonstrated legal-C control is not represented in the exhausted matrix above.
- A conservative, general COFF ownership proof can equate the
code_0006fc60relocation aliases without admitting false positives.
Current disposition
The reconstructed checkpoint is valuable and buildable, but
thread_win32.obj is not complete and must not be marked Matching. Park the
two residuals with this ledger until a reopen criterion is satisfied.