"Darryl L. Miles" <darryl-mailinglists@xxxxxxxxxxxx> writes: > First where is the best source of documentation over ELF features that > can be used by DSOs ? Excellent question. > * The dynamic linker serializes all invocations to an individual DSOs > .init/.fini pointers (clarification covered in next 3 points). Invocations are serialized yes, but not because of the dynamic linker. The dynamic linker simply runs the code that the DT_INIT and DT_INIT_ARRAY dynamic tags point to. > * That protection is provided between pointers of a single DSOs, > i.e. they are fired in order of the ELF section synchronously. Yes. > * That protection is provided between two (or more) independent > threads causing the same DSO to be loaded. i.e. the dynamic linker > provides a mutex around the loading procedure and each user that is > increasing the reference count gets to do their thing in turns. Yes. > * This results in the .init/.fini pointers conforming to a > single-threaded model (which is being enforced by the dynamic linker, > even if the outside world is a multi-threaded enviroment). Yes. > * That each loading the DSO fires the .init/.fini, meaning each time > the reference count inside the dynamic linker increments we always get > the callbacks fired (for example through dlopen()). No, if you dlopen the same DSO twice without dlclosing it in between, the DT_INIT tags will only get run once. > * Does the .init/.fini method have a way of asking the dynamic linker > for its own handle/reference and what information does the dynamic > linker make available through that. I don't know of a way to do this. There may be one. Ian