Add plugin API for processing plugin-added input files.
authorStephen Crane <sjc@immunant.com>
Fri, 10 Nov 2017 22:10:05 +0000 (22:10 +0000)
committerSriraman Tallam <tmsriram@gcc.gnu.org>
Fri, 10 Nov 2017 22:10:05 +0000 (22:10 +0000)
Gold plugins may wish to further process an input file added by a plugin. For
example, the plugin may need to assign a unique segment for sections in a
plugin-generated input file. This patch adds a plugin callback that the linker
will call when reading symbols from a new input file added after the
all_symbols_read event (i.e. an input file added by a plugin).

2017-11-10  Stephen Crane <sjc@immunant.com>

* plugin-api.h: Add plugin API for processing plugin-added
input files.

From-SVN: r254640

include/ChangeLog
include/plugin-api.h

index 8ccc57ae7832cc8a9a8cc593949540fa9627187e..9cae3fb2bd8dd8de3b62d22f88f1556bd29bf14c 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-10  Stephen Crane <sjc@immunant.com>
+
+       * plugin-api.h: Add plugin API for processing plugin-added
+       input files.
+
 2017-10-23  David Malcolm  <dmalcolm@redhat.com>
 
        * unique-ptr.h: Make include of <memory> conditional on C++11 or
index 3a3e8b456db0600f87d955628df589d9adb859ed..f081f85dfaf9da05bb7db7a648f543dd7761eeec 100644 (file)
@@ -365,6 +365,20 @@ enum ld_plugin_status
 (*ld_plugin_get_input_section_size) (const struct ld_plugin_section section,
                                      uint64_t *secsize);
 
+typedef
+enum ld_plugin_status
+(*ld_plugin_new_input_handler) (const struct ld_plugin_input_file *file);
+
+/* The linker's interface for registering the "new_input" handler. This handler
+   will be notified when a new input file has been added after the
+   all_symbols_read event, allowing the plugin to, for example, set a unique
+   segment for sections in plugin-generated input files. */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_register_new_input) (ld_plugin_new_input_handler handler);
+
+
 enum ld_plugin_level
 {
   LDPL_INFO,
@@ -407,7 +421,8 @@ enum ld_plugin_tag
   LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27,
   LDPT_GET_SYMBOLS_V3 = 28,
   LDPT_GET_INPUT_SECTION_ALIGNMENT = 29,
-  LDPT_GET_INPUT_SECTION_SIZE = 30
+  LDPT_GET_INPUT_SECTION_SIZE = 30,
+  LDPT_REGISTER_NEW_INPUT_HOOK = 31
 };
 
 /* The plugin transfer vector.  */
@@ -441,6 +456,7 @@ struct ld_plugin_tv
     ld_plugin_unique_segment_for_sections tv_unique_segment_for_sections;
     ld_plugin_get_input_section_alignment tv_get_input_section_alignment;
     ld_plugin_get_input_section_size tv_get_input_section_size;
+    ld_plugin_register_new_input tv_register_new_input;
   } tv_u;
 };