OSDN Git Service

PR target/25168
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Jan 2006 02:26:42 +0000 (02:26 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Jan 2006 02:26:42 +0000 (02:26 +0000)
* tree.c (get_file_function_name_long): Concatenate the first global
object name with a string derived from the input filename of the object
for type "F".

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109740 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree.c

index 9ffd730..9d33732 100644 (file)
@@ -1,3 +1,10 @@
+2006-01-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR target/25168
+       * tree.c (get_file_function_name_long): Concatenate the first global
+       object name with a string derived from the input filename of the object
+       for type "F".
+
 2006-01-16  Ben Elliston  <bje@au.ibm.com>
 
        * config/i386/winnt-stubs.c: Update FSF address.
index 0cca757..9aaba7e 100644 (file)
@@ -5867,7 +5867,26 @@ get_file_function_name_long (const char *type)
   char *q;
 
   if (first_global_object_name)
-    p = first_global_object_name;
+    {
+      p = first_global_object_name;
+
+      /* For type 'F', the generated name must be unique not only to this
+        translation unit but also to any given link.  Since global names
+        can be overloaded, we concatenate the first global object name
+        with a string derived from the file name of this object.  */
+      if (!strcmp (type, "F"))
+       {
+         const char *file = main_input_filename;
+
+         if (! file)
+           file = input_filename;
+
+         q = alloca (strlen (p) + 10);
+         sprintf (q, "%s_%08X", p, crc32_string (0, file));
+
+         p = q;
+       }
+    }
   else
     {
       /* We don't have anything that we know to be unique to this translation