darwin.c (machopic_stub_name): Try matching by name.

* 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
This commit is contained in:
Stan Shebs 2001-08-02 01:40:01 +00:00 committed by Stan Shebs
parent 7a900ebc50
commit 4e08ba6c02
2 changed files with 45 additions and 3 deletions

View 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.

View 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;
}
}
}
}