clayborg requested changes to this revision.
clayborg added a comment.
This revision now requires changes to proceed.
Thanks for moving over into object file. See inlined comments, we should be
able to get this down to just the SaveCore and other static functions that just
return nothing. Let me know if the inlined comments don't make sense.
================
Comment at: lldb/source/Commands/CommandObjectProcess.cpp:1235
SaveCoreStyle m_requested_save_core_style;
+ std::string m_requested_plugin_name;
};
----------------
Make this a ConstString
================
Comment at: lldb/source/Commands/CommandObjectProcess.cpp:1242
if (process_sp) {
- if (command.GetArgumentCount() == 1) {
+ ConstString plugin_name(m_options.m_requested_plugin_name.c_str());
+ if (command.GetArgumentCount() <= 2) {
----------------
Remove this if we switch m_requested_plugin_name to be a ConstString. Also a
quick FYI: ConstString has a std::string constructor, so there is no need to
add ".c_str()" here if this code was going to stay.
================
Comment at: lldb/source/Commands/CommandObjectProcess.cpp:1243
+ ConstString plugin_name(m_options.m_requested_plugin_name.c_str());
+ if (command.GetArgumentCount() <= 2) {
FileSpec output_file(command.GetArgumentAtIndex(0));
----------------
We haven't changed the number of arguments here right? Options and their option
values to no count towards the argument count. So all of these have just one
argument:
```
(lldb) process save-core <file>
(lldb) process save-core -p <plugin> <file>
(lldb) proicess save-core -s <style> <file>
(lldb) process save-core -p <plugin> -s <style> <file>
```
The one argument is <file>
================
Comment at: lldb/source/Commands/CommandObjectProcess.cpp:1247
+ Status error = PluginManager::SaveCore(process_sp, output_file,
+ corefile_style, plugin_name);
if (error.Success()) {
----------------
================
Comment at: lldb/source/Commands/Options.td:746
+ def process_save_core_plugin_name : Option<"plugin-name", "p">,
+ OptionalArg<"Plugin">, Desc<"Set plugin name that creates a dump file.">;
}
----------------
================
Comment at: lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.cpp:30-31
+ GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance,
+ /*create_memory_callback=*/nullptr,
+ /*get_module_specifications=*/nullptr, SaveCore);
+}
----------------
We have two options here:
1 - if we want to pass NULL for any callbacks, then we need to fix all
callsites to that use
PluginManager::GetObjectFileCreateMemoryCallbackAtIndex(...) and
PluginManager::GetObjectFileGetModuleSpecificationsCallbackAtIndex(...) to have
this done inside of new plug-in manager
PluginManager::CreateMemoryCallbackAtIndex(...) and
PluginManager::GetModuleSpecifications(...) where these new functions iterate
over all plug-ins and skip any plug-ins that have NULL callbacks.
2 - add valid create_memory_callback and get_module_specifications callbacks
that return invalid values
Otherwise this plug-in might stop the iteration early for existing callers of
PluginManager::GetObjectFileCreateMemoryCallbackAtIndex(...) and
PluginManager::GetObjectFileGetModuleSpecificationsCallbackAtIndex(...).
================
Comment at: lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.h:15
+
+class ObjectFileMinidump : public lldb_private::ObjectFile {
+public:
----------------
Since minidump files are not object files, you can just inherit from
lldb_private::PluginInterface. Then you don't need to override any pure virtual
functions from lldb_private::ObjectFile. We should add a comment before this
class stating something like:
```
/// ObjectFileMinidump is created only to be able to save minidump core files
from existing processes with the ObjectFileMinidump::SaveCore function.
Minidump files are not ObjectFile objects, but they are core files and
currently LLDB's ObjectFile plug-ins handle emitting core files. If the core
file saving ever moves into a new plug-in type within LLDB, this code should
move as well, but for now this is where this belongs architecturally.
```
================
Comment at: lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.h:38-43
+ // LLVM RTTI support
+ static char ID;
+ bool isA(const void *ClassID) const override {
+ return ClassID == &ID || ObjectFile::isA(ClassID);
+ }
+ static bool classof(const ObjectFile *obj) { return obj->isA(&ID); }
----------------
If we don't inherit from lldb_private::ObjectFile, the we don't need the LLVM
RTTI stuff either.
================
Comment at: lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.h:45-81
+ // ObjectFile Protocol.
+
+ bool ParseHeader() override;
+
+ lldb::ByteOrder GetByteOrder() const override {
+ return m_arch.GetByteOrder();
+ }
----------------
You can remove all "override" functions if you don't inherit from
lldb_private::ObjectFile and inherit only from PluginInterface.
================
Comment at: lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.h:90-91
+private:
+ lldb_private::ArchSpec m_arch;
+ lldb_private::UUID m_uuid;
+
----------------
Remove
================
Comment at: lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.h:93-96
+ ObjectFileMinidump(const lldb::ModuleSP &module_sp,
+ lldb::DataBufferSP &data_sp, lldb::offset_t data_offset,
+ const lldb_private::FileSpec *file,
+ lldb::offset_t file_offset, lldb::offset_t length);
----------------
Remove, since minidump files are not object files.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108233/new/
https://reviews.llvm.org/D108233
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits