aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm/tools/lld
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/tools/lld')
-rw-r--r--contrib/llvm/tools/lld/COFF/PDB.cpp18
-rw-r--r--contrib/llvm/tools/lld/ELF/Driver.cpp2
-rw-r--r--contrib/llvm/tools/lld/ELF/ScriptParser.cpp3
-rw-r--r--contrib/llvm/tools/lld/docs/ReleaseNotes.rst60
-rw-r--r--contrib/llvm/tools/lld/docs/index.rst1
-rw-r--r--contrib/llvm/tools/lld/docs/missingkeyfunction.rst4
6 files changed, 66 insertions, 22 deletions
diff --git a/contrib/llvm/tools/lld/COFF/PDB.cpp b/contrib/llvm/tools/lld/COFF/PDB.cpp
index 7862b6ce4cc5..7757b89e2b36 100644
--- a/contrib/llvm/tools/lld/COFF/PDB.cpp
+++ b/contrib/llvm/tools/lld/COFF/PDB.cpp
@@ -288,18 +288,24 @@ static void pdbMakeAbsolute(SmallVectorImpl<char> &FileName) {
// It's not absolute in any path syntax. Relative paths necessarily refer to
// the local file system, so we can make it native without ending up with a
// nonsensical path.
- sys::path::native(FileName);
if (Config->PDBSourcePath.empty()) {
+ sys::path::native(FileName);
sys::fs::make_absolute(FileName);
return;
}
- // Only apply native and dot removal to the relative file path. We want to
- // leave the path the user specified untouched since we assume they specified
- // it for a reason.
- sys::path::remove_dots(FileName, /*remove_dot_dots=*/true);
+ // Try to guess whether /PDBSOURCEPATH is a unix path or a windows path.
+ // Since PDB's are more of a Windows thing, we make this conservative and only
+ // decide that it's a unix path if we're fairly certain. Specifically, if
+ // it starts with a forward slash.
SmallString<128> AbsoluteFileName = Config->PDBSourcePath;
- sys::path::append(AbsoluteFileName, FileName);
+ sys::path::Style GuessedStyle = AbsoluteFileName.startswith("/")
+ ? sys::path::Style::posix
+ : sys::path::Style::windows;
+ sys::path::append(AbsoluteFileName, GuessedStyle, FileName);
+ sys::path::native(AbsoluteFileName, GuessedStyle);
+ sys::path::remove_dots(AbsoluteFileName, true, GuessedStyle);
+
FileName = std::move(AbsoluteFileName);
}
diff --git a/contrib/llvm/tools/lld/ELF/Driver.cpp b/contrib/llvm/tools/lld/ELF/Driver.cpp
index 0ac9036b69a3..407f1734f143 100644
--- a/contrib/llvm/tools/lld/ELF/Driver.cpp
+++ b/contrib/llvm/tools/lld/ELF/Driver.cpp
@@ -130,7 +130,7 @@ static std::tuple<ELFKind, uint16_t, uint8_t> parseEmulation(StringRef Emul) {
.Cases("elf32btsmip", "elf32btsmipn32", {ELF32BEKind, EM_MIPS})
.Cases("elf32ltsmip", "elf32ltsmipn32", {ELF32LEKind, EM_MIPS})
.Case("elf32lriscv", {ELF32LEKind, EM_RISCV})
- .Case("elf32ppc", {ELF32BEKind, EM_PPC})
+ .Cases("elf32ppc", "elf32ppclinux", {ELF32BEKind, EM_PPC})
.Case("elf64btsmip", {ELF64BEKind, EM_MIPS})
.Case("elf64ltsmip", {ELF64LEKind, EM_MIPS})
.Case("elf64lriscv", {ELF64LEKind, EM_RISCV})
diff --git a/contrib/llvm/tools/lld/ELF/ScriptParser.cpp b/contrib/llvm/tools/lld/ELF/ScriptParser.cpp
index 7cce94659c9e..7dbe1641622b 100644
--- a/contrib/llvm/tools/lld/ELF/ScriptParser.cpp
+++ b/contrib/llvm/tools/lld/ELF/ScriptParser.cpp
@@ -392,10 +392,11 @@ static std::pair<ELFKind, uint16_t> parseBfdName(StringRef S) {
.Case("elf32-x86-64", {ELF32LEKind, EM_X86_64})
.Case("elf64-aarch64", {ELF64LEKind, EM_AARCH64})
.Case("elf64-littleaarch64", {ELF64LEKind, EM_AARCH64})
+ .Case("elf32-powerpc", {ELF32BEKind, EM_PPC})
.Case("elf64-powerpc", {ELF64BEKind, EM_PPC64})
.Case("elf64-powerpcle", {ELF64LEKind, EM_PPC64})
.Case("elf64-x86-64", {ELF64LEKind, EM_X86_64})
- .Case("elf32-tradbigmips", {ELF32BEKind, EM_MIPS})
+ .Cases("elf32-tradbigmips", "elf32-bigmips", {ELF32BEKind, EM_MIPS})
.Case("elf32-ntradbigmips", {ELF32BEKind, EM_MIPS})
.Case("elf32-tradlittlemips", {ELF32LEKind, EM_MIPS})
.Case("elf32-ntradlittlemips", {ELF32LEKind, EM_MIPS})
diff --git a/contrib/llvm/tools/lld/docs/ReleaseNotes.rst b/contrib/llvm/tools/lld/docs/ReleaseNotes.rst
index c02cc586c795..0bebfb3fb1ce 100644
--- a/contrib/llvm/tools/lld/docs/ReleaseNotes.rst
+++ b/contrib/llvm/tools/lld/docs/ReleaseNotes.rst
@@ -13,10 +13,12 @@ lld 8.0.0 Release Notes
Introduction
============
-This document contains the release notes for the lld linker, release 8.0.0.
-Here we describe the status of lld, including major improvements
-from the previous release. All lld releases may be downloaded
-from the `LLVM releases web site <https://llvm.org/releases/>`_.
+lld is a high-performance linker that supports ELF (Unix), COFF (Windows),
+Mach-O (macOS), MinGW and WebAssembly. lld is command-line-compatible with
+GNU linkers and Microsoft link.exe and is significantly faster than the
+system default linkers.
+
+nlld 8.0.0 has lots of feature improvements and bug fixes.
Non-comprehensive list of changes in this release
=================================================
@@ -33,27 +35,66 @@ ELF Improvements
non-superpages to a superpage if they are aligned to the superpage
size. (`r342746 <https://reviews.llvm.org/rL342746>`_)
+* lld now attempts to place a ``.note`` segment in the first page of a
+ generated file, so that you can find some important information
+ (``.note.gnu.build-id`` in particular) in a core file even if a core
+ file is truncated by ulimit.
+ (`r349524 <https://reviews.llvm.org/rL349524>`_)
+
+* lld now reports an error if ``_GLOBAL_OFFSET_TABLE_`` symbol is
+ defined by an input object file, as the symbol is supposed to be
+ synthesized by the linker.
+ (`r347854 <https://reviews.llvm.org/rL347854>`_)
+
* lld/Hexagon can now link Linux kernel and musl libc for Qualcomm
Hexagon ISA.
* Initial MSP430 ISA support has landed.
-* The following flags have been added: ``-z interpose``, ``-z global``
-
* lld now uses the ``sigrie`` instruction as a trap instruction for
MIPS targets.
+* lld now creates a TLS segment for AArch64 with a slightly larger
+ alignment requirement, so that the loader makes a few bytes room
+ before each TLS segment at runtime. The aim of this change is to
+ make room to accomodate nonstandard Android TLS slots while keeping
+ the compatibility with the standard AArch64 ABI.
+ (`r350681 <https://reviews.llvm.org/rL350681>`_)
+
+* The following flags have been added: ``--call-graph-profile``,
+ ``--no-call-graph-profile``, ``--warn-ifunc-textrel``,
+ ``-z interpose``, ``-z global``, ``-z nodefaultlib``
+
COFF Improvements
-----------------
* PDB GUID is set to hash of PDB contents instead to a random byte
sequence for build reproducibility.
+* ``/pdbsourcepath:`` is now also used to make ``"cwd"``, ``"exe"``, ``"pdb"``
+ in the env block of PDB outputs absolute if they are relative, and to make
+ paths to obj files referenced in PDB outputs absolute if they are relative.
+ Together with the previous item, this makes it possible to generate
+ executables and PDBs that are fully deterministic and independent of the
+ absolute path to the build directory, so that different machines building
+ the same code in different directories can produce exactly the same output.
+
* The following flags have been added: ``/force:multiple``
* lld now can link against import libraries produced by GNU tools.
-* lld can create thunks for ARM, to allow linking images over 16 MB.
+* lld can create thunks for ARM and ARM64, to allow linking larger images
+ (over 16 MB for ARM and over 128 MB for ARM64)
+
+* Several speed and memory usage improvements.
+
+* lld now creates debug info for typedefs.
+
+* lld can now link obj files produced by ``cl.exe /Z7 /Yc``.
+
+* lld now understands ``%_PDB%`` and ``%_EXT%`` in ``/pdbaltpath:``.
+
+* Undefined symbols are now printed in demangled form in addition to raw form.
MinGW Improvements
------------------
@@ -76,11 +117,6 @@ MinGW Improvements
Previously, the ``--build-id`` option did not actually generate a build id
unless ``--pdb`` was specified.
-MachO Improvements
-------------------
-
-* Item 1.
-
WebAssembly Improvements
------------------------
diff --git a/contrib/llvm/tools/lld/docs/index.rst b/contrib/llvm/tools/lld/docs/index.rst
index da1c894f3d83..2564e9b6310f 100644
--- a/contrib/llvm/tools/lld/docs/index.rst
+++ b/contrib/llvm/tools/lld/docs/index.rst
@@ -173,4 +173,5 @@ document soon.
AtomLLD
WebAssembly
windows_support
+ missingkeyfunction
ReleaseNotes
diff --git a/contrib/llvm/tools/lld/docs/missingkeyfunction.rst b/contrib/llvm/tools/lld/docs/missingkeyfunction.rst
index 410c749c3b03..54ad3251f794 100644
--- a/contrib/llvm/tools/lld/docs/missingkeyfunction.rst
+++ b/contrib/llvm/tools/lld/docs/missingkeyfunction.rst
@@ -1,5 +1,5 @@
-Missing Key Method
-==================
+Missing Key Function
+====================
If your build failed with a linker error something like this::