
The behavior of an undefined weak reference is implementation defined. For static -no-pie linking, dynamic relocations are generally avoided (except IRELATIVE). -shared linking generally emits dynamic relocations. Dynamic -no-pie linking and -pie allow flexibility. Changes adjust the behavior for better consistency and simpler internal representation, e.g. https://reviews.llvm.org/D63003 https://reviews.llvm.org/D105164 (generalized to undefined non-weak in 2fcaa00d1e2317a90c9071b735eb0e758b5dd58b). GNU ld introduced -z [no]dynamic-undefined-weak option to fine-tune the behavior. (The option is not very effective with -no-pie, e.g. on x86-64, `ld.bfd a.o s.so -z dynamic-undefined-weak` generates R_X86_64_NONE relocations instead of GLOB_DAT/JUMP_SLOT) This patch implements -z [no]dynamic-undefined-weak option. The effects are summarized as follows: * Static -no-pie: no-op * Dynamic -no-pie: nodynamic-undefined-weak suppresses GLOB_DAT/JUMP_SLOT * Static -pie: dynamic-undefined-weak generates ABS/GLOB_DAT/JUMP_SLOT. https://discourse.llvm.org/t/lld-weak-undefined-symbols-in-vdso-only/86749 * Dynamic -pie: nodynamic-undefined-weak suppresses ABS/GLOB_DAT/JUMP_SLOT The -pie behavior likely stays stable while -no-pie (`!ctx.arg.isPic` in `isStaticLinkTimeConstant`) behavior will likely change in the future. The current default value of ctx.arg.zDynamicUndefined is selected to prevent behavior changes. Pull Request: https://github.com/llvm/llvm-project/pull/143831
lld Documentation ================= The lld documentation is written using the Sphinx documentation generator. It is currently tested with Sphinx 1.1.3. We currently use the 'nature' theme and a Beaker inspired structure. See sphinx_intro.rst for more details.