Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions clang/lib/Driver/ToolChains/Gnu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,16 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,

AddRunTimeLibs(ToolChain, D, CmdArgs, Args);

// LLVM support for atomics on 32-bit SPARC V8+ is incomplete, so
// forcibly link with libatomic as a workaround.
// TODO: Issue #41880 and D118021.
if (getToolChain().getTriple().getArch() == llvm::Triple::sparc) {
CmdArgs.push_back("--push-state");
CmdArgs.push_back("--as-needed");
CmdArgs.push_back("-latomic");
CmdArgs.push_back("--pop-state");
}

if (WantPthread && !isAndroid)
CmdArgs.push_back("-lpthread");

Expand Down
2 changes: 2 additions & 0 deletions clang/test/Driver/linux-ld.c
Original file line number Diff line number Diff line change
Expand Up @@ -1007,6 +1007,7 @@
// CHECK-SPARCV8: "{{.*}}ld{{(.exe)?}}"
// CHECK-SPARCV8: "-m" "elf32_sparc"
// CHECK-SPARCV8: "-dynamic-linker" "{{(/usr/sparc-unknown-linux-gnu)?}}/lib/ld-linux.so.2"
// CHECK-SPARCV8: "--push-state" "--as-needed" "-latomic" "--pop-state"
//
// RUN: %clang -### %s -no-pie 2>&1 \
// RUN: --target=sparcel-unknown-linux-gnu \
Expand All @@ -1021,6 +1022,7 @@
// CHECK-SPARCV9: "{{.*}}ld{{(.exe)?}}"
// CHECK-SPARCV9: "-m" "elf64_sparc"
// CHECK-SPARCV9: "-dynamic-linker" "{{(/usr/sparcv9-unknown-linux-gnu)?}}/lib{{(64)?}}/ld-linux.so.2"
// CHECK-SPARCV9-NOT: "-latomic"

// Test linker invocation on Android.
// RUN: %clang -### %s -no-pie 2>&1 \
Expand Down
111 changes: 111 additions & 0 deletions lld/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,117 @@ MachO Improvements
(`D129540 <https://reviews.llvm.org/D129540>`_,
`D122258 <https://reviews.llvm.org/D122258>`_)

New flags
#########

* ``-load_hidden`` and ``-hidden-l`` are now supported.
(`D130473 <https://reviews.llvm.org/D130473>`_,
`D130529 <https://reviews.llvm.org/D130529>`_)
* ``-alias`` is now supported. (`D129938 <https://reviews.llvm.org/D129938>`_)
* ``-no_exported_symbols`` and ``-exported_symbols_list <empty file>`` are now
supported. (`D127562 <https://reviews.llvm.org/D127562>`_)
* ``-w`` -- to suppress warnings -- is now supported.
(`D127564 <https://reviews.llvm.org/D127564>`_)
* ``-non_global_symbols_strip_list``, ``-non_global_symbols_no_strip_list``, and
``-x`` are now supported. (`D126046 <https://reviews.llvm.org/D126046>`_)
* ``--icf=safe`` is now supported.
(`D128938 <https://reviews.llvm.org/D128938>`_,
`D123752 <https://reviews.llvm.org/D123752>`_)
* ``-why_live`` is now supported.
(`D120377 <https://reviews.llvm.org/D120377>`_)
* ``-pagezero_size`` is now supported.
(`D118724 <https://reviews.llvm.org/D118724>`_)

Improvements
############

* Linker optimization hints are now supported.
(`D129427 <https://reviews.llvm.org/D129427>`_,
`D129059 <https://reviews.llvm.org/D129059>`_,
`D128942 <https://reviews.llvm.org/D128942>`_,
`D128093 <https://reviews.llvm.org/D128093>`_)
* Rebase opcodes are now encoded more compactly.
(`D130180 <https://reviews.llvm.org/D130180>`_,
`D128798 <https://reviews.llvm.org/D128798>`_)
* C-strings are now aligned more compactly.
(`D121342 <https://reviews.llvm.org/D121342>`_)
* ``--deduplicate-literals`` (and ``--icf={safe,all}``) now fold the
``__cfstring`` section.
(`D130134 <https://reviews.llvm.org/D130134>`_,
`D120137 <https://reviews.llvm.org/D120137>`_)
* ICF now folds the ``__objc_classrefs`` section.
(`D121053 <https://reviews.llvm.org/D121053>`_)
* ICF now folds functions with identical LSDAs.
(`D129830 <https://reviews.llvm.org/D129830>`_)
* STABS entries for folded functions are now omitted.
(`D123252 <https://reviews.llvm.org/D123252>`_)
* ``__objc_imageinfo`` sections are now folded.
(`D130125 <https://reviews.llvm.org/D130125>`_)
* Dylibs with ``LC_DYLD_EXPORTS_TRIE`` can now be read.
(`D129430 <https://reviews.llvm.org/D129430>`_)
* Writing zippered dylibs is now supported.
(`D124887 <https://reviews.llvm.org/D124887>`_)
* C-string literals are now included in the mapfile.
(`D118077 <https://reviews.llvm.org/D118077>`_)
* Symbol names in several more diagnostics are now demangled.
(`D130490 <https://reviews.llvm.org/D130490>`_,
`D127110 <https://reviews.llvm.org/D127110>`_,
`D125732 <https://reviews.llvm.org/D125732>`_)
* Source information is now included in symbol error messages.
(`D128425 <https://reviews.llvm.org/D128425>`_,
`D128184 <https://reviews.llvm.org/D128184>`_)
* Numerous other improvements were made to diagnostic messages.
(`D127753 <https://reviews.llvm.org/D127753>`_,
`D127696 <https://reviews.llvm.org/D127696>`_,
`D127670 <https://reviews.llvm.org/D127670>`_,
`D118903 <https://reviews.llvm.org/D118903>`_,
`D118798 <https://reviews.llvm.org/D118798>`_)
* Many performance and memory improvements were made.
(`D130000 <https://reviews.llvm.org/D130000>`_,
`D128298 <https://reviews.llvm.org/D128298>`_,
`D128290 <https://reviews.llvm.org/D128290>`_,
`D126800 <https://reviews.llvm.org/D126800>`_,
`D126785 <https://reviews.llvm.org/D126785>`_,
`D121052 <https://reviews.llvm.org/D121052>`_)
* Order files and call graph sorting can now be used together.
(`D117354 <https://reviews.llvm.org/D117354>`_)
* Give LTO more precise symbol resolutions, which allows optimizations to be
more effective.
(`D119506 <https://reviews.llvm.org/D119506>`_,
`D119372 <https://reviews.llvm.org/D119372>`_,
`D119767 <https://reviews.llvm.org/D119767>`_)
* Added partial support for linking object files built with DTrace probes.
(`D129062 <https://reviews.llvm.org/D129062>`_)

Fixes
#####

* Programs using Swift linked with the 14.0 SDK but an older deployment target
no longer crash at startup when running on older iOS versions. This is because
we now correctly support ``$ld$previous`` symbols that contain an explicit
symbol name. (`D130725 <https://reviews.llvm.org/D130725>`_)
* Match ld64's behavior when an archive is specified both via
``LC_LINKER_OPTION`` and via the command line.
(`D129556 <https://reviews.llvm.org/D129556>`_)
* ``-ObjC`` now correctly loads archives with Swift sections.
(`D125250 <https://reviews.llvm.org/D125250>`_)
* ``-lto_object_path`` now accepts a filename (instead of just a directory
name.) (`D129705 <https://reviews.llvm.org/D129705>`_)
* The ``LC_UUID`` hash now includes the output file's name.
(`D122843 <https://reviews.llvm.org/D122843>`_)
* ``-flat_namespace`` now correctly makes all extern symbols in a dylib
interposable. (`D119294 <https://reviews.llvm.org/D119294>`_)
* Fixed compact unwind output when linking on 32-bit hosts.
(`D129363 <https://reviews.llvm.org/D129363>`_)
* Exporting private symbols no longer triggers an assertion.
(`D124143 <https://reviews.llvm.org/D124143>`_)
* MacOS-only ``.tbd`` files are now supported when targeting Catalyst.
(`D124336 <https://reviews.llvm.org/D124336>`_)
* Thunk symbols now have local visibility, avoiding false duplicate symbol
errors. (`D122624 <https://reviews.llvm.org/D122624>`_)
* Fixed handling of relocatable object files within frameworks.
(`D114841 <https://reviews.llvm.org/D114841>`_)

WebAssembly Improvements
------------------------