Artifact 9533046d0b42b4c67931a400fc7c32afa3bb068b:
- File
src/dllmain.d
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
The problem was __gshared. Replacing it with TLS fixed the issue. Remaining problem is that "hack.d"'s CloseHandle hack is not working anymore.
(user: kinaba) [annotate]
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
0000: 69 6d 70 6f 72 74 20 63 6f 72 65 2e 73 79 73 2e import core.sys. 0010: 77 69 6e 64 6f 77 73 2e 64 6c 6c 3b 0a 69 6d 70 windows.dll;.imp 0020: 6f 72 74 20 63 6f 72 65 2e 73 79 73 2e 77 69 6e ort core.sys.win 0030: 64 6f 77 73 2e 77 69 6e 64 6f 77 73 3b 0a 0a 2f dows.windows;../ 0040: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /--------------- 0050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0080: 2d 0a 2f 2f 20 e3 81 8a e3 81 8d e3 81 be e3 82 -.// ........... 0090: 8a e3 81 ae 44 4c 4c e5 88 9d e6 9c 9f e5 8c 96 ....DLL......... 00a0: e3 83 ab e3 83 bc e3 83 81 e3 83 b3 0a 2f 2f 2d .............//- 00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 00c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 00d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 00e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------. 00f0: 0a 65 78 74 65 72 6e 20 28 57 69 6e 64 6f 77 73 .extern (Windows 0100: 29 0a 42 4f 4f 4c 20 44 6c 6c 4d 61 69 6e 28 20 ).BOOL DllMain( 0110: 48 49 4e 53 54 41 4e 43 45 20 69 6e 73 74 2c 20 HINSTANCE inst, 0120: 55 4c 4f 4e 47 20 72 65 61 73 6f 6e 2c 20 76 6f ULONG reason, vo 0130: 69 64 2a 20 72 65 73 65 72 76 65 64 20 29 0a 7b id* reserved ).{ 0140: 0a 09 73 77 69 74 63 68 28 20 72 65 61 73 6f 6e ..switch( reason 0150: 20 29 0a 09 7b 0a 09 63 61 73 65 20 44 4c 4c 5f )..{..case DLL_ 0160: 50 52 4f 43 45 53 53 5f 41 54 54 41 43 48 3a 0a PROCESS_ATTACH:. 0170: 09 09 64 6c 6c 5f 70 72 6f 63 65 73 73 5f 61 74 ..dll_process_at 0180: 74 61 63 68 28 20 69 6e 73 74 2c 20 74 72 75 65 tach( inst, true 0190: 20 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 );...break;...c 01a0: 61 73 65 20 44 4c 4c 5f 50 52 4f 43 45 53 53 5f ase DLL_PROCESS_ 01b0: 44 45 54 41 43 48 3a 0a 09 09 64 6c 6c 5f 70 72 DETACH:...dll_pr 01c0: 6f 63 65 73 73 5f 64 65 74 61 63 68 28 20 69 6e ocess_detach( in 01d0: 73 74 2c 20 74 72 75 65 20 29 3b 0a 09 09 62 72 st, true );...br 01e0: 65 61 6b 3b 0a 0a 09 63 61 73 65 20 44 4c 4c 5f eak;...case DLL_ 01f0: 54 48 52 45 41 44 5f 41 54 54 41 43 48 3a 0a 09 THREAD_ATTACH:.. 0200: 09 64 6c 6c 5f 74 68 72 65 61 64 5f 61 74 74 61 .dll_thread_atta 0210: 63 68 28 20 74 72 75 65 2c 20 74 72 75 65 20 29 ch( true, true ) 0220: 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 ;...break;...cas 0230: 65 20 44 4c 4c 5f 54 48 52 45 41 44 5f 44 45 54 e DLL_THREAD_DET 0240: 41 43 48 3a 0a 09 09 64 6c 6c 5f 74 68 72 65 61 ACH:...dll_threa 0250: 64 5f 64 65 74 61 63 68 28 20 74 72 75 65 2c 20 d_detach( true, 0260: 74 72 75 65 20 29 3b 0a 09 09 62 72 65 61 6b 3b true );...break; 0270: 0a 0a 09 64 65 66 61 75 6c 74 3a 0a 09 7d 0a 09 ...default:..}.. 0280: 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 7d 0a 0a return true;.}.. 0290: 2f 2a 0a 2f 2f 20 48 61 63 6b 21 0a 2f 2f 0a 2f /*.// Hack!.//./ 02a0: 2f 20 5f 61 63 72 74 75 73 65 64 5f 64 6c 6c e3 / _acrtused_dll. 02b0: 81 8c e5 8b 9d e6 89 8b e3 81 ab e7 b5 82 e4 ba ................ 02c0: 86 e6 99 82 e3 81 ab e6 a8 99 e6 ba 96 e5 85 a5 ................ 02d0: e5 87 ba e5 8a 9b e3 83 8f e3 83 b3 e3 83 89 e3 ................ 02e0: 83 ab e3 82 92 0a 2f 2f 20 e9 96 89 e3 81 98 e3 ......// ....... 02f0: 81 a1 e3 82 83 e3 81 a3 e3 81 a6 e5 9b b0 e3 82 ................ 0300: 8b e3 81 ae e3 81 a7 e3 80 81 e3 81 9d e3 81 ae ................ 0310: e8 be ba e3 82 8a e3 81 a0 e3 81 91 e3 81 af e9 ................ 0320: 96 89 e3 81 98 e3 81 aa e3 81 84 e3 82 88 e3 81 ................ 0330: 86 e3 81 aa 0a 2f 2f 20 43 6c 6f 73 65 48 61 6e .....// CloseHan 0340: 64 6c 65 e3 82 92 e7 aa 81 e3 81 a3 e8 be bc e3 dle............. 0350: 82 93 e3 81 a7 e5 9b 9e e9 81 bf e3 80 82 0a 2f .............../ 0360: 2f 0a 2f 2f 20 64 6d 64 20 76 30 2e 39 39 20 e3 /.// dmd v0.99 . 0370: 81 a7 e3 81 af e5 8b 95 e3 81 84 e3 81 a6 e3 81 ................ 0380: 84 e3 81 9f e3 81 ae e3 81 a0 e3 81 91 e3 81 a9 ................ 0390: e6 9c 80 e8 bf 91 e3 81 ae e3 81 a0 e3 81 a8 e3 ................ 03a0: 81 93 e3 82 8c e3 82 92 e5 85 a5 e3 82 8c e3 82 ................ 03b0: 8b e3 81 a8 0a 2f 2f 20 e8 87 b3 e3 82 8b e6 89 .....// ........ 03c0: 80 e3 81 a7 e3 82 af e3 83 a9 e3 83 83 e3 82 b7 ................ 03d0: e3 83 a5 e3 81 99 e3 82 8b e3 81 ae e3 81 a7 e8 ................ 03e0: 80 83 e3 81 88 e7 9b b4 e3 81 99 e5 bf 85 e8 a6 ................ 03f0: 81 e3 81 8c e3 81 82 e3 82 8b e3 80 82 0a 2f 2f ..............// 0400: 20 54 4f 44 4f 3a 20 62 75 67 20 72 65 70 6f 72 TODO: bug repor 0410: 74 2e 0a 0a 65 78 74 65 72 6e 28 57 69 6e 64 6f t...extern(Windo 0420: 77 73 29 0a 7b 0a 09 70 72 69 76 61 74 65 20 61 ws).{..private a 0430: 6c 69 61 73 20 42 4f 4f 4c 20 66 75 6e 63 74 69 lias BOOL functi 0440: 6f 6e 28 48 41 4e 44 4c 45 29 20 43 6c 48 6e 54 on(HANDLE) ClHnT 0450: 3b 0a 09 70 72 69 76 61 74 65 20 43 6c 48 6e 54 ;..private ClHnT 0460: 20 20 52 65 61 6c 5f 43 6c 6f 73 65 48 61 6e 64 Real_CloseHand 0470: 6c 65 3b 0a 09 70 72 69 76 61 74 65 20 48 41 4e le;..private HAN 0480: 44 4c 45 20 73 74 64 69 6e 3b 0a 09 70 72 69 76 DLE stdin;..priv 0490: 61 74 65 20 48 41 4e 44 4c 45 20 73 74 64 6f 75 ate HANDLE stdou 04a0: 74 3b 0a 09 70 72 69 76 61 74 65 20 48 41 4e 44 t;..private HAND 04b0: 4c 45 20 73 74 64 65 72 72 3b 0a 0a 09 42 4f 4f LE stderr;...BOO 04c0: 4c 20 43 6c 6f 73 65 48 61 6e 64 6c 65 28 20 48 L CloseHandle( H 04d0: 41 4e 44 4c 45 20 68 20 29 0a 09 7b 0a 09 09 69 ANDLE h )..{...i 04e0: 66 28 20 68 3d 3d 73 74 64 69 6e 20 20 29 20 72 f( h==stdin ) r 04f0: 65 74 75 72 6e 20 54 52 55 45 3b 0a 09 09 69 66 eturn TRUE;...if 0500: 28 20 68 3d 3d 73 74 64 6f 75 74 20 29 20 72 65 ( h==stdout ) re 0510: 74 75 72 6e 20 54 52 55 45 3b 0a 09 09 69 66 28 turn TRUE;...if( 0520: 20 68 3d 3d 73 74 64 65 72 72 20 29 20 72 65 74 h==stderr ) ret 0530: 75 72 6e 20 54 52 55 45 3b 0a 09 09 72 65 74 75 urn TRUE;...retu 0540: 72 6e 20 52 65 61 6c 5f 43 6c 6f 73 65 48 61 6e rn Real_CloseHan 0550: 64 6c 65 28 68 29 3b 0a 09 7d 0a 7d 0a 0a 73 74 dle(h);..}.}..st 0560: 61 74 69 63 20 74 68 69 73 28 29 0a 7b 0a 09 52 atic this().{..R 0570: 65 61 6c 5f 43 6c 6f 73 65 48 61 6e 64 6c 65 20 eal_CloseHandle 0580: 3d 20 63 61 73 74 28 43 6c 48 6e 54 29 0a 09 09 = cast(ClHnT)... 0590: 47 65 74 50 72 6f 63 41 64 64 72 65 73 73 28 20 GetProcAddress( 05a0: 47 65 74 4d 6f 64 75 6c 65 48 61 6e 64 6c 65 41 GetModuleHandleA 05b0: 28 22 6b 65 72 6e 65 6c 33 32 2e 64 6c 6c 22 29 ("kernel32.dll") 05c0: 2c 20 22 43 6c 6f 73 65 48 61 6e 64 6c 65 22 20 , "CloseHandle" 05d0: 29 3b 0a 09 73 74 64 69 6e 20 20 3d 20 47 65 74 );..stdin = Get 05e0: 53 74 64 48 61 6e 64 6c 65 28 53 54 44 5f 49 4e StdHandle(STD_IN 05f0: 50 55 54 5f 48 41 4e 44 4c 45 20 29 3b 0a 09 73 PUT_HANDLE );..s 0600: 74 64 6f 75 74 20 3d 20 47 65 74 53 74 64 48 61 tdout = GetStdHa 0610: 6e 64 6c 65 28 53 54 44 5f 4f 55 54 50 55 54 5f ndle(STD_OUTPUT_ 0620: 48 41 4e 44 4c 45 29 3b 0a 09 73 74 64 65 72 72 HANDLE);..stderr 0630: 20 3d 20 47 65 74 53 74 64 48 61 6e 64 6c 65 28 = GetStdHandle( 0640: 53 54 44 5f 45 52 52 4f 52 5f 48 41 4e 44 4c 45 STD_ERROR_HANDLE 0650: 20 29 3b 0a 7d 0a 2a 2f 0a );.}.*/.