[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