Commit f60b945b by Stan Shebs Committed by Stan Shebs

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
parent b42abad8
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) Wed Jun 27 18:01:09 2001 Jeffrey A Law (law@cygnus.com)
* simplify-rtx.c (simplify_rtx): Canonicalize commutative expressions * 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> ...@@ -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> 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> 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> ...@@ -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> 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. and fix coding mistakes.
2001-06-11 Nick Clifton <nickc@cambridge.redhat.com> 2001-06-11 Nick Clifton <nickc@cambridge.redhat.com>
......
...@@ -663,12 +663,12 @@ void alias_section (name, alias) \ ...@@ -663,12 +663,12 @@ void alias_section (name, alias) \
} \ } \
} while (0) } while (0)
#define DECLARE_CLASS_REFERENCE(NAME) \ #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
do { extern FILE* asm_out_file; \ do { \
if (asm_out_file) { \ if (FILE) { \
fprintf (asm_out_file, "\t"); \ fprintf (FILE, "\t"); \
assemble_name (asm_out_file, NAME); \ assemble_name (FILE, NAME); \
fprintf (asm_out_file, "=0\n"); \ fprintf (FILE, "=0\n"); \
assemble_global (NAME); \ assemble_global (NAME); \
} \ } \
} while (0) } while (0)
......
...@@ -6374,6 +6374,13 @@ in a category); and @var{sel_name} is the name of the selector. ...@@ -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 On systems where the assembler can handle quoted names, you can use this
macro to provide more human-readable names. 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 @findex ASM_DECLARE_UNRESOLVED_REFERENCE
@item ASM_DECLARE_UNRESOLVED_REFERENCE (@var{stream}, @var{name}) @item ASM_DECLARE_UNRESOLVED_REFERENCE (@var{stream}, @var{name})
A C statement (sans semicolon) to output to the stdio stream A C statement (sans semicolon) to output to the stdio stream
......
...@@ -8392,6 +8392,8 @@ static void ...@@ -8392,6 +8392,8 @@ static void
handle_impent (impent) handle_impent (impent)
struct imp_entry *impent; struct imp_entry *impent;
{ {
char *string;
implementation_context = impent->imp_context; implementation_context = impent->imp_context;
implementation_template = impent->imp_template; implementation_template = impent->imp_template;
...@@ -8399,62 +8401,45 @@ handle_impent (impent) ...@@ -8399,62 +8401,45 @@ handle_impent (impent)
{ {
const char *class_name = const char *class_name =
IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)); IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context));
char *string = (char *) alloca (strlen (class_name) + 30);
if (flag_next_runtime) string = (char *) alloca (strlen (class_name) + 30);
{
/* 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));
}
else sprintf (string, "*%sobjc_class_name_%s",
{ (flag_next_runtime ? "." : "__"), class_name);
sprintf (string, "%sobjc_class_name_%s",
(flag_next_runtime ? "." : "__"), class_name);
assemble_global (string);
assemble_label (string);
}
} }
else if (TREE_CODE (impent->imp_context) == CATEGORY_IMPLEMENTATION_TYPE) else if (TREE_CODE (impent->imp_context) == CATEGORY_IMPLEMENTATION_TYPE)
{ {
const char *class_name = const char *class_name =
IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)); IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context));
const char *class_super_name = const char *class_super_name =
IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context)); IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context));
char *string = (char *) alloca (strlen (class_name)
+ strlen (class_super_name) + 30);
/* Do the same for categories. Even though no references to these string = (char *) alloca (strlen (class_name)
symbols are generated automatically by the compiler, it gives + strlen (class_super_name) + 30);
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));
}
else /* Do the same for categories. Even though no references to
{ these symbols are generated automatically by the compiler, it
sprintf (string, "%sobjc_category_name_%s_%s", gives you a handle to pull them into an archive by hand. */
(flag_next_runtime ? "." : "__"), sprintf (string, "*%sobjc_category_name_%s_%s",
class_name, class_super_name); (flag_next_runtime ? "." : "__"), class_name, class_super_name);
assemble_global (string); }
assemble_label (string); 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 void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment