================ @@ -6335,16 +6335,51 @@ static void AddRegion(const MemoryRegionInfo ®ion, bool try_dirty_pages, ranges.push_back(CreateCoreFileMemoryRange(region)); } +static void +SaveOffRegionsWithStackPointers(Process &process, + const MemoryRegionInfos ®ions, + Process::CoreFileMemoryRanges &ranges, + std::set<addr_t> &stack_ends) { + const bool try_dirty_pages = true; + + // Before we take any dump, we want to save off the used portions of the stacks + // and mark those memory regions as saved. This prevents us from saving the unused portion + // of the stack below the stack pointer. Saving space on the dump. + for (lldb::ThreadSP thread_sp : process.GetThreadList().Threads()) { + if (!thread_sp) + continue; + StackFrameSP frame_sp = thread_sp->GetStackFrameAtIndex(0); + if (!frame_sp) + continue; + RegisterContextSP reg_ctx_sp = frame_sp->GetRegisterContext(); + if (!reg_ctx_sp) + continue; + const addr_t sp = reg_ctx_sp->GetSP(); + const size_t red_zone = process.GetABI()->GetRedZoneSize(); + lldb_private::MemoryRegionInfo sp_region; + if (process.GetMemoryRegionInfo(sp, sp_region).Success()) { + const size_t stack_head = (sp - red_zone); + const size_t stack_size = sp_region.GetRange().GetRangeEnd() - stack_head; + sp_region.GetRange().SetRangeBase(stack_head); + sp_region.GetRange().SetByteSize(stack_size); + stack_ends.insert(sp_region.GetRange().GetRangeEnd()); + AddRegion(sp_region, try_dirty_pages, ranges); + } ---------------- Jlalond wrote:
Done, also made sure we do this in `MinidumpFileBuilder` https://github.com/llvm/llvm-project/pull/92002 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits