http://bugs.winehq.org/show_bug.cgi?id=36526
Bug ID: 36526 Summary: When Delphi programs (e.g. InnoSetup) start, their global variables are corrupt. Product: Wine Version: 1.4.1 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: major Priority: P2 Component: kernel32 Assignee: wine-bugs@winehq.org Reporter: skiy@skiy.co.za
Created attachment 48611 --> http://bugs.winehq.org/attachment.cgi?id=48611 A simple test case, described how to use it already.
I have noticed that, when I write a Delphi program on my system, it will often crash. Like this: 1. I write source code 2. I compile using: wine dcc32 MyProgram.dpr 3. I run program: wine MyProgram 50% of time the Wine debugger starts. The problem changes *randomly* when I change compiler switches, for example Stack Frames = on/off, Optimization = on/off. Those are Delphi switches.
When I run other peoples programs the problem might be the same, example: InnoSetup always crashes. That's another Delphi app.
When I run other peoples, or my own, C++ programs, everything is fine!
I have tried to pinpoint the error: My conclusion, since InnoSetup wizards crash during initialization, is that the global variables are corrupted.
A global variable is like: when you declare something *outside* of a function. They are supposed to be set to zero in Delphi. I have attached proof that they are not. Like this: 1. I wrote SHR.pas 2. I did: wine dcc32 SHR.pas 3. I run: wine SHR.exe 60 Program reports incorrect log information: R = Random number! 4. I run same file on Windows: R = 0, which is correct.
If you can't see R, type Hello and press enter.
Summary: The global memory block does not get zeromem() run on it, under wine. No idea why.