Skip to content

Memory Additional Table Lifetimes

Codex edited this page Oct 10, 2026 · 1 revision

Additional table sizes and data lifetimes

Merged main d4350b60, reconstructed release64 tree 1277f2b7bf45a0992ef56d45d55815396d46ac8d. Eleven additional global bodies total 2,996 bytes; four additional structure bodies are overlapping type descriptions. With the earlier proofs this provides 59 exact global/table sizes and eight structure-body sizes. No firmware, test procedure or rig was changed.

Actual sizeof constants were emitted from copied production translation units with their recorded release64 compiler flags, disabling LTO only to retain the constants. Linked addresses come from the unchanged shipped image. Existing align annotations generated ignored-attribute warnings in the measured IDE/sized-data copies; these results prove body size, not requested or actual alignment.

Object Exact bytes Linked placement or type Measurement translation unit Lifetime / reduction boundary
XeEventTable 512 .bss at 0x84060700 ntoskrnl/xb/xbe.c 64 public-handle/event pairs; live create/lookup/close operations. Not a boot-only array.
XBE_EVENT_ENTRY 8 Type only ntoskrnl/xb/xbe.c One handle/event pair; embedded 64 times in XeEventTable. Do not add a second allocation charge.
HalpIDTUsageFlags 256 .bss at 0x8405f820 hal/halx86/generic/usage.c 256 one-byte vector flags. Registration/translation consumers and any linked reporting loops must be bounded before shrinking.
HalpIDTUsage 512 .bss at 0x8405f620 hal/halx86/generic/usage.c 256 two-byte vector records. Same admission/reporting constraint; shares pages with live data.
IDTUsageFlags 1 Type only hal/halx86/generic/usage.c One flag-byte element; already included in the array charge.
IDTUsage 2 Type only hal/halx86/generic/usage.c One two-byte element; already included in the array charge.
HalpSpecialDismissTable 64 .data at 0x840525c0 hal/halx86/pic/pic.c 16 live PIC dispatch pointers, changed when interrupt mode changes; must stay writable.
HalpSpecialDismissLevelTable 64 .rdata at 0x840577e0 hal/halx86/pic/pic.c 16 level-mode dispatch pointers with readonly runtime use in the audited source, copied into the writable table; eligible only for qualified readonly backing.
IopFileMapping 16 .rdata at 0x84053a80 ntoskrnl/io/iomgr/iomgr.c Public/internal generic file access mapping; 16 bytes, not its 224-byte next-symbol span.
DesSBox 512 .rdata at 0x840558c0 ntoskrnl/xb/crypto.c 8 × 64 immutable substitution bytes used by runtime DES operations; not demonstrated unused.
IdexChannelObject 264 .bss at 0x840625c0 ntoskrnl/xb/ide.c Public mutable storage channel ABI with live queue/interrupt/timer/completion state.
NX_IDE_CHANNEL 264 Type only ntoskrnl/xb/ide.c Structure type of IdexChannelObject; same 264-byte body, not an additional global.
NxkEepromImage 256 .bss at 0x84063820 ntoskrnl/xb/eeprom.c Mutable 256-byte EEPROM image used for query/update and checksum operations.
XboxAlternateSignatureKeys 256 .bss at 0x84064a40 ntoskrnl/xb/titlekeys.c Sixteen per-title 16-byte keys; initialized for each title, exported mutable data.
XePublicKeyData 284 .bss at 0x840648a0 ntoskrnl/xb/sizeddata.c 284-byte exported compatibility body. Zero contents do not establish safe deletion: clients may read its specified extent.

Where inferred intervals were misleading

HalpSpecialDismissLevelTable is 64 bytes, while the next-symbol interval was 288 bytes. IopFileMapping is 16 bytes, while its next-symbol interval was 224 bytes. The 224- and 208-byte differences contain intervening anonymous content/alignment; they are not recovered memory and cannot be assigned to the named objects. These corrections are why the inventory distinguishes exact body size from enclosing address spans.

The new global extents were checked for nonoverlap against every existing compiler extent and sizeof proof. Together they raise proved resident content from 364,007 to 367,003 bytes, leaving 36,253 bytes unresolved inside the same 403,256-byte resident section content. Physical backing remains 102 pages / 408 KiB. More attribution does not itself reduce RAM.

Fixed-platform specialization has a correctness prerequisite

The 256-entry usage arrays retain 768 bytes. A 64-entry representation would retain 192 bytes, a 576-byte declaration-level difference, provided all writers and reporting loops use the new domain. That is not a demonstrated page saving. The owned vector audit found translation and connect paths that can currently admit vectors outside the installed 64-entry IDT. Shrinking the arrays or extra stubs before correcting those admission boundaries would be unsafe. See Memory-Interrupt-Vector-Lifetimes.

Evidence

further-sizeof.json retains actual compiler commands, defining-source SHA and linked locations; the corresponding copied sources and emitted assembly stay in the local lab. cache-offset-proof.json additionally records nine exact offsets in NXC_BLOCK, used to identify runtime cache ownership in Memory-Allocation-Object-Ledger. Type sizes and dynamic instances must not be added to static backing a second time.

The IDTUsageFlags and IDTUsage declarations come from hal/halx86/include/halp.h:189–198; their measurement translation unit is generic/usage.c. Reporting helpers are INIT-placed; source presence alone does not prove a resident reporting consumer. The level-dismiss pointer array is not declared const, despite its linked readonly section and no runtime writes found in this audit.

SpiritBoot reference

Internal contracts

BIOS sizes and layouts

Resident memory research

Retail 5838 and current main sizing update — 2026-10-10

Memory removal workbook and kernel overhaul

Clone this wiki locally