dynamic library building and loading

Jacob Carlborg doob at me.com
Thu Sep 27 10:10:42 PDT 2012


On 2012-09-27 10:55, Maxim Fomin wrote:
> On Thursday, 27 September 2012 at 08:26:08 UTC, Jacob Carlborg wrote:
>> 1. Does this actually run?
>>
>
> If it were non-runnable, I wouldn't posted it.
>
>> 2. This is statically linked with druntime and Phobos. What happens
>> when you create an executable that links with the D dynamic library?
>
> Solution depends on a problem. I understood Andrei's post that he wanted
> a .so file or DLL. I told originally that it is possible to make shared
> libraries on linux. Now I see there is some misunderstanding. Is the
> problem in diving D application on executables and shared libraries or
> making druntime+phobos a shared library or loading a library at runtime?
> A was speaking about the first.

Actually, I seriously doubt everything is working as expected. For 
example, what happens when an application loads (via dlopen or similar) 
a D dynamic library:

* Are exception handlers registered
* Are module infos properly registered
* What happens if I call Object.factory, will that find a class in the 
dynamic library
* Are GC sections registered
* What happens when the library is unloaded, will all of the above be 
unregistered and cleaned up

A quick look in rt.minfo in druntime shows the it uses a single array or 
linked list for all module infos. It expect the module infos to be in 
just one place, i.e. in the application. There's no handling when a 
dynamic library is loaded.

Have a look at this:

https://github.com/D-Programming-Language/druntime/blob/master/src/rt/minfo.d#L184

That symbol points to the start of the linked list containing module 
infos. That's only a single linked list, no handling of module infos 
from multiple places.

rt.minfo needs to be changed to use an associative array with the keys 
pointing to images (executables and loaded dynamic libraries) and the 
values mapped to module infos of the given image. It also needs to 
intercept when a library is dynamically loaded, extract the module infos 
and register it with the runtime.

I would think that the same is true for exception handling tables, TLS 
and GC sections.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list