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 # In a.out, foo3@v1 is incorrectly exported.
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.
Is it worth renaming this to nonLocalPatterns (globalPatterns might work, but may not be strictly accurate).