aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Shebs <shebs@apple.com>2001-06-28 01:34:25 +0000
committerStan Shebs <shebs@gcc.gnu.org>2001-06-28 01:34:25 +0000
commitf60b945b39191b1c033618bdc5dbe2c22655a407 (patch)
treeef4d6372f6fe3f9bf1ff83ab2e3c6bc4a6478725
parentb42abad88a72de91687aca2d9d360bd4e259b84e (diff)
downloadgcc-f60b945b39191b1c033618bdc5dbe2c22655a407.zip
gcc-f60b945b39191b1c033618bdc5dbe2c22655a407.tar.gz
gcc-f60b945b39191b1c033618bdc5dbe2c22655a407.tar.bz2
objc-act.c (handle_impent): Rewrite to be more portable and to use ASM_DECLARE_CLASS_REFERENCE.
* objc/objc-act.c (handle_impent): Rewrite to be more portable and to use ASM_DECLARE_CLASS_REFERENCE. * config/darwin.h (ASM_DECLARE_CLASS_REFERENCE): Rename from undocumented DECLARE_CLASS_REFERENCE, add file argument. * doc/tm.texi (ASM_DECLARE_CLASS_REFERENCE): Document. From-SVN: r43622
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/darwin.h12
-rw-r--r--gcc/doc/tm.texi7
-rw-r--r--gcc/objc/objc-act.c75
4 files changed, 53 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3f37468..854a569 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2001-06-27 Stan Shebs <shebs@apple.com>
+
+ * objc/objc-act.c (handle_impent): Rewrite to be more portable
+ and to use ASM_DECLARE_CLASS_REFERENCE.
+ * config/darwin.h (ASM_DECLARE_CLASS_REFERENCE): Rename from
+ undocumented DECLARE_CLASS_REFERENCE, add file argument.
+ * doc/tm.texi (ASM_DECLARE_CLASS_REFERENCE): Document.
+
Wed Jun 27 18:01:09 2001 Jeffrey A Law (law@cygnus.com)
* simplify-rtx.c (simplify_rtx): Canonicalize commutative expressions
@@ -1122,7 +1130,7 @@ Tue Jun 12 12:20:12 CEST 2001 Jan Hubicka <jh@suse.cz>
2001-06-11 Stan Shebs <shebs@apple.com>
- * darwin.h (ASM_FILE_END): Remove decl of language_string.
+ * config/darwin.h (ASM_FILE_END): Remove decl of language_string.
2001-06-11 Stephane Carrez <Stephane.Carrez@worldnet.fr>
@@ -1178,7 +1186,7 @@ Tue Jun 12 12:20:12 CEST 2001 Jan Hubicka <jh@suse.cz>
2001-06-11 Stan Shebs <shebs@apple.com>
- * darwin.c (darwin_encode_section_info): Rewrite to simplify
+ * config/darwin.c (darwin_encode_section_info): Rewrite to simplify
and fix coding mistakes.
2001-06-11 Nick Clifton <nickc@cambridge.redhat.com>
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index d90af77..c3a0a91 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -663,12 +663,12 @@ void alias_section (name, alias) \
} \
} while (0)
-#define DECLARE_CLASS_REFERENCE(NAME) \
- do { extern FILE* asm_out_file; \
- if (asm_out_file) { \
- fprintf (asm_out_file, "\t"); \
- assemble_name (asm_out_file, NAME); \
- fprintf (asm_out_file, "=0\n"); \
+#define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
+ do { \
+ if (FILE) { \
+ fprintf (FILE, "\t"); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "=0\n"); \
assemble_global (NAME); \
} \
} while (0)
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 124a05f..991672c 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -6374,6 +6374,13 @@ in a category); and @var{sel_name} is the name of the selector.
On systems where the assembler can handle quoted names, you can use this
macro to provide more human-readable names.
+@findex ASM_DECLARE_CLASS_REFERENCE
+@item ASM_DECLARE_CLASS_REFERENCE (@var{stream}, @var{name})
+A C statement (sans semicolon) to output to the stdio stream
+@var{stream} commands to declare that the label @var{name} is an
+Objective-C class reference. This is only needed for targets whose
+linkers have special support for NeXT-style runtimes.
+
@findex ASM_DECLARE_UNRESOLVED_REFERENCE
@item ASM_DECLARE_UNRESOLVED_REFERENCE (@var{stream}, @var{name})
A C statement (sans semicolon) to output to the stdio stream
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index af9a8bb..f059472 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -8392,6 +8392,8 @@ static void
handle_impent (impent)
struct imp_entry *impent;
{
+ char *string;
+
implementation_context = impent->imp_context;
implementation_template = impent->imp_template;
@@ -8399,62 +8401,45 @@ handle_impent (impent)
{
const char *class_name =
IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context));
- char *string = (char *) alloca (strlen (class_name) + 30);
- if (flag_next_runtime)
- {
- /* Grossly unportable.
- People should know better than to assume
- such things about assembler syntax! */
- sprintf (string, ".objc_class_name_%s=0", class_name);
- assemble_asm (my_build_string (strlen (string) + 1, string));
-
- sprintf (string, ".globl .objc_class_name_%s", class_name);
- assemble_asm (my_build_string (strlen (string) + 1, string));
- }
+ string = (char *) alloca (strlen (class_name) + 30);
- else
- {
- sprintf (string, "%sobjc_class_name_%s",
- (flag_next_runtime ? "." : "__"), class_name);
- assemble_global (string);
- assemble_label (string);
- }
+ sprintf (string, "*%sobjc_class_name_%s",
+ (flag_next_runtime ? "." : "__"), class_name);
}
-
else if (TREE_CODE (impent->imp_context) == CATEGORY_IMPLEMENTATION_TYPE)
{
const char *class_name =
IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context));
const char *class_super_name =
- IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context));
- char *string = (char *) alloca (strlen (class_name)
- + strlen (class_super_name) + 30);
+ IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context));
- /* Do the same for categories. Even though no references to these
- symbols are generated automatically by the compiler, it gives
- you a handle to pull them into an archive by hand. */
- if (flag_next_runtime)
- {
- /* Grossly unportable. */
- sprintf (string, ".objc_category_name_%s_%s=0",
- class_name, class_super_name);
- assemble_asm (my_build_string (strlen (string) + 1, string));
-
- sprintf (string, ".globl .objc_category_name_%s_%s",
- class_name, class_super_name);
- assemble_asm (my_build_string (strlen (string) + 1, string));
- }
+ string = (char *) alloca (strlen (class_name)
+ + strlen (class_super_name) + 30);
- else
- {
- sprintf (string, "%sobjc_category_name_%s_%s",
- (flag_next_runtime ? "." : "__"),
- class_name, class_super_name);
- assemble_global (string);
- assemble_label (string);
- }
+ /* Do the same for categories. Even though no references to
+ these symbols are generated automatically by the compiler, it
+ gives you a handle to pull them into an archive by hand. */
+ sprintf (string, "*%sobjc_category_name_%s_%s",
+ (flag_next_runtime ? "." : "__"), class_name, class_super_name);
+ }
+ else
+ return;
+
+#ifdef ASM_DECLARE_CLASS_REFERENCE
+ if (flag_next_runtime)
+ {
+ ASM_DECLARE_CLASS_REFERENCE (asm_out_file, string);
+ return;
}
+#endif
+
+ /* (Should this be a routine in varasm.c?) */
+ readonly_data_section ();
+ assemble_global (string);
+ assemble_align (UNITS_PER_WORD);
+ assemble_label (string);
+ assemble_zeros (UNITS_PER_WORD);
}
void