Branch: refs/heads/master
Home: https://github.com/dyninst/dyninst
Commit: 2a2c3103c3bbf06c4c98c019b5646ea4f407307f
https://github.com/dyninst/dyninst/commit/2a2c3103c3bbf06c4c98c019b5646ea4f407307f
Author: bbiiggppiigg <bbiiggppiigg@xxxxxxxxx>
Date: 2026-06-23 (Tue, 23 Jun 2026)
Changed paths:
M parseAPI/src/Parser.C
Log Message:
-----------
parseAPI: avoid duplicate edges on delayed indirect jumps (#2299)
When a block ends in an indirect jump (e.g. AMDGPU s_setpc_b64), the
parser defers jump-table resolution by pushing a resolve_jump_table work
element. Unlike the direct-CFT path, the indirect path ignored the
return value of set_edge_parsing_status().
When several overlapping blocks end at the same indirect-jump address,
only the first claims the edge; the rest are split to fall through into
that canonical block. But each colliding block still pushed its own
resolve work, and ProcessCFInsn always re-attaches the resolved edge to
the canonical block (cur = a->second.b). The result was one duplicate
sink edge per collision (e.g. s_setpc_b64 repeated 5 times at 0x14c70).
Respect set_edge_parsing_status() in the indirect path, matching the
direct path: only the block that owns the edge pushes the resolve work.
Co-authored-by: Claude Opus 4.8 <noreply@xxxxxxxxxxxxx>
To unsubscribe from these emails, change your notification settings at https://github.com/dyninst/dyninst/settings/notifications
|