Provide string description of definition, visibility and resolution in LTO plug-in.
authormarxin <mliska@suse.cz>
Tue, 26 Mar 2019 09:40:04 +0000 (10:40 +0100)
committermarxin <mliska@suse.cz>
Tue, 26 Mar 2019 14:22:01 +0000 (15:22 +0100)
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.

ld/ChangeLog
ld/plugin.c
ld/testsuite/ld-plugin/plugin-12.d

index 002915088ed09d2c2170d6052d413b526b9ad424..da1e8e1b179d0adacf4f430a36263371f47fdbd0 100644 (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.
index ea1a7f70645d339d8346b365f4b2a20f2686519d..0e15654dcf43f2f69056dd90356b72f7e6f9903f 100644 (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;
 }
index 10d772553d812a1e920ca2a67868b3db93d66e7e..35eae1e00a20bd1cc7602b26237d6912f7052087 100644 (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