Skip to content

Commit bb34346

Browse files
authored
Revert "[LLDB] Reappply SBSaveCore AddMemoryList" (#107731)
Reverts #107159 as this is still causing `TestSkinnyCorefile.py` to time out. https://ci.swift.org/view/all/job/llvm.org/view/LLDB/job/as-lldb-cmake/11099/ https://ci.swift.org/view/all/job/llvm.org/view/LLDB/job/lldb-cmake/5544/
1 parent b934570 commit bb34346

25 files changed

+67
-496
lines changed

lldb/include/lldb/API/SBMemoryRegionInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class LLDB_API SBMemoryRegionInfo {
120120
private:
121121
friend class SBProcess;
122122
friend class SBMemoryRegionInfoList;
123-
friend class SBSaveCoreOptions;
123+
124124
friend class lldb_private::ScriptInterpreter;
125125

126126
lldb_private::MemoryRegionInfo &ref();

lldb/include/lldb/API/SBSaveCoreOptions.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,6 @@ class LLDB_API SBSaveCoreOptions {
8080
/// \return True if the thread was removed, false if it was not in the list.
8181
bool RemoveThread(lldb::SBThread thread);
8282

83-
/// Add a memory region to save in the core file.
84-
///
85-
/// \param region The memory region to save.
86-
/// \returns An empty SBError upon success, or an error if the region is
87-
/// invalid.
88-
/// \note Ranges that overlapped will be unioned into a single region, this
89-
/// also supercedes stack minification. Specifying full regions and a
90-
/// non-custom core style will include the specified regions and union them
91-
/// with all style specific regions.
92-
SBError AddMemoryRegionToSave(const SBMemoryRegionInfo &region);
93-
9483
/// Reset all options.
9584
void Clear();
9685

lldb/include/lldb/Symbol/SaveCoreOptions.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010
#define LLDB_SOURCE_PLUGINS_OBJECTFILE_SaveCoreOPTIONS_H
1111

1212
#include "lldb/Utility/FileSpec.h"
13-
#include "lldb/Utility/RangeMap.h"
13+
#include "lldb/lldb-forward.h"
14+
#include "lldb/lldb-types.h"
1415

1516
#include <optional>
16-
#include <set>
1717
#include <string>
1818
#include <unordered_set>
1919

20-
using MemoryRanges = lldb_private::RangeVector<lldb::addr_t, lldb::addr_t>;
21-
2220
namespace lldb_private {
2321

2422
class SaveCoreOptions {
@@ -40,12 +38,8 @@ class SaveCoreOptions {
4038
Status AddThread(lldb::ThreadSP thread_sp);
4139
bool RemoveThread(lldb::ThreadSP thread_sp);
4240
bool ShouldThreadBeSaved(lldb::tid_t tid) const;
43-
bool HasSpecifiedThreads() const;
4441

4542
Status EnsureValidConfiguration(lldb::ProcessSP process_sp) const;
46-
const MemoryRanges &GetCoreFileMemoryRanges() const;
47-
48-
void AddMemoryRegionToSave(const lldb_private::MemoryRegionInfo &region);
4943

5044
void Clear();
5145

@@ -57,7 +51,6 @@ class SaveCoreOptions {
5751
std::optional<lldb::SaveCoreStyle> m_style;
5852
lldb::ProcessSP m_process_sp;
5953
std::unordered_set<lldb::tid_t> m_threads_to_save;
60-
MemoryRanges m_regions_to_save;
6154
};
6255
} // namespace lldb_private
6356

lldb/include/lldb/Target/CoreFileMemoryRanges.h

Lines changed: 0 additions & 50 deletions
This file was deleted.

lldb/include/lldb/Target/Process.h

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
#include "lldb/Host/ProcessLaunchInfo.h"
3636
#include "lldb/Host/ProcessRunLock.h"
3737
#include "lldb/Symbol/ObjectFile.h"
38-
#include "lldb/Symbol/SaveCoreOptions.h"
39-
#include "lldb/Target/CoreFileMemoryRanges.h"
4038
#include "lldb/Target/ExecutionContextScope.h"
4139
#include "lldb/Target/InstrumentationRuntime.h"
4240
#include "lldb/Target/Memory.h"
@@ -712,6 +710,29 @@ class Process : public std::enable_shared_from_this<Process>,
712710
/// is not supported by the plugin, error otherwise.
713711
virtual llvm::Expected<bool> SaveCore(llvm::StringRef outfile);
714712

713+
struct CoreFileMemoryRange {
714+
llvm::AddressRange range; /// The address range to save into the core file.
715+
uint32_t lldb_permissions; /// A bit set of lldb::Permissions bits.
716+
717+
bool operator==(const CoreFileMemoryRange &rhs) const {
718+
return range == rhs.range && lldb_permissions == rhs.lldb_permissions;
719+
}
720+
721+
bool operator!=(const CoreFileMemoryRange &rhs) const {
722+
return !(*this == rhs);
723+
}
724+
725+
bool operator<(const CoreFileMemoryRange &rhs) const {
726+
if (range < rhs.range)
727+
return true;
728+
if (range == rhs.range)
729+
return lldb_permissions < rhs.lldb_permissions;
730+
return false;
731+
}
732+
};
733+
734+
using CoreFileMemoryRanges = std::vector<CoreFileMemoryRange>;
735+
715736
/// Helper function for Process::SaveCore(...) that calculates the address
716737
/// ranges that should be saved. This allows all core file plug-ins to save
717738
/// consistent memory ranges given a \a core_style.

lldb/include/lldb/Utility/RangeMap.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,8 +450,6 @@ class RangeDataVector {
450450

451451
void Append(const Entry &entry) { m_entries.emplace_back(entry); }
452452

453-
void Append(B &&b, S &&s, T &&t) { m_entries.emplace_back(Entry(b, s, t)); }
454-
455453
bool Erase(uint32_t start, uint32_t end) {
456454
if (start >= end || end > m_entries.size())
457455
return false;

lldb/include/lldb/lldb-enumerations.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1222,7 +1222,6 @@ enum SaveCoreStyle {
12221222
eSaveCoreFull = 1,
12231223
eSaveCoreDirtyOnly = 2,
12241224
eSaveCoreStackOnly = 3,
1225-
eSaveCoreCustomOnly = 4,
12261225
};
12271226

12281227
/// Events that might happen during a trace session.

lldb/include/lldb/lldb-forward.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@ class StackFrameRecognizer;
207207
class StackFrameRecognizerManager;
208208
class StackID;
209209
class Status;
210-
class SaveCoreOptions;
211210
class StopInfo;
212211
class Stoppoint;
213212
class StoppointCallbackContext;

lldb/include/lldb/lldb-private-interfaces.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#ifndef LLDB_LLDB_PRIVATE_INTERFACES_H
1010
#define LLDB_LLDB_PRIVATE_INTERFACES_H
1111

12+
#include "lldb/Symbol/SaveCoreOptions.h"
1213
#include "lldb/lldb-enumerations.h"
1314
#include "lldb/lldb-forward.h"
1415
#include "lldb/lldb-private-enumerations.h"

lldb/source/API/SBSaveCoreOptions.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "lldb/API/SBSaveCoreOptions.h"
10-
#include "lldb/API/SBMemoryRegionInfo.h"
1110
#include "lldb/Host/FileSystem.h"
1211
#include "lldb/Symbol/SaveCoreOptions.h"
1312
#include "lldb/Utility/Instrumentation.h"
@@ -90,16 +89,6 @@ bool SBSaveCoreOptions::RemoveThread(lldb::SBThread thread) {
9089
return m_opaque_up->RemoveThread(thread.GetSP());
9190
}
9291

93-
lldb::SBError
94-
SBSaveCoreOptions::AddMemoryRegionToSave(const SBMemoryRegionInfo &region) {
95-
LLDB_INSTRUMENT_VA(this, region);
96-
// Currently add memory region can't fail, so we always return a success
97-
// SBerror, but because these API's live forever, this is the most future
98-
// proof thing to do.
99-
m_opaque_up->AddMemoryRegionToSave(region.ref());
100-
return SBError();
101-
}
102-
10392
void SBSaveCoreOptions::Clear() {
10493
LLDB_INSTRUMENT_VA(this);
10594
m_opaque_up->Clear();

lldb/source/Commands/CommandObjectProcess.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
#include "lldb/Interpreter/OptionArgParser.h"
2626
#include "lldb/Interpreter/OptionGroupPythonClassWithDict.h"
2727
#include "lldb/Interpreter/Options.h"
28-
#include "lldb/Symbol/SaveCoreOptions.h"
2928
#include "lldb/Target/Platform.h"
3029
#include "lldb/Target/Process.h"
3130
#include "lldb/Target/StopInfo.h"

lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6562,15 +6562,13 @@ bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp,
65626562
}
65636563

65646564
if (make_core) {
6565-
CoreFileMemoryRanges core_ranges;
6565+
Process::CoreFileMemoryRanges core_ranges;
65666566
error = process_sp->CalculateCoreFileSaveRanges(options, core_ranges);
65676567
if (error.Success()) {
65686568
const uint32_t addr_byte_size = target_arch.GetAddressByteSize();
65696569
const ByteOrder byte_order = target_arch.GetByteOrder();
65706570
std::vector<llvm::MachO::segment_command_64> segment_load_commands;
6571-
for (const auto &core_range_info : core_ranges) {
6572-
// TODO: Refactor RangeDataVector to have a data iterator.
6573-
const auto &core_range = core_range_info.data;
6571+
for (const auto &core_range : core_ranges) {
65746572
uint32_t cmd_type = LC_SEGMENT_64;
65756573
uint32_t segment_size = sizeof(llvm::MachO::segment_command_64);
65766574
if (addr_byte_size == 4) {

lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "lldb/Core/Address.h"
1313
#include "lldb/Host/SafeMachO.h"
1414
#include "lldb/Symbol/ObjectFile.h"
15-
#include "lldb/Symbol/SaveCoreOptions.h"
1615
#include "lldb/Utility/FileSpec.h"
1716
#include "lldb/Utility/FileSpecList.h"
1817
#include "lldb/Utility/RangeMap.h"

lldb/source/Plugins/ObjectFile/Minidump/MinidumpFileBuilder.cpp

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -831,32 +831,25 @@ Status MinidumpFileBuilder::AddMemoryList() {
831831
// bytes of the core file. Thread structures in minidump files can only use
832832
// 32 bit memory descriptiors, so we emit them first to ensure the memory is
833833
// in accessible with a 32 bit offset.
834-
std::vector<CoreFileMemoryRange> ranges_32;
835-
std::vector<CoreFileMemoryRange> ranges_64;
836-
CoreFileMemoryRanges all_core_memory_ranges;
834+
Process::CoreFileMemoryRanges ranges_32;
835+
Process::CoreFileMemoryRanges ranges_64;
836+
Process::CoreFileMemoryRanges all_core_memory_ranges;
837837
error = m_process_sp->CalculateCoreFileSaveRanges(m_save_core_options,
838838
all_core_memory_ranges);
839-
840-
std::vector<CoreFileMemoryRange> all_core_memory_vec;
841-
// Extract all the data into just a vector of data. So we can mutate this in
842-
// place.
843-
for (const auto &core_range : all_core_memory_ranges)
844-
all_core_memory_vec.push_back(core_range.data);
845-
846839
if (error.Fail())
847840
return error;
848841

849842
// Start by saving all of the stacks and ensuring they fit under the 32b
850843
// limit.
851844
uint64_t total_size = GetCurrentDataEndOffset();
852-
auto iterator = all_core_memory_vec.begin();
853-
while (iterator != all_core_memory_vec.end()) {
845+
auto iterator = all_core_memory_ranges.begin();
846+
while (iterator != all_core_memory_ranges.end()) {
854847
if (m_saved_stack_ranges.count(iterator->range.start()) > 0) {
855848
// We don't save stacks twice.
856849
ranges_32.push_back(*iterator);
857850
total_size +=
858851
iterator->range.size() + sizeof(llvm::minidump::MemoryDescriptor);
859-
iterator = all_core_memory_vec.erase(iterator);
852+
iterator = all_core_memory_ranges.erase(iterator);
860853
} else {
861854
iterator++;
862855
}
@@ -876,11 +869,11 @@ Status MinidumpFileBuilder::AddMemoryList() {
876869
// Then anything overflow extends into 64b addressable space.
877870
// All core memeroy ranges will either container nothing on stacks only
878871
// or all the memory ranges including stacks
879-
if (!all_core_memory_vec.empty())
880-
total_size += 256 + (all_core_memory_vec.size() *
872+
if (!all_core_memory_ranges.empty())
873+
total_size += 256 + (all_core_memory_ranges.size() *
881874
sizeof(llvm::minidump::MemoryDescriptor_64));
882875

883-
for (const auto &core_range : all_core_memory_vec) {
876+
for (const auto &core_range : all_core_memory_ranges) {
884877
const addr_t range_size = core_range.range.size();
885878
// We don't need to check for stacks here because we already removed them
886879
// from all_core_memory_ranges.
@@ -965,15 +958,15 @@ Status MinidumpFileBuilder::DumpDirectories() const {
965958
}
966959

967960
static uint64_t
968-
GetLargestRangeSize(const std::vector<CoreFileMemoryRange> &ranges) {
961+
GetLargestRangeSize(const Process::CoreFileMemoryRanges &ranges) {
969962
uint64_t max_size = 0;
970963
for (const auto &core_range : ranges)
971964
max_size = std::max(max_size, core_range.range.size());
972965
return max_size;
973966
}
974967

975-
Status MinidumpFileBuilder::AddMemoryList_32(
976-
std::vector<CoreFileMemoryRange> &ranges) {
968+
Status
969+
MinidumpFileBuilder::AddMemoryList_32(Process::CoreFileMemoryRanges &ranges) {
977970
std::vector<MemoryDescriptor> descriptors;
978971
Status error;
979972
if (ranges.size() == 0)
@@ -1049,8 +1042,8 @@ Status MinidumpFileBuilder::AddMemoryList_32(
10491042
return error;
10501043
}
10511044

1052-
Status MinidumpFileBuilder::AddMemoryList_64(
1053-
std::vector<CoreFileMemoryRange> &ranges) {
1045+
Status
1046+
MinidumpFileBuilder::AddMemoryList_64(Process::CoreFileMemoryRanges &ranges) {
10541047
Status error;
10551048
if (ranges.empty())
10561049
return error;

lldb/source/Plugins/ObjectFile/Minidump/MinidumpFileBuilder.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#include <utility>
2424
#include <variant>
2525

26-
#include "lldb/Symbol/SaveCoreOptions.h"
2726
#include "lldb/Target/Process.h"
2827
#include "lldb/Target/Target.h"
2928
#include "lldb/Utility/DataBufferHeap.h"
@@ -121,9 +120,9 @@ class MinidumpFileBuilder {
121120
lldb_private::Status AddData(const void *data, uint64_t size);
122121
// Add MemoryList stream, containing dumps of important memory segments
123122
lldb_private::Status
124-
AddMemoryList_64(std::vector<lldb_private::CoreFileMemoryRange> &ranges);
123+
AddMemoryList_64(lldb_private::Process::CoreFileMemoryRanges &ranges);
125124
lldb_private::Status
126-
AddMemoryList_32(std::vector<lldb_private::CoreFileMemoryRange> &ranges);
125+
AddMemoryList_32(lldb_private::Process::CoreFileMemoryRanges &ranges);
127126
// Update the thread list on disk with the newly emitted stack RVAs.
128127
lldb_private::Status FixThreadStacks();
129128
lldb_private::Status FlushBufferToDisk();

lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#define LLDB_SOURCE_PLUGINS_OBJECTFILE_MINIDUMP_OBJECTFILEMINIDUMP_H
2222

2323
#include "lldb/Symbol/ObjectFile.h"
24-
#include "lldb/Symbol/SaveCoreOptions.h"
2524
#include "lldb/Utility/ArchSpec.h"
2625

2726
class ObjectFileMinidump : public lldb_private::PluginInterface {

lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "lldb/Interpreter/OptionValueDictionary.h"
1818
#include "lldb/Interpreter/OptionValueProperties.h"
1919
#include "lldb/Symbol/ObjectFile.h"
20-
#include "lldb/Symbol/SaveCoreOptions.h"
2120
#include "lldb/Target/Process.h"
2221
#include "lldb/Target/SectionLoadList.h"
2322
#include "lldb/Target/Target.h"

lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include <vector>
1414

1515
#include "lldb/Symbol/ObjectFile.h"
16-
#include "lldb/Symbol/SaveCoreOptions.h"
1716
#include "llvm/Object/COFF.h"
1817

1918
class ObjectFilePECOFF : public lldb_private::ObjectFile {

0 commit comments

Comments
 (0)