I'll have to leave these to Sean, I am not very competent on how things work on OSX.

One way to deal with the moduleinfos is to have it be an array of array of moduleinfos, then adding/removing as .so's are added/removed becomes a cinch. Using associative arrays may produce problems with initialization - if a future aa implementation requires module construction.

Jacob Carlborg wrote:
I've been thinking about this and I'm trying to think of everything to get this 
right the first time so I have a couple of questions:

* I though it might be a good idea to add support for running module 
constructors for dynamically loaded libraries (i.e. libraries loaded with 
dlopen). Then I was think I need to add the new module infos to the array of 
existing ones and when/if the library is unloaded remove the module infos added 
by the library. Now for the question: is an array still a good data structure 
for this or should we use an associative array or something else?

* If we change to an associative array could the image received in the callback 
function registered by _dyld_register_func_for_add_image be used as the key in 
the associative array?

* This is a question about the _dyld_register_func_for_add_image function. Can 
I assume that all images sent to the registered callback functions are of the 
same architecture that I'm currently compiling? For example, I'm running a 
universal binary and it's running the 32bit part of the binary. Then I'm 
loading a universal dynamic library, it will only load the 32bit part since 
that's the part I'm running?

* What to name the function, where to put it and when to call it?

On 9 nov 2010, at 21:23, Walter Bright wrote:

Sean Kelly wrote:
On Nov 9, 2010, at 11:55 AM, Walter Bright wrote:
Jacob Carlborg wrote:
It should work using getsectdatafromheader, that's what I changed when I added 
support for dynamic libraries to Tango. Have a look at the Tango code: 
http://dsource.org/projects/tango/browser/trunk/tango/core/rt/compiler/dmd/object_.d#L1270
 and 
http://dsource.org/projects/tango/browser/trunk/tango/core/rt/compiler/dmd/darwin/Image.d#L103
 . The file in the last link is completely made by me so you won't have to be 
afraid for looking at it. Or if you don't want to look at Tango source files at 
all you can look at this druntime change: 
http://www.dsource.org/projects/druntime/changeset/372 , to be more specific: 
http://www.dsource.org/projects/druntime/browser/trunk/src/rt/image.d?rev=372#L105
Thanks, Jacob! If you want to submit a patch to druntime that, for OSX, 
eliminates the dependence on the begin and end sections, that would be awesome.
The simplest (appropriate) fix for the way things work today would probably be to add a 
new compiler runtime routine like "extern (C) void[] rt_tlsseg()".  Then all of 
the compiler-specific logic for TLS segment management can be moved into src/rt/memory.d 
(and possibly memory_osx.c).  I've been meaning to do something about this code being in 
core.thread anyway, since it really is compiler-specific.

The segment begin/end issue is exactly the same for exception handling and 
moduleinfo. A solution for one should do all three.
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to