summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2018-02-24 21:27:54 +0000
committerDimitry Andric <dim@FreeBSD.org>2018-02-24 21:27:54 +0000
commit59909f3a4ec327f8e58155b594ce00045d73f71e (patch)
treef56e6077005b94df3bf4260892367a2eefa401a3
parentc5bd7e5db0e0dbe86cffb7611e2037c8cc6fe668 (diff)
downloadsrc-test2-59909f3a4ec327f8e58155b594ce00045d73f71e.tar.gz
src-test2-59909f3a4ec327f8e58155b594ce00045d73f71e.zip
Notes
-rw-r--r--ELF/Driver.cpp9
-rw-r--r--ELF/Options.td4
-rw-r--r--docs/ReleaseNotes.rst82
-rw-r--r--test/ELF/pie.s2
-rw-r--r--test/ELF/relocatable-versioned.s9
5 files changed, 88 insertions, 18 deletions
diff --git a/ELF/Driver.cpp b/ELF/Driver.cpp
index 6de8ed59e5f9..714976ae9c4b 100644
--- a/ELF/Driver.cpp
+++ b/ELF/Driver.cpp
@@ -638,7 +638,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
Config->Optimize = args::getInteger(Args, OPT_O, 1);
Config->OrphanHandling = getOrphanHandling(Args);
Config->OutputFile = Args.getLastArgValue(OPT_o);
- Config->Pie = Args.hasFlag(OPT_pie, OPT_no_pie, false);
+ Config->Pie = Args.hasFlag(OPT_pie, OPT_nopie, false);
Config->PrintGcSections =
Args.hasFlag(OPT_print_gc_sections, OPT_no_print_gc_sections, false);
Config->Rpath = getRpath(Args);
@@ -1061,7 +1061,12 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
addReservedSymbols();
// Apply version scripts.
- Symtab->scanVersionScript();
+ //
+ // For a relocatable output, version scripts don't make sense, and
+ // parsing a symbol version string (e.g. dropping "@ver1" from a symbol
+ // name "foo@ver1") rather do harm, so we don't call this if -r is given.
+ if (!Config->Relocatable)
+ Symtab->scanVersionScript();
// Create wrapped symbols for -wrap option.
for (auto *Arg : Args.filtered(OPT_wrap))
diff --git a/ELF/Options.td b/ELF/Options.td
index 735046728154..20027e90aefd 100644
--- a/ELF/Options.td
+++ b/ELF/Options.td
@@ -202,8 +202,6 @@ def no_gnu_unique: F<"no-gnu-unique">,
def no_merge_exidx_entries: F<"no-merge-exidx-entries">,
HelpText<"Disable merging .ARM.exidx entries">;
-def no_pie: F<"no-pie">, HelpText<"Do not create a position independent executable">;
-
def no_threads: F<"no-threads">,
HelpText<"Do not run the linker multi-threaded">;
@@ -213,6 +211,8 @@ def no_whole_archive: F<"no-whole-archive">,
def noinhibit_exec: F<"noinhibit-exec">,
HelpText<"Retain the executable output file whenever it is still usable">;
+def nopie: F<"nopie">, HelpText<"Do not create a position independent executable">;
+
def no_omagic: Flag<["--"], "no-omagic">, MetaVarName<"<magic>">,
HelpText<"Do not set the text data sections to be writable">;
diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst
index e7ea0c8845fd..d07ce1cd85f3 100644
--- a/docs/ReleaseNotes.rst
+++ b/docs/ReleaseNotes.rst
@@ -5,17 +5,12 @@ LLD 6.0.0 Release Notes
.. contents::
:local:
-.. warning::
- These are in-progress notes for the upcoming LLVM 6.0.0 release.
- Release notes for previous releases can be found on
- `the Download Page <http://releases.llvm.org/download.html>`_.
-
Introduction
============
-This document contains the release notes for the LLD linker, release 6.0.0.
-Here we describe the status of LLD, including major improvements
-from the previous release. All LLD releases may be downloaded
+This document contains the release notes for the lld linker, release 6.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 <http://llvm.org/releases/>`_.
Non-comprehensive list of changes in this release
@@ -24,20 +19,81 @@ Non-comprehensive list of changes in this release
ELF Improvements
----------------
-* Item 1.
+* A lot of bugs and compatibility issues have been identified and fixed as a
+ result of people using lld 5.0 as a standard system linker. In particular,
+ linker script and version script support has significantly improved that
+ it should be able to handle almost all scripts.
+
+* A mitigation for Spectre v2 has been implemented. If you pass ``-z
+ retpolineplt``, lld uses RET instruction instead of JMP instruction in PLT.
+ The option is available for x86 and x86-64.
+
+* Identical Code Folding (ICF) now de-duplicates .eh_frame entries, so lld now
+ generates slightly smaller outputs than before when you pass ``--icf=all``.
+
+* Analysis for ``--as-needed`` is now done after garbage collection. If garbage
+ collector eliminates all sections that use some library, that library is
+ eliminated from DT_NEEDED tags. Previously, the analysis ran before garbage
+ collection.
+
+* Size of code segment is now always rounded up to page size to make sure that
+ unused bytes at end of code segment is filled with trap instructions (such
+ as INT3) instead of zeros.
+
+* lld is now able to generate Android-style compact dynamic relocation table.
+ You can turn on the feature by passing ``--pack-dyn-relocs=android``.
+
+* Debug information is used in more cases when reporting errors.
+
+* ``--gdb-index`` gets faster than before.
+
+* String merging is now multi-threaded, which makes ``-O2`` faster.
+
+* ``--hash-style=both`` is now default instead of ``--hash-style=sysv`` to
+ match the behavior of recent versions of GNU linkers.
+
+* ARM PLT entries automatically use short or long variants.
+
+* lld can now identify and patch a code sequence that triggers AArch64 errata 843419.
+ Add ``--fix-cortex-a53-843419`` to enable the feature.
+
+* lld can now generate thunks for out of range thunks.
+
+* MIPS port now generates all output dynamic relocations using Elf_Rel format only.
+
+* Added handling of the R_MIPS_26 relocation in case of N32/N64 ABIs and
+ generating proper PLT entries.
+
+* The following options have been added: ``--icf=none`` ``-z muldefs``
+ ``--plugin-opt`` ``--no-eh-frame-hdr`` ``--no-gdb-index``
+ ``--orphan-handling={place,discard,warn,error}``
+ ``--pack-dyn-relocs={none,android}`` ``--no-omagic``
+ ``--no-print-gc-sections`` ``--ignore-function-address-equality`` ``-z
+ retpolineplt`` ``--print-icf-sections`` ``--no-pie``
COFF Improvements
-----------------
* A GNU ld style frontend for the COFF linker has been added for MinGW.
In MinGW environments, the linker is invoked with GNU ld style parameters;
- which LLD previously only supported when used as an ELF linker. When
+ which lld previously only supported when used as an ELF linker. When
a PE/COFF target is chosen, those parameters are rewritten into the
lld-link style parameters and the COFF linker is invoked instead.
* Initial support for the ARM64 architecture has been added.
-MachO Improvements
-------------------
+* New ``--version`` flag.
+
+* Significantly improved support for writing PDB Files.
+
+* New ``--rsp-quoting`` flag, like ``clang-cl``.
+
+* ``/manifestuac:no`` no longer incorrectly disables ``/manifestdependency:``.
+
+* Only write ``.manifest`` files if ``/manifest`` is passed.
+
+WebAssembly Improvements
+------------------------
-* Item 1.
+* Initial version of WebAssembly support has landed. You can invoke the
+ WebAssembly linker by ``wasm-ld``.
diff --git a/test/ELF/pie.s b/test/ELF/pie.s
index 3efd6e337c64..5964db5c9399 100644
--- a/test/ELF/pie.s
+++ b/test/ELF/pie.s
@@ -48,7 +48,7 @@
# CHECK: Type: PT_DYNAMIC
## Check -nopie
-# RUN: ld.lld -no-pie %t1.o -o %t2
+# RUN: ld.lld -nopie %t1.o -o %t2
# RUN: llvm-readobj -file-headers -r %t2 | FileCheck %s --check-prefix=NOPIE
# NOPIE-NOT: Type: SharedObject
diff --git a/test/ELF/relocatable-versioned.s b/test/ELF/relocatable-versioned.s
new file mode 100644
index 000000000000..2b6c49eb5baa
--- /dev/null
+++ b/test/ELF/relocatable-versioned.s
@@ -0,0 +1,9 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
+# RUN: ld.lld -o %t2.o -r %t1.o
+# RUN: llvm-nm %t2.o | FileCheck %s
+# CHECK: foo@VERSION
+
+.global "foo@VERSION"
+"foo@VERSION":
+ ret