Branch: refs/heads/bbiiggppiigg/fix-duplicate-indirect-edges
Home: https://github.com/dyninst/dyninst
Commit: 8152193d8a6e7fdb0b3606ce97812192670a7d70
https://github.com/dyninst/dyninst/commit/8152193d8a6e7fdb0b3606ce97812192670a7d70
Author: wuxx1279 <bbiiggppiigg@xxxxxxxxx>
Date: 2026-06-19 (Fri, 19 Jun 2026)
Changed paths:
M parseAPI/src/Parser.C
Log Message:
-----------
parseAPI: avoid duplicate edges on delayed indirect jumps
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
|