From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4619 invoked by alias); 22 Mar 2002 19:17:20 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 4556 invoked from network); 22 Mar 2002 19:17:09 -0000 Received: from unknown (HELO nevyn.them.org) (128.2.145.6) by sources.redhat.com with SMTP; 22 Mar 2002 19:17:09 -0000 Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian)) id 16oUWg-0007Gf-00; Fri, 22 Mar 2002 14:16:34 -0500 Date: Fri, 22 Mar 2002 11:17:00 -0000 From: Daniel Jacobowitz To: Andrew Cagney , gdb-patches@sources.redhat.com Subject: RFA: MIPS and builtin_type_{double,float} Message-ID: <20020322141634.A27843@nevyn.them.org> Mail-Followup-To: Andrew Cagney , gdb-patches@sources.redhat.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="pf9I7BMVVzbSWLtt" Content-Disposition: inline User-Agent: Mutt/1.3.23i X-SW-Source: 2002-03/txt/msg00422.txt.bz2 --pf9I7BMVVzbSWLtt Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 386 Rather than add the FIXME I owe you, I figured I'd fix at least most of the (potential) problem. This patch corrects explicit references to registers to use the known IEEE floating-point types instead of builtin_type_{float,double}. OK? -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer --pf9I7BMVVzbSWLtt Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="mips-double-register-types.patch" Content-length: 4010 2002-03-22 Daniel Jacobowitz * mips-tdep.c (mips_float_register_type): New function. (mips_double_register_type): New function. (mips_print_register): Use them. (do_fp_register_row): Likewise. Index: mips-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/mips-tdep.c,v retrieving revision 1.67 diff -u -p -r1.67 mips-tdep.c --- mips-tdep.c 2002/03/10 17:00:27 1.67 +++ mips-tdep.c 2002/03/22 19:10:34 @@ -289,6 +289,9 @@ static CORE_ADDR after_prologue (CORE_AD static void mips_read_fp_register_single (int regno, char *rare_buffer); static void mips_read_fp_register_double (int regno, char *rare_buffer); +static struct type *mips_float_register_type (void); +static struct type *mips_double_register_type (void); + /* This value is the model of MIPS in use. It is derived from the value of the PrID register. */ @@ -2738,6 +2741,24 @@ mips_pop_frame (void) regs could be 32 bits wide in one frame and 64 on the frame above and below). */ +static struct type * +mips_float_register_type (void) +{ + if (TARGET_BYTE_ORDER == BFD_BIG_ENDIAN) + return builtin_type_ieee_single_big; + else + return builtin_type_ieee_single_little; +} + +static struct type * +mips_double_register_type (void) +{ + if (TARGET_BYTE_ORDER == BFD_BIG_ENDIAN) + return builtin_type_ieee_double_big; + else + return builtin_type_ieee_double_little; +} + /* Copy a 32-bit single-precision value from the current frame into rare_buffer. */ @@ -2831,7 +2852,7 @@ mips_print_register (int regnum, int all mips_read_fp_register_double (regnum, dbuffer); printf_filtered ("(d%d: ", regnum - FP0_REGNUM); - val_print (builtin_type_double, dbuffer, 0, 0, + val_print (mips_double_register_type (), dbuffer, 0, 0, gdb_stdout, 0, 1, 0, Val_pretty_default); printf_filtered ("); "); } @@ -2855,10 +2876,10 @@ mips_print_register (int regnum, int all int offset = 4 * (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG); printf_filtered (" (float) "); - val_print (builtin_type_float, raw_buffer + offset, 0, 0, + val_print (mips_float_register_type (), raw_buffer + offset, 0, 0, gdb_stdout, 0, 1, 0, Val_pretty_default); printf_filtered (", (double) "); - val_print (builtin_type_double, raw_buffer, 0, 0, + val_print (mips_double_register_type (), raw_buffer, 0, 0, gdb_stdout, 0, 1, 0, Val_pretty_default); } else @@ -2897,13 +2918,13 @@ do_fp_register_row (int regnum) /* 4-byte registers: we can fit two registers per row. */ /* Also print every pair of 4-byte regs as an 8-byte double. */ mips_read_fp_register_single (regnum, raw_buffer); - flt1 = unpack_double (builtin_type_float, raw_buffer, &inv1); + flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1); mips_read_fp_register_single (regnum + 1, raw_buffer); - flt2 = unpack_double (builtin_type_float, raw_buffer, &inv2); + flt2 = unpack_double (mips_float_register_type (), raw_buffer, &inv2); mips_read_fp_register_double (regnum, raw_buffer); - doub = unpack_double (builtin_type_double, raw_buffer, &inv3); + doub = unpack_double (mips_double_register_type (), raw_buffer, &inv3); printf_filtered (" %-5s", REGISTER_NAME (regnum)); if (inv1) @@ -2931,10 +2952,10 @@ do_fp_register_row (int regnum) { /* Eight byte registers: print each one as float AND as double. */ mips_read_fp_register_single (regnum, raw_buffer); - flt1 = unpack_double (builtin_type_double, raw_buffer, &inv1); + flt1 = unpack_double (mips_double_register_type (), raw_buffer, &inv1); mips_read_fp_register_double (regnum, raw_buffer); - doub = unpack_double (builtin_type_double, raw_buffer, &inv3); + doub = unpack_double (mips_double_register_type (), raw_buffer, &inv3); printf_filtered (" %-5s: ", REGISTER_NAME (regnum)); if (inv1) --pf9I7BMVVzbSWLtt--