yinghuitan created this revision. yinghuitan added reviewers: clayborg, labath, jingham, jdoerfert, JDevlieghere, kusmour, GeorgeHuyubo. Herald added a project: All. yinghuitan requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
This patch fixes a 32bit integer overflow in lldb-vscode. The current implementation of frame_id does `(thread_index << 19 | frame_index)`. Since thread_index is a 32 bit integer this leaves only 32 - 19 == 13 bits available for the thread_index. As a result, lldb-vscode can only handle 2^13 == 8192 threads. Normally, this would be sufficient, but we have seen crazy process having +12000 threads, causing the frame_id algorithm above to integer overflow during casting. The patch fixes the overflow by up casting to 64 bit integer first before bit shifiting. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D156375 Files: lldb/tools/lldb-vscode/LLDBUtils.cpp Index: lldb/tools/lldb-vscode/LLDBUtils.cpp =================================================================== --- lldb/tools/lldb-vscode/LLDBUtils.cpp +++ lldb/tools/lldb-vscode/LLDBUtils.cpp @@ -79,8 +79,8 @@ } int64_t MakeVSCodeFrameID(lldb::SBFrame &frame) { - return (int64_t)(frame.GetThread().GetIndexID() << THREAD_INDEX_SHIFT | - frame.GetFrameID()); + return ((int64_t)frame.GetThread().GetIndexID() << THREAD_INDEX_SHIFT) | + frame.GetFrameID(); } } // namespace lldb_vscode
Index: lldb/tools/lldb-vscode/LLDBUtils.cpp =================================================================== --- lldb/tools/lldb-vscode/LLDBUtils.cpp +++ lldb/tools/lldb-vscode/LLDBUtils.cpp @@ -79,8 +79,8 @@ } int64_t MakeVSCodeFrameID(lldb::SBFrame &frame) { - return (int64_t)(frame.GetThread().GetIndexID() << THREAD_INDEX_SHIFT | - frame.GetFrameID()); + return ((int64_t)frame.GetThread().GetIndexID() << THREAD_INDEX_SHIFT) | + frame.GetFrameID(); } } // namespace lldb_vscode
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits