[Issue 17326] New: 2.072 gc changes totally broke 32 bit Windows DLLs
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Fri Apr 14 03:22:32 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=17326
Issue ID: 17326
Summary: 2.072 gc changes totally broke 32 bit Windows DLLs
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Severity: regression
Priority: P1
Component: druntime
Assignee: nobody at puremagic.com
Reporter: bugzilla at digitalmars.com
How it is supposed to work is that if a program dynamically loads a DLL, then
they need to share the same GC instance. This is done by the DLL, when it
loads, calling gc_setProxy(the main program's gc instance pointer).
The DLL links in gcstub/gc.d, which contained a Proxy struct with a bunch of
fields that are pointers to functions. The equivalent is gc/gc.d.
Unfortunately, 2.072 totally revamped everything about this in gc/*, but failed
to update gcstub/gc. So now gcstub.gc_setProxy() gets sent a pointer to a
completely different interface, causing it to crash when used.
This is a disastrous bug, as it makes using D DLLs completely unusable in
Win32, and is likely the source of the common complaint that Windows DLLs do
not work.
--
More information about the Digitalmars-d-bugs
mailing list