Support gnu_unique_object symbols on MIPS.
authorJoseph Myers <joseph@codesourcery.com>
Mon, 27 Jan 2020 22:00:52 +0000 (22:00 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Mon, 27 Jan 2020 22:00:52 +0000 (22:00 +0000)
mips_declare_object_name is missing the support for declaring symbols
as gnu_unique_object that is present in the generic
ASM_DECLARE_OBJECT_NAME in elfos.h.  I'm not aware of any
MIPS-specific reason for that support to be absent;
mips_declare_object_name predates the addition of gnu_unique_object
support and as far as I can tell this was simply an oversight when
that support was added.  This patch adds the missing support,
following the code in elfos.h.

Tested with no regressions with cross to mips-linux-gnu.  In
particular, this fixes the failure of the recently-added glibc test
elf/tst-dlopen-nodelete-reloc, which relies on the compiler generating
such symbols, for MIPS.

* config/mips/mips.c (mips_declare_object_name)
[USE_GNU_UNIQUE_OBJECT]: Support use of gnu_unique_object.

gcc/ChangeLog
gcc/config/mips/mips.c

index b3624b15195dda5082e0f0e711da166b291c8f42..af0945f6799a7c10f63de0556b97705b4a3062bf 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-27  Joseph Myers  <joseph@codesourcery.com>
+
+       * config/mips/mips.c (mips_declare_object_name)
+       [USE_GNU_UNIQUE_OBJECT]: Support use of gnu_unique_object.
+
 2020-01-27  Martin Liska  <mliska@suse.cz>
 
        PR gcov-profile/93403
index dae189ed20d6095202ced508898479dc995c3e8e..513fc5fe2952c21553a1cfaca743d85cca3a4e34 100644 (file)
@@ -9775,7 +9775,14 @@ mips_declare_object_name (FILE *stream, const char *name,
                          tree decl ATTRIBUTE_UNUSED)
 {
 #ifdef ASM_OUTPUT_TYPE_DIRECTIVE
-  ASM_OUTPUT_TYPE_DIRECTIVE (stream, name, "object");
+#ifdef USE_GNU_UNIQUE_OBJECT
+  /* As in elfos.h.  */
+  if (USE_GNU_UNIQUE_OBJECT && DECL_ONE_ONLY (decl)
+      && (!DECL_ARTIFICIAL (decl) || !TREE_READONLY (decl)))
+    ASM_OUTPUT_TYPE_DIRECTIVE (stream, name, "gnu_unique_object");
+  else
+#endif
+    ASM_OUTPUT_TYPE_DIRECTIVE (stream, name, "object");
 #endif
 
   size_directive_output = 0;