charles-zablit wrote: > The client kept the previously-selected thread across stops, ignoring the > primary tid from the server in `T<sig>thread:<tid>`. On Windows, lldb-server > halts the inferior by injecting a thread called `DbgUiRemoteBreakin` whose > only job is to execute an int 3. After an interrupt, the process has `N+1` > threads and the new one is what caused the stop. The server reports that > thread as primary, but the client ignored it and stayed on whichever thread > was selected before. In `TestExpressionInSyscall` that thread is main, paused > just past `NtDelayExecution`'s syscall with a garbage value in the RSI > register. Evaluating an expression there crashes the JIT trampoline. > > This patch makes `ProcessGDBRemote::RefreshStateAfterStop` record the primary > tid from the most recent T-packet's `thread:<tid>` and select it after > applying per thread stop infos. > > Fixes `TestBreakpointSetRestart` and `TestExpressionInSyscall` with > LLDB_USE_LLDB_SERVER=1.
With the in-process / native plugin, lldb does not stop on the main thread, it stops on the injected one: https://github.com/llvm/llvm-project/blob/1ba7c9677649ed5072205c63532c1c2d5da38e13/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp#L340 This patch mirrors this. https://github.com/llvm/llvm-project/pull/203525 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
