• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

vbpf / prevail / 26423712581

25 May 2026 11:22PM UTC coverage: 86.431% (-0.008%) from 86.439%
26423712581

push

github

elazarg
Restore callee-saved registers via rename to preserve zone edges

When a local call returns, the old restore logic used individual
assign+havoc operations to move saved register values back. Each
assign could lose zone relationships (via the singleton shortcut in
ZoneDomain::assign), destroying edges between loop counters and
callee-saved registers.

Replace the restore with a bulk rename: relabel the frame variables
back to register names in both ZoneDomain (vert_map/rev_map swap)
and TypeDomain (VarIdMap swap). The SplitDBM graph is untouched —
all zone edges survive, including counter relationships.

The save remains a copy (assign), not a rename, so that the callee
can still read the caller's r6-r9 per the BPF calling convention.
Also remove the is_top() skip in save — a variable can have useful
zone edges (relational constraints) even when its interval is top.

Fixes #1119, related to #670.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: Elazar Gershuni <elazarg@gmail.com>

53 of 59 new or added lines in 7 files covered. (89.83%)

8956 of 10362 relevant lines covered (86.43%)

6820297.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.09
/src/crab/ebpf_transformer.cpp


Source Not Available

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc