Re: final i386.floating.record.patch

paawan oza
2009-08-18T13:48:25Z

Hi,

Another analysis and observation is:

I used gdb-6.8.50.20090803 and everything seemed okay.
Hui used gdb-6.8.50.20090817 and patch was still the same and gdb threw these error.
was there any thing major changed in gdb ?

and gdb throws error in
../../src/gdb/utils.c:1200:

which looks like somebody has allocated memory too much or something has gone wrong in error checking.

the floating-point-patch is still the same, if it works fine with gdb-6.8.50.20090803, it is high unlikely that why should it throw memory allocation error with gdb-6.8.50.20090817 (unless system is dangerously low in virtual memory, swap space is full).

Regards,
Oza.

--- On Mon, 8/17/09, paawan oza <paawan1982@yahoo.com> wrote:

> From: paawan oza <paawan1982@yahoo.com>
> Subject: Re: final i386.floating.record.patch
> To: "Michael Snyder" <msnyder@vmware.com>, "Hui Zhu" <teawater@gmail.com>
> Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>, "Mark Kettenis" <mark.kettenis@xs4all.nl>
> Date: Monday, August 17, 2009, 9:40 PM
> Hi Hui,
>
> I test the same and it seems working fine. Another thing I
> observe is, vertual memory is low problem and may be gdb's
> virtual address space gets exhausted or any other limit!
> highly unlikely though.
>
> please see the atached log.
>
> linux-p94d:/home/oza/mk_patch/take_diff/gdb_current/gdb-6.8.50.20090803/gdb
> # ./gdb ./test_floats
> GNU gdb (GDB) 6.8.50.20090803
> Copyright (C) 2009 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and
> redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "i686-pc-linux-gnu".
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>...
> Setting up the environment for debugging gdb.
> Function "internal_error" not defined.
> Make breakpoint pending on future shared library load? (y
> or [n]) [answered N; input not from terminal]
> Function "info_command" not defined.
> Make breakpoint pending on future shared library load? (y
> or [n]) [answered N; input not from terminal]
> /home/oza/mk_patch/take_diff/gdb_current/gdb-6.8.50.20090803/gdb/.gdbinit:8:
> Error in sourced command file:
> No breakpoint number 0.
> (gdb) start
> Temporary breakpoint 1 at 0x8048c94: file ./test_floats.c,
> line 196.
> Starting program:
> /home/oza/mk_patch/take_diff/gdb_current/gdb-6.8.50.20090803/gdb/test_floats
>
> Temporary breakpoint 1, main () at ./test_floats.c:196
> 196         init_floats();
> (gdb) record
> (gdb) c
> Continuing.
> result is 369.438751
> result is 10.320001
> result is 23.008301
> result is 0.000000
> result is 10.450000
> result is 10.776012
> result is 495830.968750
> result is -181.778748
> result is 12.525923
> result is 2.195619
> result is 5.055601
> result is inf
> result is inf
> result is -0.988032
> result is 0.154251
> result is -6.405331
> result is 1.537475
> The next instruction is syscall exit_group.  It will
> make the program exit.  Do you want to stop the
> program?([y] or n) y
> Process record: inferior program stopped.
>
> Program received signal SIGTRAP, Trace/breakpoint trap.
> 0xffffe405 in __kernel_vsyscall ()
> (gdb)
>
> Regards,
> Oza.
>
>
>
>
> --- On Mon, 8/17/09, Hui Zhu <teawater@gmail.com>
> wrote:
>
> > From: Hui Zhu <teawater@gmail.com>
> > Subject: Re: final i386.floating.record.patch
> > To: "Michael Snyder" <msnyder@vmware.com>
> > Cc: "paawan oza" <paawan1982@yahoo.com>,
> "gdb-patches@sourceware.org"
> <gdb-patches@sourceware.org>,
> "Mark Kettenis" <mark.kettenis@xs4all.nl>
> > Date: Monday, August 17, 2009, 12:06 PM
> > Get some error with this patch.
> > cat fp.c
> > #include <stdio.h>
> > #include <math.h>
> > #include <stdlib.h>
> >
> > /* the test intends to test following insns.
> > flds faddp fstps fstpl fldl fxch fabs fdivrp fmulp
> fsubrp
> > fucomp fnstsw fsqrt
> > fchs f2xm1 fyl2x fxtract fprem1 fld fdecstp fld1
> fldl2t
> > fldl2e FLDPI
> > FLDLG2 FLDLN2
> > FLDZ fincstp ffree fptan fpatan fincstp fsincos
> frndint
> > fscale fsin fcos fcmovb
> > fcmovbe fcmove fcmovu fcmovnb fcmovnbe fsave frstor
> fstsw
> > */
> >
> > float no1,no2,no3,no4,no5,no6,no7;
> > double x = 100.345, y = 25.7789;
> > long double ldx = 88888888888888888888.88, ldy =
> > 9999999999999999999.99;
> > float result,resultd,resultld;
> > float *float_memory;
> >
> > /* initialization of floats */
> > void init_floats()
> > {
> >  no1 = 10.45;
> >  no2 = 20.77;
> >  no3 = 156.89874646;
> >  no4 = 14.56;
> >  no5 = 11.11;
> >  no6 = 66.77;
> >  no7 = 88.88;
> >  float_memory = malloc(sizeof(float) * 4);
> >  *float_memory = 256.256;
> >  *(float_memory + 1) = 356.356;
> >  *(float_memory + 2) = 456.456;
> >  *(float_memory + 3) = 556.556;
> > }
> >
> > /* marks FPU stack as empty */
> > void empty_fpu_stack()
> > {
> >  asm ("ffree %st(1) \n\t"
> >       "ffree %st(2) \n\t"
> >       "ffree %st(3) \n\t"
> >       "ffree %st(4) \n\t"
> >       "ffree %st(5) \n\t"
> >       "ffree %st(6) \n\t"
> >       "ffree %st(7)");
> > }
> >
> > /* tests floating point arithmatic */
> > void test_arith_floats()
> > {
> >  result = no1 + no2 + no3 + no4 + no5 + no6 +
> no7;
> >  printf("result is %f\n",result);
> >
> >  result = fmodf(no2,no1);
> >  printf("result is %f\n",result);
> >
> >  resultd = fmod(x,y);
> >  printf("result is %f\n",resultd);
> >
> >  resultld = fmodl(ldy,ldy);
> >  printf("result is %f\n",resultld);
> >
> >  result = fabsf(no1);
> >  printf("result is %f\n",result);
> >
> >  result = no3 / no4;
> >  printf("result is %f\n",result);
> >
> >  result = no1 * no2 * no3 * no4;
> >  printf("result is %f\n",result);
> >
> >  result = no1 - no2 - no3 - no4;
> >  printf("result is %f\n",result);
> >
> >
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("fchs");
> >
> >  /* test for f2xm1 */
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("f2xm1");
> >
> >  asm ("fyl2x");
> >
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("fxtract");
> >
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("fprem1");
> >
> >  /* decrement fpu stack pointer only status
> register should
> > get affected */
> >  asm ("fld %0" : :"m"(*float_memory));
> >
> >  empty_fpu_stack();
> >
> >  asm ("fld1");
> >  asm ("fldl2t");
> >  asm ("fldl2e");
> >  asm ("fldpi");
> >  asm ("fldlg2");
> >  asm ("fldln2");
> >  asm ("fldz");
> >
> >  empty_fpu_stack();
> >  /* finishing emptying the stack */
> >
> >  result = sqrt(no3);
> >  printf("result is %f\n",result);
> > }
> >
> > void test_log_exp_floats()
> > {
> >  result = log10(no3);
> >  printf("result is %f\n",result);
> >
> >  result = log(no3);
> >  printf("result is %f\n",result);
> >
> >  result = exp10(no3);
> >  printf("result is %f\n",result);
> >
> >  result = exp(no3);
> >  printf("result is %f\n",result);
> > }
> >
> > void test_trigo_floats()
> > {
> >  result = sin(30);
> >  printf("result is %f\n",result);
> >
> >  result = cos(30);
> >  printf("result is %f\n",result);
> >
> >  result = tan(30);
> >  printf("result is %f\n",result);
> >
> >  result = atan(30);
> >  printf("result is %f\n",result);
> >
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("fptan");
> >
> >  /* changes st1 and popping register stack */
> >  asm ("fpatan");
> >
> >  asm("fincstp");
> >  asm ("fld %0" : :"m"(float_memory));
> >  asm ("fsincos");
> >
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("frndint");
> >
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("fld %0" : :"m"(*(float_memory+1)));
> >  asm ("fscale");
> >
> >  empty_fpu_stack();
> >
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("fsin");
> >  asm ("fcos");
> >
> >  /* currently we assume condition likely and
> always record
> > the registers
> >  code could be optimized only if the flag is set
> then
> > record */
> >  asm ("fld %0" : :"m"(*float_memory));
> >  asm ("fld %0" : :"m"(*(float_memory+1)));
> >  asm ("fcmovb %st(1), %st");
> >  asm ("fcmovbe %st(1), %st");
> >  asm ("fcmove %st(1), %st");
> >  asm ("fcmovu %st(1), %st");
> >  asm ("fcmovnb %st(1), %st");
> >  asm ("fcmovnbe %st(1), %st");
> >
> >  empty_fpu_stack();
> >  /* finished emtyping the stack */
> > }
> >
> > void test_compare_floats()
> > {
> >    ldy = 88888888888888888888.88;
> >    if (ldx == ldy)
> >      ldy =
> > 7777777777777777777777777777.777;
> >    else
> >      ldy =
> > 666666666666666666666666666.666;
> > }
> >
> > /* test loading and saving of FPU environment */
> > void test_fpu_env()
> > {
> >  asm ("fsave %0" : "=m"(*float_memory) : );
> >  asm ("frstor %0" : : "m"(*float_memory));
> >  asm ("fstsw %ax");
> > }
> >
> > int main()
> > {
> >    init_floats();
> >    test_arith_floats();
> >    test_log_exp_floats();
> >    test_trigo_floats();
> >    test_compare_floats();
> >    test_fpu_env();
> > }
> >
> >
> >
> > ./gdb ./a.out
> > GNU gdb (GDB) 6.8.50.20090817-cvs
> > Copyright (C) 2009 Free Software Foundation, Inc.
> > License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> > This is free software: you are free to change and
> > redistribute it.
> > There is NO WARRANTY, to the extent permitted by
> law.
> > Type "show copying"
> > and "show warranty" for details.
> > This GDB was configured as "i686-pc-linux-gnu".
> > For bug reporting instructions, please see:
> > <http://www.gnu.org/software/gdb/bugs/>...
> > Setting up the environment for debugging gdb.
> > Function "internal_error" not defined.
> > Make breakpoint pending on future shared library load?
> (y
> > or [n])
> > [answered N; input not from terminal]
> > Function "info_command" not defined.
> > Make breakpoint pending on future shared library load?
> (y
> > or [n])
> > [answered N; input not from terminal]
> > /home/teawater/gdb/bgdbno/gdb/.gdbinit:8: Error in
> sourced
> > command file:
> > No breakpoint number 0.
> > (gdb) start
> > During symbol reading, DW_AT_name missing from
> > DW_TAG_base_type.
> > Temporary breakpoint 1 at 0x8048c74: file fp.c, line
> 196.
> > Starting program: /home/teawater/gdb/bgdbno/gdb/a.out
> >
> > Temporary breakpoint 1, main () at fp.c:196
> > 196       init_floats();
> > (gdb) record
> > (gdb) c
> > Continuing.
> > ../../src/gdb/utils.c:1200: internal-error: virtual
> memory
> > exhausted.
> > A problem internal to GDB has been detected,
> > further debugging may prove unreliable.
> > Quit this debugging session? (y or n) n
> > ../../src/gdb/utils.c:1200: internal-error: virtual
> memory
> > exhausted.
> > A problem internal to GDB has been detected,
> > further debugging may prove unreliable.
> > Create a core file of GDB? (y or n) n
> >
> > Program received signal SIGTRAP, Trace/breakpoint
> trap.
> > 0xb7eba9bc in memcpy () from
> /lib/tls/i686/cmov/libc.so.6
> > (gdb) quit
> > A debugging session is active.
> >
> >     Inferior 1 [process 15657] will be
> > killed.
> >
> > Quit anyway? (y or n) y
> >
> >
> > Thanks,
> > Hui
> >
> > On Mon, Aug 17, 2009 at 05:16, Michael Snyder<msnyder@vmware.com>
> > wrote:
> > > paawan oza wrote:
> > >>
> > >> Hi Hui & Michael,
> > >> Now we revert status registers also.
> > >> please find the patch attached.
> > >> I am sorry, if I am not pasting the patch in
> > email-body due to tabs&spaces
> > >> problem faced by Michael last time.
> > >> Regards,
> > >> Oza.
> > >
> > > Looking good!
> > >
> > > There were some conflicts between your changes
> and a
> > check-in that
> > > happened after your submission  --  I've taken
> the
> > liberty of merging
> > > your changes with the cvs head, fixing up the
> > conflicts.  Hope you
> > > don't mind  --  merged patch attached.
> > >
> > > I'll review your tests next.
> > >
> > > Can you write up a change log entry for this
> patch?
> > >
> > > Hui, Mark, any more comments?
> > >
> > > Cheers,
> > > Michael
> > >
> > >
> > >
> > >
> > >
> >
>
>
>
>