forked from OSchip/llvm-project
Replace MemoryRegionInfoSP with values and cleanup related code
Differential Revision: https://reviews.llvm.org/D55472 llvm-svn: 349766
This commit is contained in:
parent
b208255fe0
commit
36788bbb32
|
@ -102,6 +102,7 @@ private:
|
||||||
|
|
||||||
const lldb_private::MemoryRegionInfo &ref() const;
|
const lldb_private::MemoryRegionInfo &ref() const;
|
||||||
|
|
||||||
|
// Unused.
|
||||||
SBMemoryRegionInfo(const lldb_private::MemoryRegionInfo *lldb_object_ptr);
|
SBMemoryRegionInfo(const lldb_private::MemoryRegionInfo *lldb_object_ptr);
|
||||||
|
|
||||||
lldb::MemoryRegionInfoUP m_opaque_ap;
|
lldb::MemoryRegionInfoUP m_opaque_ap;
|
||||||
|
|
|
@ -42,6 +42,12 @@ protected:
|
||||||
const MemoryRegionInfoListImpl &operator*() const;
|
const MemoryRegionInfoListImpl &operator*() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend class SBProcess;
|
||||||
|
|
||||||
|
lldb_private::MemoryRegionInfos &ref();
|
||||||
|
|
||||||
|
const lldb_private::MemoryRegionInfos &ref() const;
|
||||||
|
|
||||||
std::unique_ptr<MemoryRegionInfoListImpl> m_opaque_ap;
|
std::unique_ptr<MemoryRegionInfoListImpl> m_opaque_ap;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,12 @@ inline bool operator<(lldb::addr_t lhs, const MemoryRegionInfo &rhs) {
|
||||||
return lhs < rhs.GetRange().GetRangeBase();
|
return lhs < rhs.GetRange().GetRangeBase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Forward-declarable wrapper.
|
||||||
|
class MemoryRegionInfos : public std::vector<lldb_private::MemoryRegionInfo> {
|
||||||
|
public:
|
||||||
|
using std::vector<lldb_private::MemoryRegionInfo>::vector;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
|
@ -2081,7 +2081,7 @@ public:
|
||||||
/// An error value.
|
/// An error value.
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
virtual Status
|
virtual Status
|
||||||
GetMemoryRegions(std::vector<lldb::MemoryRegionInfoSP> ®ion_list);
|
GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list);
|
||||||
|
|
||||||
virtual Status GetWatchpointSupportInfo(uint32_t &num) {
|
virtual Status GetWatchpointSupportInfo(uint32_t &num) {
|
||||||
Status error;
|
Status error;
|
||||||
|
|
|
@ -125,13 +125,14 @@ class JITLoaderList;
|
||||||
class Language;
|
class Language;
|
||||||
class LanguageCategory;
|
class LanguageCategory;
|
||||||
class LanguageRuntime;
|
class LanguageRuntime;
|
||||||
class MemoryRegionInfo;
|
|
||||||
class LineTable;
|
class LineTable;
|
||||||
class Listener;
|
class Listener;
|
||||||
class Log;
|
class Log;
|
||||||
class Mangled;
|
class Mangled;
|
||||||
class Materializer;
|
class Materializer;
|
||||||
class MemoryHistory;
|
class MemoryHistory;
|
||||||
|
class MemoryRegionInfo;
|
||||||
|
class MemoryRegionInfos;
|
||||||
class Module;
|
class Module;
|
||||||
class ModuleList;
|
class ModuleList;
|
||||||
class ModuleSpec;
|
class ModuleSpec;
|
||||||
|
@ -369,7 +370,6 @@ typedef std::shared_ptr<lldb_private::LineTable> LineTableSP;
|
||||||
typedef std::shared_ptr<lldb_private::Listener> ListenerSP;
|
typedef std::shared_ptr<lldb_private::Listener> ListenerSP;
|
||||||
typedef std::weak_ptr<lldb_private::Listener> ListenerWP;
|
typedef std::weak_ptr<lldb_private::Listener> ListenerWP;
|
||||||
typedef std::shared_ptr<lldb_private::MemoryHistory> MemoryHistorySP;
|
typedef std::shared_ptr<lldb_private::MemoryHistory> MemoryHistorySP;
|
||||||
typedef std::shared_ptr<lldb_private::MemoryRegionInfo> MemoryRegionInfoSP;
|
|
||||||
typedef std::unique_ptr<lldb_private::MemoryRegionInfo> MemoryRegionInfoUP;
|
typedef std::unique_ptr<lldb_private::MemoryRegionInfo> MemoryRegionInfoUP;
|
||||||
typedef std::shared_ptr<lldb_private::Module> ModuleSP;
|
typedef std::shared_ptr<lldb_private::Module> ModuleSP;
|
||||||
typedef std::weak_ptr<lldb_private::Module> ModuleWP;
|
typedef std::weak_ptr<lldb_private::Module> ModuleWP;
|
||||||
|
|
|
@ -32,31 +32,47 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t GetSize() { return m_regions.size(); }
|
size_t GetSize() const { return m_regions.size(); }
|
||||||
|
|
||||||
void Append(const lldb::SBMemoryRegionInfo &sb_region) {
|
void Reserve(size_t capacity) { return m_regions.reserve(capacity); }
|
||||||
|
|
||||||
|
void Append(const MemoryRegionInfo &sb_region) {
|
||||||
m_regions.push_back(sb_region);
|
m_regions.push_back(sb_region);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Append(const MemoryRegionInfoListImpl &list) {
|
void Append(const MemoryRegionInfoListImpl &list) {
|
||||||
for (auto val : list.m_regions)
|
Reserve(GetSize() + list.GetSize());
|
||||||
|
|
||||||
|
for (const auto &val : list.m_regions)
|
||||||
Append(val);
|
Append(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear() { m_regions.clear(); }
|
void Clear() { m_regions.clear(); }
|
||||||
|
|
||||||
bool GetMemoryRegionInfoAtIndex(uint32_t index,
|
bool GetMemoryRegionInfoAtIndex(size_t index,
|
||||||
SBMemoryRegionInfo ®ion_info) {
|
MemoryRegionInfo ®ion_info) {
|
||||||
if (index >= GetSize())
|
if (index >= GetSize())
|
||||||
return false;
|
return false;
|
||||||
region_info = m_regions[index];
|
region_info = m_regions[index];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MemoryRegionInfos &Ref() { return m_regions; }
|
||||||
|
|
||||||
|
const MemoryRegionInfos &Ref() const { return m_regions; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<lldb::SBMemoryRegionInfo> m_regions;
|
MemoryRegionInfos m_regions;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MemoryRegionInfos &SBMemoryRegionInfoList::ref() {
|
||||||
|
return m_opaque_ap->Ref();
|
||||||
|
}
|
||||||
|
|
||||||
|
const MemoryRegionInfos &SBMemoryRegionInfoList::ref() const {
|
||||||
|
return m_opaque_ap->Ref();
|
||||||
|
}
|
||||||
|
|
||||||
SBMemoryRegionInfoList::SBMemoryRegionInfoList()
|
SBMemoryRegionInfoList::SBMemoryRegionInfoList()
|
||||||
: m_opaque_ap(new MemoryRegionInfoListImpl()) {}
|
: m_opaque_ap(new MemoryRegionInfoListImpl()) {}
|
||||||
|
|
||||||
|
@ -82,7 +98,7 @@ bool SBMemoryRegionInfoList::GetMemoryRegionAtIndex(
|
||||||
uint32_t idx, SBMemoryRegionInfo ®ion_info) {
|
uint32_t idx, SBMemoryRegionInfo ®ion_info) {
|
||||||
Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
|
Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
|
||||||
|
|
||||||
bool result = m_opaque_ap->GetMemoryRegionInfoAtIndex(idx, region_info);
|
bool result = m_opaque_ap->GetMemoryRegionInfoAtIndex(idx, region_info.ref());
|
||||||
|
|
||||||
if (log) {
|
if (log) {
|
||||||
SBStream sstr;
|
SBStream sstr;
|
||||||
|
@ -100,7 +116,7 @@ bool SBMemoryRegionInfoList::GetMemoryRegionAtIndex(
|
||||||
void SBMemoryRegionInfoList::Clear() { m_opaque_ap->Clear(); }
|
void SBMemoryRegionInfoList::Clear() { m_opaque_ap->Clear(); }
|
||||||
|
|
||||||
void SBMemoryRegionInfoList::Append(SBMemoryRegionInfo &sb_region) {
|
void SBMemoryRegionInfoList::Append(SBMemoryRegionInfo &sb_region) {
|
||||||
m_opaque_ap->Append(sb_region);
|
m_opaque_ap->Append(sb_region.ref());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SBMemoryRegionInfoList::Append(SBMemoryRegionInfoList &sb_region_list) {
|
void SBMemoryRegionInfoList::Append(SBMemoryRegionInfoList &sb_region_list) {
|
||||||
|
|
|
@ -1358,18 +1358,14 @@ SBProcess::GetMemoryRegionInfo(lldb::addr_t load_addr,
|
||||||
SBMemoryRegionInfo &sb_region_info) {
|
SBMemoryRegionInfo &sb_region_info) {
|
||||||
lldb::SBError sb_error;
|
lldb::SBError sb_error;
|
||||||
ProcessSP process_sp(GetSP());
|
ProcessSP process_sp(GetSP());
|
||||||
MemoryRegionInfoSP region_info_sp =
|
|
||||||
std::make_shared<lldb_private::MemoryRegionInfo>();
|
|
||||||
if (process_sp) {
|
if (process_sp) {
|
||||||
Process::StopLocker stop_locker;
|
Process::StopLocker stop_locker;
|
||||||
if (stop_locker.TryLock(&process_sp->GetRunLock())) {
|
if (stop_locker.TryLock(&process_sp->GetRunLock())) {
|
||||||
std::lock_guard<std::recursive_mutex> guard(
|
std::lock_guard<std::recursive_mutex> guard(
|
||||||
process_sp->GetTarget().GetAPIMutex());
|
process_sp->GetTarget().GetAPIMutex());
|
||||||
|
|
||||||
sb_error.ref() =
|
sb_error.ref() =
|
||||||
process_sp->GetMemoryRegionInfo(load_addr, *region_info_sp);
|
process_sp->GetMemoryRegionInfo(load_addr, sb_region_info.ref());
|
||||||
if (sb_error.Success()) {
|
|
||||||
sb_region_info.ref() = *region_info_sp;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
|
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
|
||||||
if (log)
|
if (log)
|
||||||
|
@ -1385,35 +1381,23 @@ SBProcess::GetMemoryRegionInfo(lldb::addr_t load_addr,
|
||||||
}
|
}
|
||||||
|
|
||||||
lldb::SBMemoryRegionInfoList SBProcess::GetMemoryRegions() {
|
lldb::SBMemoryRegionInfoList SBProcess::GetMemoryRegions() {
|
||||||
lldb::SBError sb_error;
|
|
||||||
lldb::SBMemoryRegionInfoList sb_region_list;
|
lldb::SBMemoryRegionInfoList sb_region_list;
|
||||||
|
|
||||||
ProcessSP process_sp(GetSP());
|
ProcessSP process_sp(GetSP());
|
||||||
if (process_sp) {
|
Process::StopLocker stop_locker;
|
||||||
Process::StopLocker stop_locker;
|
if (process_sp && stop_locker.TryLock(&process_sp->GetRunLock())) {
|
||||||
if (stop_locker.TryLock(&process_sp->GetRunLock())) {
|
std::lock_guard<std::recursive_mutex> guard(
|
||||||
std::lock_guard<std::recursive_mutex> guard(
|
process_sp->GetTarget().GetAPIMutex());
|
||||||
process_sp->GetTarget().GetAPIMutex());
|
|
||||||
std::vector<MemoryRegionInfoSP> region_list;
|
process_sp->GetMemoryRegions(sb_region_list.ref());
|
||||||
sb_error.ref() = process_sp->GetMemoryRegions(region_list);
|
|
||||||
if (sb_error.Success()) {
|
|
||||||
std::vector<MemoryRegionInfoSP>::iterator end = region_list.end();
|
|
||||||
for (std::vector<MemoryRegionInfoSP>::iterator it = region_list.begin();
|
|
||||||
it != end; it++) {
|
|
||||||
SBMemoryRegionInfo sb_region_info(it->get());
|
|
||||||
sb_region_list.Append(sb_region_info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
|
|
||||||
if (log)
|
|
||||||
log->Printf(
|
|
||||||
"SBProcess(%p)::GetMemoryRegionInfo() => error: process is running",
|
|
||||||
static_cast<void *>(process_sp.get()));
|
|
||||||
sb_error.SetErrorString("process is running");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
sb_error.SetErrorString("SBProcess is invalid");
|
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
|
||||||
|
if (log)
|
||||||
|
log->Printf(
|
||||||
|
"SBProcess(%p)::GetMemoryRegionInfo() => error: process is running",
|
||||||
|
static_cast<void *>(process_sp.get()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb_region_list;
|
return sb_region_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6035,7 +6035,7 @@ Process::AdvanceAddressToNextBranchInstruction(Address default_stop_addr,
|
||||||
}
|
}
|
||||||
|
|
||||||
Status
|
Status
|
||||||
Process::GetMemoryRegions(std::vector<lldb::MemoryRegionInfoSP> ®ion_list) {
|
Process::GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list) {
|
||||||
|
|
||||||
Status error;
|
Status error;
|
||||||
|
|
||||||
|
@ -6043,17 +6043,17 @@ Process::GetMemoryRegions(std::vector<lldb::MemoryRegionInfoSP> ®ion_list) {
|
||||||
|
|
||||||
region_list.clear();
|
region_list.clear();
|
||||||
do {
|
do {
|
||||||
lldb::MemoryRegionInfoSP region_info(new lldb_private::MemoryRegionInfo());
|
lldb_private::MemoryRegionInfo region_info;
|
||||||
error = GetMemoryRegionInfo(range_end, *region_info);
|
error = GetMemoryRegionInfo(range_end, region_info);
|
||||||
// GetMemoryRegionInfo should only return an error if it is unimplemented.
|
// GetMemoryRegionInfo should only return an error if it is unimplemented.
|
||||||
if (error.Fail()) {
|
if (error.Fail()) {
|
||||||
region_list.clear();
|
region_list.clear();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
range_end = region_info->GetRange().GetRangeEnd();
|
range_end = region_info.GetRange().GetRangeEnd();
|
||||||
if (region_info->GetMapped() == MemoryRegionInfo::eYes) {
|
if (region_info.GetMapped() == MemoryRegionInfo::eYes) {
|
||||||
region_list.push_back(region_info);
|
region_list.push_back(std::move(region_info));
|
||||||
}
|
}
|
||||||
} while (range_end != LLDB_INVALID_ADDRESS);
|
} while (range_end != LLDB_INVALID_ADDRESS);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue