Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lldb/bindings/headers.swig
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "lldb/API/SBCommandReturnObject.h"
#include "lldb/API/SBCommunication.h"
#include "lldb/API/SBCompileUnit.h"
#include "lldb/API/SBCoreDumpOptions.h"
#include "lldb/API/SBData.h"
#include "lldb/API/SBDebugger.h"
#include "lldb/API/SBDeclaration.h"
Expand Down
Empty file.
2 changes: 2 additions & 0 deletions lldb/bindings/interfaces.swig
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
%include "./interface/SBCommandReturnObjectDocstrings.i"
%include "./interface/SBCommunicationDocstrings.i"
%include "./interface/SBCompileUnitDocstrings.i"
%include "./interface/SBCoreDumpOptionsDocstrings.i"
%include "./interface/SBDataDocstrings.i"
%include "./interface/SBDebuggerDocstrings.i"
%include "./interface/SBDeclarationDocstrings.i"
Expand Down Expand Up @@ -101,6 +102,7 @@
%include "lldb/API/SBCommandReturnObject.h"
%include "lldb/API/SBCommunication.h"
%include "lldb/API/SBCompileUnit.h"
%include "lldb/API/SBCoreDumpOptions.h"
%include "lldb/API/SBData.h"
%include "lldb/API/SBDebugger.h"
%include "lldb/API/SBDeclaration.h"
Expand Down
1 change: 1 addition & 0 deletions lldb/include/lldb/API/LLDB.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "lldb/API/SBCommandReturnObject.h"
#include "lldb/API/SBCommunication.h"
#include "lldb/API/SBCompileUnit.h"
#include "lldb/API/SBCoreDumpOptions.h"
#include "lldb/API/SBData.h"
#include "lldb/API/SBDebugger.h"
#include "lldb/API/SBDeclaration.h"
Expand Down
59 changes: 59 additions & 0 deletions lldb/include/lldb/API/SBCoreDumpOptions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
//===-- SBCoreDumpOptions.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLDB_API_SBCOREDUMPOPTIONS_H
#define LLDB_API_SBCOREDUMPOPTIONS_H

#include "lldb/API/SBDefines.h"
#include "lldb/Symbol/CoreDumpOptions.h"

namespace lldb {

class LLDB_API SBCoreDumpOptions {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we change the name to SBSaveCoreOptions? SBCoreDumpOptions seems like they would be used to dump a core dump to the terminal?

public:
SBCoreDumpOptions(const char *filePath);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove the file path from constructor. Clients should use the SBCoreDumpOptions::SetOutputFile() accessor.

SBCoreDumpOptions(const lldb::SBCoreDumpOptions &rhs);
~SBCoreDumpOptions() = default;

const SBCoreDumpOptions &operator=(const lldb::SBCoreDumpOptions &rhs);

/// Set the Core dump plugin name.
///
/// \param plugin Name of the object file plugin.
void SetCoreDumpPluginName(const char *plugin);

/// Get the Core dump plugin name, if set.
///
/// \return The name of the plugin, or nullopt if not set.
const std::optional<const char *> GetCoreDumpPluginName() const;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jason is right: no std::optional in the public API. The std::optional should only be used in the internal lldb_private::CoreDumpOptions and the accessors for lldb_private::CoreDumpOptions should not return std::optional either, it should use it to return something like:

return m_optional.value_or(<default-value>);

The std::optional stuff is there just so we know when a user has set an option value in a command or on via the API. If the value hasn't been set, then we return a good default value.

This function should return NULL if there is no value.


/// Set the Core dump style.
///
/// \param style The style of the core dump.
void SetCoreDumpStyle(lldb::SaveCoreStyle style);

/// Get the Core dump style, if set.
///
/// \return The core dump style, or nullopt if not set.
const std::optional<lldb::SaveCoreStyle> GetCoreDumpStyle() const;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return lldb::SaveCoreStyle with no optional. lldb_private::CoreDumpOptions::GetCoreDumpStyle() should return a good default value for this, and that will be returned as the result of this function.


/// Get the output file path
///
/// \return The output file path.
const char *GetOutputFile() const;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Return a lldb::SBFileSpec here instead of a const char *.
We also need a way to set this output file value as well, so add an accessor:

void SetOutputFile(lldb::SBFileSpec &file);


protected:
friend class SBProcess;
lldb_private::CoreDumpOptions &Ref() const;

private:
std::unique_ptr<lldb_private::CoreDumpOptions> m_opaque_up;
}; // SBCoreDumpOptions
} // namespace lldb

#endif // LLDB_API_SBCOREDUMPOPTIONS_H
1 change: 1 addition & 0 deletions lldb/include/lldb/API/SBDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class LLDB_API SBCommandPluginInterface;
class LLDB_API SBCommandReturnObject;
class LLDB_API SBCommunication;
class LLDB_API SBCompileUnit;
class LLDB_API SBCoreDumpOptions;
class LLDB_API SBData;
class LLDB_API SBDebugger;
class LLDB_API SBDeclaration;
Expand Down
6 changes: 6 additions & 0 deletions lldb/include/lldb/API/SBProcess.h
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,12 @@ class LLDB_API SBProcess {
/// \param[in] file_name - The name of the file to save the core file to.
lldb::SBError SaveCore(const char *file_name);

/// Save the state of the process with the desired settings
/// as defined in the options object.
///
/// \param[in] options - The options to use when saving the core file.
lldb::SBError SaveCore(SBCoreDumpOptions &options);

/// Query the address load_addr and store the details of the memory
/// region that contains it in the supplied SBMemoryRegionInfo object.
/// To iterate over all memory regions use GetMemoryRegionList.
Expand Down
4 changes: 1 addition & 3 deletions lldb/include/lldb/Core/PluginManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,7 @@ class PluginManager {
GetObjectFileCreateMemoryCallbackForPluginName(llvm::StringRef name);

static Status SaveCore(const lldb::ProcessSP &process_sp,
const FileSpec &outfile,
lldb::SaveCoreStyle &core_style,
llvm::StringRef plugin_name);
lldb_private::CoreDumpOptions &core_options);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

change to const: const lldb_private::CoreDumpOptions &core_options

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we do this then we will need to remove all the current mutation of style in MachO, ELF, Minidump. (Or keep them as local variables, but in that case then it's confusing that a plugin could mutate your options and you woudln't know.

If we want to remove all the default settings per flavor in this patch let me know.


// ObjectContainer
static bool RegisterPlugin(
Expand Down
42 changes: 42 additions & 0 deletions lldb/include/lldb/Symbol/CoreDumpOptions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
//===-- CoreDumpOptions.h ---------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_COREDUMPOPTIONS_H
#define LLDB_SOURCE_PLUGINS_OBJECTFILE_COREDUMPOPTIONS_H

#include "lldb/Utility/FileSpec.h"
#include "lldb/lldb-forward.h"
#include "lldb/lldb-types.h"

#include <optional>
#include <string>

namespace lldb_private {

class CoreDumpOptions {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we rename SBCoreDumpOptions to SBSaveCoreOptions, this should become SaveCoreOptions

public:
CoreDumpOptions(const lldb_private::FileSpec &fspec)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove the FileSpec from the constructor and add a accessor to set the output file.

: m_core_dump_file(std::move(fspec)){};
~CoreDumpOptions() = default;

void SetCoreDumpPluginName(llvm::StringRef name);
std::optional<llvm::StringRef> GetCoreDumpPluginName() const;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return an std::optional<std::string> to match how it is stored in the instance variable.


void SetCoreDumpStyle(lldb::SaveCoreStyle style);
lldb::SaveCoreStyle GetCoreDumpStyle() const;

const lldb_private::FileSpec &GetOutputFile() const;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add an accessor for SetOutputFile() as well. Why? Because we want to use this in the "process save-core" command and fill this structure in as options and arguments are parsed.


private:
std::optional<std::string> m_core_dump_plugin_name;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change m_core_dump_ to m_. This is a CoreDumpOptions class so no need to repeat the name here in the instance variable.

const lldb_private::FileSpec m_core_dump_file;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove const and change m_core_dump_file to m_file. This is a CoreDumpOptions class so no need to repeat the name here in the instance variable.

lldb::SaveCoreStyle m_core_dump_style = lldb::eSaveCoreUnspecified;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be std::optional< lldb::SaveCoreStyle>. And the accessor should return a lldb::eSaveCoreUnspecified if the optional has no value. Rename from m_core_dump_style to m_style`

};
} // namespace lldb_private

#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_COREDUMPOPTIONS_H
4 changes: 2 additions & 2 deletions lldb/include/lldb/lldb-private-interfaces.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#ifndef LLDB_LLDB_PRIVATE_INTERFACES_H
#define LLDB_LLDB_PRIVATE_INTERFACES_H

#include "lldb/Symbol/CoreDumpOptions.h"
#include "lldb/lldb-enumerations.h"
#include "lldb/lldb-forward.h"
#include "lldb/lldb-private-enumerations.h"
Expand Down Expand Up @@ -55,8 +56,7 @@ typedef ObjectFile *(*ObjectFileCreateMemoryInstance)(
const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp,
const lldb::ProcessSP &process_sp, lldb::addr_t offset);
typedef bool (*ObjectFileSaveCore)(const lldb::ProcessSP &process_sp,
const FileSpec &outfile,
lldb::SaveCoreStyle &core_style,
lldb_private::CoreDumpOptions &core_options,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make const: const lldb_private::CoreDumpOptions &core_options

Status &error);
typedef EmulateInstruction *(*EmulateInstructionCreateInstance)(
const ArchSpec &arch, InstructionType inst_type);
Expand Down
1 change: 1 addition & 0 deletions lldb/source/API/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ add_lldb_library(liblldb SHARED ${option_framework}
SBCommandReturnObject.cpp
SBCommunication.cpp
SBCompileUnit.cpp
SBCoreDumpOptions.cpp
SBData.cpp
SBDebugger.cpp
SBDeclaration.cpp
Expand Down
67 changes: 67 additions & 0 deletions lldb/source/API/SBCoreDumpOptions.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
//===-- SBCoreDumpOptions.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "lldb/API/SBCoreDumpOptions.h"
#include "lldb/Host/FileSystem.h"
#include "lldb/Symbol/CoreDumpOptions.h"
#include "lldb/Utility/Instrumentation.h"

#include "Utils.h"

using namespace lldb;

SBCoreDumpOptions::SBCoreDumpOptions(const char *filePath) {
LLDB_INSTRUMENT_VA(this, filePath);
lldb_private::FileSpec fspec(filePath);
lldb_private::FileSystem::Instance().Resolve(fspec);
m_opaque_up = std::make_unique<lldb_private::CoreDumpOptions>(fspec);
}

SBCoreDumpOptions::SBCoreDumpOptions(const SBCoreDumpOptions &rhs) {
LLDB_INSTRUMENT_VA(this, rhs);

m_opaque_up = clone(rhs.m_opaque_up);
}

const SBCoreDumpOptions &
SBCoreDumpOptions::operator=(const SBCoreDumpOptions &rhs) {
LLDB_INSTRUMENT_VA(this, rhs);

if (this != &rhs)
m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}

void SBCoreDumpOptions::SetCoreDumpPluginName(const char *name) {
m_opaque_up->SetCoreDumpPluginName(name);
}

void SBCoreDumpOptions::SetCoreDumpStyle(lldb::SaveCoreStyle style) {
m_opaque_up->SetCoreDumpStyle(style);
}

const std::optional<const char *>
SBCoreDumpOptions::GetCoreDumpPluginName() const {
const auto &name = m_opaque_up->GetCoreDumpPluginName();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't want to return std::optional or any STL across library boundaries in our pubic API.

We have two options here:

  1. Have the lldb_private::CoreDumpOptions::GetCoreDumpPluginName() return an optional like it already is and return a NULL by doing:
name = m_opaque_up->GetCoreDumpPluginName();
if (name.has_value())
 return name->data();
return NULL;
  1. change lldb_private::CoreDumpOptions::GetCoreDumpPluginName() to return a "const char *" and do the work in that accessor.

if (name->empty())
return std::nullopt;
return name->data();
}

const char *SBCoreDumpOptions::GetOutputFile() const {
return m_opaque_up->GetOutputFile().GetFilename().AsCString();
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Return a SBFileSpec object here. Also remove the "const" as it doesn't mean anything because it just means you can't change the m_opaque_up value, but it will still allow you to call a non const function on the pointer contained in m_opaque_up... You will need to add the SBCoreDumpOptions as friend class in SBFileSpec.h so that you can call the constructor that uses a lldb_private::FileSpec. Then this code becomes:

lldb::SBFileSpec SBCoreDumpOptions::GetOutputFile() {
  return lldb::SBFileSpec(m_opaque_up->GetOutputFile());
}


const std::optional<lldb::SaveCoreStyle>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove std::optional from here and from lldb_private::CoreDumpOptions::GetCoreDumpStyle() and have them both return a valid lldb::SaveCoreStyle. lldb_private::CoreDumpOptions::GetCoreDumpStyle() will check if its optional value has a value and return it if it has one, else it can return lldb::eSaveCoreUnspecified

SBCoreDumpOptions::GetCoreDumpStyle() const {
return m_opaque_up->GetCoreDumpStyle();
}

lldb_private::CoreDumpOptions &SBCoreDumpOptions::Ref() const {
return *m_opaque_up.get();
}
18 changes: 13 additions & 5 deletions lldb/source/API/SBProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

#include "lldb/API/SBBroadcaster.h"
#include "lldb/API/SBCommandReturnObject.h"
#include "lldb/API/SBCoreDumpOptions.h"
#include "lldb/API/SBDebugger.h"
#include "lldb/API/SBEvent.h"
#include "lldb/API/SBFile.h"
Expand Down Expand Up @@ -1222,7 +1223,17 @@ lldb::SBError SBProcess::SaveCore(const char *file_name) {
lldb::SBError SBProcess::SaveCore(const char *file_name,
const char *flavor,
SaveCoreStyle core_style) {
LLDB_INSTRUMENT_VA(this, file_name, flavor, core_style);
SBCoreDumpOptions options(file_name);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would default construct the SBCoreDumpOptions and then call:

options.SetOutputFile(file_name);

If a user wants to make a command line tool that uses this API, they will need to default construct a SBCoreDumpOptions object and fill things in as needed. If we require a filename up front, then that ruins the ability to use the SBCoreDumpOptions class effectively.

options.SetCoreDumpPluginName(flavor);
options.SetCoreDumpStyle(core_style);
return SaveCore(options);
}

lldb::SBError SBProcess::SaveCore(SBCoreDumpOptions &options) {

LLDB_INSTRUMENT_VA(this, options.GetOutputFile(),
options.GetCoreDumpPluginName(),
options.GetCoreDumpStyle());

lldb::SBError error;
ProcessSP process_sp(GetSP());
Expand All @@ -1239,10 +1250,7 @@ lldb::SBError SBProcess::SaveCore(const char *file_name,
return error;
}

FileSpec core_file(file_name);
FileSystem::Instance().Resolve(core_file);
error.ref() = PluginManager::SaveCore(process_sp, core_file, core_style,
flavor);
error.ref() = PluginManager::SaveCore(process_sp, options.Ref());

return error;
}
Expand Down
8 changes: 5 additions & 3 deletions lldb/source/Commands/CommandObjectProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1304,9 +1304,11 @@ class CommandObjectProcessSaveCore : public CommandObjectParsed {
FileSpec output_file(command.GetArgumentAtIndex(0));
FileSystem::Instance().Resolve(output_file);
SaveCoreStyle corefile_style = m_options.m_requested_save_core_style;
Status error =
PluginManager::SaveCore(process_sp, output_file, corefile_style,
m_options.m_requested_plugin_name);
CoreDumpOptions core_dump_options(output_file);
core_dump_options.SetCoreDumpPluginName(
m_options.m_requested_plugin_name);
core_dump_options.SetCoreDumpStyle(corefile_style);
Status error = PluginManager::SaveCore(process_sp, core_dump_options);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to remove the instance variables m_requested_plugin_name and m_requested_save_core_style and replace with with lldb_private::CoreDumpOptions m_options;. Then in the code that used to fill in the old ivars, we will just call the accessor instead. We can also call the accessor to set the output file as well on the m_options; ivar.

if (error.Success()) {
if (corefile_style == SaveCoreStyle::eSaveCoreDirtyOnly ||
corefile_style == SaveCoreStyle::eSaveCoreStackOnly) {
Expand Down
24 changes: 14 additions & 10 deletions lldb/source/Core/PluginManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "lldb/Host/FileSystem.h"
#include "lldb/Host/HostInfo.h"
#include "lldb/Interpreter/OptionValueProperties.h"
#include "lldb/Symbol/CoreDumpOptions.h"
#include "lldb/Target/Process.h"
#include "lldb/Utility/FileSpec.h"
#include "lldb/Utility/Status.h"
Expand Down Expand Up @@ -689,12 +690,11 @@ PluginManager::GetObjectFileCreateMemoryCallbackForPluginName(
}

Status PluginManager::SaveCore(const lldb::ProcessSP &process_sp,
const FileSpec &outfile,
lldb::SaveCoreStyle &core_style,
llvm::StringRef plugin_name) {
if (plugin_name.empty()) {
lldb_private::CoreDumpOptions &options) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make const: const lldb_private::CoreDumpOptions &options

if (options.GetCoreDumpPluginName()->empty()) {
// Try saving core directly from the process plugin first.
llvm::Expected<bool> ret = process_sp->SaveCore(outfile.GetPath());
llvm::Expected<bool> ret =
process_sp->SaveCore(options.GetOutputFile().GetPath());
if (!ret)
return Status(ret.takeError());
if (ret.get())
Expand All @@ -705,14 +705,18 @@ Status PluginManager::SaveCore(const lldb::ProcessSP &process_sp,
Status error;
auto &instances = GetObjectFileInstances().GetInstances();
for (auto &instance : instances) {
if (plugin_name.empty() || instance.name == plugin_name) {
if (instance.save_core &&
instance.save_core(process_sp, outfile, core_style, error))
if (options.GetCoreDumpPluginName()->empty() ||
instance.name == options.GetCoreDumpPluginName()) {
if (instance.save_core && instance.save_core(process_sp, options, error))
return error;
}
}
error.SetErrorString(
"no ObjectFile plugins were able to save a core for this process");

// Check to see if any of the object file plugins tried and failed to save.
// If none ran, set the error message.
if (error.Success())
error.SetErrorString(
"no ObjectFile plugins were able to save a core for this process");
return error;
}

Expand Down
6 changes: 4 additions & 2 deletions lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6519,8 +6519,10 @@ struct page_object {
};

bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp,
const FileSpec &outfile,
lldb::SaveCoreStyle &core_style, Status &error) {
lldb_private::CoreDumpOptions &core_options,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const lldb_private::CoreDumpOptions &core_options

Status &error) {
auto core_style = core_options.GetCoreDumpStyle();
const auto outfile = core_options.GetOutputFile();
if (!process_sp)
return false;

Expand Down
3 changes: 1 addition & 2 deletions lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ class ObjectFileMachO : public lldb_private::ObjectFile {
lldb_private::ModuleSpecList &specs);

static bool SaveCore(const lldb::ProcessSP &process_sp,
const lldb_private::FileSpec &outfile,
lldb::SaveCoreStyle &core_style,
lldb_private::CoreDumpOptions &core_options,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const lldb_private::CoreDumpOptions &core_options

lldb_private::Status &error);

static bool MagicBytesMatch(lldb::DataBufferSP data_sp, lldb::addr_t offset,
Expand Down
Loading