diff options
| author | shebs <shebs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-04 20:58:19 +0000 |
|---|---|---|
| committer | shebs <shebs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-04 20:58:19 +0000 |
| commit | d10058249579c5f3dad6982353c8459ff585a5e6 (patch) | |
| tree | 17cebf8a784d26dc867f2cc1eecac92a4975cb9e /gcc | |
| parent | 8c5845924576f2fcdf955f299830454c290d5943 (diff) | |
| download | ppe42-gcc-d10058249579c5f3dad6982353c8459ff585a5e6.tar.gz ppe42-gcc-d10058249579c5f3dad6982353c8459ff585a5e6.zip | |
* 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: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45385 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/config/darwin.c | 12 | ||||
| -rw-r--r-- | 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 <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. */ |

