forked from Imagelibrary/binutils-gdb
Add --debug=plugin option to record plugin actions.
With --debug=plugin, gold will log all plugin actions to a log file, and make copies of plugin-supplied replacement files in a temporary directory created under the current working directory. gold/ * debug.h (DEBUG_PLUGIN): New constant. (DEBUG_ALL): Add DEBUG_PLUGIN. (debug_string_to_enum): Likewise. * plugin.cc (make_sized_plugin_object): Add filename parameter. (Plugin_recorder): New class. (Plugin_manager::~Plugin_manager): Delete recorder_. (Plugin_manager::load_plugins): Create and initialize recorder_. (Plugin_manager::claim_file): Record claimed and unclaimed files. (Plugin_manager::make_plugin_object): Use object name as name for plugin object, if available. (Plugin_manager::add_input_file): Record replacement files. (Sized_pluginobj::do_add_symbols): Record plugin symbols. (Plugin_finish::run): Call Plugin_recorder::finish(). (make_sized_plugin_object): Add filename parameter and pass to Sized_pluginobj constructor. * plugin.h (Plugin::filename): New method. (Plugin::recorder): New method. (Plugin::recorder_): New data member.
This commit is contained in:
@@ -47,6 +47,7 @@ class Task;
|
||||
class Task_token;
|
||||
class Pluginobj;
|
||||
class Plugin_rescan;
|
||||
class Plugin_recorder;
|
||||
|
||||
// This class represents a single plugin library.
|
||||
|
||||
@@ -114,6 +115,10 @@ class Plugin
|
||||
this->args_.push_back(arg);
|
||||
}
|
||||
|
||||
const std::string&
|
||||
filename() const
|
||||
{ return this->filename_; }
|
||||
|
||||
private:
|
||||
Plugin(const Plugin&);
|
||||
Plugin& operator=(const Plugin&);
|
||||
@@ -146,7 +151,8 @@ class Plugin_manager
|
||||
options_(options), workqueue_(NULL), task_(NULL), input_objects_(NULL),
|
||||
symtab_(NULL), layout_(NULL), dirpath_(NULL), mapfile_(NULL),
|
||||
this_blocker_(NULL), extra_search_path_(), lock_(NULL),
|
||||
initialize_lock_(&lock_), defsym_defines_set_()
|
||||
initialize_lock_(&lock_), defsym_defines_set_(),
|
||||
recorder_(NULL)
|
||||
{ this->current_ = plugins_.end(); }
|
||||
|
||||
~Plugin_manager();
|
||||
@@ -316,6 +322,10 @@ class Plugin_manager
|
||||
layout()
|
||||
{ return this->layout_; }
|
||||
|
||||
Plugin_recorder*
|
||||
recorder() const
|
||||
{ return this->recorder_; }
|
||||
|
||||
private:
|
||||
Plugin_manager(const Plugin_manager&);
|
||||
Plugin_manager& operator=(const Plugin_manager&);
|
||||
@@ -413,6 +423,9 @@ class Plugin_manager
|
||||
// Keep track of all symbols defined by defsym.
|
||||
typedef Unordered_set<std::string> Defsym_defines_set;
|
||||
Defsym_defines_set defsym_defines_set_;
|
||||
|
||||
// Class to record plugin actions.
|
||||
Plugin_recorder* recorder_;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user