[ELF] Suggest extern "C" when the definition is mangled while an undefined reference...
authorFangrui Song <maskray@google.com>
Wed, 30 Oct 2019 23:45:21 +0000 (16:45 -0700)
committerFangrui Song <maskray@google.com>
Fri, 8 Nov 2019 17:46:45 +0000 (09:46 -0800)
commit59d3fbc227cca41e3e7b213ea744ca3a48d5244f
treee553c1fd48eaa2f8635e79afbc05e135548415a7
parent70e62a4fa6c2146fb49ee4460dad8e04152ce0a6
[ELF] Suggest extern "C" when the definition is mangled while an undefined reference is not

The definition may be mangled while an undefined reference is not.
This may come up when (1) the reference is from a C file or (2) the definition
misses an extern "C".

(2) is more common. Suggest an arbitrary mangled name that matches the
undefined reference, if such a definition exists.

  ld.lld: error: undefined symbol: foo
  >>> referenced by a.o:(.text+0x1)
  >>> did you mean to declare foo(int) as extern "C"?
  >>> defined in: a1.o

Reviewed By: dblaikie, ruiu

Differential Revision: https://reviews.llvm.org/D69650
lld/ELF/Relocations.cpp
lld/test/ELF/undef-suggest-extern-c2.s [new file with mode: 0644]