[PATCH] D107234: [ELF] Apply version script patterns to non-default version symbols
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 31 18:50:04 PDT 2021
MaskRay created this revision.
MaskRay added reviewers: grimar, peter.smith.
Herald added subscribers: dmgreen, arichardson, emaste.
MaskRay requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
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 at v1
.globl foo_v1
foo3_v1:
ld.lld --version-script=a.ver -shared a.o
# In a.out, foo3 at v1 is incorrectly exported.
This patch adds the support:
- Move `config->versionDefinitions[VER_NDX_LOCAL].patterns` to `config->versionDefinitions[versionId].localPatterns`
- Allow `findAllByVersion` to find non-default version symbols when `checkAt` is true. (Note: `symtab` keys do not use `@@`)
- Make each pattern check both the unversioned `pat.name` and the versioned `${pat.name}@${v.name}`
---
If a user notices new `undefined symbol` errors with a version script containing
`local: *;`, the issue is likely due to a missing `global:` pattern.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D107234
Files:
lld/ELF/Config.h
lld/ELF/Driver.cpp
lld/ELF/ScriptParser.cpp
lld/ELF/SymbolTable.cpp
lld/ELF/SymbolTable.h
lld/ELF/Symbols.cpp
lld/test/ELF/version-script-symver.s
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107234.363328.patch
Type: text/x-patch
Size: 10775 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210801/33c87916/attachment.bin>
More information about the llvm-commits
mailing list