llvm-capstone/lld
Fangrui Song 63081c9bc1 [ELF] Apply version script patterns to non-default version symbols
Currently version script patterns are ignored for .symver produced
non-default version (single @) symbols. This makes such symbols
not localizable by `local:`, e.g.

```
.symver foo3_v1,foo3@v1
.globl foo_v1
foo3_v1:

ld.lld --version-script=a.ver -shared a.o
```

This patch adds the support:

* Move `config->versionDefinitions[VER_NDX_LOCAL].patterns` to `config->versionDefinitions[versionId].localPatterns`
* Rename `config->versionDefinitions[versionId].patterns` to `config->versionDefinitions[versionId].nonLocalPatterns`
* Allow `findAllByVersion` to find non-default version symbols when `includeNonDefault` is true. (Note: `symtab` keys do not have `@@`)
* Make each pattern check both the unversioned `pat.name` and the versioned `${pat.name}@${v.name}`
* `localPatterns` can localize `${pat.name}@${v.name}`. `nonLocalPatterns` can prevent localization by assigning `verdefIndex` (before `parseSymbolVersion`).

---

If a user notices new `undefined symbol` errors with a version script containing
`local: *;`, the issue is likely due to a missing `global:` pattern.

Reviewed By: peter.smith

Differential Revision: https://reviews.llvm.org/D107234

(cherry picked from commit 00809c8889)
2021-08-05 10:42:02 -07:00
..
cmake/modules [cmake] Add support for multiple distributions 2021-05-12 11:13:18 -07:00
COFF [LLD] [COFF] Make -export-all-symbols work as intended for EXEs 2021-07-22 23:34:03 +03:00
Common [lld] Rename StringRef _lower() method calls to _insensitive() 2021-06-25 00:22:01 +03:00
docs [ELF] Add -Bsymbolic-non-weak-functions 2021-07-29 19:29:45 -07:00
ELF [ELF] Apply version script patterns to non-default version symbols 2021-08-05 10:42:02 -07:00
include/lld [lld] Replace LLVM_ATTRIBUTE_NORETURN with [[noreturn]] 2021-07-27 18:51:17 -07:00
lib [OptTable] Rename PrintHelp to printHelp 2021-06-24 14:47:03 -07:00
MachO [lld/mac] Fix sub-library.s on Windows after 8e8701abca 2021-07-27 15:25:52 -04:00
MinGW [LLD][MinGW] Accept joined format for --stack 2021-08-02 21:26:03 +03:00
test [ELF] Apply version script patterns to non-default version symbols 2021-08-05 10:42:02 -07:00
tools/lld [lld] Replace LLVM_ATTRIBUTE_NORETURN with [[noreturn]] 2021-07-27 18:51:17 -07:00
unittests Use INTERFACE_COMPILE_OPTIONS to disable -Wsuggest-override for any target that links to gtest 2020-07-27 08:37:01 -07:00
utils
wasm [lld][WebAssembly] Do not remove name section with --strip-debug 2021-07-26 11:06:52 -07:00
.clang-format
.clang-tidy NFC: .clang-tidy: Inherit configs from parents to improve maintainability 2021-06-08 08:25:59 -07:00
.gitignore
CMakeLists.txt Fix lld macho standalone build by including llvm/Config/llvm-config.h instead of llvm/Config/config.h 2021-05-19 11:15:07 -04:00
CODE_OWNERS.TXT Add code owners of new MachO port 2020-09-02 19:32:12 -07:00
LICENSE.TXT
README.md [doc] Place sha256 in lld/README.md into backticks 2021-01-12 10:19:40 -08:00

LLVM Linker (lld)

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.

Benchmarking

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.