Add plugin API for processing plugin-added input files.

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
This commit is contained in:
Stephen Crane 2017-11-10 22:10:05 +00:00 committed by Sriraman Tallam
parent 16207ddd2e
commit f382ac6d52
2 changed files with 22 additions and 1 deletions

View 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

View 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;
};