[PATCH] D33680: [ELF] - Resolve references properly when using .symver directive

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 30 08:45:32 PDT 2017


grimar created this revision.
Herald added a subscriber: emaste.

This is PR28414. 
Previously LLD was unable to link following:
(failed with undefined symbol bar)

  Version script:
  SOME_VERSION { global: *; };
  
  .global _start
  .global bar
  .symver _start, bar@@SOME_VERSION
  _start:
    jmp bar

Manual has next description:
//.symver name, name2@@nodename
In this case, the symbol name must exist and be defined within the file being assembled. It is similar to name2 at nodename. 
**The difference is name2@@nodename will also be used to resolve references to name2 by the linker**
https://sourceware.org/binutils/docs/as/Symver.html//

Patch implements that. If we have name@@ver symbol and name is undefined, name@@ver is used to resolve references to name.
If name is defined then multiple definition error is emited, that is consistent with what bfd do.


https://reviews.llvm.org/D33680

Files:
  ELF/SymbolTable.cpp
  ELF/SymbolTable.h
  ELF/Symbols.cpp
  test/ELF/version-script-symver-err.s
  test/ELF/version-script-symver.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33680.100714.patch
Type: text/x-patch
Size: 3605 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170530/d858212e/attachment.bin>


More information about the llvm-commits mailing list