* plugin.cc (add_input_library): New.
authorIan Lance Taylor <ian@airs.com>
Tue, 6 Oct 2009 20:15:09 +0000 (20:15 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 6 Oct 2009 20:15:09 +0000 (20:15 +0000)
(Plugin::load): Add add_input_library to tv.
(Plugin_manager::add_input_file): Add the is_lib argument.
(add_input_file): Update call to Plugin_manager::add_input_file.
(add_input_library): New.
* plugin.h (Plugin_manager::add_input_file): Add the is_lib argument.

gold/ChangeLog
gold/plugin.cc
gold/plugin.h

index 8068a64fc81c7778368aa5ec5ee97e2630ae5b8f..48401799e5eb1f6f20869ec5346dfefc13510e92 100644 (file)
@@ -1,3 +1,12 @@
+2009-10-06   Rafael Espindola  <espindola@google.com>
+
+       * plugin.cc (add_input_library): New.
+       (Plugin::load): Add add_input_library to tv.
+       (Plugin_manager::add_input_file): Add the is_lib argument.
+       (add_input_file): Update call to Plugin_manager::add_input_file.
+       (add_input_library): New.
+       * plugin.h (Plugin_manager::add_input_file): Add the is_lib argument.
+
 2009-09-30  Doug Kwan  <dougkwan@google.com>
 
        * arm.cc (Target_arm::may_need_copy_reloc): Check for THUMB function
index 4df405f8bfc776dcda7f2f28353d3faa6af95a89..ccbcffd807cdc5b61173e3da27cc659c5bd177b9 100644 (file)
@@ -73,6 +73,9 @@ get_symbols(const void *handle, int nsyms, struct ld_plugin_symbol *syms);
 static enum ld_plugin_status
 add_input_file(char *pathname);
 
+static enum ld_plugin_status
+add_input_library(char *pathname);
+
 static enum ld_plugin_status
 message(int level, const char *format, ...);
 
@@ -118,7 +121,7 @@ Plugin::load()
   sscanf(ver, "%d.%d", &major, &minor);
 
   // Allocate and populate a transfer vector.
-  const int tv_fixed_size = 13;
+  const int tv_fixed_size = 14;
   int tv_size = this->args_.size() + tv_fixed_size;
   ld_plugin_tv *tv = new ld_plugin_tv[tv_size];
 
@@ -184,6 +187,10 @@ Plugin::load()
   tv[i].tv_tag = LDPT_ADD_INPUT_FILE;
   tv[i].tv_u.tv_add_input_file = add_input_file;
 
+  ++i;
+  tv[i].tv_tag = LDPT_ADD_INPUT_LIBRARY;
+  tv[i].tv_u.tv_add_input_library = add_input_library;
+
   ++i;
   tv[i].tv_tag = LDPT_NULL;
   tv[i].tv_u.tv_val = 0;
@@ -401,9 +408,9 @@ Plugin_manager::release_input_file(unsigned int handle)
 // Add a new input file.
 
 ld_plugin_status
-Plugin_manager::add_input_file(char *pathname)
+Plugin_manager::add_input_file(char *pathname, bool is_lib)
 {
-  Input_file_argument file(pathname, false, "", false, this->options_);
+  Input_file_argument file(pathname, is_lib, "", false, this->options_);
   Input_argument* input_argument = new Input_argument(file);
   Task_token* next_blocker = new Task_token(true);
   next_blocker->add_blocker();
@@ -941,7 +948,16 @@ static enum ld_plugin_status
 add_input_file(char *pathname)
 {
   gold_assert(parameters->options().has_plugins());
-  return parameters->options().plugins()->add_input_file(pathname);
+  return parameters->options().plugins()->add_input_file(pathname, false);
+}
+
+// Add a new (real) library required by a plugin.
+
+static enum ld_plugin_status
+add_input_library(char *pathname)
+{
+  gold_assert(parameters->options().has_plugins());
+  return parameters->options().plugins()->add_input_file(pathname, true);
 }
 
 // Issue a diagnostic message from a plugin.
index 6a98ac8d8bc19f700a763ad5b6a16770be5f05a7..965b38903e5b6894d774824f1b4117b09448b912 100644 (file)
@@ -227,7 +227,7 @@ class Plugin_manager
 
   // Add a new input file.
   ld_plugin_status
-  add_input_file(char *pathname);
+  add_input_file(char *pathname, bool is_lib);
 
   // Return TRUE if we are in the replacement phase.
   bool