|
Advantages:
Dynamic linker gets out of the way of random function calls,
in terms of timing, in terms of locking, and in term of success,
and possibly in terms of security (readonly function pointers).
If you successfully load, then you can make function calls with impunity,
without regard as to if they are in the same .so as the caller, well,
assuming they are to a leaf like libc, or to something itself built with -z now.
The "success" is significant, as otherwise loaded LLVM has unresolved symbols lurking, depending on which code paths you send it down.
Disadvantage: Slower startup.
Mixed:
Platform consistency, since this is how Windows behaves usually (unless you say link /delayload)
This will combine well with an upcoming revision of https://github.com/mono/mono/pull/14524.
Difficult alternative: Force the binding along sensitive paths by calling their callees earlier.
Typical alternative: Ignore the matter.
Android: It is believed this switch produces a warning, which is ignored, there is no affect, and it is unclear if the behavior is actually "now" or "lazy". Logs could be checked and a test run, but neither.
|