[dmd-beta] dmd 1.070 and 2.055 beta
Rainer Schuetze
r.sagitario at gmx.de
Tue Sep 6 00:14:57 PDT 2011
With the call LLVMInitializeX86TargetInfo, the llvm DLL will be
initialized before DllMain of your DLL is called. I could not find a
matching DLL in the LLVM binary distribution. I guess you have built it
yourself. Could you provide it for download somewhere?
On 06.09.2011 07:52, Sönke Ludwig wrote:
> Am 05.09.2011 23:53, schrieb Rainer Schuetze:
>> On 05.09.2011 21:35, Sönke Ludwig wrote:
>>> Am 05.09.2011 19:54, schrieb Rainer Schuetze:
>>>>
>>>> What OS are you running on?
>>>>
>>>> Your code works for me (XP SP3). Also Visual D works fine AFAICT
>>>> (its a plugin DLL to VS).
>>>>
>>> Windows 7 x64 SP1... But it is more complicated than it seemed.
>>>
>>> I had another file linked to the DLL that I thought had not effect.
>>> But actually it used a function from another DLL* that was linked in
>>> statically via passing a .lib file to the command line (along with
>>> the source files). The error does not occur if compiling and linking
>>> is done by separate invocations of dmd. Also commenting out all the
>>> lines that use a function from the external DLL fixes the problem.
>>>
>>> (* that DLL is LLVM 2.9, so no D code inside)
>>>
>>>
>>
>> There might be issues if you are calling another DLL from inside the
>> (non-shared) static constructors and that DLL also uses TLS. In
>> DllMain(DLL_PROCESS_ATTACH), each existing thread is initialized by
>> just swapping the TLS data of the DLL and then running the module
>> initialization. So if another DLL is called, it will only see the TLS
>> of the thread that called DllMain.
>>
>> I don't think anything in this code has changes recently. Is this a
>> regression from the last dmd version?
>>
>>
>>
>>
>> _______________________________________________
>> dmd-beta mailing list
>> dmd-beta at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/dmd-beta
> Yes, it is a regression in the first beta. The new beta also has it.
>
> In general, the LLVM DLL was not called at all before the error
> occurs, the pure fact that there was a dependency to it somewhere in
> the code causes the problem. Also, it doesn't matter whether the array
> is used somwhere inside of DllMain or later from within an exported
> function (this was actually the case before I tried to strip it down).
> There is just one static constructor in the code. Commenting it out
> does not affect the problem.
>
> I now completely removed any other code and just put in one function
> call after the array appending line. Commenting out the llvm call will
> cause the array to be correctly initialized/referenced, otherwise it
> contains garbage in its ptr/length fields. (making it __gshared also
> fixes it)
>
> The llvm.lib containing the llvm functions was generated from the dll
> using implib.
>
> ---
> import std.c.windows.windows;
> import core.sys.windows.dll;
>
> import llvm.target;
> int[] test;
>
> extern (Windows)
> BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved)
> {
> switch (ulReason) {
> default: return false;
> case DLL_PROCESS_ATTACH:
> if( !dll_process_attach( hInstance, true ) ) return false;
> test ~= 1; // throws out of memory
> LLVMInitializeX86TargetInfo(); // commenting out this will
> make it work
> break;
> case DLL_PROCESS_DETACH: dll_process_detach( hInstance, true
> ); break;
> case DLL_THREAD_ATTACH: dll_thread_attach( true, true ); break;
> case DLL_THREAD_DETACH: dll_thread_detach( true, true ); break;
> }
> return true;
> }
> ---
>
>
> _______________________________________________
> dmd-beta mailing list
> dmd-beta at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/dmd-beta
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/dmd-beta/attachments/20110906/d35aa3fa/attachment.html>
More information about the dmd-beta
mailing list