HomePhabricator

[ELF] Print symbols with non-default versions for better "undefined symbol"…

Authored by MaskRay on Mar 28 2020, 3:48 PM.

Description

[ELF] Print symbols with non-default versions for better "undefined symbol" diagnostics

When reporting an "undefined symbol" diagnostic:

This can lead to confusing diagnostics:

// foo may be foo@v2
ld.lld: error: undefined symbol: foo
>>> referenced by t1.o:(.text+0x1)
// foo may be foo@v1 or foo@@v1
>>> did you mean: foo
>>> defined in: t.so

There are 2 ways a symbol in symtab may get truncated:

  • A @@ definition may be truncated *early* by SymbolTable::insert(). The name ends with a '\0'.
  • A @ definition/reference may be truncated *later* by Symbol::parseSymbolVersion(). The name ends with a '@'.

This patch detects the second case and improves the diagnostics. The first case is
not improved but the second case is sufficient to make diagnostics not confusing.

Reviewed By: ruiu

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