Skip to content

Commit 697cf02

Browse files
committed
Make workaround for the Dynamic loader issue
1 parent 70fef78 commit 697cf02

File tree

6 files changed

+137
-116
lines changed

6 files changed

+137
-116
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -918,8 +918,8 @@ Status MinidumpFileBuilder::DumpHeader() const {
918918
0u), // not used in most of the writers
919919
header.TimeDateStamp =
920920
static_cast<llvm::support::ulittle32_t>(std::time(nullptr));
921-
header.Flags =
922-
static_cast<llvm::support::ulittle64_t>(0u); // minidump normal flag
921+
header.Flags = static_cast<llvm::support::ulittle64_t>(
922+
llvm::minidump::Header::LLDB_HEADER_FLAG);
923923

924924
Status error;
925925
size_t bytes_written;

lldb/source/Plugins/Process/minidump/MinidumpParser.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
#include <algorithm>
2121
#include <map>
2222
#include <optional>
23-
#include <vector>
2423
#include <utility>
24+
#include <vector>
2525

2626
using namespace lldb_private;
2727
using namespace minidump;
@@ -45,6 +45,10 @@ llvm::ArrayRef<uint8_t> MinidumpParser::GetData() {
4545
m_data_sp->GetByteSize());
4646
}
4747

48+
const llvm::minidump::Header *MinidumpParser::GetHeader() const {
49+
return reinterpret_cast<llvm::minidump::Header *>(m_file.get());
50+
}
51+
4852
llvm::ArrayRef<uint8_t> MinidumpParser::GetStream(StreamType stream_type) {
4953
return m_file->getRawStream(stream_type).value_or(llvm::ArrayRef<uint8_t>());
5054
}
@@ -70,8 +74,7 @@ UUID MinidumpParser::GetModuleUUID(const minidump::Module *module) {
7074
if (GetArchitecture().GetTriple().isOSBinFormatELF()) {
7175
if (pdb70_uuid->Age != 0)
7276
return UUID(pdb70_uuid, sizeof(*pdb70_uuid));
73-
return UUID(&pdb70_uuid->Uuid,
74-
sizeof(pdb70_uuid->Uuid));
77+
return UUID(&pdb70_uuid->Uuid, sizeof(pdb70_uuid->Uuid));
7578
}
7679
return UUID(*pdb70_uuid);
7780
} else if (cv_signature == CvSignature::ElfBuildId)
@@ -453,10 +456,12 @@ MinidumpParser::FindMemoryRange(lldb::addr_t addr) {
453456

454457
if (!GetStream(StreamType::Memory64List).empty()) {
455458
llvm::Error err = llvm::Error::success();
456-
for (const auto &memory_desc : GetMinidumpFile().getMemory64List(err)) {
457-
if (memory_desc.first.StartOfMemoryRange <= addr
458-
&& addr < memory_desc.first.StartOfMemoryRange + memory_desc.first.DataSize) {
459-
return minidump::Range(memory_desc.first.StartOfMemoryRange, memory_desc.second);
459+
for (const auto &memory_desc : GetMinidumpFile().getMemory64List(err)) {
460+
if (memory_desc.first.StartOfMemoryRange <= addr &&
461+
addr < memory_desc.first.StartOfMemoryRange +
462+
memory_desc.first.DataSize) {
463+
return minidump::Range(memory_desc.first.StartOfMemoryRange,
464+
memory_desc.second);
460465
}
461466
}
462467

@@ -490,7 +495,8 @@ llvm::ArrayRef<uint8_t> MinidumpParser::GetMemory(lldb::addr_t addr,
490495
return range->range_ref.slice(offset, overlap);
491496
}
492497

493-
llvm::iterator_range<FallibleMemory64Iterator> MinidumpParser::GetMemory64Iterator(llvm::Error &err) {
498+
llvm::iterator_range<FallibleMemory64Iterator>
499+
MinidumpParser::GetMemory64Iterator(llvm::Error &err) {
494500
llvm::ErrorAsOutParameter ErrAsOutParam(&err);
495501
return m_file->getMemory64List(err);
496502
}
@@ -602,8 +608,7 @@ std::pair<MemoryRegionInfos, bool> MinidumpParser::BuildMemoryRegions() {
602608
case StreamType::ST: \
603609
return #ST
604610

605-
llvm::StringRef
606-
MinidumpParser::GetStreamTypeAsString(StreamType stream_type) {
611+
llvm::StringRef MinidumpParser::GetStreamTypeAsString(StreamType stream_type) {
607612
switch (stream_type) {
608613
ENUM_TO_CSTR(Unused);
609614
ENUM_TO_CSTR(ThreadList);

lldb/source/Plugins/Process/minidump/MinidumpParser.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ struct Range {
4747
}
4848
};
4949

50-
using FallibleMemory64Iterator = llvm::object::MinidumpFile::FallibleMemory64Iterator;
50+
using FallibleMemory64Iterator =
51+
llvm::object::MinidumpFile::FallibleMemory64Iterator;
5152
using ExceptionStreamsIterator =
5253
llvm::object::MinidumpFile::ExceptionStreamsIterator;
5354

@@ -56,6 +57,8 @@ class MinidumpParser {
5657
static llvm::Expected<MinidumpParser>
5758
Create(const lldb::DataBufferSP &data_buf_sp);
5859

60+
const llvm::minidump::Header *GetHeader() const;
61+
5962
llvm::ArrayRef<uint8_t> GetData();
6063

6164
llvm::ArrayRef<uint8_t> GetStream(StreamType stream_type);
@@ -96,7 +99,8 @@ class MinidumpParser {
9699
/// complete (includes all regions mapped into the process memory).
97100
std::pair<MemoryRegionInfos, bool> BuildMemoryRegions();
98101

99-
llvm::iterator_range<FallibleMemory64Iterator> GetMemory64Iterator(llvm::Error &err);
102+
llvm::iterator_range<FallibleMemory64Iterator>
103+
GetMemory64Iterator(llvm::Error &err);
100104

101105
static llvm::StringRef GetStreamTypeAsString(StreamType stream_type);
102106

0 commit comments

Comments
 (0)