Re: [GD-Windows] Re : Strange prolog function issue
Brought to you by:
vexxed72
From: deldav <del...@fr...> - 2006-07-27 13:10:07
|
alloca allocates its memory from the stack and that space is = automatically freed when the function returns. That's why the compiler mess with esp and ebp ... 590h should be the = size of your alloca (perhaps rounded to keep stack alignement) Beware (from msdn): In Windows XP, if _alloca is called inside a try/catch block, you must = call _resetstkoflw in the catch block=20 Hope that helps. -----Message d'origine----- De : gam...@li... = [mailto:gam...@li...] De la part = de Emmanuel Astier Envoy=E9 : mercredi 26 juillet 2006 01:13 =C0 : Game Development for MS Windows Objet : [GD-Windows] Re : Strange prolog function issue Hi,=20 =20 It only happens in release build. And as you said, I suspect a compiler = bug. =20 Actually, I don't understand when the compiler decide to switch to a = different prolog for the function, where ebp doesn't have the same meaning. It is all fine as the function code knows the different ebp meaning, and = has no trouble accessing local vars, but the exception handler seems not to be aware of the change in the ebp meaning. =20 Thanks for your help, we send a mail to microsoft, we will wait for their anwser... =20 Emmanuel Ps : Kent, replying to your mails only replies to you, not to the = list...=20 ----- Message d'origine ---- De : Kent Quirk <ken...@co...> =C0 : Emmanuel Astier = <e_a...@ya...>; Game Development for MS Windows <gam...@li...> Envoy=E9 le : Mardi, 25 Juillet 2006, 6h09mn 40s Objet : Re: = [GD-Windows] Strange prolog function issue Emmanuel Astier wrote: > Hi all, > =20 > =20 > I have here a very strange issue. > =20 > We have a function using a local std::string, exceptions, and a = alloca. > =20 > When the exception is thrown, the unwind mecanism tries to delete the = std::string, but it deletes it at a wrong address( there is a 0x590 offset ). > =20 > <snip> > =20 > I could not reproduce this ebp offset that makes the exception handler = fail in a small sample.=20 > So do you know in which case the compiler does not put esp in ebp, but = put an offset in it ? > And do you know how to fix it ( other than what we're doing : stopping = using alloca with exceptions ), if it is a kind a known issue ?=20 > =20 Does the bug occur in both debug and release builds? Have you tried = setting the optimization manually for that file? In any large project, I usually find a couple of files that drive some form of = compiler bug under full optimization, and I have to manually turn down the optimization on that particular file or do some sort of special = (heavily commented!) adaptation, such as moving a function's location in the = source file, or in the header file. You might also try playing with a couple of exception-related compiler switches. Compilers are = complicated beasts, and any project of a significant size is likely to drive a bug or two. -------------------------------------------------------------------------= Take Surveys. Earn Cash. Influence the Future of IT Join = SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=3Djoin.php&p=3Dsourceforge&CID=3D= DEVDEV _______________________________________________ Gamedevlists-windows mailing list Gam...@li... https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows Archives: http://sourceforge.net/mailarchive/forum.php?forum_id=3D555 |