public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
* examining floating point data with 'print' on non floating point kernel
@ 2005-07-15  1:08 Claudia Salzberg
  2005-07-15  1:16 ` Daniel Jacobowitz
  0 siblings, 1 reply; 3+ messages in thread
From: Claudia Salzberg @ 2005-07-15  1:08 UTC (permalink / raw)
  To: gdb; +Cc: drow

Hi,

I am trying to use the 'print' command on a function declared in the 
program being debugged.  This function takes in 10 values and prints them 
with a printf(%f).  The program prints the values correctly if run 
independently of gdb.  If the program is run on gdb normally (meaning with 
just run) they also print correctly.  However, when called with the print 
command the output is unexpected and it prints either 0.00000 or nan where 
the various floating point values should be.  This works fine on a power 3 
ppc box but does not work on the 440GP.

The code of the program being debugged is identical to the 
print_ten_doubles() function in the tesuite's call-ar-st test in gdb.base 
where the body of the program is:

print_ten_doubles(double d1, double d2, ..., double d9, double d10)
{
        printf("Two doubles: %f\t%f\n", d1, d2);
        ...
        printf("Two doubles: %f\t%f\n", d9, d10);
}


Here is the output:

GNU gdb 6.3.50.20050608-cvs
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you 
are
welcome to change it and/or distribute copies of it under certain 
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for 
details.
This GDB was configured as "ppc-linux"...Using host libthread_db library 
"/lib/.

(gdb) b main
Breakpoint 1 at 0x1000051c: file doubles.c, line 27.
(gdb) r
Starting program: /root/printdouble

Breakpoint 1, main () at doubles.c:27
27      doubles.c: No such file or directory.
        in doubles.c
(gdb) print print_ten_doubles(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 
0.0)
Two Doubles : 0.000000  nan
Two Doubles : 0.000000  nan
Two Doubles : 9.900000  0.000000
Two Doubles : 0.000000  nan
Two Doubles : 0.000000  nan
$1 = void
(gdb) c
Continuing.
Two Doubles : 123.456000        123.456000
Two Doubles : -0.120000 -1.230000
Two Doubles : 343434.800000     89.098000
Two Doubles : 3.140000  -5678.123450
Two Doubles : -0.111111 216.970650

Program exited normally.
(gdb)

(gdb) set debug expression 10
(gdb) r
Starting program: /root/printdouble

Breakpoint 1, main () at doubles.c:27
27      in doubles.c
(gdb) print print_ten_doubles(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 
0.0)

Dump of expression @ 0x107aa830'
        Language c, 47 elements, 8 bytes each.
        Index                Opcode         Hex Value  String Value
            0          OP_VAR_VALUE  188978561024  ...,....
            1               OP_NULL  0  ........
            2   <unknown 273620248>  1175190016683409408  .O......
            3          OP_VAR_VALUE  188978561024  ...,....
            4             OP_DOUBLE  184683593728  ...+....
            5   <unknown 273643112>  1175288216815665152  .Ovh....
            6  <unknown 1072798105>  4607632778762754458  ?.......
            7             OP_DOUBLE  184683593728  ...+....
            8             OP_DOUBLE  184683593728  ...+....
            9   <unknown 273643112>  1175288216815665152  .Ovh....
           10  <unknown 1073846681>  4612136378390124954  @.......
           11             OP_DOUBLE  184683593728  ...+....
           12             OP_DOUBLE  184683593728  ...+....
           13   <unknown 273643112>  1175288216815665152  .Ovh....
           14  <unknown 1074423398>  4614613358185178726  @.ffffff
           15             OP_DOUBLE  184683593728  ...+....
           16             OP_DOUBLE  184683593728  ...+....
           17   <unknown 273643112>  1175288216815665152  .Ovh....
           18  <unknown 1074895257>  4616639978017495450  @.......
           19             OP_DOUBLE  184683593728  ...+....
           20             OP_DOUBLE  184683593728  ...+....
           21   <unknown 273643112>  1175288216815665152  .Ovh....
           22  <unknown 1075183616>  4617878467915022336  @.......
           23             OP_DOUBLE  184683593728  ...+....
           24             OP_DOUBLE  184683593728  ...+....
           25   <unknown 273643112>  1175288216815665152  .Ovh....
           26  <unknown 1075471974>  4619116957812549222  @.ffffff
           27             OP_DOUBLE  184683593728  ...+....
           28             OP_DOUBLE  184683593728  ...+....
           29   <unknown 273643112>  1175288216815665152  .Ovh....
           30  <unknown 1075760332>  4620355447710076109  @.......
           31             OP_DOUBLE  184683593728  ...+....
           32             OP_DOUBLE  184683593728  ...+....
           33   <unknown 273643112>  1175288216815665152  .Ovh....
           34  <unknown 1075943833>  4621143577644865946  @!......
           35             OP_DOUBLE  184683593728  ...+....
           36             OP_DOUBLE  184683593728  ...+....
           37   <unknown 273643112>  1175288216815665152  .Ovh....
           38  <unknown 1076088012>  4621762822593629389  @#......
           39             OP_DOUBLE  184683593728  ...+....
           40             OP_DOUBLE  184683593728  ...+....
           41   <unknown 273643112>  1175288216815665152  .Ovh....
           42               OP_NULL  0  ........
           43             OP_DOUBLE  184683593728  ...+....
           44            OP_FUNCALL  206158430208  ...0....
           45               OP_NULL  10  ........
           46            OP_FUNCALL  206158430208  ...0....

Dump of expression @ 0x107aa830, after conversion to prefix form:
Expression: `print_ten_doubles (1.1000000000000001, 2.2000000000000002, 
3.299999999999999, 4.4000000000000004, 5.5, 6.5999999999999996, 
7.7000000000000002, 8.8000000000000007, 9.9000000000000004, 0)'
        Language c, 47 elements, 8 bytes each.


            0  OP_FUNCALL            Number of args: 10
            3    OP_VAR_VALUE          Block @0x0, symbol @0x104f1d18 
(print_te)
            7    OP_DOUBLE             Type @0x104f7668 (double), value 
1.1
           11    OP_DOUBLE             Type @0x104f7668 (double), value 
2.2
           15    OP_DOUBLE             Type @0x104f7668 (double), value 
3.3
           19    OP_DOUBLE             Type @0x104f7668 (double), value 
4.4
           23    OP_DOUBLE             Type @0x104f7668 (double), value 
5.5
           27    OP_DOUBLE             Type @0x104f7668 (double), value 
6.6
           31    OP_DOUBLE             Type @0x104f7668 (double), value 
7.7
           35    OP_DOUBLE             Type @0x104f7668 (double), value 
8.8
           39    OP_DOUBLE             Type @0x104f7668 (double), value 
9.9
           43    OP_DOUBLE             Type @0x104f7668 (double), value 0

Two Doubles : 0.000000  nan
Two Doubles : 0.000000  nan
Two Doubles : 9.900000  0.000000
Two Doubles : 0.000000  nan
Two Doubles : 0.000000  nan

$2 = void
(gdb)

Any suggestions?

Thanks,
Claudia



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: examining floating point data with 'print' on non floating point kernel
  2005-07-15  1:08 examining floating point data with 'print' on non floating point kernel Claudia Salzberg
@ 2005-07-15  1:16 ` Daniel Jacobowitz
  2005-07-15 18:09   ` Mark Kettenis
  0 siblings, 1 reply; 3+ messages in thread
From: Daniel Jacobowitz @ 2005-07-15  1:16 UTC (permalink / raw)
  To: Claudia Salzberg; +Cc: gdb

On Thu, Jul 14, 2005 at 08:08:22PM -0500, Claudia Salzberg wrote:
> Hi,
> 
> I am trying to use the 'print' command on a function declared in the 
> program being debugged.  This function takes in 10 values and prints them 
> with a printf(%f).  The program prints the values correctly if run 
> independently of gdb.  If the program is run on gdb normally (meaning with 
> just run) they also print correctly.  However, when called with the print 
> command the output is unexpected and it prints either 0.00000 or nan where 
> the various floating point values should be.  This works fine on a power 3 
> ppc box but does not work on the 440GP.

This means that your 440GP installation is using a different floating
point model than GDB thinks it is.


-- 
Daniel Jacobowitz
CodeSourcery, LLC

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: examining floating point data with 'print' on non floating point kernel
  2005-07-15  1:16 ` Daniel Jacobowitz
@ 2005-07-15 18:09   ` Mark Kettenis
  0 siblings, 0 replies; 3+ messages in thread
From: Mark Kettenis @ 2005-07-15 18:09 UTC (permalink / raw)
  To: drow; +Cc: salzberg, gdb

   Date: Thu, 14 Jul 2005 21:16:27 -0400
   From: Daniel Jacobowitz <drow@false.org>
	   version=3.0.2

   On Thu, Jul 14, 2005 at 08:08:22PM -0500, Claudia Salzberg wrote:
   > Hi,
   > 
   > I am trying to use the 'print' command on a function declared in
   > the program being debugged.  This function takes in 10 values and
   > prints them with a printf(%f).  The program prints the values
   > correctly if run independently of gdb.  If the program is run on
   > gdb normally (meaning with just run) they also print correctly.
   > However, when called with the print command the output is
   > unexpected and it prints either 0.00000 or nan where the various
   > floating point values should be.  This works fine on a power 3
   > ppc box but does not work on the 440GP.

   This means that your 440GP installation is using a different floating
   point model than GDB thinks it is.

Or the Linux kernel on the 440GP doesn't properly initialize the FPU
when gdb writes the floating-point registers before the program itself
has executed an FPU instruction.

Mark

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-07-15 18:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-07-15  1:08 examining floating point data with 'print' on non floating point kernel Claudia Salzberg
2005-07-15  1:16 ` Daniel Jacobowitz
2005-07-15 18:09   ` Mark Kettenis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).