2ad11b53c3
Era la causa raíz del «pantalla negra + franja roja» en máquinas con nightlies recientes (laptops, KVM, etc.) que mi Proxmox no exhibía: - En modo debug, la stdlib inyecta `<usize>::unchecked_mul::precondition_check` en cada `unchecked_mul` (RawVec::current_memory, in_place_collect…). - El camino de pánico de ese check, en bare-metal, escribe en regiones que el cargador no mapeó → #PF → al panic handler del kernel, que pinta la franja roja: un colapso DENTRO de la red de seguridad del colapso. - 1202 callsites en el binario debug — uno fallaba en la laptop del usuario. El fix: `rustflags = ["-Cdebug-assertions=off", "-Coverflow-checks=off"]` en `[target.x86_64-unknown-none]` de `.cargo/config.toml`. Los `[profile]` del manifiesto no propagaban a las deps precompiladas (wasmi, virtio- drivers, etc., que se quedan como artifact-deps fuera del workspace); `rustflags` por target sí. Tras un `cargo clean` + rebuild, cero llamadas a precondition_check, y el boot trace por COM1 corre completo. También: `[profile.dev]`/`[profile.release]` del kernel y workspace declaran los flags explícitamente, por si alguna ruta de cargo cambia. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
35 lines
1.9 KiB
TOML
35 lines
1.9 KiB
TOML
# =============================================================================
|
|
# renaser :: configuracion de cargo
|
|
# -----------------------------------------------------------------------------
|
|
# El kernel se compila contra el target NATIVO precompilado `x86_64-unknown-none`
|
|
# (bare-metal, soft-float, sin SSE). No hay JSON propio ni `build-std`: cero
|
|
# burocracia del compilador, aislamiento de arquitectura sin friccion.
|
|
# =============================================================================
|
|
|
|
[unstable]
|
|
# Dependencias de artefacto (RFC 3028): permiten que el miembro `boot` ordene a
|
|
# cargo compilar el kernel para `x86_64-unknown-none` de forma automatica y
|
|
# reciba la ruta de su ELF. Sigue siendo una funcion inestable (nightly).
|
|
bindeps = true
|
|
|
|
# Banderas para TODA crate que se compile hacia `x86_64-unknown-none` (el
|
|
# target bare-metal del kernel). Apagar `debug-assertions` y `overflow-checks`
|
|
# elimina las `unchecked_mul::precondition_check` que la stdlib inyecta en
|
|
# debug — son verificaciones cuyo propio camino de panico, en bare-metal,
|
|
# escribe en regiones que el cargador no mapeo: un colapso DENTRO de la red
|
|
# de seguridad del colapso. Los `[profile]` no llegaban a las dependencias
|
|
# precompiladas; `rustflags` por target si lo hace.
|
|
[target.x86_64-unknown-none]
|
|
rustflags = ["-Cdebug-assertions=off", "-Coverflow-checks=off"]
|
|
|
|
[alias]
|
|
# Compila unicamente el kernel, en aislamiento de arquitectura. Se invoca por
|
|
# `--manifest-path` y NO por `-p kernel`: desde la Fase 7b el kernel y `boot`
|
|
# comparten la crate `formato`, y pedir `-p kernel` dentro del workspace —con
|
|
# el kernel a la vez como dependencia de artefacto— hace caer al resolvedor de
|
|
# features de cargo. Apuntar al manifiesto del kernel lo compila como raiz, sin
|
|
# rozar el grafo de artifact-deps.
|
|
kernel = "build --manifest-path kernel/Cargo.toml --target x86_64-unknown-none"
|
|
# Construye la imagen UEFI y abre QEMU (equivale a `cargo run -p boot`).
|
|
qemu = "run -p boot"
|