fix(renaser): apagar debug-assertions/overflow-checks vía rustflags

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>
This commit is contained in:
sergio
2026-05-23 00:27:06 +00:00
parent 5edd8de917
commit 2ad11b53c3
3 changed files with 41 additions and 0 deletions
+22
View File
@@ -23,6 +23,28 @@ test = false
bench = false
doctest = false
# -----------------------------------------------------------------------------
# Perfiles. El kernel esta EXCLUIDO del workspace; los `[profile]` del raiz
# no le alcanzan, asi que se declaran aqui. En bare-metal, las verificaciones
# UB de la stdlib —`unchecked_mul::precondition_check`, etc.— inyectan un
# panico cuyo propio camino de propagacion suele escribir en regiones que el
# cargador no mapeo: un colapso DENTRO de la red de seguridad del colapso,
# imposible de diagnosticar. Desactivar `debug-assertions` y `overflow-checks`
# las saca del binario sin cambiar la semantica del codigo correcto.
# -----------------------------------------------------------------------------
[profile.dev]
panic = "abort"
debug-assertions = false
overflow-checks = false
[profile.release]
panic = "abort"
debug-assertions = false
overflow-checks = false
opt-level = "s"
lto = true
codegen-units = 1
[dependencies]
# --- Fase 1-2 :: arranque, framebuffer e interrupciones ---
bootloader_api = "0.11"