[all-commits] [llvm/llvm-project] 8f540d: [COFF] Assign unique names to autogenerated .weak....

Martin Storsjö via All-commits all-commits at lists.llvm.org
Fri Mar 13 13:45:30 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 8f540dad6120d00e3ad896b98cd32bcf00623ccd
      https://github.com/llvm/llvm-project/commit/8f540dad6120d00e3ad896b98cd32bcf00623ccd
  Author: Martin Storsjö <martin at martin.st>
  Date:   2020-03-13 (Fri, 13 Mar 2020)

  Changed paths:
    M llvm/lib/MC/WinCOFFObjectWriter.cpp
    M llvm/test/MC/COFF/weak-alias-local.s
    A llvm/test/MC/COFF/weak-name.s
    M llvm/test/MC/COFF/weak-val.s
    M llvm/test/MC/COFF/weak.s

  Log Message:
  -----------
  [COFF] Assign unique names to autogenerated .weak.<name>.default symbols

These symbols need to be external (MSVC tools error out if a weak
external points at a symbol that isn't external; this was tried before
but had to be reverted in bc5b7217dceecd3eec69593026a9e38dfbfd6908,
and this was originally explicitly fixed in
732eeaf2a930ad2755cb4eb5d99a3deae0de4a72).

If multiple object files have weak symbols with defaults, their
defaults could cause linker errors due to duplicate definitions,
unless the names of the defaults are unique.

GNU binutils handles this by appending the name of another symbol
from the same object file to the name of the default symbol. Try
to implement something similar; before writing the object file,
locate a symbol that should have a unique name and use the name of
that one for making the weak defaults unique.

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




More information about the All-commits mailing list