Skip to content

Commit 2214e6c

Browse files
committed
Support empty stream, remove magic bytes
1 parent 66de146 commit 2214e6c

File tree

7 files changed

+16
-30
lines changed

7 files changed

+16
-30
lines changed

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,7 @@ Status MinidumpFileBuilder::AddDirectory(StreamType type,
132132
Status MinidumpFileBuilder::AddLLDBGeneratedStream() {
133133
Status error;
134134
StreamType type = StreamType::LLDBGenerated;
135-
error = AddDirectory(type, sizeof(StreamType));
136-
if (error.Fail())
137-
return error;
138-
139-
error = AddData(&type, sizeof(StreamType));
140-
return error;
135+
return AddDirectory(type, 0);
141136
}
142137

143138
Status MinidumpFileBuilder::AddSystemInfo() {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ llvm::ArrayRef<uint8_t> MinidumpParser::GetStream(StreamType stream_type) {
4949
return m_file->getRawStream(stream_type).value_or(llvm::ArrayRef<uint8_t>());
5050
}
5151

52+
std::optional<llvm::ArrayRef<uint8_t>> MinidumpParser::GetRawStream(StreamType stream_type) {
53+
return m_file->getRawStream(stream_type);
54+
}
55+
5256
UUID MinidumpParser::GetModuleUUID(const minidump::Module *module) {
5357
auto cv_record =
5458
GetData().slice(module->CvRecord.RVA, module->CvRecord.DataSize);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class MinidumpParser {
5959
llvm::ArrayRef<uint8_t> GetData();
6060

6161
llvm::ArrayRef<uint8_t> GetStream(StreamType stream_type);
62+
std::optional<llvm::ArrayRef<uint8_t>> GetRawStream(StreamType stream_type);
6263

6364
UUID GetModuleUUID(const minidump::Module *module);
6465

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

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -355,28 +355,12 @@ DataExtractor ProcessMinidump::GetAuxvData() {
355355
}
356356

357357
bool ProcessMinidump::IsLLDBMinidump() {
358-
// If we've already checked, return the cached value
359-
if (m_is_lldb_generated.has_value())
360-
return *m_is_lldb_generated;
361-
362-
// If the minidump doesn't have a LLDBGeneratedStream, it's not an LLDB
363-
// We also check to see if the section was generated correctly, but not
364-
// enforcing an exact size so we can change it in the future without
365-
// impacting older generated Minidumps.
366-
llvm::ArrayRef<uint8_t> lldbStream =
367-
m_minidump_parser->GetStream(StreamType::LLDBGenerated);
368-
if (lldbStream.empty() || lldbStream.size() <= sizeof(StreamType)) {
369-
m_is_lldb_generated = false;
370-
return false;
371-
}
372-
373-
const uint32_t *lldbStreamType =
374-
reinterpret_cast<const uint32_t *>(lldbStream.data());
375-
376-
m_is_lldb_generated = *lldbStreamType == (uint32_t)StreamType::LLDBGenerated;
377-
return *m_is_lldb_generated;
358+
std::optional<llvm::ArrayRef<uint8_t>> lldb_generated_section =
359+
m_minidump_parser->GetRawStream(StreamType::LLDBGenerated);
360+
return lldb_generated_section.has_value();
378361
}
379362

363+
380364
DynamicLoader *ProcessMinidump::GetDynamicLoader() {
381365
// This is a workaround for the dynamic loader not playing nice in issue
382366
// #119598. The specific reason we use the dynamic loader is to get the TLS

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ class ProcessMinidump : public PostMortemProcess {
7676

7777
ArchSpec GetArchitecture();
7878

79-
Status GetMemoryRegions(
80-
lldb_private::MemoryRegionInfos &region_list) override;
79+
Status
80+
GetMemoryRegions(lldb_private::MemoryRegionInfos &region_list) override;
8181

8282
bool GetProcessInfo(ProcessInstanceInfo &info) override;
8383

@@ -106,7 +106,6 @@ class ProcessMinidump : public PostMortemProcess {
106106
JITLoaderList &GetJITLoaders() override;
107107

108108
private:
109-
std::optional<bool> m_is_lldb_generated;
110109
lldb::DataBufferSP m_core_data;
111110
llvm::ArrayRef<minidump::Thread> m_thread_list;
112111
std::unordered_map<uint32_t, const minidump::ExceptionStream>

llvm/include/llvm/BinaryFormat/Minidump.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ enum class StreamType : uint32_t {
5252
#include "llvm/BinaryFormat/MinidumpConstants.def"
5353
Unused = 0,
5454
LastReserved = 0x0000ffff,
55-
LLDBGenerated = 0x4C4C4442, // ASCII for 'LLDB'
5655
};
5756

5857
/// Specifies the location (and size) of various objects in the minidump file.

llvm/include/llvm/BinaryFormat/MinidumpConstants.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ HANDLE_MDMP_STREAM_TYPE(0xFACECCCC, FacebookAppStateLog)
8585
HANDLE_MDMP_STREAM_TYPE(0xFACEDEAD, FacebookAbortReason)
8686
HANDLE_MDMP_STREAM_TYPE(0xFACEE000, FacebookThreadName)
8787

88+
// LLDB specific stream types
89+
// Ascii for 'LLDB'
90+
HANDLE_MDMP_STREAM_TYPE(0x4C4C4442, LLDBGenerated)
91+
8892
HANDLE_MDMP_ARCH(0x0000, X86) // PROCESSOR_ARCHITECTURE_INTEL
8993
HANDLE_MDMP_ARCH(0x0001, MIPS) // PROCESSOR_ARCHITECTURE_MIPS
9094
HANDLE_MDMP_ARCH(0x0002, Alpha) // PROCESSOR_ARCHITECTURE_ALPHA

0 commit comments

Comments
 (0)