// plugin.h -- plugin manager for gold -*- C++ -*-
-// Copyright 2008, 2009 Free Software Foundation, Inc.
+// Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
// Written by Cary Coutant <ccoutant@google.com>.
// This file is part of gold.
args_(),
claim_file_handler_(NULL),
all_symbols_read_handler_(NULL),
- cleanup_handler_(NULL)
+ cleanup_handler_(NULL),
+ cleanup_done_(false)
{ }
~Plugin()
// Call the claim-file handler.
bool
- claim_file(struct ld_plugin_input_file *plugin_input_file);
+ claim_file(struct ld_plugin_input_file* plugin_input_file);
// Call the all-symbols-read handler.
void
// Add an argument
void
- add_option(const char *arg)
+ add_option(const char* arg)
{
this->args_.push_back(arg);
}
ld_plugin_claim_file_handler claim_file_handler_;
ld_plugin_all_symbols_read_handler all_symbols_read_handler_;
ld_plugin_cleanup_handler cleanup_handler_;
+ // TRUE if the cleanup handlers have been called.
+ bool cleanup_done_;
};
// A manager class for plugins.
public:
Plugin_manager(const General_options& options)
: plugins_(), objects_(), deferred_layout_objects_(), input_file_(NULL),
- plugin_input_file_(), in_replacement_phase_(false), cleanup_done_(false),
+ plugin_input_file_(), in_replacement_phase_(false),
options_(options), workqueue_(NULL), task_(NULL), input_objects_(NULL),
symtab_(NULL), layout_(NULL), dirpath_(NULL), mapfile_(NULL),
- this_blocker_(NULL)
+ this_blocker_(NULL), extra_search_path_()
{ this->current_ = plugins_.end(); }
~Plugin_manager();
// Call the plugin claim-file handlers in turn to see if any claim the file.
Pluginobj*
- claim_file(Input_file *input_file, off_t offset, off_t filesize);
+ claim_file(Input_file* input_file, off_t offset, off_t filesize);
// Call the all-symbols-read handlers.
void
// Get input file information with an open (possibly re-opened)
// file descriptor.
ld_plugin_status
- get_input_file(unsigned int handle, struct ld_plugin_input_file *file);
+ get_input_file(unsigned int handle, struct ld_plugin_input_file* file);
// Release an input file.
ld_plugin_status
// Add a new input file.
ld_plugin_status
- add_input_file(char *pathname);
+ add_input_file(const char* pathname, bool is_lib);
+
+ // Set the extra library path.
+ ld_plugin_status
+ set_extra_library_path(const char* path);
// Return TRUE if we are in the replacement phase.
bool
// placeholder symbols from the Pluginobj objects.
bool in_replacement_phase_;
- // TRUE if the cleanup handlers have been called.
- bool cleanup_done_;
-
const General_options& options_;
Workqueue* workqueue_;
Task* task_;
Dirsearch* dirpath_;
Mapfile* mapfile_;
Task_token* this_blocker_;
+
+ // An extra directory to seach for the libraries passed by
+ // add_input_library.
+ std::string extra_search_path_;
};
void
do_add_symbols(Symbol_table*, Read_symbols_data*, Layout*);
+ Archive::Should_include
+ do_should_include_member(Symbol_table* symtab, Layout*, Read_symbols_data*,
+ std::string* why);
+
// Get the size of a section.
uint64_t
do_section_size(unsigned int shndx);
void
do_get_global_symbol_counts(const Symbol_table*, size_t*, size_t*) const;
+ // Get global symbols.
+ const Symbols*
+ do_get_global_symbols() const;
+
// Add placeholder symbols from a claimed file.
ld_plugin_status
add_symbols_from_plugin(int nsyms, const ld_plugin_symbol* syms);