[DynInst_API:] [dyninst/dyninst] ae0832: common: fix IBSTree_fast::successor assert on coin...


Date: Fri, 12 Jun 2026 17:58:51 -0700
From: bbiiggppiigg <noreply@xxxxxxxxxx>
Subject: [DynInst_API:] [dyninst/dyninst] ae0832: common: fix IBSTree_fast::successor assert on coin...
  Branch: refs/heads/bbiiggppiigg/faster-getgaprange
  Home:   https://github.com/dyninst/dyninst
  Commit: ae083283867450f2ef0261d2e3ca4db8d3b7e7b1
      https://github.com/dyninst/dyninst/commit/ae083283867450f2ef0261d2e3ca4db8d3b7e7b1
  Author: wuxx1279 <bbiiggppiigg@xxxxxxxxx>
  Date:   2026-06-12 (Fri, 12 Jun 2026)

  Changed paths:
    M common/h/IBSTree-fast.h

  Log Message:
  -----------
  common: fix IBSTree_fast::successor assert on coincident-start intervals

IBSTree_fast::successor() called the overlapping-interval tree's scalar
IBSTree::successor(X), which asserts the successor of a point is unique
(out.size() <= 1). That holds for the original caller, blocksByRange (basic
blocks have unique start addresses), but not in general: intervals can share
a start address -- e.g. FuncExtents of identical-code-folded or aliased
functions begin at the same address. When getGapRange() began querying
funcsByRange.successor() during speculative gap parsing, such a coincident
start made the overlapping tree return >1 candidate and aborted the rewrite
(observed on an ICF-heavy shared library; data-dependent, hence latent).

Use the set-returning overlapping_intervals.successor(X, set) and keep the
smallest-low() candidate. That is the true successor and collapses any
coincident-start ties to a single result, so the scalar IBSTree_fast wrapper
still sees at most one. No behavior change for unique-start trees (the set
has <= 1 element); blocksByRange/get_next_block is unaffected.

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] ae0832: common: fix IBSTree_fast::successor assert on coin..., bbiiggppiigg <=