1======================== 2lld 13.0.0 Release Notes 3======================== 4 5.. contents:: 6 :local: 7 8.. warning:: 9 These are in-progress notes for the upcoming LLVM 13.0.0 release. 10 Release notes for previous releases can be found on 11 `the Download Page <https://releases.llvm.org/download.html>`_. 12 13Introduction 14============ 15 16This document contains the release notes for the lld linker, release 13.0.0. 17Here we describe the status of lld, including major improvements 18from the previous release. All lld releases may be downloaded 19from the `LLVM releases web site <https://llvm.org/releases/>`_. 20 21Non-comprehensive list of changes in this release 22================================================= 23 24ELF Improvements 25---------------- 26 27* ``-z start-stop-gc`` is now supported and becomes the default. 28 (`D96914 <https://reviews.llvm.org/D96914>`_) 29 (`rG6d2d3bd0 <https://reviews.llvm.org/rG6d2d3bd0a61f5fc7fd9f61f48bc30e9ca77cc619>`_) 30* ``--shuffle-sections=<seed>`` has been changed to ``--shuffle-sections=<section-glob>=<seed>``. 31 If seed is -1, the matched input sections are reversed. 32 (`D98445 <https://reviews.llvm.org/D98445>`_) 33 (`D98679 <https://reviews.llvm.org/D98679>`_) 34* ``-Bsymbolic -Bsymbolic-functions`` has been changed to behave the same as ``-Bsymbolic-functions``. This matches GNU ld. 35 (`D102461 <https://reviews.llvm.org/D102461>`_) 36* ``-Bno-symbolic`` has been added. 37 (`D102461 <https://reviews.llvm.org/D102461>`_) 38* A new linker script command ``OVERWRITE_SECTIONS`` has been added. 39 (`D103303 <https://reviews.llvm.org/D103303>`_) 40* ``-Bsymbolic-non-weak-functions`` has been added as a ``STB_GLOBAL`` subset of ``-Bsymbolic-functions``. 41 (`D102570 <https://reviews.llvm.org/D102570>`_) 42* ``--no-allow-shlib-undefined`` has been improved to catch more cases. 43 (`D101996 <https://reviews.llvm.org/D101996>`_) 44* ``__rela_iplt_start`` is no longer defined for -pie/-shared. 45 This makes GCC/Clang ``-static-pie`` built executables work. 46 (`rG8cb78e99 <https://reviews.llvm.org/rf8cb78e99aae9aa3f89f7bfe667db2c5b767f21f>`_) 47* IRELATIVE/TLSDESC relocations now support ``-z rel``. 48 (`D100544 <https://reviews.llvm.org/D100544>`_) 49* Section groups with a zero flag are now supported. 50 This is used by ``comdat nodeduplicate`` in LLVM IR. 51 (`D96636 <https://reviews.llvm.org/D96636>`_) 52 (`D106228 <https://reviews.llvm.org/D106228>`_) 53* Defined symbols are now resolved before undefined symbols to stabilize the bheavior of archive member extraction. 54 (`D95985 <https://reviews.llvm.org/D95985>`_) 55* ``STB_WEAK`` symbols are now preferred over COMMON symbols as a fix to a ``--fortran-common`` regression. 56 (`D105945 <https://reviews.llvm.org/D105945>`_) 57* Absolute relocations referencing undef weak now produce dynamic relocations for -pie, matching GOT-generating relocations. 58 (`D105164 <https://reviews.llvm.org/D105164>`_) 59* Exported symbols are now communicated to the LTO library so as to make LTO 60 based whole program devirtualization (``-flto=thin -fwhole-program-vtables``) 61 work with shared objects. 62 (`D91583 <https://reviews.llvm.org/D91583>`_) 63* Whole program devirtualization now respects ``local:`` version nodes in a version script. 64 (`D98220 <https://reviews.llvm.org/D98220>`_) 65 (`D98686 <https://reviews.llvm.org/D98686>`_) 66* ``local:`` version nodes in a version script now apply to non-default version symbols. 67 (`D107234 <https://reviews.llvm.org/D107234>`_) 68* If an object file defines both ``foo`` and ``foo@v1``, now only ``foo@v1`` will be in the output. 69 (`D107235 <https://reviews.llvm.org/D107235>`_) 70* Copy relocations on non-default version symbols are now supported. 71 (`D107535 <https://reviews.llvm.org/D107535>`_) 72 73Linker script changes: 74 75* ``.``, ``$``, and double quotes can now be used in symbol names in expressions. 76 (`D98306 <https://reviews.llvm.org/D98306>`_) 77 (`rGe7a7ad13 <https://reviews.llvm.org/rGe7a7ad134fe182aad190cb3ebc441164470e92f5>`_) 78* Fixed value of ``.`` in the output section description of ``.tbss``. 79 (`D107288 <https://reviews.llvm.org/D107288>`_) 80* ``NOLOAD`` sections can now be placed in a ``PT_LOAD`` program header. 81 (`D103815 <https://reviews.llvm.org/D103815>`_) 82* ``OUTPUT_FORMAT(default, big, little)`` now consults ``-EL`` and ``-EB``. 83 (`D96214 <https://reviews.llvm.org/D96214>`_) 84* The ``OVERWRITE_SECTIONS`` command has been added. 85 (`D103303 <https://reviews.llvm.org/D103303>`_) 86* The section order within an ``INSERT AFTER`` command is now preserved. 87 (`D105158 <https://reviews.llvm.org/D105158>`_) 88 89Architecture specific changes: 90 91* aarch64_be is now supported. 92 (`D96188 <https://reviews.llvm.org/D96188>`_) 93* The AMDGPU port now supports ``--amdhsa-code-object-version=4`` object files; 94 (`D95811 <https://reviews.llvm.org/D95811>`_) 95* The ARM port now accounts for PC biases in range extension thunk creation. 96 (`D97550 <https://reviews.llvm.org/D97550>`_) 97* The AVR port now computes ``e_flags``. 98 (`D99754 <https://reviews.llvm.org/D99754>`_) 99* The Mips port now omits unneeded dynamic relocations for PIE non-preemptible TLS. 100 (`D101382 <https://reviews.llvm.org/D101382>`_) 101* The PowerPC port now supports ``--power10-stubs=no`` to omit Power10 instructions from call stubs. 102 (`D94625 <https://reviews.llvm.org/D94625>`_) 103* Fixed a thunk creation bug in the PowerPC port when TOC/NOTOC calls are mixed. 104 (`D101837 <https://reviews.llvm.org/D101837>`_) 105* The RISC-V port now resolves undefined weak relocations to the current location if not using PLT. 106 (`D103001 <https://reviews.llvm.org/D103001>`_) 107* ``R_386_GOTOFF`` relocations from .debug_info are now allowed to be compatible with GCC. 108 (`D95994 <https://reviews.llvm.org/D95994>`_) 109* ``gotEntrySize`` has been added to improve support for the ILP32 ABI of x86-64. 110 (`D102569 <https://reviews.llvm.org/D102569>`_) 111 112Breaking changes 113---------------- 114 115* ``--shuffle-sections=<seed>`` has been changed to ``--shuffle-sections=<section-glob>=<seed>``. 116 Specify ``*`` as ``<section-glob>`` to get the previous behavior. 117 118COFF Improvements 119----------------- 120 121* Avoid thread exhaustion when running on 32 bit Windows. 122 (`D105506 <https://reviews.llvm.org/D105506>`_) 123 124* Improve terminating the process on Windows while a thread pool might be 125 running. (`D102944 <https://reviews.llvm.org/D102944>`_) 126 127MinGW Improvements 128------------------ 129 130* Support for linking directly against a DLL without using an import library 131 has been added. (`D104530 <https://reviews.llvm.org/D104530>`_ and 132 `D104531 <https://reviews.llvm.org/D104531>`_) 133 134* Fix linking with ``--export-all-symbols`` in combination with 135 ``-function-sections``. (`D101522 <https://reviews.llvm.org/D101522>`_ and 136 `D101615 <https://reviews.llvm.org/D101615>`_) 137 138* Fix automatic export of symbols from LTO objects. 139 (`D101569 <https://reviews.llvm.org/D101569>`_) 140 141* Accept more spellings of some options. 142 (`D107237 <https://reviews.llvm.org/D107237>`_ and 143 `D107253 <https://reviews.llvm.org/D107253>`_) 144 145Mach-O Improvements 146------------------- 147 148The Mach-O backend is now able to link several large, real-world programs, 149though we are still working out the kinks. 150 151* arm64 is now supported as a target. (`D88629 <https://reviews.llvm.org/D88629>`_) 152* arm64_32 is now supported as a target. (`D99822 <https://reviews.llvm.org/D99822>`_) 153* Branch-range-extension thunks are now supported. (`D100818 <https://reviews.llvm.org/D100818>`_) 154* ``-dead_strip`` is now supported. (`D103324 <https://reviews.llvm.org/D103324>`_) 155* Support for identical code folding (``--icf=all``) has been added. 156 (`D103292 <https://reviews.llvm.org/D103292>`_) 157* Support for special ``$start`` and ``$end`` symbols for segment & sections has been 158 added. (`D106767 <https://reviews.llvm.org/D106767>`_, `D106629 <https://reviews.llvm.org/D106629>`_) 159* ``$ld$previous`` symbols are now supported. (`D103505 <https://reviews.llvm.org/D103505 >`_) 160* ``$ld$install_name`` symbols are now supported. (`D103746 <https://reviews.llvm.org/D103746>`_) 161* ``__mh_*_header`` symbols are now supported. (`D97007 <https://reviews.llvm.org/D97007>`_) 162* LC_CODE_SIGNATURE is now supported. (`D96164 <https://reviews.llvm.org/D96164>`_) 163* LC_FUNCTION_STARTS is now supported. (`D97260 <https://reviews.llvm.org/D97260>`_) 164* LC_DATA_IN_CODE is now supported. (`D103006 <https://reviews.llvm.org/D103006>`_) 165* Bind opcodes are more compactly encoded. (`D106128 <https://reviews.llvm.org/D106128>`_, 166 `D105075 <https://reviews.llvm.org/D105075>`_) 167* LTO cache support has been added. (`D105922 <https://reviews.llvm.org/D105922>`_) 168* ``-application_extension`` is now supported. (`D105818 <https://reviews.llvm.org/D105818>`_) 169* ``-export_dynamic`` is now partially supported. (`D105482 <https://reviews.llvm.org/D105482>`_) 170* ``-arch_multiple`` is now supported. (`D105450 <https://reviews.llvm.org/D105450>`_) 171* ``-final_output`` is now supported. (`D105449 <https://reviews.llvm.org/D105449>`_) 172* ``-umbrella`` is now supported. (`D105448 <https://reviews.llvm.org/D105448>`_) 173* ``--print-dylib-search`` is now supported. (`D103985 <https://reviews.llvm.org/D103985>`_) 174* ``-force_load_swift_libs`` is now supported. (`D103709 <https://reviews.llvm.org/D103709>`_) 175* ``-reexport_framework``, ``-reexport_library``, ``-reexport-l`` are now supported. 176 (`D103497 <https://reviews.llvm.org/D103497>`_) 177* ``.weak_def_can_be_hidden`` is now supported. (`D101080 <https://reviews.llvm.org/D101080>`_) 178* ``-add_ast_path`` is now supported. (`D100076 <https://reviews.llvm.org/D100076>`_) 179* ``-segprot`` is now supported. (`D99389 <https://reviews.llvm.org/D99389>`_) 180* ``-dependency_info`` is now partially supported. (`D98559 <https://reviews.llvm.org/D98559>`_) 181* ``--time-trace`` is now supported. (`D98419 <https://reviews.llvm.org/D98419>`_) 182* ``-mark_dead_strippable_dylib`` is now supported. (`D98262 <https://reviews.llvm.org/D98262>`_) 183* ``-[un]exported_symbol[s_list]`` is now supported. (`D98223 <https://reviews.llvm.org/D98223>`_) 184* ``-flat_namespace`` is now supported. (`D97641 <https://reviews.llvm.org/D97641>`_) 185* ``-rename_section`` and ``-rename_segment`` are now supported. (`D97600 <https://reviews.llvm.org/D97600>`_) 186* ``-bundle_loader`` is now supported. (`D95913 <https://reviews.llvm.org/D95913>`_) 187* ``-map`` is now partially supported. (`D98323 <https://reviews.llvm.org/D98323>`_) 188 189There were numerous other bug-fixes as well. 190 191WebAssembly Improvements 192------------------------ 193 194