This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: dlopen() bug (new testcase)

> -----Ursprüngliche Nachricht-----
> Von: Christopher Faylor
> Gesendet: Wed, 29 Mar 2006 18:15:34 -0500 
>On Thu, Mar 30, 2006 at 01:10:56AM +0200, Bernhard Loos wrote:
>>I looked at the problem again this week, but unfortunately I'm unable
>>to debug anything happening after the first SIGSEGV.  I inserted a view
>>OutputDebugString()-calls and got those results:
>>00:00:00.703: LoadLibraryA("H:\cygwin\test\CrashTest\CrashTest.dll") called from "CYGWIN1.DLL" at address 0x6100FE42 by thread 1.
>>00:00:00.718: Loaded "CRASHTEST.DLL" at address 0x003F0000 by thread 1.  Successfully hooked module.
>>00:00:00.718: DllMain(0x003F0000, DLL_PROCESS_ATTACH, 0x00000000) in "CRASHTEST.DLL" called by thread 1.
>>00:00:00.718: myfault::faulted
>>00:00:00.718: setup_fault
>>00:00:00.718: First chance exception 0xC0000005 (Access Violation) occurred in "CYGWIN1.DLL" at address 0x610B2DE2 by thread 1.
>>00:00:00.718: Unloaded "CRASHTEST.DLL" at address 0x003F0000 by thread 1.
>>00:00:00.718: LoadLibraryA("H:\cygwin\test\CrashTest\CrashTest.dll") returned NULL by thread 1. Error: Unzulssiger Zugriff auf einen Speicherbereich (998).
>>00:00:00.781: First chance exception 0xC0000005 (Access Violation) occurred at address 0x003F101A by thread 1.
>>00:00:00.781: return_from_fault
>>00:00:00.781: First chance exception 0xC0000005 (Access Violation) occurred at address 0x40000060 by thread 1.
>>00:00:00.781: First chance exception 0xC0000029 (Unknown) occurred in "NTDLL.DLL" at address 0x7C95EB28 by thread 1.
>>It looks, like Windows unloads the DLL after the first exception even before the myfault-exception handler is able to catch it.
>>So return_from_fault() tries to longjmp to code wich isn't present any more an the second exception occurs.
>>To fix this problem, I would suggest to use the IsBadReadPtr()-function instead of the myfault-exception handler to check the pointer in 
>>I could write a patch, if nobody has any objections.
>Sorry, no.  We *just* got rid of IsBadReadPtr's.

Just out of interest, what's the problem with IsBadReadPtr?
>FWIW, I doubt that Windows is really ignoring an exception handler.

The exception handler is called, but at least the return_from_fault is called after the DLL gets unloaded,
as you can see above.

At the moment, cygwin is unable to load any C++-Dll with static classes calling the pthread_key_create
in their constructor. As the standart C++ exception code also calls this function, this happens also, if a
object is created in the constructor.

       Bernhard Loos

PS: Please CC me, I'm not subscribed to the list.
Verschicken Sie romantische, coole und witzige Bilder per SMS!
Jetzt bei WEB.DE FreeMail:

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]