Interesting ... would be interesting to see the asm generated in the
good/bad cases (/FAs option, I think)...
Only 64-bit Vista is a bit strange though (I'm on Vista 32, and Rick also
saw the problem on XP).
However, I think you may well be right about something bad in the 2005
compiler or libraries -- ran with the 2008 version for Friday evening, all
of yesterday, and a hour or so this morning -- no pesky 'r' seen.
Will switch to Rick's new version later this morning.
Mike
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mike Cowlishaw, IBM Fellow
http://bit.ly/mfc
IBM UK (MP8), PO Box 31, Birmingham Road, Warwick, CV34 5JL
Mark Miesfeld <miesf...@gmail.com> wrote on 26/04/2009 04:23:04:
> Mark Miesfeld <miesf...@gmail.com>
> 26/04/2009 04:23
>
> Please respond to
> Open Object Rexx Developer Mailing List
<oorexx-devel@lists.sourceforge.net>
>
> To
>
> ooRexx Dev List <oorexx-devel@lists.sourceforge.net>
>
> cc
>
> Subject
>
> [Oorexx-devel] Tracked down problem with: compiler, Vista, ?
>
> Rick,
>
> In working on the SysFileSearch bug, I tracked down what seems to be a
> case where the VS 2005 compiler produces wrong code and the VS 2008
> produces code that works.
>
> It's bizarre, so it takes a bit to explain it. On Vista 64-bit, the
> GetLine() function causes a memory exception here:
>
> scan = (char *)memchr(filedata->scan, CH_NL, filedata->data);
>
> The exception comes because it has gone past the end of the file
> buffer. The check for the end of the buffer is right before, and the
> whole thing looks like:
>
> if (!(filedata->data)) { /* if out of current buffer */
> if (filedata->residual) { /* may be another buffer */
> ReadNextBuffer(filedata); /* try to read one */
> if (!filedata->data) /* nothing more? */
> return true; /* all done */
> }
> else
> return true; /* return EOF condition */
> }
> /* look for a carriage return */
> scan = (char *)memchr(filedata->scan, CH_NL, filedata->data);
>
> filedata->data keeps track of where in the buffer we are and when it
> is 0, we've used up the buffer.
>
> The bizarre thing is, when I compile with Visual Studio 2005, when
> filedata->data == 0, the if !(filedata->data) test passes and the
> function keeps going on past the end of the buffer. Eventually,
> memchr goes to compare memory it can't access.
>
> If I compile with Visual Studio 2008, then things work as they should.
> This is with the no debug build only. The debug build works fine
> when compiled with either VS 2005 or VS 2008.
>
> I sent you a text file with a lot output. It is easier to read when
> the lines don't wrap.
>
> I used this printf to show this behaviour:
>
> printf("GetLine: size=%u scan=%p filedata->data=%u residual=%u
> filedata->data == 0 ? %d\n",
> filedata->size, filedata->scan, filedata->data,
> filedata->residual, (filedata->data == 0));
>
>
> For the build that crashes you see this:
>
> GetLine: size=31452 scan=00000000001E9FDC filedata->data=0 residual=0
> filedata->data == 0 ? 0
> GetLine: size=31452 scan=00000000001EE48D filedata->data=4294949711
> residual=0 filedata->data == 0 ? 0
>
> You see that even though filedata->data does equal 0, (filedata->data
> == 0) returns 0.
>
> So, SysFileSearch keeps calling GetLine() until you finally reach
> memory that is not accessible.
>
> This only happens on Vista 64-bit, only on a no debug build, and only
> when the compiler is VS 2005. On XP 64-bit it works fine with either
> compiler. Also on 32-bit Vista it works fine with either compiler.
>
> If there was the same problem on Vista 32 bit, i.e. it crashed with
> the VS 2005 compiled version but worked with the VS 2008, then I was
> thinking maybe a similar thing is happening with Mike's problem.
> Still, if Mike can not reproduce his problem using the VS 2008
> compiled version, then maybe it is a similar thing.
>
> --
> Mark Miesfeld
>
>
------------------------------------------------------------------------------
> Crystal Reports - New Free Runtime and 30 Day Trial
> Check out the new simplified licensign option that enables unlimited
> royalty-free distribution of the report engine for externally facing
> server and web deployment.
> http://p.sf.net/sfu/businessobjects
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel