On Wed, 01 Jul 2015 08:23:18 -0400, Jacob Carlborg <d...@me.com> wrote:
On 01/07/15 10:06, Dan Olson wrote:
The private APIs being called by osx_tls.c like
dyld_enumerate_tlv_storage() are overriden for iOS by using [1]. I can
change all dyld prefixes in theadLocalVariable.c to something else and
remove all code not needed.
Right, I forgot that you have implemented those functions yourself. But
removing the "dyld" prefix might be a good idea.
That would leave a call to private API
dyld_register_image_state_change_handler() in threadLocalVariables.c,
but it looks to me like it could be rewritten to use
_dyld_register_func_for_add_image(). Tried it and seems to work.
_dyld_register_func_for_add_image won't work for dynamic libraries.
There's no API to unregister the callback. So, if
_dyld_register_func_for_add_image is called from a dynamic library then
the library is unloaded. The next call to any of the "dl" functions,
i.e. "dlopen" will crash.
dyld_register_image_state_change_handler works because it pins the
dynamic library, if I recall correctly. It won't unload it.
_dyld_register_func_for_add_image is already used by druntime, perhaps
it doesn't matter. I think bitwise is working on adding support for
dynamic libraries on OS X. On Linux the compiler is generating a
function that behave as the C function with the attribute
__attribute__((constructor)). Perhaps that can be used.
Otherwise perhaps look at the implementation of
dyld_register_image_state_change_handler and see if you can manually pin
the dynamic library.
I think apple recently added support to iOS for shared libraries as
"embedded binaries", but you still can't dynamically load code. So for
iOS, the above shouldn't matter.
Section 2.5, 2.7
https://developer.apple.com/app-store/review/guidelines/
I think bitwise is working on adding support for dynamic libraries on OS
X.
Indeed, trying ;)
I've got it partially working. My druntime supports multiple images now
and I've got druntime building as a shared library.
Now, I'm working on implementing something like Martin's _dso_registry
approach for registering the images. The part I'm having a hard time with
is getting my loader code into the object files. Basically, I need to put
a small function into each object file as a local comdat symbol. This is a
lot more difficult than it first seemed. Martin has done this through
manually writing assembly byte codes and whatnot to the object-file. I'm
still hoping I will find a simpler way of doing this. I'm reading over the
Apple Mach-O docs right now(thoroughly this time). Once I understand the
object file format properly I'll give it a try. Martin's busy with the
release right now though, so he doesn't have time to help.
Bit