Skip to content

RS4GC: 02_survivor_promotion segfaults under forced evacuation on aarch64-ELF #7392

Description

@proggeramlug

Split out of #7390, which fixed the two compile failures that were masking this.

State after #7390

The native-roots-rs4gc (ubuntu-24.04-arm, aarch64, ELF) arm now gets much further:

Wrote executable: /tmp/rs4gc-01_nursery_churn      ← compiles AND runs
#gcmetric heap_used_bytes=9728392                  ← collector reported
Wrote executable: /tmp/rs4gc-02_survivor_promotion ← compiles AND links
Segmentation fault (core dumped)  PERRY_RS4GC=1 PERRY_GC_FORCE_EVAC…

Before #7390 the arm could not compile a single module, so this crash had never been reachable. It is not a toolchain gap — it is a GC correctness bug in statepoint lowering, in exactly the mode the arm exists to test.

Why 02_survivor_promotion specifically

The probe exercises the promotion path under PERRY_GC_FORCE_EVACUATE, so the likely shape is a root the statepoint lowering fails to relocate across a promoting collection — as opposed to the plain nursery evacuation that 01_nursery_churn survives.

The question worth answering first

macOS aarch64 uses the same statepoint lowering. If this were lowering-generic it should fail there too. So either:

  • it is ELF-specific (different frame layout, different register allocation), or
  • the macOS arm has never actually run this probe

Given this repo's recent record of arms that queue and never execute (three of the four RS4GC arms have sat pending on every run I checked today), the second possibility needs ruling out by evidence rather than assumption. That check is cheap and should come before any lowering investigation.

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions