diff options
author | Evgenii Stepanov <eugenis@google.com> | 2016-03-03 11:36:36 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2016-03-03 11:42:13 -0800 |
commit | 95ecdfbfcbf508919652a0254ee2b8c6572a949e (patch) | |
tree | 826f8608795c4781115a6c508a498d61795cd03d /gold/testsuite/plugin_test.c | |
parent | bdf7e23048b68171c01f2498cc46670a76e68c4d (diff) | |
download | binutils-95ecdfbfcbf508919652a0254ee2b8c6572a949e.zip binutils-95ecdfbfcbf508919652a0254ee2b8c6572a949e.tar.gz binutils-95ecdfbfcbf508919652a0254ee2b8c6572a949e.tar.bz2 |
get_symbols() plugin API tweak to support --start-lib/--end-lib.
Let the plugin know that a file is not being included in the link by
returning LDPS_NO_SYMS from get_symbols().
include/
* plugin-api.h (enum ld_plugin_tag): Add LDPT_GET_SYMBOLS_V3.
gold/
* plugin.h (Pluginobj::get_symbol_resolution_info): Add version
parameter.
* plugin.cc (get_symbols_v3): New function.
(Plugin::load): Add LDPT_GET_SYMBOLS_V3.
(Pluginobj::get_symbol_resolution_info): Return LDPS_NO_SYMS when using
new version.
Diffstat (limited to 'gold/testsuite/plugin_test.c')
-rw-r--r-- | gold/testsuite/plugin_test.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gold/testsuite/plugin_test.c b/gold/testsuite/plugin_test.c index bf30d41..acfc7eb 100644 --- a/gold/testsuite/plugin_test.c +++ b/gold/testsuite/plugin_test.c @@ -57,6 +57,7 @@ static ld_plugin_register_cleanup register_cleanup_hook = NULL; static ld_plugin_add_symbols add_symbols = NULL; static ld_plugin_get_symbols get_symbols = NULL; static ld_plugin_get_symbols get_symbols_v2 = NULL; +static ld_plugin_get_symbols get_symbols_v3 = NULL; static ld_plugin_add_input_file add_input_file = NULL; static ld_plugin_message message = NULL; static ld_plugin_get_input_file get_input_file = NULL; @@ -124,6 +125,9 @@ onload(struct ld_plugin_tv *tv) case LDPT_GET_SYMBOLS_V2: get_symbols_v2 = entry->tv_u.tv_get_symbols; break; + case LDPT_GET_SYMBOLS_V3: + get_symbols_v3 = entry->tv_u.tv_get_symbols; + break; case LDPT_ADD_INPUT_FILE: add_input_file = entry->tv_u.tv_add_input_file; break; @@ -420,9 +424,9 @@ all_symbols_read_hook(void) (*message)(LDPL_INFO, "all symbols read hook called"); - if (get_symbols_v2 == NULL) + if (get_symbols_v3 == NULL) { - fprintf(stderr, "tv_get_symbols (v2) interface missing\n"); + fprintf(stderr, "tv_get_symbols (v3) interface missing\n"); return LDPS_ERR; } @@ -430,8 +434,13 @@ all_symbols_read_hook(void) claimed_file != NULL; claimed_file = claimed_file->next) { - (*get_symbols_v2)(claimed_file->handle, claimed_file->nsyms, - claimed_file->syms); + enum ld_plugin_status status = (*get_symbols_v3)( + claimed_file->handle, claimed_file->nsyms, claimed_file->syms); + if (status == LDPS_NO_SYMS) + { + (*message)(LDPL_INFO, "%s: no symbols", claimed_file->name); + continue; + } for (i = 0; i < claimed_file->nsyms; ++i) { |