I'm trying to fix shared libraries for OSX. I've updated sections_osx.d to support multiple images, however, the method of notifying druntime when to load/unload images needs to be fixed.

Currently, the following method is used to register a callback for when images are loaded, which, based on the last conversation on this topic, is a no-go. Basically, the problem is that there is no way of unregistering the callbacks.
https://github.com/D-Programming-Language/druntime/blob/master/src/rt/sections_osx.d#L76

So the solution is to add __attribute__((constructor/destructor)) calls to all D binaries on OSX to initialize the images.

The code looks like this:
http://dpaste.com/0SF46B6

So my question is, what is the best way to get this code into the binary?

I suppose the code could be pre-compiled into an object file and linked by dmd during compilation, but adding external dependencies to dmd seems like a bad idea.

I would say DMD could generate this code, but where would it go?

I don't think it would be right to add the __constructors__ to a random *.o produced by the compiler, because people will expect *.o files to behave like *.o files. On the other hand, if the __constructors__ were to be added by dmd at link-time, and someone used a linker other than dmd, it would not add in the __constructor__ code, and thus generate a defective dylib. This is a complicated problem with many things to consider, so I'm not exactly sure where to go from here.

Any ideas on this would be much appreciated.

Thanks,
  Bit

Reply via email to