[DynInst_API:] [dyninst/dyninst] 2a2c31: parseAPI: avoid duplicate edges on delayed indirec...


Date: Tue, 23 Jun 2026 12:11:58 -0700
From: bbiiggppiigg <noreply@xxxxxxxxxx>
Subject: [DynInst_API:] [dyninst/dyninst] 2a2c31: parseAPI: avoid duplicate edges on delayed indirec...
  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
[← Prev in Thread] Current Thread [Next in Thread→]
  • [DynInst_API:] [dyninst/dyninst] 2a2c31: parseAPI: avoid duplicate edges on delayed indirec..., bbiiggppiigg <=