Commit 02e3f1a8 by Richard Kenner

dbxout.c: Consistently use putc instead of fputc.

	* dbxout.c: Consistently use putc instead of fputc.
 	(print_wide_int): New function; call instead of direct fprintf.
	(dbxout_type_index): Adjust calls of CHARS to be more accurate.
	(dbxout_type_fields, dbxout_type_method_1): Likewise.
	(dbxout_type_methods, dbxout_range_type, dbxout_type): Likewise.
	(print_int_cst_octal): Likewise.
	(print_octal): Show we wrote characters.
	(dbxout_type): Set have_used_extensions in more places.

From-SVN: r44367
parent f2d28b14
Wed Jul 25 18:00:05 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* dbxout.c: Consistently use putc instead of fputc.
(print_wide_int): New function; call instead of direct fprintf.
(dbxout_type_index): Adjust calls of CHARS to be more accurate.
(dbxout_type_fields, dbxout_type_method_1): Likewise.
(dbxout_type_methods, dbxout_range_type, dbxout_type): Likewise.
(print_int_cst_octal): Likewise.
(print_octal): Show we wrote characters.
(dbxout_type): Set have_used_extensions in more places.
2001-07-25 Catherine Moore <clm@redhat.com> 2001-07-25 Catherine Moore <clm@redhat.com>
* config/v850/v850.c (v850_va_arg): Use addr * config/v850/v850.c (v850_va_arg): Use addr
...@@ -7,7 +18,8 @@ Wed Jul 25 22:48:59 CEST 2001 Jan Hubicka <jh@suse.cz> ...@@ -7,7 +18,8 @@ Wed Jul 25 22:48:59 CEST 2001 Jan Hubicka <jh@suse.cz>
* flow.c (delete_dead_jumptables): New function. * flow.c (delete_dead_jumptables): New function.
(life_analyzis): Call it. (life_analyzis): Call it.
* bb-reorder.c (skip_insns_after_block): Handle contradictive sequences. * bb-reorder.c (skip_insns_after_block): Handle contradictory
sequences.
2001-07-25 Richard Henderson <rth@redhat.com> 2001-07-25 Richard Henderson <rth@redhat.com>
...@@ -17,7 +29,7 @@ Wed Jul 25 22:48:59 CEST 2001 Jan Hubicka <jh@suse.cz> ...@@ -17,7 +29,7 @@ Wed Jul 25 22:48:59 CEST 2001 Jan Hubicka <jh@suse.cz>
2001-07-25 Richard Henderson <rth@redhat.com> 2001-07-25 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.c (alpha_emit_conditional_move): Always * config/alpha/alpha.c (alpha_emit_conditional_move): Always
swap GE/GT if its an fp comparison. swap GE/GT if it is an fp comparison.
2001-07-25 Andrew Haley <aph@cambridge.redhat.com> 2001-07-25 Andrew Haley <aph@cambridge.redhat.com>
......
...@@ -306,6 +306,7 @@ static void dbxout_range_type PARAMS ((tree)); ...@@ -306,6 +306,7 @@ static void dbxout_range_type PARAMS ((tree));
static void dbxout_type PARAMS ((tree, int)); static void dbxout_type PARAMS ((tree, int));
static void print_int_cst_octal PARAMS ((tree)); static void print_int_cst_octal PARAMS ((tree));
static void print_octal PARAMS ((unsigned HOST_WIDE_INT, int)); static void print_octal PARAMS ((unsigned HOST_WIDE_INT, int));
static void print_wide_int PARAMS ((HOST_WIDE_INT));
static void dbxout_type_name PARAMS ((tree)); static void dbxout_type_name PARAMS ((tree));
static int dbxout_symbol_location PARAMS ((tree, tree, const char *, rtx)); static int dbxout_symbol_location PARAMS ((tree, tree, const char *, rtx));
static void dbxout_symbol_name PARAMS ((tree, const char *, int)); static void dbxout_symbol_name PARAMS ((tree, const char *, int));
...@@ -394,7 +395,7 @@ dbxout_function_end () ...@@ -394,7 +395,7 @@ dbxout_function_end ()
symbol and an empty string. */ symbol and an empty string. */
fprintf (asmfile, "%s\"\",%d,0,0,", ASM_STABS_OP, N_FUN); fprintf (asmfile, "%s\"\",%d,0,0,", ASM_STABS_OP, N_FUN);
assemble_name (asmfile, lscope_label_name); assemble_name (asmfile, lscope_label_name);
fputc ('-', asmfile); putc ('-', asmfile);
assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));
fprintf (asmfile, "\n"); fprintf (asmfile, "\n");
} }
...@@ -690,7 +691,7 @@ dbxout_type_index (type) ...@@ -690,7 +691,7 @@ dbxout_type_index (type)
#else #else
struct typeinfo *t = &typevec[TYPE_SYMTAB_ADDRESS (type)]; struct typeinfo *t = &typevec[TYPE_SYMTAB_ADDRESS (type)];
fprintf (asmfile, "(%d,%d)", t->file_number, t->type_number); fprintf (asmfile, "(%d,%d)", t->file_number, t->type_number);
CHARS (7); CHARS (9);
#endif #endif
} }
...@@ -756,7 +757,7 @@ dbxout_type_fields (type) ...@@ -756,7 +757,7 @@ dbxout_type_fields (type)
else else
{ {
fprintf (asmfile, ":"); fprintf (asmfile, ":");
CHARS (2); CHARS (1);
} }
if (use_gnu_debug_info_extensions if (use_gnu_debug_info_extensions
...@@ -779,26 +780,27 @@ dbxout_type_fields (type) ...@@ -779,26 +780,27 @@ dbxout_type_fields (type)
{ {
if (TREE_STATIC (tem) && use_gnu_debug_info_extensions) if (TREE_STATIC (tem) && use_gnu_debug_info_extensions)
{ {
const char *name = tree name = DECL_ASSEMBLER_NAME (tem);
IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (tem));
have_used_extensions = 1; have_used_extensions = 1;
fprintf (asmfile, ":%s;", name); fprintf (asmfile, ":%s;", IDENTIFIER_POINTER (name));
CHARS (strlen (name)); CHARS (IDENTIFIER_LENGTH (name) + 2);
} }
else else
/* If TEM is non-static, GDB won't understand it. */ {
fprintf (asmfile, ",0,0;"); /* If TEM is non-static, GDB won't understand it. */
fprintf (asmfile, ",0,0;");
CHARS (5);
}
} }
else else
{ {
fputc (',', asmfile); putc (',', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, print_wide_int (int_bit_position (tem));
int_bit_position (tem)); putc (',', asmfile);
fputc (',', asmfile); print_wide_int (tree_low_cst (DECL_SIZE (tem), 1));
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, putc (';', asmfile);
tree_low_cst (DECL_SIZE (tem), 1)); CHARS (3);
fputc (';', asmfile);
CHARS (23);
} }
} }
} }
...@@ -844,12 +846,12 @@ dbxout_type_method_1 (decl, debug_name) ...@@ -844,12 +846,12 @@ dbxout_type_method_1 (decl, debug_name)
if (DECL_VINDEX (decl) && host_integerp (DECL_VINDEX (decl), 0)) if (DECL_VINDEX (decl) && host_integerp (DECL_VINDEX (decl), 0))
{ {
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, print_wide_int (tree_low_cst (DECL_VINDEX (decl), 0));
tree_low_cst (DECL_VINDEX (decl), 0)); putc (';', asmfile);
fputc (';', asmfile); CHARS (1);
dbxout_type (DECL_CONTEXT (decl), 0); dbxout_type (DECL_CONTEXT (decl), 0);
fprintf (asmfile, ";"); fprintf (asmfile, ";");
CHARS (8); CHARS (1);
} }
} }
...@@ -925,8 +927,7 @@ dbxout_type_methods (type) ...@@ -925,8 +927,7 @@ dbxout_type_methods (type)
if (TREE_CODE (fndecl) != FUNCTION_DECL) if (TREE_CODE (fndecl) != FUNCTION_DECL)
continue; continue;
debug_name = debug_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl));
IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl));
CONTIN; CONTIN;
...@@ -995,23 +996,30 @@ dbxout_range_type (type) ...@@ -995,23 +996,30 @@ dbxout_range_type (type)
if (TYPE_MIN_VALUE (type) != 0 if (TYPE_MIN_VALUE (type) != 0
&& host_integerp (TYPE_MIN_VALUE (type), 0)) && host_integerp (TYPE_MIN_VALUE (type), 0))
{ {
fputc (';', asmfile); putc (';', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (1);
tree_low_cst (TYPE_MIN_VALUE (type), 0)); print_wide_int (tree_low_cst (TYPE_MIN_VALUE (type), 0));
} }
else else
fprintf (asmfile, ";0"); {
fprintf (asmfile, ";0");
CHARS (2);
}
if (TYPE_MAX_VALUE (type) != 0 if (TYPE_MAX_VALUE (type) != 0
&& host_integerp (TYPE_MAX_VALUE (type), 0)) && host_integerp (TYPE_MAX_VALUE (type), 0))
{ {
fputc (';', asmfile); putc (';', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (1);
tree_low_cst (TYPE_MAX_VALUE (type), 0)); print_wide_int (tree_low_cst (TYPE_MAX_VALUE (type), 0));
fputc (';', asmfile); putc (';', asmfile);
CHARS (1);
} }
else else
fprintf (asmfile, ";-1;"); {
fprintf (asmfile, ";-1;");
CHARS (4);
}
} }
/* Output a reference to a type. If the type has not yet been /* Output a reference to a type. If the type has not yet been
...@@ -1177,8 +1185,10 @@ dbxout_type (type, full) ...@@ -1177,8 +1185,10 @@ dbxout_type (type, full)
This used to use `r2' explicitly and we used to This used to use `r2' explicitly and we used to
take care to make sure that `char' was type number 2. */ take care to make sure that `char' was type number 2. */
fprintf (asmfile, "r"); fprintf (asmfile, "r");
CHARS (1);
dbxout_type_index (type); dbxout_type_index (type);
fprintf (asmfile, ";0;127;"); fprintf (asmfile, ";0;127;");
CHARS (7);
} }
/* If this is a subtype of another integer type, always prefer to /* If this is a subtype of another integer type, always prefer to
...@@ -1194,7 +1204,11 @@ dbxout_type (type, full) ...@@ -1194,7 +1204,11 @@ dbxout_type (type, full)
if (use_gnu_debug_info_extensions if (use_gnu_debug_info_extensions
&& TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)) && TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node))
fprintf (asmfile, "@s%d;", TYPE_PRECISION (type)); {
have_used_extensions = 1;
fprintf (asmfile, "@s%d;", TYPE_PRECISION (type));
CHARS (5);
}
/* If we can use GDB extensions and the size is wider than a /* If we can use GDB extensions and the size is wider than a
long (the size used by GDB to read them) or we may have long (the size used by GDB to read them) or we may have
...@@ -1222,12 +1236,16 @@ dbxout_type (type, full) ...@@ -1222,12 +1236,16 @@ dbxout_type (type, full)
&& TREE_UNSIGNED (type)))) && TREE_UNSIGNED (type))))
{ {
fprintf (asmfile, "r"); fprintf (asmfile, "r");
CHARS (1);
dbxout_type_index (type); dbxout_type_index (type);
fprintf (asmfile, ";"); fprintf (asmfile, ";");
CHARS (1);
print_int_cst_octal (TYPE_MIN_VALUE (type)); print_int_cst_octal (TYPE_MIN_VALUE (type));
fprintf (asmfile, ";"); fprintf (asmfile, ";");
CHARS (1);
print_int_cst_octal (TYPE_MAX_VALUE (type)); print_int_cst_octal (TYPE_MAX_VALUE (type));
fprintf (asmfile, ";"); fprintf (asmfile, ";");
CHARS (1);
} }
else else
...@@ -1235,50 +1253,58 @@ dbxout_type (type, full) ...@@ -1235,50 +1253,58 @@ dbxout_type (type, full)
dbxout_range_type (type); dbxout_range_type (type);
} }
CHARS (22);
break; break;
case REAL_TYPE: case REAL_TYPE:
/* This used to say `r1' and we used to take care /* This used to say `r1' and we used to take care
to make sure that `int' was type number 1. */ to make sure that `int' was type number 1. */
fprintf (asmfile, "r"); fprintf (asmfile, "r");
CHARS (1);
dbxout_type_index (integer_type_node); dbxout_type_index (integer_type_node);
fputc (';', asmfile); putc (';', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (type)); CHARS (1);
print_wide_int (int_size_in_bytes (type));
fputs (";0;", asmfile); fputs (";0;", asmfile);
CHARS (13); CHARS (3);
break; break;
case CHAR_TYPE: case CHAR_TYPE:
if (use_gnu_debug_info_extensions) if (use_gnu_debug_info_extensions)
{ {
have_used_extensions = 1;
fputs ("@s", asmfile); fputs ("@s", asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (2);
BITS_PER_UNIT * int_size_in_bytes (type)); print_wide_int (BITS_PER_UNIT * int_size_in_bytes (type));
fputs (";-20;", asmfile); fputs (";-20;", asmfile);
CHARS (4);
} }
else else
{ {
/* Output the type `char' as a subrange of itself. /* Output the type `char' as a subrange of itself.
That is what pcc seems to do. */ That is what pcc seems to do. */
fprintf (asmfile, "r"); fprintf (asmfile, "r");
CHARS (1);
dbxout_type_index (char_type_node); dbxout_type_index (char_type_node);
fprintf (asmfile, ";0;%d;", TREE_UNSIGNED (type) ? 255 : 127); fprintf (asmfile, ";0;%d;", TREE_UNSIGNED (type) ? 255 : 127);
CHARS (7);
} }
CHARS (9);
break; break;
case BOOLEAN_TYPE: case BOOLEAN_TYPE:
if (use_gnu_debug_info_extensions) if (use_gnu_debug_info_extensions)
{ {
have_used_extensions = 1;
fputs ("@s", asmfile); fputs ("@s", asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (2);
BITS_PER_UNIT * int_size_in_bytes (type)); print_wide_int (BITS_PER_UNIT * int_size_in_bytes (type));
fputs (";-16;", asmfile); fputs (";-16;", asmfile);
CHARS (4);
} }
else /* Define as enumeral type (False, True) */ else /* Define as enumeral type (False, True) */
fprintf (asmfile, "eFalse:0,True:1,;"); {
CHARS (17); fprintf (asmfile, "eFalse:0,True:1,;");
CHARS (17);
}
break; break;
case FILE_TYPE: case FILE_TYPE:
...@@ -1293,33 +1319,33 @@ dbxout_type (type, full) ...@@ -1293,33 +1319,33 @@ dbxout_type (type, full)
if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE) if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
{ {
fprintf (asmfile, "r"); fprintf (asmfile, "r");
CHARS (1);
dbxout_type_index (type); dbxout_type_index (type);
fputc (';', asmfile); putc (';', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (1);
2 * int_size_in_bytes (TREE_TYPE (type))); print_wide_int (2 * int_size_in_bytes (TREE_TYPE (type)));
fputs (";0;", asmfile); fputs (";0;", asmfile);
CHARS (12); /* The number is probably incorrect here. */ CHARS (3);
} }
else else
{ {
/* Output a complex integer type as a structure, /* Output a complex integer type as a structure,
pending some other way to do it. */ pending some other way to do it. */
fputc ('s', asmfile); putc ('s', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (type)); CHARS (1);
print_wide_int (int_size_in_bytes (type));
fprintf (asmfile, "real:"); fprintf (asmfile, "real:");
CHARS (10); CHARS (5);
dbxout_type (TREE_TYPE (type), 0); dbxout_type (TREE_TYPE (type), 0);
fprintf (asmfile, ",%d,%d;", fprintf (asmfile, ",0,%d;", TYPE_PRECISION (TREE_TYPE (type)));
0, TYPE_PRECISION (TREE_TYPE (type))); CHARS (7);
CHARS (8);
fprintf (asmfile, "imag:"); fprintf (asmfile, "imag:");
CHARS (5); CHARS (5);
dbxout_type (TREE_TYPE (type), 0); dbxout_type (TREE_TYPE (type), 0);
fprintf (asmfile, ",%d,%d;;", fprintf (asmfile, ",%d,%d;;", TYPE_PRECISION (TREE_TYPE (type)),
TYPE_PRECISION (TREE_TYPE (type)),
TYPE_PRECISION (TREE_TYPE (type))); TYPE_PRECISION (TREE_TYPE (type)));
CHARS (9); CHARS (10);
} }
break; break;
...@@ -1328,13 +1354,18 @@ dbxout_type (type, full) ...@@ -1328,13 +1354,18 @@ dbxout_type (type, full)
{ {
have_used_extensions = 1; have_used_extensions = 1;
fputs ("@s", asmfile); fputs ("@s", asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (2);
BITS_PER_UNIT * int_size_in_bytes (type)); print_wide_int (BITS_PER_UNIT * int_size_in_bytes (type));
fputc (';', asmfile); putc (';', asmfile);
CHARS (1);
/* Check if a bitstring type, which in Chill is /* Check if a bitstring type, which in Chill is
different from a [power]set. */ different from a [power]set. */
if (TYPE_STRING_FLAG (type)) if (TYPE_STRING_FLAG (type))
fprintf (asmfile, "@S;"); {
fprintf (asmfile, "@S;");
CHARS (3);
}
} }
putc ('S', asmfile); putc ('S', asmfile);
CHARS (1); CHARS (1);
...@@ -1347,15 +1378,14 @@ dbxout_type (type, full) ...@@ -1347,15 +1378,14 @@ dbxout_type (type, full)
{ {
have_used_extensions = 1; have_used_extensions = 1;
fputs ("@s", asmfile); fputs ("@s", asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (2);
BITS_PER_UNIT * int_size_in_bytes (type)); print_wide_int (BITS_PER_UNIT * int_size_in_bytes (type));
fputc (';', asmfile); fprintf (asmfile, ";@S;S");
fprintf (asmfile, "@S;"); CHARS (5);
putc ('S', asmfile);
CHARS (1);
dbxout_type (TYPE_DOMAIN (type), 0); dbxout_type (TYPE_DOMAIN (type), 0);
break; break;
} }
/* Output "a" followed by a range type definition /* Output "a" followed by a range type definition
for the index type of the array for the index type of the array
followed by a reference to the target-type. followed by a reference to the target-type.
...@@ -1366,20 +1396,24 @@ dbxout_type (type, full) ...@@ -1366,20 +1396,24 @@ dbxout_type (type, full)
{ {
have_used_extensions = 1; have_used_extensions = 1;
fprintf (asmfile, "@S;"); fprintf (asmfile, "@S;");
CHARS (3);
} }
tem = TYPE_DOMAIN (type); tem = TYPE_DOMAIN (type);
if (tem == NULL) if (tem == NULL)
{ {
fprintf (asmfile, "ar"); fprintf (asmfile, "ar");
CHARS (2);
dbxout_type_index (integer_type_node); dbxout_type_index (integer_type_node);
fprintf (asmfile, ";0;-1;"); fprintf (asmfile, ";0;-1;");
CHARS (6);
} }
else else
{ {
fprintf (asmfile, "a"); fprintf (asmfile, "a");
CHARS (1);
dbxout_range_type (tem); dbxout_range_type (tem);
} }
CHARS (14);
dbxout_type (TREE_TYPE (type), 0); dbxout_type (TREE_TYPE (type), 0);
break; break;
...@@ -1412,7 +1446,7 @@ dbxout_type (type, full) ...@@ -1412,7 +1446,7 @@ dbxout_type (type, full)
another type's definition; instead, output an xref another type's definition; instead, output an xref
and let the definition come when the name is defined. */ and let the definition come when the name is defined. */
fputs ((TREE_CODE (type) == RECORD_TYPE) ? "xs" : "xu", asmfile); fputs ((TREE_CODE (type) == RECORD_TYPE) ? "xs" : "xu", asmfile);
CHARS (3); CHARS (2);
#if 0 /* This assertion is legitimately false in C++. */ #if 0 /* This assertion is legitimately false in C++. */
/* We shouldn't be outputting a reference to a type before its /* We shouldn't be outputting a reference to a type before its
definition unless the type has a tag name. definition unless the type has a tag name.
...@@ -1423,16 +1457,21 @@ dbxout_type (type, full) ...@@ -1423,16 +1457,21 @@ dbxout_type (type, full)
if (TYPE_NAME (type) != 0) if (TYPE_NAME (type) != 0)
dbxout_type_name (type); dbxout_type_name (type);
else else
fprintf (asmfile, "$$%d", anonymous_type_number++); {
fprintf (asmfile, "$$%d", anonymous_type_number++);
CHARS (5);
}
fprintf (asmfile, ":"); fprintf (asmfile, ":");
CHARS (1);
typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_XREF; typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_XREF;
break; break;
} }
/* Identify record or union, and print its size. */ /* Identify record or union, and print its size. */
fputc (((TREE_CODE (type) == RECORD_TYPE) ? 's' : 'u'), asmfile); putc (((TREE_CODE (type) == RECORD_TYPE) ? 's' : 'u'), asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (1);
int_size_in_bytes (type)); print_wide_int (int_size_in_bytes (type));
if (use_gnu_debug_info_extensions) if (use_gnu_debug_info_extensions)
{ {
...@@ -1452,13 +1491,14 @@ dbxout_type (type, full) ...@@ -1452,13 +1491,14 @@ dbxout_type (type, full)
have_used_extensions = 1; have_used_extensions = 1;
putc (TREE_VIA_VIRTUAL (child) ? '1' : '0', asmfile); putc (TREE_VIA_VIRTUAL (child) ? '1' : '0', asmfile);
putc (TREE_VIA_PUBLIC (child) ? '2' : '0', asmfile); putc (TREE_VIA_PUBLIC (child) ? '2' : '0', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (2);
(tree_low_cst (BINFO_OFFSET (child), 0) print_wide_int (tree_low_cst (BINFO_OFFSET (child), 0)
* BITS_PER_UNIT)); * BITS_PER_UNIT);
fputc (',', asmfile); putc (',', asmfile);
CHARS (15); CHARS (1);
dbxout_type (BINFO_TYPE (child), 0); dbxout_type (BINFO_TYPE (child), 0);
putc (';', asmfile); putc (';', asmfile);
CHARS (1);
} }
else else
{ {
...@@ -1466,24 +1506,25 @@ dbxout_type (type, full) ...@@ -1466,24 +1506,25 @@ dbxout_type (type, full)
which have the same names at the types they hold. */ which have the same names at the types they hold. */
dbxout_type_name (BINFO_TYPE (child)); dbxout_type_name (BINFO_TYPE (child));
putc (':', asmfile); putc (':', asmfile);
CHARS (1);
dbxout_type (BINFO_TYPE (child), full); dbxout_type (BINFO_TYPE (child), full);
fputc (',', asmfile); putc (',', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (1);
tree_low_cst (BINFO_OFFSET (child), 0) print_wide_int (tree_low_cst (BINFO_OFFSET (child), 0)
* BITS_PER_UNIT); * BITS_PER_UNIT);
fputc (',', asmfile); putc (',', asmfile);
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, CHARS (1);
(tree_low_cst (DECL_SIZE (TYPE_NAME print_wide_int (tree_low_cst (DECL_SIZE
(BINFO_TYPE (child))), 0) (TYPE_NAME
* BITS_PER_UNIT)); (BINFO_TYPE (child))),
fputc (';', asmfile); 0)
CHARS (20); * BITS_PER_UNIT);
putc (';', asmfile);
CHARS (1);
} }
} }
} }
CHARS (11);
/* Write out the field declarations. */ /* Write out the field declarations. */
dbxout_type_fields (type); dbxout_type_fields (type);
if (use_gnu_debug_info_extensions && TYPE_METHODS (type) != NULL_TREE) if (use_gnu_debug_info_extensions && TYPE_METHODS (type) != NULL_TREE)
...@@ -1493,6 +1534,7 @@ dbxout_type (type, full) ...@@ -1493,6 +1534,7 @@ dbxout_type (type, full)
} }
putc (';', asmfile); putc (';', asmfile);
CHARS (1);
if (use_gnu_debug_info_extensions && TREE_CODE (type) == RECORD_TYPE if (use_gnu_debug_info_extensions && TREE_CODE (type) == RECORD_TYPE
/* Avoid the ~ if we don't really need it--it confuses dbx. */ /* Avoid the ~ if we don't really need it--it confuses dbx. */
...@@ -1502,6 +1544,7 @@ dbxout_type (type, full) ...@@ -1502,6 +1544,7 @@ dbxout_type (type, full)
/* Tell GDB+ that it may keep reading. */ /* Tell GDB+ that it may keep reading. */
putc ('~', asmfile); putc ('~', asmfile);
CHARS (1);
/* We need to write out info about what field this class /* We need to write out info about what field this class
uses as its "main" vtable pointer field, because if this uses as its "main" vtable pointer field, because if this
...@@ -1510,10 +1553,12 @@ dbxout_type (type, full) ...@@ -1510,10 +1553,12 @@ dbxout_type (type, full)
if (TYPE_VFIELD (type)) if (TYPE_VFIELD (type))
{ {
putc ('%', asmfile); putc ('%', asmfile);
CHARS (1);
dbxout_type (DECL_FCONTEXT (TYPE_VFIELD (type)), 0); dbxout_type (DECL_FCONTEXT (TYPE_VFIELD (type)), 0);
} }
putc (';', asmfile); putc (';', asmfile);
CHARS (3); CHARS (1);
} }
break; break;
...@@ -1528,10 +1573,11 @@ dbxout_type (type, full) ...@@ -1528,10 +1573,11 @@ dbxout_type (type, full)
|| !COMPLETE_TYPE_P (type)) || !COMPLETE_TYPE_P (type))
{ {
fprintf (asmfile, "xe"); fprintf (asmfile, "xe");
CHARS (3); CHARS (2);
dbxout_type_name (type); dbxout_type_name (type);
typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_XREF; typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_XREF;
fprintf (asmfile, ":"); putc (':', asmfile);
CHARS (1);
return; return;
} }
#ifdef DBX_OUTPUT_ENUM #ifdef DBX_OUTPUT_ENUM
...@@ -1539,28 +1585,31 @@ dbxout_type (type, full) ...@@ -1539,28 +1585,31 @@ dbxout_type (type, full)
#else #else
if (use_gnu_debug_info_extensions if (use_gnu_debug_info_extensions
&& TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)) && TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node))
fprintf (asmfile, "@s%d;", TYPE_PRECISION (type)); {
fprintf (asmfile, "@s%d;", TYPE_PRECISION (type));
CHARS (5);
}
putc ('e', asmfile); putc ('e', asmfile);
CHARS (1); CHARS (1);
for (tem = TYPE_VALUES (type); tem; tem = TREE_CHAIN (tem)) for (tem = TYPE_VALUES (type); tem; tem = TREE_CHAIN (tem))
{ {
fprintf (asmfile, "%s:", IDENTIFIER_POINTER (TREE_PURPOSE (tem))); fprintf (asmfile, "%s:", IDENTIFIER_POINTER (TREE_PURPOSE (tem)));
CHARS (IDENTIFIER_LENGTH (TREE_PURPOSE (tem)) + 1);
if (TREE_INT_CST_HIGH (TREE_VALUE (tem)) == 0) if (TREE_INT_CST_HIGH (TREE_VALUE (tem)) == 0)
fprintf (asmfile, HOST_WIDE_INT_PRINT_UNSIGNED, print_wide_int (TREE_INT_CST_LOW (TREE_VALUE (tem)));
TREE_INT_CST_LOW (TREE_VALUE (tem)));
else if (TREE_INT_CST_HIGH (TREE_VALUE (tem)) == -1 else if (TREE_INT_CST_HIGH (TREE_VALUE (tem)) == -1
&& (HOST_WIDE_INT) TREE_INT_CST_LOW (TREE_VALUE (tem)) < 0) && (HOST_WIDE_INT) TREE_INT_CST_LOW (TREE_VALUE (tem)) < 0)
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, print_wide_int (TREE_INT_CST_LOW (TREE_VALUE (tem)));
TREE_INT_CST_LOW (TREE_VALUE (tem)));
else else
print_int_cst_octal (TREE_VALUE (tem)); print_int_cst_octal (TREE_VALUE (tem));
fprintf (asmfile, ",");
CHARS (20 + IDENTIFIER_LENGTH (TREE_PURPOSE (tem))); putc (',', asmfile);
CHARS (1);
if (TREE_CHAIN (tem) != 0) if (TREE_CHAIN (tem) != 0)
{ CONTIN;
CONTIN;
}
} }
putc (';', asmfile); putc (';', asmfile);
CHARS (1); CHARS (1);
#endif #endif
...@@ -1589,10 +1638,8 @@ dbxout_type (type, full) ...@@ -1589,10 +1638,8 @@ dbxout_type (type, full)
CHARS (1); CHARS (1);
} }
else else
{ /* Treat it as a function type. */
/* Treat it as a function type. */ dbxout_type (TREE_TYPE (type), 0);
dbxout_type (TREE_TYPE (type), 0);
}
break; break;
case OFFSET_TYPE: case OFFSET_TYPE:
...@@ -1607,11 +1654,8 @@ dbxout_type (type, full) ...@@ -1607,11 +1654,8 @@ dbxout_type (type, full)
dbxout_type (TREE_TYPE (type), 0); dbxout_type (TREE_TYPE (type), 0);
} }
else else
{ /* Should print as an int, because it is really just an offset. */
/* Should print as an int, because it is really dbxout_type (integer_type_node, 0);
just an offset. */
dbxout_type (integer_type_node, 0);
}
break; break;
case REFERENCE_TYPE: case REFERENCE_TYPE:
...@@ -1658,6 +1702,7 @@ print_int_cst_octal (c) ...@@ -1658,6 +1702,7 @@ print_int_cst_octal (c)
high = 0, low &= (((HOST_WIDE_INT) 1 << width) - 1); high = 0, low &= (((HOST_WIDE_INT) 1 << width) - 1);
fprintf (asmfile, "0"); fprintf (asmfile, "0");
CHARS (1);
if (excess == 3) if (excess == 3)
{ {
...@@ -1676,6 +1721,7 @@ print_int_cst_octal (c) ...@@ -1676,6 +1721,7 @@ print_int_cst_octal (c)
- 1); - 1);
fprintf (asmfile, "%o%01o", (int) beg, (int) middle); fprintf (asmfile, "%o%01o", (int) beg, (int) middle);
CHARS (2);
print_octal (end, HOST_BITS_PER_WIDE_INT / 3); print_octal (end, HOST_BITS_PER_WIDE_INT / 3);
} }
} }
...@@ -1689,8 +1735,29 @@ print_octal (value, digits) ...@@ -1689,8 +1735,29 @@ print_octal (value, digits)
for (i = digits - 1; i >= 0; i--) for (i = digits - 1; i >= 0; i--)
fprintf (asmfile, "%01o", (int) ((value >> (3 * i)) & 7)); fprintf (asmfile, "%01o", (int) ((value >> (3 * i)) & 7));
CHARS (digits);
} }
/* Output C in decimal while adjusting the number of digits written. */
static void
print_wide_int (c)
HOST_WIDE_INT c;
{
int digs = 0;
fprintf (asmfile, HOST_WIDE_INT_PRINT_DEC, c);
if (c < 0)
digs++, c = -c;
while (c > 0)
c /= 10; digs++;
CHARS (digs);
}
/* Output the name of type TYPE, with no punctuation. /* Output the name of type TYPE, with no punctuation.
Such names can be set up either by typedef declarations Such names can be set up either by typedef declarations
or by struct, enum and union tags. */ or by struct, enum and union tags. */
...@@ -2257,7 +2324,8 @@ dbxout_symbol_name (decl, suffix, letter) ...@@ -2257,7 +2324,8 @@ dbxout_symbol_name (decl, suffix, letter)
fprintf (asmfile, "%s\"%s%s:", ASM_STABS_OP, name, fprintf (asmfile, "%s\"%s%s:", ASM_STABS_OP, name,
(suffix ? suffix : "")); (suffix ? suffix : ""));
if (letter) putc (letter, asmfile); if (letter)
putc (letter, asmfile);
} }
static void static void
...@@ -2479,7 +2547,8 @@ dbxout_parms (parms) ...@@ -2479,7 +2547,8 @@ dbxout_parms (parms)
FORCE_TEXT; FORCE_TEXT;
if (DECL_NAME (parms)) if (DECL_NAME (parms))
{ {
current_sym_nchars = 2 + strlen (IDENTIFIER_POINTER (DECL_NAME (parms))); current_sym_nchars
= 2 + strlen (IDENTIFIER_POINTER (DECL_NAME (parms)));
fprintf (asmfile, "%s\"%s:%c", ASM_STABS_OP, fprintf (asmfile, "%s\"%s:%c", ASM_STABS_OP,
IDENTIFIER_POINTER (DECL_NAME (parms)), IDENTIFIER_POINTER (DECL_NAME (parms)),
...@@ -2715,7 +2784,7 @@ dbxout_block (block, depth, args) ...@@ -2715,7 +2784,7 @@ dbxout_block (block, depth, args)
fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_LBRAC); fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_LBRAC);
assemble_name (asmfile, buf); assemble_name (asmfile, buf);
#if DBX_BLOCKS_FUNCTION_RELATIVE #if DBX_BLOCKS_FUNCTION_RELATIVE
fputc ('-', asmfile); putc ('-', asmfile);
assemble_name (asmfile, begin_label); assemble_name (asmfile, begin_label);
#endif #endif
fprintf (asmfile, "\n"); fprintf (asmfile, "\n");
...@@ -2745,7 +2814,7 @@ dbxout_block (block, depth, args) ...@@ -2745,7 +2814,7 @@ dbxout_block (block, depth, args)
fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_RBRAC); fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_RBRAC);
assemble_name (asmfile, buf); assemble_name (asmfile, buf);
#if DBX_BLOCKS_FUNCTION_RELATIVE #if DBX_BLOCKS_FUNCTION_RELATIVE
fputc ('-', asmfile); putc ('-', asmfile);
assemble_name (asmfile, begin_label); assemble_name (asmfile, begin_label);
#endif #endif
fprintf (asmfile, "\n"); fprintf (asmfile, "\n");
......
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