+2001-10-29 David Edelsohn <edelsohn@gnu.org>
+
+ Undo assemble_name change in earlier patch.
+
Mon Oct 29 21:11:40 2001 Nicola Pero <n.pero@mi.flashnet.it>
* objc/objc-act.c (finish_message_expr): For the GNU runtime: when
determining the type of the receiver, do not check that TREE_CODE
- of receiver is CALL_EXPR before calling receiver_is_class_object
- (). (receiver_is_class_object): For the GNU runtime: recognize
+ of receiver is CALL_EXPR before calling receiver_is_class_object().
+ (receiver_is_class_object): For the GNU runtime: recognize
the case that the receiver is self in a class method context.
Check that TREE_CODE of receiver is CALL_EXPR when checking that
the receiver is a call to objc_get_class.
if (TREE_CODE (DECL) == FUNCTION_DECL) \
{ \
fputs ("\n\t.extern .", FILE); \
- assemble_name (FILE, XSTR (_symref, 0)); \
+ RS6000_OUTPUT_BASENAME (FILE, XSTR (_symref, 0)); \
} \
putc ('\n', FILE); \
}
#undef REGISTER_NAMES
#define REGISTER_NAMES DEBUG_REGISTER_NAMES
+/* This outputs NAME to FILE. */
+
+#undef RS6000_OUTPUT_BASENAME
+#define RS6000_OUTPUT_BASENAME(FILE, NAME) \
+ assemble_name (FILE, NAME);
+
/* Output before instructions. */
/* This is how to output the definition of a user-level label named NAME,
such as the label on a static function or variable NAME. */
#undef ASM_GLOBALIZE_LABEL
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
do { fputs ("\t.globl ", FILE); \
- assemble_name (FILE, NAME); putc ('\n', FILE);} while (0)
+ RS6000_OUTPUT_BASENAME (FILE, NAME); putc ('\n', FILE);} while (0)
/* This is how to output an internal label prefix. rs6000.c uses this
when generating traceback tables. */
#undef ASM_OUTPUT_ALIGNED_COMMON
#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
do { fputs (".comm ", (FILE)); \
- assemble_name ((FILE), (NAME)); \
+ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
fprintf ((FILE), ",%d\n", (SIZE)); } while (0)
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
break;
}
}
+#if TARGET_AIX
+ RS6000_OUTPUT_BASENAME (file, XSTR (x, 0));
+#else
assemble_name (file, XSTR (x, 0));
+#endif
return;
case 'Z':
/* Offset from start of code to tb table. */
fputs ("\t.long ", file);
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "LT");
+#if TARGET_AIX
+ RS6000_OUTPUT_BASENAME (file, fname);
+#else
assemble_name (file, fname);
+#endif
fputs ("-.", file);
+#if TARGET_AIX
+ RS6000_OUTPUT_BASENAME (file, fname);
+#else
assemble_name (file, fname);
+#endif
putc ('\n', file);
/* Interrupt handler mask. */
we emit the TOC reference to reference the symbol and not the
section. */
const char *name = XSTR (x, 0);
- assemble_name (file, name);
+
+ if (VTABLE_NAME_P (name))
+ {
+ RS6000_OUTPUT_BASENAME (file, name);
+ }
+ else
+ assemble_name (file, name);
}
/* Output a TOC entry. We derive the entry name from what is being
section. */
if (VTABLE_NAME_P (name))
{
- assemble_name (file, name);
+ RS6000_OUTPUT_BASENAME (file, name);
if (offset < 0)
fprintf (file, "%d", offset);
else if (offset > 0)
#undef ENCODE_SECTION_INFO
#define ENCODE_SECTION_INFO(DECL) rs6000_encode_section_info (DECL)
+/* The ELF version doesn't encode [DS] or whatever at the end of symbols. */
+
+#define RS6000_OUTPUT_BASENAME(FILE, NAME) \
+ assemble_name (FILE, NAME)
+
/* This macro gets just the user-specified name
out of the string in a SYMBOL_REF. Discard
a leading * or @. */
#define RS6000_ITRUNC "__itrunc"
#define RS6000_UITRUNC "__uitrunc"
+/* This outputs NAME to FILE up to the first null or '['. */
+
+#define RS6000_OUTPUT_BASENAME(FILE, NAME) \
+ { \
+ const char *_p; \
+ \
+ STRIP_NAME_ENCODING (_p, (NAME)); \
+ assemble_name ((FILE), _p); \
+ }
+
/* This is how to output the definition of a user-level label named NAME,
such as the label on a static function or variable NAME. */
#define ASM_OUTPUT_LABEL(FILE,NAME) \
- do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
+ do { RS6000_OUTPUT_BASENAME (FILE, NAME); fputs (":\n", FILE); } while (0)
/* This is how to output a command to make the user-level label named NAME
defined for reference from other files. */
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
do { fputs ("\t.globl ", FILE); \
- assemble_name (FILE, NAME); putc ('\n', FILE);} while (0)
+ RS6000_OUTPUT_BASENAME (FILE, NAME); putc ('\n', FILE);} while (0)
/* Remove any trailing [DS] or the like from the symbol name. */
if (TREE_PUBLIC (DECL)) \
{ \
fputs ("\t.globl .", FILE); \
- assemble_name (FILE, NAME); \
+ RS6000_OUTPUT_BASENAME (FILE, NAME); \
putc ('\n', FILE); \
} \
else \
{ \
fputs ("\t.lglobl .", FILE); \
- assemble_name (FILE, NAME); \
+ RS6000_OUTPUT_BASENAME (FILE, NAME); \
putc ('\n', FILE); \
} \
fputs ("\t.csect ", FILE); \
- assemble_name (FILE, NAME); \
+ RS6000_OUTPUT_BASENAME (FILE, NAME); \
fputs (TARGET_32BIT ? "[DS]\n" : "[DS],3\n", FILE); \
- assemble_name (FILE, NAME); \
+ RS6000_OUTPUT_BASENAME (FILE, NAME); \
fputs (":\n", FILE); \
fputs (TARGET_32BIT ? "\t.long ." : "\t.llong .", FILE); \
- assemble_name (FILE, NAME); \
+ RS6000_OUTPUT_BASENAME (FILE, NAME); \
fputs (", TOC[tc0], 0\n", FILE); \
in_section = no_section; \
function_section(DECL); \
putc ('.', FILE); \
- assemble_name (FILE, NAME); \
+ RS6000_OUTPUT_BASENAME (FILE, NAME); \
fputs (":\n", FILE); \
if (write_symbols == XCOFF_DEBUG) \
xcoffout_declare_function (FILE, DECL, NAME); \
#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGNMENT) \
do { fputs ("\t.comm ", (FILE)); \
- assemble_name ((FILE), (NAME)); \
+ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
if ( (SIZE) > 4) \
fprintf ((FILE), ",%d,3\n", (SIZE)); \
else \
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
do { fputs ("\t.lcomm ", (FILE)); \
- assemble_name ((FILE), (NAME)); \
+ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
fprintf ((FILE), ",%d,%s\n", (TARGET_32BIT ? (SIZE) : (ROUNDED)), \
xcoff_bss_section_name); \
} while (0)