alpha.c (alpha_use_linkage): Follow transparent alias.
authorTristan Gingold <gingold@adacore.com>
Fri, 16 Dec 2011 15:50:11 +0000 (15:50 +0000)
committerTristan Gingold <gingold@gcc.gnu.org>
Fri, 16 Dec 2011 15:50:11 +0000 (15:50 +0000)
2011-12-16  Tristan Gingold  <gingold@adacore.com>

* config/alpha/alpha.c (alpha_use_linkage): Follow transparent alias.
(alpha_write_one_linkage): Use assemble_name to emit linkage name.

From-SVN: r182407

gcc/ChangeLog
gcc/config/alpha/alpha.c

index d5d9e5e10c9b91977b2a159d5fe14a63aa044422..59e9c6553e9ad2e1ac4c84211dabc35c3242f301 100644 (file)
@@ -1,3 +1,8 @@
+2011-12-16  Tristan Gingold  <gingold@adacore.com>
+
+       * config/alpha/alpha.c (alpha_use_linkage): Follow transparent alias.
+       (alpha_write_one_linkage): Use assemble_name to emit linkage name.
+
 2011-12-16  Tristan Gingold  <gingold@adacore.com>
 
        * config/vms/t-vms (vms.o, vms-c.o): Force output filename.
index e970227dc4cb0517d387ece0da7646bf113442ae..9048aa45c1cf39975da829781210705b788f3a49 100644 (file)
@@ -9541,10 +9541,20 @@ alpha_use_linkage (rtx func, bool lflag, bool rflag)
     {
       size_t buf_len;
       char *linksym;
+      tree id;
 
       if (name[0] == '*')
        name++;
 
+      /* Follow transparent alias, as this is used for CRTL translations.  */
+      id = maybe_get_identifier (name);
+      if (id)
+        {
+          while (IDENTIFIER_TRANSPARENT_ALIAS (id))
+            id = TREE_CHAIN (id);
+          name = IDENTIFIER_POINTER (id);
+        }
+
       buf_len = strlen (name) + 8 + 9;
       linksym = (char *) alloca (buf_len);
       snprintf (linksym, buf_len, "$%d..%s..lk", cfun->funcdef_no, name);
@@ -9577,7 +9587,7 @@ alpha_write_one_linkage (splay_tree_node node, void *data)
   if (link->rkind == KIND_CODEADDR)
     {
       /* External and used, request code address.  */
-      fprintf (stream, "\t.code_address %s\n", name);
+      fprintf (stream, "\t.code_address ");
     }
   else
     {
@@ -9586,14 +9596,16 @@ alpha_write_one_linkage (splay_tree_node node, void *data)
        {
          /* Locally defined, build linkage pair.  */
          fprintf (stream, "\t.quad %s..en\n", name);
-         fprintf (stream, "\t.quad %s\n", name);
+         fprintf (stream, "\t.quad ");
        }
       else
        {
          /* External, request linkage pair.  */
-         fprintf (stream, "\t.linkage %s\n", name);
+         fprintf (stream, "\t.linkage ");
        }
     }
+  assemble_name (stream, name);
+  fputs ("\n", stream);
 
   return 0;
 }