Die .meta_safe Sektion ist eine spezialisierte Datenstruktur innerhalb der ELF64-Binärdatei, die vom Lyx-Compiler (v0.9.0+) automatisch erzeugt wird, wenn eine Unit mit @integrity annotiert ist. Sie dient als vertrauenswürdige Referenz für die Hardware-Fehlertoleranz und den TMR-Abstimmungsmechanismus.
Die Sektion hat eine feste Größe von 8232 Bytes. Sie ist so entworfen, dass die kritischen CRC32-Hashes durch physikalisches Padding (4096 Bytes, entsprechend einer typischen Memory-Page) getrennt sind, um die Auswirkungen lokaler Hardware-Defekte zu minimieren.
| Offset (Byte) | Feld | Typ | Beschreibung |
|---|---|---|---|
| 0..7 | code_start_va | uint64 LE | Start-Virtual-Address des geschützten Code-Segments. |
| 8..15 | code_end_va | uint64 LE | End-Virtual-Address des geschützten Code-Segments. |
| 16..19 | mode | uint32 LE | Integritätsmodus (1=lockstep, 2=scrubbed, 3=hw_ecc). |
| 20..23 | interval_ms | uint32 LE | Prüfintervall in Millisekunden. |
| 24..31 | recovery_ptr | uint64 LE | Adresse einer Recovery-Routine (0 = nicht gesetzt). |
| 32..35 | hash_copy_1 | uint32 LE | Erster CRC32 IEEE 802.3 Hash des Codes. |
| 36..4127 | Padding | 4092 B | Null-Bytes zur physikalischen Trennung. |
| 4128..4131 | hash_copy_2 | uint32 LE | Zweite, identische Kopie des Hashes. |
| 4132..8223 | Padding | 4092 B | Null-Bytes zur physikalischen Trennung. |
| 8224..8227 | hash_copy_3 | uint32 LE | Dritte, identische Kopie des Hashes. |
| 8228..8231 | Padding | 4 B | Abschluss-Padding. |
Durch die Speicherung von drei identischen Kopien an weit auseinanderliegenden Offsets implementiert Lyx ein statische TMR:
.meta_safe noch korrekt sind, kann eine Korruption im RAM oder in einer der Hash-Kopien selbst zweifelsfrei erkannt werden.Da der CRC32-Hash den finalen Maschinencode abbilden muss, folgt der Compiler einem speziellen Ablauf:
.meta_safe Sektion wird zunächst mit Platzhaltern angelegt.
Die Sektion wird primär durch das Builtin VerifyIntegrity() ausgewertet:
@integrity(mode: scrubbed, interval: 100)
unit;
fn check_startup() {
if (VerifyIntegrity()) {
PrintStr("ELF .meta_safe verified.\n");
}
}