aboutsummaryrefslogtreecommitdiff
path: root/gold/testsuite/plugin_test.c
diff options
context:
space:
mode:
authorEvgenii Stepanov <eugenis@google.com>2016-03-03 11:36:36 -0800
committerCary Coutant <ccoutant@gmail.com>2016-03-03 11:42:13 -0800
commit95ecdfbfcbf508919652a0254ee2b8c6572a949e (patch)
tree826f8608795c4781115a6c508a498d61795cd03d /gold/testsuite/plugin_test.c
parentbdf7e23048b68171c01f2498cc46670a76e68c4d (diff)
downloadbinutils-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.c17
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)
{