Re: final i386.floating.record.patch

paawan oza
2009-08-23T09:04:15Z

Hi,

I have gone through 'contributing' documentation. I have gone through licensing related sections.

But I am not very sure what are the exact things/stpes invloved ?
Also I could not find template forms for the copyright.

please help me with these.
I think as this is for the first time, Open Source Ethics are bit unclear to me.
But may be next time it will be smooth sailing : )

Regards,
Oza.

--- On Sun, 8/23/09, Michael Snyder <msnyder@vmware.com> wrote:

> From: Michael Snyder <msnyder@vmware.com>
> Subject: Re: final i386.floating.record.patch
> To: "Hui Zhu" <teawater@gmail.com>
> Cc: "paawan oza" <paawan1982@yahoo.com>, "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>, "Mark Kettenis" <mark.kettenis@xs4all.nl>
> Date: Sunday, August 23, 2009, 6:58 AM
> 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
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>
> >>
>
>