aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Shebs <shebs@apple.com>2001-09-04 20:58:19 +0000
committerStan Shebs <shebs@apple.com>2001-09-04 20:58:19 +0000
commitece83ab30adf028fd8f99afde29a00e0a37ba9b7 (patch)
tree17cebf8a784d26dc867f2cc1eecac92a4975cb9e
parent0f1c18cc3e0ffdae8674b364258e9a1e9d8f1488 (diff)
* config/darwin.h (ASM_DECLARE_FUNCTION_NAME): Define.
* config/darwin.c (machopic_stub_name): Account for internally generated lib calls such as memcpy. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@45385 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/darwin.c12
-rw-r--r--gcc/config/darwin.h16
3 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1de0a42fb77..9e6913c08d6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2001-09-04 Stan Shebs <shebs@apple.com>
+
+ * config/darwin.h (ASM_DECLARE_FUNCTION_NAME): Define.
+ * config/darwin.c (machopic_stub_name): Account for internally
+ generated lib calls such as memcpy.
+
2001-09-04 Richard Henderson <rth@redhat.com>
* unwind.h (_UA_END_OF_STACK): New flag.
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 3f8cffdd230..a46d46b7d5f 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -324,14 +324,22 @@ machopic_stub_name (name)
const char *name;
{
tree temp, ident = get_identifier (name);
-
+ const char *tname;
+
for (temp = machopic_stubs;
temp != NULL_TREE;
temp = TREE_CHAIN (temp))
{
if (ident == TREE_VALUE (temp))
return IDENTIFIER_POINTER (TREE_PURPOSE (temp));
- if (strcmp (name, IDENTIFIER_POINTER (TREE_VALUE (temp))) == 0)
+ tname = IDENTIFIER_POINTER (TREE_VALUE (temp));
+ if (strcmp (name, tname) == 0)
+ return IDENTIFIER_POINTER (TREE_PURPOSE (temp));
+ /* A library call name might not be section-encoded yet, so try
+ it against a stripped name. */
+ if (name[0] != '!'
+ && tname[0] == '!'
+ && strcmp (name, tname + 4) == 0)
return IDENTIFIER_POINTER (TREE_PURPOSE (temp));
}
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index efa43f2138a..9124307755c 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -215,6 +215,22 @@ do { text_section (); \
ASM_OUTPUT_LABEL (FILE, xname); \
} while (0)
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
+ do { \
+ char *xname = NAME; \
+ if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \
+ xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
+ if ((TREE_STATIC (DECL) \
+ && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
+ || DECL_INITIAL (DECL)) \
+ machopic_define_name (xname); \
+ if ((TREE_STATIC (DECL) \
+ && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
+ || DECL_INITIAL (DECL)) \
+ ENCODE_SECTION_INFO (DECL); \
+ ASM_OUTPUT_LABEL (FILE, xname); \
+ } while (0)
+
/* Wrap new method names in quotes so the assembler doesn't gag.
Make Objective-C internal symbols local. */