hanchenye-llvm-project/lld/ELF
Rui Ueyama 64cfffd333 ELF: Rename error -> fatal and redefine error as a non-noreturn function.
In many situations, we don't want to exit at the first error even in the
process model. For example, it is better to report all undefined symbols
rather than reporting the first one that the linker picked up randomly.

In order to handle such errors, we don't need to wrap everything with
ErrorOr (thanks for David Blaikie for pointing this out!) Instead, we
can set a flag to record the fact that we found an error and keep it
going until it reaches a reasonable checkpoint.

This idea should be applicable to other places. For example, we can
ignore broken relocations and check for errors after visiting all relocs.

In this patch, I rename error to fatal, and introduce another version of
error which doesn't call exit. That function instead sets HasError to true.
Once HasError becomes true, it stays true, so that we know that there
was an error if it is true.

I think introducing a non-noreturn error reporting function is by itself
a good idea, and it looks to me that this also provides a gradual path
towards lld-as-a-library (or at least embed-lld-to-your-program) without
sacrificing code readability with lots of ErrorOr's.

http://reviews.llvm.org/D16641

llvm-svn: 259069
2016-01-28 18:40:06 +00:00
..
CMakeLists.txt Set the folder for libraries to 'lld libraries'. NFC. 2016-01-07 00:14:04 +00:00
Config.h Reapply r257753 with fix: 2016-01-15 13:34:52 +00:00
Driver.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
Driver.h ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
DriverUtils.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
Error.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
Error.h ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
InputFiles.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
InputFiles.h Remove another case of almost duplicated code. 2016-01-27 18:04:26 +00:00
InputSection.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
InputSection.h Simplify MipsReginfoInputSection. 2016-01-06 22:42:43 +00:00
LinkerScript.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
MarkLive.cpp Merge two consecutive if's. NFC. 2016-01-12 21:57:44 +00:00
Options.td Reapply r257753 with fix: 2016-01-15 13:34:52 +00:00
OutputSections.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
OutputSections.h Remove another case of almost duplicated code. 2016-01-27 18:04:26 +00:00
README.md [README] Update to reflect the new world order. 2015-12-24 10:03:46 +00:00
SymbolTable.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
SymbolTable.h Delete addIgnoredStrong. 2016-01-19 00:05:54 +00:00
Symbols.cpp [ELF] - Symbols from object files that override symbols in DSO are added to .dynsym table. 2016-01-25 08:44:38 +00:00
Symbols.h Remove dead code. 2016-01-22 19:55:01 +00:00
Target.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
Target.h [ELF] - fix possible UB when dereferencing null 2016-01-22 18:02:28 +00:00
Writer.cpp ELF: Rename error -> fatal and redefine error as a non-noreturn function. 2016-01-28 18:40:06 +00:00
Writer.h ELF2: Implement --gc-sections. 2015-10-22 18:49:53 +00:00

README.md

The New ELF Linker

This directory contains a port of the new PE/COFF linker for ELF.

Overall Design

See COFF/README.md for details on the design. Note that unlike COFF, we do not distinguish chunks from input sections; they are merged together.

Capabilities

This linker can link LLVM and Clang on Linux/x86-64 or FreeBSD/x86-64 "Hello world" can be linked on Linux/PPC64 and on Linux/AArch64 or FreeBSD/AArch64.

Performance

Achieving good performance is one of our goals. It's too early to reach a conclusion, but we are optimistic about that as it currently seems to be faster than GNU gold. It will be interesting to compare when we are close to feature parity.