Repository navigation
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical flaws allow guest modification of executable trampoline code and debugger memory corruption, while breakpoint cleanup and snapshot-ordering issues can leave sandboxes unrecoverable.
5 open issues
Split memory operations at guest page boundaries · New Make the cache-sync trampoline guest read/execute only · New Recheck for breakpoints after snapshot checkpoint interaction · New Clear breakpoint bookkeeping when crash detach cannot restore instructions · New Reconcile breakpoints when restoring a cancelled sandbox · New
What changed in this PR
Adds ARM64 guest debugging on Linux/KVM, alongside the shared debugger infrastructure and Windows/WHP support from #1907.
Changes:
- Supports ARM64 register and memory access, software and hardware breakpoints, and hardware single-step.
- Adds instruction-cache synchronization, debug-state preservation across reset, and snapshot safeguards.
- Adds debugger tests and documents platform capabilities.
| File | Description |
|---|---|
src/hyperlight_host/src/sandbox/uninitialized_evolve.rs |
Initializes ARM64 debug vectors during VM setup. |
src/hyperlight_host/src/sandbox/snapshot/memory/backing.rs |
Exposes backing ranges for cache synchronization. |
src/hyperlight_host/src/sandbox/initialized.rs |
Guards snapshots and restores against active software breakpoints. |
src/hyperlight_host/src/mem/mgr.rs |
Exposes checked host memory ranges to the debugger. |
src/hyperlight_host/src/mem/exe.rs |
Carries debug-vector addresses in load metadata. |
src/hyperlight_host/src/mem/elf.rs |
Finds and relocates the debug-vector symbol. |
src/hyperlight_host/src/hypervisor/virtual_machine/whp/x86_64.rs |
Adapts address translation to the shared interface. |
src/hyperlight_host/src/hypervisor/virtual_machine/whp/aarch64.rs |
Implements WHP debugging, cache synchronization, and tests. |
src/hyperlight_host/src/hypervisor/virtual_machine/mshv/x86_64.rs |
Adapts address translation to the shared interface. |
src/hyperlight_host/src/hypervisor/virtual_machine/mod.rs |
Adds ARM64 debug exits and initialization errors. |
src/hyperlight_host/src/hypervisor/virtual_machine/kvm/x86_64.rs |
Adapts address translation to the shared interface. |
src/hyperlight_host/src/hypervisor/virtual_machine/kvm/aarch64.rs |
Implements KVM debugging and active-stack-pointer handling. |
src/hyperlight_host/src/hypervisor/regs/aarch64/whp_reg.rs |
Defines WHP debug register identifiers. |
src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs |
Uses shared debugger handling and breakpoint storage. |
src/hyperlight_host/src/hypervisor/hyperlight_vm/mod.rs |
Integrates ARM64 stops, stepping, and mapping safeguards. |
src/hyperlight_host/src/hypervisor/hyperlight_vm/debug.rs |
Provides shared requests and software-breakpoint lifecycle handling. |
src/hyperlight_host/src/hypervisor/hyperlight_vm/aarch64.rs |
Connects ARM64 VM setup and execution to GDB. |
src/hyperlight_host/src/hypervisor/gdb/target.rs |
Adds ARM64 register conversion to the shared target. |
src/hyperlight_host/src/hypervisor/gdb/mod.rs |
Adds page-table translation and cache-flush support. |
src/hyperlight_host/src/hypervisor/gdb/event_loop.rs |
Reports ARM64 initial stops to GDB. |
src/hyperlight_host/src/hypervisor/gdb/arch/x86_64.rs |
Houses x86 breakpoint constants and stop classification. |
src/hyperlight_host/src/hypervisor/gdb/arch/aarch64.rs |
Defines ARM64 software breakpoints and alignment checks. |
src/hyperlight_host/src/hypervisor/gdb/arch.rs |
Selects architecture-specific debugger helpers. |
src/hyperlight_host/examples/guest-debugging/main.rs |
Adds ARM64 breakpoint, stepping, and code-write integration tests. |
src/hyperlight_host/build.rs |
Enables GDB for supported ARM64 platforms. |
src/hyperlight_guest_bin/src/arch/aarch64/exception/entry.rs |
Exports debug vectors and forwards synchronous exceptions. |
src/hyperlight_common/src/arch/aarch64/exn.rs |
Defines the shared debug-exception HVC immediate. |
docs/how-to-debug-a-hyperlight-guest.md |
Documents ARM64 capabilities and guest-symbol requirements. |
CHANGELOG.md |
Records Linux/KVM and Windows/WHP ARM64 debugging support. |
Review effort: Balanced
This comment has been minimized.
This comment has been minimized.
a60be9b to
55da94f
Compare
This comment has been minimized.
This comment has been minimized.
55da94f to
2418379
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
a26c2d9 to
11361ca
Compare
This comment has been minimized.
This comment has been minimized.
11361ca to
4849110
Compare
This comment has been minimized.
This comment has been minimized.
4849110 to
5ddde64
Compare
3f280ae to
859ef39
Compare
This comment has been minimized.
This comment has been minimized.
Architecture adapters, software breakpoints, page-sized memory access and recovery handling are shared by backend layers. Guest debug vectors and common tests support ARM64. Backend layers control platform enablement. The commit-layer document defines dependencies and shared-update validation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: cshung <3410332+cshung@users.noreply.github.com>
KVM debug exits provide hardware breakpoints and single-step. Register access respects the active stack pointer. Native ARM64 GDB tests run in debug CI. Shared debugger behavior belongs to the parent commit. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: cshung <3410332+cshung@users.noreply.github.com>
859ef39 to
68a8704
Compare
Benchmark ResultsMeasured commit: kvm / amd (Linux) (➖ stable)No benchmark improved or regressed. Benchmark Resultsfunction_call_codec
payload_allocation
sandboxes
slot_pool
snapshot_files
virtq_readonly
virtq_readwrite
kvm / intel (Linux) (➖ stable)No benchmark improved or regressed. Benchmark Resultsfunction_call_codec
payload_allocation
sandboxes
slot_pool
snapshot_files
virtq_readonly
virtq_readwrite
mshv3 / amd (Linux) (➖ stable)No benchmark improved or regressed. Benchmark Resultsfunction_call_codec
payload_allocation
sandboxes
slot_pool
snapshot_files
virtq_readonly
virtq_readwrite
mshv3 / intel (Linux) (➖ stable)No benchmark improved or regressed. Benchmark Resultsfunction_call_codec
payload_allocation
sandboxes
slot_pool
snapshot_files
virtq_readonly
virtq_readwrite
hyperv-ws2025 / amd (Windows) (➖ stable)No benchmark improved or regressed. Benchmark Resultsfunction_call_codec
payload_allocation
sandboxes
slot_pool
snapshot_files
virtq_readonly
virtq_readwrite
hyperv-ws2025 / intel (Windows) (➖ stable)No benchmark improved or regressed. Benchmark Resultsfunction_call_codec
payload_allocation
sandboxes
slot_pool
snapshot_files
virtq_readonly
virtq_readwrite
Reported by |


ARM64 Linux KVM GDB
KVM guests support register and memory access, two hardware breakpoints,
BRK software breakpoints, and hardware single-step.
KVM reports debug stops through
KVM_EXIT_DEBUG.Debug state survives vCPU reset, and register access respects the active stack pointer.
Commit layers
This PR is C, one KVM-specific commit above shared support A in #2050.
WHP support in #1907 is an independent sibling, not a prerequisite.
KVM-only comparison.
Shared page-table translation, guest-page-sized memory access, snapshot
recovery, cancellation and crash-detach handling belong to #2050.
This layer contains KVM integration, platform enablement and native GDB CI.
The graph and update rules are in
docs/gdb-commit-layers.md.The full PR diff includes the unmerged shared prerequisite.
Validation
just testrecipe, 26 debugger/backend tests and seven real GDB client tests.real GDB client tests. Native KVM ARM64 runtime tests were not repeated for these
shared fixes.
Pi validation uses a separate, uncommitted ARMv8.0 allocator fix and guests built
with
RUSTFLAGS="-C target-feature=-lse". Pi compatibility changes are outside this PR.