[ELF] Set vna_flags to VER_FLG_WEAK if all references are weak (#176673) When all undefined references to a version are weak, set vna_flags to VER_FLG_WEAK in the .gnu.version_r section. This enables glibc ld.so to report a warning instead of an error when the required version is not found at runtime, supporting optional dependencies. Per https://sourceware.org/bugzilla/show_bug.cgi?id=24718#c20 , glibc rtld since 2.30 (BZ #24741) tolerates missing versioned symbols when the runtime shared object defines the required version. With this vna_flags VER_FLG_WEAK change, rtld can also tolerate a completely missing version, printing a message like: ``` % LD_PRELOAD=c2.so ./a ./a: /tmp/t/v2/c2.so: weak version `v1' not found (required by /tmp/t/v2/b.so) a ``` instead of a fatal error. In addition, add a comment about `vn.vernaxus.size() == 1`. GitOrigin-RevId: e34651fa557911b04d83a90fd20191358714c5e5
This directory and its subdirectories contain source code for the LLVM Linker, a modular cross platform linker which is built as part of the LLVM compiler infrastructure project.
lld is open source software. You may freely distribute it under the terms of the license agreement found in LICENSE.txt.
In order to make sure various developers can evaluate patches over the same tests, we create a collection of self contained programs.
It is hosted at https://s3-us-west-2.amazonaws.com/linker-tests/lld-speed-test.tar.xz
The current sha256 is 10eec685463d5a8bbf08d77f4ca96282161d396c65bd97dc99dbde644a31610f.