| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
The COFF linker and the ELF linker have long had similar but separate
Error.h and Error.cpp files to implement error handling. This change
introduces new error handling code in Common/ErrorHandler.h, changes the
COFF and ELF linkers to use it, and removes the old, separate
implementations.
Reviewers: ruiu
Reviewed By: ruiu
Subscribers: smeenai, jyknight, emaste, sdardis, nemanjai, nhaehnle, mgorny, javed.absar, kbarton, fedor.sergeev, llvm-commits
Differential Revision: https://reviews.llvm.org/D39259
llvm-svn: 316624
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This will allow using the functionality from other linkers. It is also
a prerequisite for sharing the error logging code.
Reviewers: ruiu
Reviewed By: ruiu
Subscribers: emaste, mgorny, llvm-commits
Differential Revision: https://reviews.llvm.org/D38822
llvm-svn: 315725
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I think it is not defined what would happen to detached threads
when the main thread tries to exit. That means it was not guaranteed
that unlinkAsync correctly removes a temporary file. It was also
reported that this unlinkAsync caused a crash on Windows.
This patch adds a few new functions so that the main thread always
waits for non-main threads before exitting.
I don't actually like the new two functions, runBackground and
waitForBackgroundThreads, because it looks like it is a bit
overdesigned. After all, what we are doing with these functions
is to just remove a file.
An alternative would be to do fork(2) and make the child process
remove a file asynchronously. However, it has its own problems.
Correctly forking and reclaiming a resource using waitpid(2) is not
doable unless we know our process-wide settings (such as signal mask),
but we can't make any assumption on it when lld is embedded to other
process. So I chose to stick with threads instead of multi-processes.
Differential Revision: https://reviews.llvm.org/D38571
llvm-svn: 315033
|
|
|
|
| |
llvm-svn: 308526
|
|
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D35152
llvm-svn: 307590
|
|
|
|
|
|
|
|
| |
This change was motivated by output from lld-link.exe and link.exe
getting intermixed. There's already a flush() call in message(), so
there's precedence.
llvm-svn: 301693
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, undefined symbol errors are one line like this
and wasn't easy to read.
/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*)'
This patch make it more structured like this.
bin/ld.lld: error: undefined symbol: lld::elf::EhFrameSection<llvm::object::ELFType<(llvm::support::endianness)0, true>
>>> Referenced by Writer.cpp:207 (/ssd/llvm-project/lld/ELF/Writer.cpp:207)
>>> Writer.cpp.o in archive lib/liblldELF.a
Discussion thread:
http://lists.llvm.org/pipermail/llvm-dev/2017-March/111459.html
Differential Revision: https://reviews.llvm.org/D31481
llvm-svn: 299097
|
|
|
|
| |
llvm-svn: 298668
|
|
|
|
|
|
|
|
|
| |
LLD is a multi-threaded program. errs() or outs() are not guaranteed
to be thread-safe (they are actually not).
LLD's message(), log() or error() are thread-safe. We should use them.
llvm-svn: 295787
|
|
|
|
|
|
| |
Now we have the consistent interface for all log/warn/error/fatal functions.
llvm-svn: 291847
|
|
|
|
| |
llvm-svn: 291840
|
|
|
|
| |
llvm-svn: 291834
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: elf::fatal is declared "noreturn".
Reviewers: grimar
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28607
llvm-svn: 291766
|
|
|
|
|
|
|
|
|
|
|
| |
Intention of change is to get rid of code duplication.
Decompressor was introduced in D28105.
Change allows to get rid of few methods relative to decompression.
Differential revision: https://reviews.llvm.org/D28106
llvm-svn: 291758
|
|
|
|
|
|
|
| |
Config->ColorDiagnostics was of type enum before. Now it is just a
boolean flag. Thanks Rafael for suggestion.
llvm-svn: 287978
|
|
|
|
| |
llvm-svn: 287950
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
-color-diagnostics=auto is default because that's the same as
Clang's default. When color is enabled, error or warning messages
are colored like this.
error:
<bold>ld.lld</bold> <red>error:</red> foo.o: no such file
warning:
<bold>ld.lld</bold> <magenta>warning:</magenta> foo.o: no such file
Differential Revision: https://reviews.llvm.org/D27117
llvm-svn: 287949
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch changes the error message from
too many errors emitted, stopping now
to
too many errors emitted, stopping now (use -error-limit=0 to see all errors)
Thanks for Sean for the suggestion!
llvm-svn: 287900
|
|
|
|
|
|
| |
HasError was always true if ErrorCount > 0, so we can use ErrorCount instead.
llvm-svn: 287849
|
|
|
|
| |
llvm-svn: 287794
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is in the context of https://llvm.org/bugs/show_bug.cgi?id=31109.
When LLD prints out errors for relocations, it tends to print out
extremely large number of errors (like millions) because it would
print out one error per relocation.
This patch makes LLD bail out if it prints out more than 20 errors.
You can configure the limitation using -error-limit argument.
-error-limit=0 means no limit.
I chose the flag name because Clang has the same feature as -ferror-limit.
"f" doesn't make sense to us, so I omitted it.
Differential Revision: https://reviews.llvm.org/D26981
llvm-svn: 287789
|
|
|
|
|
|
|
| |
llvm_shutdown could write something to outs or errs,
so we need to flush them after calling llvm_shutdown.
llvm-svn: 286548
|
|
|
|
|
|
|
|
|
|
| |
In a non-LTO build is a nop. In a LTO build, we deallocate/destroy
managed static and this allows us to get the output of, e.g.,
-time-passes without performing a full shutdown.
Differential Revision: https://reviews.llvm.org/D26517
llvm-svn: 286493
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of having 3 section allocators per file, have 3 for all files.
This is a substantial performance improvement for some cases. Linking
chromium without gc speeds up by 1.065x.
This requires using _exit in fatal since we have to avoid destructing
an InputSection if fatal is called from the constructor.
Thanks to Rui for the suggestion.
llvm-svn: 285290
|
|
|
|
|
|
|
|
| |
This is what other linkers and clang driver do.
Differential Revision: https://reviews.llvm.org/D25780
llvm-svn: 284634
|
|
|
|
|
|
| |
Differential revision: https://reviews.llvm.org/D25729
llvm-svn: 284575
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
createELFObj() may call error(...), for example when file is too short.
In that case header is not set and following line lead to crash:
EMachine = ELFObj.getHeader()->e_machine;
Patch fixes the issue.
Differential revision: https://reviews.llvm.org/D25233
llvm-svn: 283532
|
|
|
|
| |
llvm-svn: 283488
|
|
|
|
|
|
| |
It's better because it's a verb.
llvm-svn: 282763
|
|
|
|
|
|
| |
And make it easier to spot code going dead by using elf::.
llvm-svn: 275858
|
|
|
|
|
|
|
| |
We should write to ErrorOS instead. Normaly, *ErrorOS == errs(),
but they can be different if LLD is embedded.
llvm-svn: 275525
|
|
|
|
|
|
|
|
| |
Previously, it checked for the EC parameter and set HasError
only when there was an error. But in most places we called
error only when error had occurred, so this behavior was confusing.
llvm-svn: 275517
|
|
|
|
| |
llvm-svn: 275362
|
|
|
|
| |
llvm-svn: 274755
|
|
|
|
|
|
|
|
| |
--fatal-warnings: Treat warnings as errors
DIfferential revision: http://reviews.llvm.org/D21969
llvm-svn: 274504
|
|
|
|
|
|
|
|
|
| |
This is both simpler and safer. If we crash at any point, there is a
valid cpio file to reproduce the crash.
Thanks to Rui for the suggestion.
llvm-svn: 268495
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We want --reproduce to
* not rewrite scripts and thin archives
* work with absolute paths
Given that, it pretty much has to create a full directory tree. On windows that
is problematic because of the very short maximum path limit. On most cases
users can still work around it with "--repro c:\r", but that is annoying and
not viable for automated testing.
We then need to produce some form of archive with the files. The first option
that comes to mind is .a files since we already have code for writing them.
There are a few problems with them
The format has a dedicated string table, so we cannot start writing it until
all members are known.
Regular implementations don't support creating directories. We could make
llvm-ar support that, but that is probably not a good idea.
The next natural option would be tar. The problem is that to support long path
names (which is how this started) it needs a "pax extended header" making this
an annoying format to write.
The next option I looked at seems a natural fit: cpio files.
They are available on pretty much every unix, support directories and long path
names and are really easy to write. The only slightly annoying part is a
terminator, but at least gnu cpio only prints a warning if it is missing, which
is handy for crashes. This patch still makes an effort to always create it.
llvm-svn: 268404
|
|
|
|
| |
llvm-svn: 263363
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
error returned true if there was an error. This allows us to replace
the code like this
if (EC) {
error(EC, "something failed");
return;
}
with
if (error(EC, "something failed"))
return;
I thought that that was a good idea, but it turned out that we only
have two places to use this pattern. So this patch removes that feature.
llvm-svn: 263362
|
|
|
|
| |
llvm-svn: 262666
|
|
|
|
| |
llvm-svn: 262653
|
|
|
|
|
|
|
| |
This makes fatal return T when there is no error. This avoids the need
for quite a few temporaries.
llvm-svn: 262626
|
|
|
|
| |
llvm-svn: 262159
|
|
|
|
| |
llvm-svn: 261919
|
|
|
|
|
|
| |
http://reviews.llvm.org/D16668
llvm-svn: 259597
|
|
|
|
|
|
| |
This reverts r259395 which reverted r259143.
llvm-svn: 259572
|
|
|
|
| |
llvm-svn: 259395
|
|
|
|
|
|
|
|
|
| |
This patch let the driver keep going until it parses all
command line options.
http://reviews.llvm.org/D16645
llvm-svn: 259143
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
Patch from George Rimar!
llvm-svn: 248524
|