From: Jim Wilson Date: Fri, 17 Jan 2003 16:49:26 +0000 (+0000) Subject: dbxout.c (dbxout_fptype_value): New. X-Git-Tag: releases/gcc-3.2.2~108 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b9507985df199cfd2e5e617c804b0597422c9a4;p=thirdparty%2Fgcc.git dbxout.c (dbxout_fptype_value): New. * dbxout.c (dbxout_fptype_value): New. (dbxout_type, case COMPLEX_TYPE): Call it. Use 'R' instead of 'r'. From-SVN: r61445 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f463547b62b6..1933fc2d0e43 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-01-17 Jim Wilson + + * dbxout.c (dbxout_fptype_value): New. + (dbxout_type, case COMPLEX_TYPE): Call it. Use 'R' instead of 'r'. + 2003-01-15 Stephane Carrez * config/m68hc11/m68hc11.md ("return"): Use emit_jump_insn to emit diff --git a/gcc/dbxout.c b/gcc/dbxout.c index d2ae7fba27a3..bd7f9a7881e6 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -294,6 +294,7 @@ static void dbxout_finish PARAMS ((const char *)); static void dbxout_start_source_file PARAMS ((unsigned, const char *)); static void dbxout_end_source_file PARAMS ((unsigned)); static void dbxout_typedefs PARAMS ((tree)); +static void dbxout_fptype_value PARAMS ((tree)); static void dbxout_type_index PARAMS ((tree)); #if DBX_CONTIN_LENGTH > 0 static void dbxout_continue PARAMS ((void)); @@ -688,6 +689,61 @@ dbxout_finish (filename) #endif /* DBX_OUTPUT_MAIN_SOURCE_FILE_END */ } +/* Output floating point type values used by the 'R' stab letter. + These numbers come from include/aout/stab_gnu.h in binutils/gdb. + + There are only 3 real/complex types defined, and we need 7/6. + We use NF_SINGLE as a generic float type, and NF_COMPLEX as a generic + complex type. Since we have the type size anyways, we don't really need + to distinguish between different FP types, we only need to distinguish + between float and complex. This works fine with gdb. + + We only use this for complex types, to avoid breaking backwards + compatibility for real types. complex types aren't in ISO C90, so it is + OK if old debuggers don't understand the debug info we emit for them. */ + +/* ??? These are supposed to be IEEE types, but we don't check for that. + We could perhaps add additional numbers for non-IEEE types if we need + them. */ + +static void +dbxout_fptype_value (type) + tree type; +{ + char value = '0'; + enum machine_mode mode = TYPE_MODE (type); + + if (TREE_CODE (type) == REAL_TYPE) + { + if (mode == SFmode) + value = '1'; + else if (mode == DFmode) + value = '2'; + else if (mode == TFmode || mode == XFmode) + value = '6'; + else + /* Use NF_SINGLE as a generic real type for other sizes. */ + value = '1'; + } + else if (TREE_CODE (type) == COMPLEX_TYPE) + { + if (mode == SCmode) + value = '3'; + else if (mode == DCmode) + value = '4'; + else if (mode == TCmode || mode == XCmode) + value = '5'; + else + /* Use NF_COMPLEX as a generic complex type for other sizes. */ + value = '3'; + } + else + abort (); + + putc (value, asmfile); + CHARS (1); +} + /* Output the index of a type. */ static void @@ -1359,9 +1415,9 @@ dbxout_type (type, full) if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE) { - fprintf (asmfile, "r"); + putc ('R', asmfile); CHARS (1); - dbxout_type_index (type); + dbxout_fptype_value (type); putc (';', asmfile); CHARS (1); print_wide_int (2 * int_size_in_bytes (TREE_TYPE (type)));