Skip to content

system2 codegen: access violation (si_addr=0x5) para todos los targets — bloquea M4 #1

@anlaco

Description

@anlaco

Rama

rsc2-x64

Estado actualizado (2026-05-01)

El crash original de si_addr=0x5 está resuelto con el commit 29176bb6a. Los bugs encontrados y corregidos en esta sesión:

Bugs corregidos

  1. process-loop-liveness — doble bug en iteración de livepoints (crash principal):

    • cg/livepoints se creaba con vector/make 3*size? int-ptr! 10 (obj-sz=12 bytes/elemento)
    • process-loop-liveness iteraba con loop v/length pero cada iteración retrocedía 3 punteros (12 bytes), dando 3 × v/length retrocesos en vez de v/length / 3 grupos
    • Corrección: ptr-vector/make 30 (obj-sz=4) + loop (v/length / 3)
  2. x64_REG_ALL (índice 39) sin registrar — el slot 39 del ptr-array de reg-sets estaba null. Al hacer kill cg x64_REG_ALL, choose-reg hacía ptr-array/pick regs 39 → null → crash en iteración posterior.

  3. Literales negativos tipados como 64-bit en x64parser.reds:1055 usaba target/int-type (64-bit en AMD64) para literales negativos. Globales como stdout: -1 adquirían tipo int64, incompatible con funciones que esperan integer! (32-bit).

Siguiente bloqueante: prin-2hex duplicado en lib-natives.reds

Actualmente (antes de que la compilación de hello.reds llegue a la fase de linkado/ELF):

$ ./red -c -t Linux-64 system2/tests/x64/hello.reds
*** Compilation Error: undefined symbol2: prin-2hex
*** at line: 52 (utils.reds)

prin-2hex está definido en lib-natives.reds línea ~151 pero el runtime extraído en ~/.red/.rs-runtime/ puede tener una versión desactualizada. Pasos para resolver:

  1. ./console system2/merge-runtime.red — regenerar rs-runtime.red
  2. ./rebol-core/rebol -qws red.r -r red.red — re-bootstrap
  3. Si sigue fallando, verificar si hay conflicto de nombre en el orden de includes

Una vez resuelto prin-2hex, el camino está libre hasta el linkado (ELF64).

Contexto

  • Commits de esta sesión: 29176bb6a (FIX crashes + type system + stubs)
  • Los 3 bugs descritos arriba bloqueaban TODO target (MSDOS, Linux-64, etc.), no solo Linux-64
  • M3 (runtime, #syscall, _start) está completo
  • El fix del crash desbloquea el camino hacia el hello world ejecutable

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions