From 93913281032a15d53d388055a8c1c52c87b1edf3 Mon Sep 17 00:00:00 2001 From: Stan Shebs Date: Tue, 4 Sep 2001 20:58:19 +0000 Subject: [PATCH] darwin.h (ASM_DECLARE_FUNCTION_NAME): Define. * config/darwin.h (ASM_DECLARE_FUNCTION_NAME): Define. * config/darwin.c (machopic_stub_name): Account for internally generated lib calls such as memcpy. From-SVN: r45385 --- gcc/ChangeLog | 6 ++++++ gcc/config/darwin.c | 12 ++++++++++-- gcc/config/darwin.h | 16 ++++++++++++++++ 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 + + * 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 * 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. */