Re: final i386.floating.record.patch

Michael Snyder
2009-08-23T01:32:52Z

We just need a copyright assignment, and then one of us can check it in.

Oza, have you sent in your copyright assignment?
If not, see the file src/gdb/CONTRIBUTE.

Hui Zhu wrote:
> I think this patch is OK. How do we continue?
>
> Thanks,
> Hui
>
> On Sat, Aug 22, 2009 at 00:30, paawan oza<paawan1982@yahoo.com> wrote:
>> Hu Hui,
>> please find the ChageLog and floating point patch attached as you suggested.
>> Sorry for not pasting it in email-body becasue of space and tabs issues.
>> Do we need to update wiki?
>> Regards,
>> Oza.
>>
>> --- On Wed, 8/19/09, Hui Zhu <teawater@gmail.com> wrote:
>>
>>> From: Hui Zhu <teawater@gmail.com>
>>> Subject: Re: final i386.floating.record.patch
>>> To: "paawan oza" <paawan1982@yahoo.com>
>>> Cc: "Michael Snyder" <msnyder@vmware.com>, "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>, "Mark Kettenis" <mark.kettenis@xs4all.nl>
>>> Date: Wednesday, August 19, 2009, 7:47 AM
>>> Oops, this is not the bug in fp
>>> patch. Sorry for it.
>>>
>>> After patch http://sourceware.org/ml/gdb-patches/2009-08/msg00272.html
>>>
>>> Everything is OK.
>>>
>>> I post a new patch that remove space in the tail.
>>> I think you need write a changelog. You can get a
>>> example from
>>> src/ChangeLog. Please Let each line doesn't bigger
>>> than 72.
>>>
>>> Thanks,
>>> Hui
>>>
>>> On Wed, Aug 19, 2009 at 09:13, Hui Zhu<teawater@gmail.com>
>>> wrote:
>>>> Could you try cvs-head?
>>>>
>>>> On Tue, Aug 18, 2009 at 21:48, paawan oza<paawan1982@yahoo.com>
>>> wrote:
>>>>> 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
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>
>>