[llvm-dev] [RFC] better link error messages

Sean Silva via llvm-dev
Fri, 24 Mar 2017 21:04:40 -0000

I lile the idea of having it more structured and I think your suggested
format is the right direction.

I think one principle should be that we assume that file names and symbol
names are "really long" (possibly wrapped by the terminal etc.).

So I would modify your suggested format to use the "note" color for
the
strings like "Object 1" so that even if those lines are wrapped by the
terminal then they can still be easily visually parsed. We may also want to
do something like ">>> Object 1:" so that places without
color (like
google's internal web ui for build logs, or if users are piping the build
system's output into `less` or `tee`) are still a bit easier to parse in
the presence of wrapped lines.

This principle also suggests (and your suggested format does this) that to
avoid having to parse past a symbol/file name to get to other information,
there should be at most one symbol/file name on a given line and there
should never be anything after it on the line. The ld64 format violates
this, for example.

-- Sean Silva

On Mar 23, 2017 4:18 PM, "Rui Ueyama via llvm-dev" <llvm-dev at
lists.llvm.org>
wrote:

Folks,

I'd like propose a new error message format for LLD so that error message
for undefined or duplicated symbols are more informative and easy to read.

Below are examples of the current error messages (note that characters in
red are actually red on terminal):

*Undefined symbols*
/ssd/clang/bin/ld.lld: error: /ssd/llvm-project/lld/ELF/Writer.cpp:207:
undefined symbol 'lld::elf::EhFrameSection<llvm
::object::ELFType<(llvm::support::endianness)0,
true>
>::addSection(lld::elf::InputSectionBase*)'

*Conflicting symbols*
/ssd/clang/bin/ld.lld: error: /ssd/llvm-project/lld/ELF/Writer.cpp:38:
duplicate symbol
'lld::elf::MipsGotSection::addEntry(lld::elf::SymbolBody&,
long, lld::elf::RelExpr)'
/ssd/clang/bin/ld.lld: error:
/ssd/llvm-project/lld/ELF/SyntheticSections.cpp:673:
previous definition was here


For each error, we want to print out information about 1) symbol name, 2)
source file name(s) and source location(s) if available and 3) source
object file name(s) and archive file name(s) if available. Currently, these
messages lack object file names, and I think the above error messages are a
bit hard to grasp because too much information is packed into each line.

I'm thinking of changing the format to something like the following:

*Undefined symbols*
/ssd/clang/bin/ld.lld: error: undefined symbol:
lld::elf::EhFrameSection<llvm::object::ELFType<(llvm::support::endianness)0,
true> >::addSection(lld::elf::InputSectionBase*)
  Source: /ssd/llvm-project/lld/ELF/Writer.cpp:207
  Object: lib/liblldELF.a(Writer.cpp.o)

*Conflicting symbols*
/ssd/clang/bin/ld.lld: error: duplicate symbol:
lld::elf::MipsGotSection::addEntry(lld::elf::SymbolBody&, long,
lld::elf::RelExpr)
  Source 1: /ssd/llvm-project/lld/ELF/Writer.cpp:38
  Source 2: /ssd/llvm-project/lld/ELF/SyntheticSections.cpp:673
  Object 1: lib/liblldELF.a(Writer.cpp.o)
  Object 2 : lib/liblldELF.a(SyntheticSections.cpp.o)


The new error messages contain complete information that the linker is able
to gather, and it uses more vertical space to improve readability.

Thoughts?

_______________________________________________
LLVM Developers mailing list
llvm-dev at lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20170324/4096970c/attachment.html>