[PATCH] HOOK_CallHook

David Elliott dfe at infinite-internet.net
Wed Mar 28 18:13:31 CST 2001


Francois Jacques wrote:

> Group, This patch comes from investigation of a bug that was observed in
> RedHat 7.0 and not observed in RedHat 6.1. After a debugging session that
> involved Stephane and I, we found out that it was a compiler issue (which
> I feared from the start, but wasn't considering it seriously...
> arghhh). The RedHat 6.1 installation has gcc version 2.91.66 and the
> RedHat 7.0 installation has gcc version 2.96-20000731 (RedHat Linux 7.0)
> with latest updates from RedHat. What's happening : 1) HOOK_CallHook is
> being called (notice wParam and lParam arguments)2) Local variables
> wParamOrig and lParamOrig are set to wParam and lParam values3) Mapping
> function is called (MapFunc) with the *addresses* of wParam and lParam so
> those get changed before we call the hook4) After MapFunc is called,
> wParamOrig and lParamOrig values also changed to the new values of wParam
> and lParam (!) Explanation : Down to the assembly level code, the compiler
> doesn't create wParamOrig and lParamOrig on the stack. Instead, it
> directly use wParam and lParam. Fix : add volatile to wParamOrig and
> lParamOrig to prevent optimizations on those variables (aka. force their
> presence on the stack)

This kind of begs the question: how many more places in Wine should the
volatile keyword be used?  I find it hard to believe that this is the only
spot in a large very low-level project like Wine.

-Dave





More information about the wine-devel mailing list