Hello,

Looks like 'gdb' is missing debug information about the function 'cos' , and
the debugger implicitly assumes all the functions return an 'int' , if the
function is not compiled in debug mode.

I derive my explanation from the following test case.

1. Create a function 'double test_cos(double)' and compile it in optimized
mode with -O3 using gcc
 "$gcc -c -O3 test1.c"

2. Complie the file containing the 'main' function in debug mode
"$gcc -g test.c test1.o -lm"

============[gdb a.out]====================

(gdb) list 0
1       #include <math.h>
2       #include "test1.h"
3       double    (*fcn)(double);
4       main()
5       {
6                double t;
7                 fcn = cos;
8                  t=cos(.2);
9                   t=cos(-.2);
10                      test_cos(.2);
(gdb) call fcn(0.2)
$4 = 0.98006657784124163
(gdb) call cos(0.2)
$5 = -1073792992
(gdb) call test_cos(0.2)
$6 = -1073792992
=====================================

============[test1.h]=================
#ifndef _test_1_h
#define _test_1_h
double test_cos(double);
#endif
====================================

============[test1.c]==================
#include<math.h>
#include "test1.h"
double test_cos(double a){
        return cos(a);
}
====================================

============[test.c]==================
#include <math.h>
#include "test1.h"
double    (*fcn)(double);
main()
{
         double t;
          fcn = cos;
           t=cos(.2);
            t=cos(-.2);
                test_cos(.2);
}
===================================

May be the developers of gdb can you more details.

also
=======================================
(gdb) call cos
$6 = {<text variable, no debug info>} 0xc325d0 <cos>
=======================================


Thank you,
Vamsi Kundeti



On Wed, Dec 23, 2009 at 8:17 PM, pilgrim2 <p...@mail.jpl.nasa.gov> wrote:

>
> Hi,
>
>  I was wondering how come the call to "call cos(.2)" returns the wrong
> answer in:
>
> #include <math.h>
> double    (*fcn)(double);
> main()
> {
>  double t;
>  fcn = cos;
>  t=cos(.2);
>  t=cos(-.2);
> }
>
> (gdb) call cos(.2)
> $16 = 104
> (gdb) call fcn(.2)
> $17 = 0.98006657784124163
>
> Thanks,
>
> Linh
> --
> View this message in context:
> http://old.nabble.com/Why-%22call-cos%28.2%29%22-returns-garbage--tp26909516p26909516.html
> Sent from the Gnu - gdb - General mailing list archive at Nabble.com.
>
>
>
>


-- 
Sincerely,
Vamsi

Reply via email to