darwin.c (machopic_stub_name): Try matching by name.
authorStan Shebs <shebs@apple.com>
Thu, 2 Aug 2001 01:40:01 +0000 (01:40 +0000)
committerStan Shebs <shebs@gcc.gnu.org>
Thu, 2 Aug 2001 01:40:01 +0000 (01:40 +0000)
        * config/darwin.c (machopic_stub_name): Try matching by name.
        (update_stubs): New function.
        (darwin_encode_section_info):  Call it and update_non_lazy_ptrs
        unconditionally.

From-SVN: r44562

gcc/ChangeLog
gcc/config/darwin.c

index af480ef5e46ca754eedd5a29bede857580702325..b0802ccdfdb9dd26f9dfd08aabd88cdb18f2b72e 100644 (file)
@@ -1,3 +1,10 @@
+2001-08-01  Stan Shebs  <shebs@apple.com>
+
+       * config/darwin.c (machopic_stub_name): Try matching by name.
+       (update_stubs): New function.
+       (darwin_encode_section_info):  Call it and update_non_lazy_ptrs
+       unconditionally.
+
 2001-08-01  Richard Henderson  <rth@redhat.com>
 
        * except.c (output_function_exception_table): Use assemble_align.
index abfb5f763b22b7188d85506087c8e4f6a76d1bfc..65311a3a61583e8be7265f2872c79abc5870dea6 100644 (file)
@@ -45,6 +45,7 @@ extern void machopic_output_stub PARAMS ((FILE *, const char *, const char *));
 static int machopic_data_defined_p PARAMS ((const char *));
 static int func_name_maybe_scoped PARAMS ((const char *));
 static void update_non_lazy_ptrs PARAMS ((const char *));
+static void update_stubs PARAMS ((const char *));
 
 int
 name_needs_quotes (name)
@@ -330,6 +331,8 @@ machopic_stub_name (name)
     {
       if (ident == TREE_VALUE (temp))
        return IDENTIFIER_POINTER (TREE_PURPOSE (temp));
+      if (strcmp (name, IDENTIFIER_POINTER (TREE_VALUE (temp))) == 0)
+       return IDENTIFIER_POINTER (TREE_PURPOSE (temp));
     }
 
   STRIP_NAME_ENCODING (name, name);
@@ -1025,9 +1028,6 @@ darwin_encode_section_info (decl)
       memcpy (new_str, orig_str, len);
       new_str[1] = code;
       XSTR (sym_ref, 0) = ggc_alloc_string (new_str, len);
-      /* The non-lazy pointer list may have captured references to the
-        old encoded name, change them.  */
-      update_non_lazy_ptrs (XSTR (sym_ref, 0));
     }
   else
     {
@@ -1041,6 +1041,10 @@ darwin_encode_section_info (decl)
       memcpy (new_str + 4, orig_str, len);
       XSTR (sym_ref, 0) = ggc_alloc_string (new_str, new_len);
     }
+  /* The non-lazy pointer list may have captured references to the
+     old encoded name, change them.  */
+  update_non_lazy_ptrs (XSTR (sym_ref, 0));
+  update_stubs (XSTR (sym_ref, 0));
 }
 
 /* Scan the list of non-lazy pointers and update any recorded names whose
@@ -1072,3 +1076,34 @@ update_non_lazy_ptrs (name)
        }
     }
 }
+
+
+/* Scan the list of stubs and update any recorded names whose
+   stripped name matches the argument.  */
+
+static void
+update_stubs (name)
+     const char *name;
+{
+  char *name1, *name2;
+  tree temp;
+
+  STRIP_NAME_ENCODING (name1, name);
+
+  for (temp = machopic_stubs;
+       temp != NULL_TREE; 
+       temp = TREE_CHAIN (temp))
+    {
+      char *sym_name = IDENTIFIER_POINTER (TREE_VALUE (temp));
+
+      if (*sym_name == '!')
+       {
+         STRIP_NAME_ENCODING (name2, sym_name);
+         if (strcmp (name1, name2) == 0)
+           {
+             IDENTIFIER_POINTER (TREE_VALUE (temp)) = name;
+             break;
+           }
+       }
+    }
+}