diff options
| author | blasty <blasty@local> | 2026-07-28 15:16:34 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-28 15:16:34 +0200 |
| commit | d1deca0826a9e04da195ba3eeb344cd18d38ea17 (patch) | |
| tree | 7e2d6a8504b1b138081a99924d45b80e730007d8 /experiments/fibonacci.o | |
| parent | trace: a step in split view moves the listing cursor to the pc (diff) | |
| download | ida-tui-d1deca0826a9e04da195ba3eeb344cd18d38ea17.tar.gz ida-tui-d1deca0826a9e04da195ba3eeb344cd18d38ea17.tar.xz ida-tui-d1deca0826a9e04da195ba3eeb344cd18d38ea17.zip | |
trace: stop the decompiler thrashing during a step (and correct the record)
I blamed decomp_map in the last commit. It was innocent: called directly it
returns 769 lines, 475 with addresses, for exactly the function I said it
returned four for. The four-line map belonged to a PLT stub the decompiler had
momentarily switched to, and I sampled mid-bounce.
The actual fault: _seek_split decided "has execution left the decompiled
function?" from _split_range, which is maintained by a guarded async path
(_apply_split_map drops its result if _cur moved while in flight) and therefore
lags during stepping. A stale range made every step look like a function change,
so the decompiler bounced main -> stub -> main, each bounce paying a synchronous
769-line map fetch on the UI thread.
Now the decision comes from the map the trail painting already holds, keyed to
what the decompiler currently HAS loaded. The bouncing is gone — three map
fetches across twelve steps instead of one per step — and the pseudocode cursor
follows every instruction the decompiler attributes to a line, including across
a call into another function.
What it does NOT do: guess. Roughly half of a function's instructions have no
line attributed, and the obvious fallback (nearest mapped address at or before
the pc) is unsound — C lines are not monotonic in address, and it put an
instruction early in main on line 708, "sub_2040();", near the end. The cursor
waits instead; the trail still marks where you are.
tests: +1 trace UI (26) — over ~28 steps, every instruction that IS mapped is
followed by the pseudocode cursor. 212/0 scenarios.
TODO corrected: the entry blaming decomp_map now says what actually happened,
including that _split_ea2line/_split_range are still fed by the laggy path and
remain a latent issue for the split view's own sync.
Diffstat (limited to 'experiments/fibonacci.o')
0 files changed, 0 insertions, 0 deletions
