Provide string description of definition, visibility and resolution in LTO plug-in.

ld/ChangeLog:

2019-02-26  Martin Liska  <mliska@suse.cz>

	* plugin.c (get_symbols): Add lto_kind_str, lto_resolution_str,
	lto_visibility_str and use then to inform about plugin-symbols.
	* testsuite/ld-plugin/plugin-12.d: Adjust expected pattern.
This commit is contained in:
marxin 2019-03-26 10:40:04 +01:00
parent 5fb812fc79
commit 7ea79cb3af
3 changed files with 81 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2019-03-26 Martin Liska <mliska@suse.cz>
* plugin.c (get_symbols): Add lto_kind_str, lto_resolution_str,
lto_visibility_str and use then to inform about plugin-symbols.
* testsuite/ld-plugin/plugin-12.d: Adjust expected pattern.
2019-03-25 Tamar Christina <tamar.christina@arm.com>
* testsuite/ld-arm/jump-reloc-veneers-cond-long.d: Update disassembly.

View File

@ -659,6 +659,73 @@ is_visible_from_outside (struct ld_plugin_symbol *lsym,
return FALSE;
}
/* Return LTO kind string name that corresponds to INDEX enum value. */
static const char *
get_lto_kind (unsigned int index)
{
static char buffer[64];
const char *lto_kind_str[5] =
{
"DEF",
"WEAKDEF",
"UNDEF",
"WEAKUNDEF",
"COMMON"
};
if (index < ARRAY_SIZE (lto_kind_str))
return lto_kind_str [index];
sprintf (buffer, _("unknown LTO kind value %x"), index);
return buffer;
}
/* Return LTO resolution string name that corresponds to INDEX enum value. */
static const char *
get_lto_resolution (unsigned int index)
{
static char buffer[64];
static const char *lto_resolution_str[10] =
{
"UNKNOWN",
"UNDEF",
"PREVAILING_DEF",
"PREVAILING_DEF_IRONLY",
"PREEMPTED_REG",
"PREEMPTED_IR",
"RESOLVED_IR",
"RESOLVED_EXEC",
"RESOLVED_DYN",
"PREVAILING_DEF_IRONLY_EXP",
};
if (index < ARRAY_SIZE (lto_resolution_str))
return lto_resolution_str [index];
sprintf (buffer, _("unknown LTO resolution value %x"), index);
return buffer;
}
/* Return LTO visibility string name that corresponds to INDEX enum value. */
static const char *
get_lto_visibility (unsigned int index)
{
static char buffer[64];
const char *lto_visibility_str[4] =
{
"DEFAULT",
"PROTECTED",
"INTERNAL",
"HIDDEN"
};
if (index < ARRAY_SIZE (lto_visibility_str))
return lto_visibility_str [index];
sprintf (buffer, _("unknown LTO visibility value %x"), index);
return buffer;
}
/* Get the symbol resolution info for a plugin-claimed input file. */
static enum ld_plugin_status
get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms,
@ -777,9 +844,11 @@ get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms,
syms[n].resolution = res;
if (report_plugin_symbols)
einfo (_("%P: %pB: symbol `%s' "
"definition: %d, visibility: %d, resolution: %d\n"),
"definition: %s, visibility: %s, resolution: %s\n"),
abfd, syms[n].name,
syms[n].def, syms[n].visibility, res);
get_lto_kind (syms[n].def),
get_lto_visibility (syms[n].visibility),
get_lto_resolution (res));
}
return LDPS_OK;
}

View File

@ -1,6 +1,6 @@
#...
.*: symbol `func' definition: 0, visibility: 0, resolution: 2
.*: symbol `func1' definition: 0, visibility: 1, resolution: 3
.*: symbol `func2' definition: 0, visibility: 2, resolution: 3
.*: symbol `func3' definition: 0, visibility: 3, resolution: 3
.*: symbol `func' definition: DEF, visibility: DEFAULT, resolution: PREVAILING_DEF
.*: symbol `func1' definition: DEF, visibility: PROTECTED, resolution: PREVAILING_DEF_IRONLY
.*: symbol `func2' definition: DEF, visibility: INTERNAL, resolution: PREVAILING_DEF_IRONLY
.*: symbol `func3' definition: DEF, visibility: HIDDEN, resolution: PREVAILING_DEF_IRONLY
#pass