aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Support/Windows/Jobserver.inc
diff options
context:
space:
mode:
authorMed Ismail Bennani <ismail@bennani.ma>2026-02-02 19:12:35 -0800
committerGitHub <noreply@github.com>2026-02-03 03:12:35 +0000
commitc373d7632ac1fe8374b7f2b9536d7e746ed24786 (patch)
treec17e0876fe17b9d7f6c47dfb9dc61694ec070dcd /llvm/lib/Support/Windows/Jobserver.inc
parent6d52d2683c2ceb9ab75810730c3ced2509c32bc5 (diff)
downloadllvm-main.zip
llvm-main.tar.gz
llvm-main.tar.bz2
[lldb] Fix variable access in old SBFrames after inferior function calls (#178823)HEADmain
When a user holds an SBFrame reference and then triggers an inferior function call (via expression evaluation or GetExtendedBacktraceThread), variables in that frame become inaccessible with "register fp is not available" errors. This happens because inferior function calls execute through ThreadPlanCallFunction, which calls ClearStackFrames() during cleanup to invalidate the unwinder state. ExecutionContextRef objects in the old SBFrames were tracking StackFrameLists via weak_ptr, which became stale when ClearStackFrames() created new instances. The fix uses stable StackFrameList identifiers that persist across ClearStackFrames(): - ID = 0: Normal unwinder frames (constant across all instances) - ID = sequential counter: Scripted frame provider instances ExecutionContextRef now stores the frame list ID instead of a weak_ptr, allowing it to resolve to the current StackFrameList with fresh unwinder state after an inferior function call completes. The Thread object preserves the provider chain configuration (m_provider_chain_ids and m_next_provider_id) across ClearStackFrames() so that recreated StackFrameLists get the same IDs. When providers need to be recreated, GetStackFrameList() rebuilds them from the persisted configuration. This commit also fixes a deadlock when Python scripted frame providers call back into LLDB during frame fetching. The m_list_mutex is now released before calling GetFrameAtIndex() on the Python scripted frame provider to prevent same-thread deadlock. A dedicated m_unwinder_frames_sp member ensures GetFrameListByIdentifier(0) always returns the current unwinder frames, and proper cleanup in DestroyThread() and ClearStackFrames() to prevent modules from lingering after a Thread (and its StackFrameLists) gets destroyed. Added test validates that variables remain accessible after GetExtendedBacktraceThread triggers an inferior function call to fetch libdispatch Queue Info. rdar://167027676 Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
Diffstat (limited to 'llvm/lib/Support/Windows/Jobserver.inc')
0 files changed, 0 insertions, 0 deletions