From 9909d0586b8199ddf495118c4e4e3e537b9391a40b3a208bc4ae740c8a58be01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Li=C5=A1ka?= Date: Tue, 17 Dec 2024 17:10:26 +0000 Subject: [PATCH] - Update to version 2.35.1 * mold guarantees that outputs are reproducible, meaning that if you provide the exact same set of input files and command-line options to the same version of mold, the output is assured to be byte-for-byte identical. However, there was a bug where the --icf option caused outputs to be indeterministic, even though all possible outputs were logically correct (#1377). This issue has now been resolved. (2a78b1b) * [RISC-V] Support for obsolete GP-relative relocations has been removed. These relocations were ratified (riscv-non-isa/riscv-elf-psabi-doc@d49e480) but then removed (riscv-non-isa/riscv-elf-psabi-doc@ad02546) from the processor-specific ABI. There are no known real-world use cases for these relocations. (04066d1) OBS-URL: https://build.opensuse.org/package/show/devel:tools:compiler/mold?expand=0&rev=134 --- .gitattributes | 23 + .gitignore | 1 + _constraints | 7 + build-blake-3-as-static.patch | 13 + mold-2.32.1.tar.gz | 3 + mold-2.33.0.tar.gz | 3 + mold-2.34.1.tar.gz | 3 + mold-2.35.0.tar.gz | 3 + mold-2.35.1.tar.gz | 3 + mold.changes | 1000 +++++++++++++++++++++++++++++++++ mold.spec | 114 ++++ 11 files changed, 1173 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 _constraints create mode 100644 build-blake-3-as-static.patch create mode 100644 mold-2.32.1.tar.gz create mode 100644 mold-2.33.0.tar.gz create mode 100644 mold-2.34.1.tar.gz create mode 100644 mold-2.35.0.tar.gz create mode 100644 mold-2.35.1.tar.gz create mode 100644 mold.changes create mode 100644 mold.spec diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/_constraints b/_constraints new file mode 100644 index 0000000..cf31661 --- /dev/null +++ b/_constraints @@ -0,0 +1,7 @@ + + + + 1800 + + + diff --git a/build-blake-3-as-static.patch b/build-blake-3-as-static.patch new file mode 100644 index 0000000..59a0b08 --- /dev/null +++ b/build-blake-3-as-static.patch @@ -0,0 +1,13 @@ +diff --git a/third-party/blake3/c/CMakeLists.txt b/third-party/blake3/c/CMakeLists.txt +index ebcca1db..4c7508aa 100644 +--- a/third-party/blake3/c/CMakeLists.txt ++++ b/third-party/blake3/c/CMakeLists.txt +@@ -111,7 +111,7 @@ endif() + mark_as_advanced(BLAKE3_SIMD_TYPE) + + # library target +-add_library(blake3 ++add_library(blake3 STATIC + blake3.c + blake3_dispatch.c + blake3_portable.c diff --git a/mold-2.32.1.tar.gz b/mold-2.32.1.tar.gz new file mode 100644 index 0000000..6745dd5 --- /dev/null +++ b/mold-2.32.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3c9a527d884c635834fe7d79b3de959b00783bf9446280ea274d996f0335825 +size 10010384 diff --git a/mold-2.33.0.tar.gz b/mold-2.33.0.tar.gz new file mode 100644 index 0000000..f6c237a --- /dev/null +++ b/mold-2.33.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37b3aacbd9b6accf581b92ba1a98ca418672ae330b78fe56ae542c2dcb10a155 +size 10061838 diff --git a/mold-2.34.1.tar.gz b/mold-2.34.1.tar.gz new file mode 100644 index 0000000..09d990c --- /dev/null +++ b/mold-2.34.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8cf638045b4a4b2697d0bcc77fd96eae93d54d57ad3021bf03b0333a727a59d +size 10057683 diff --git a/mold-2.35.0.tar.gz b/mold-2.35.0.tar.gz new file mode 100644 index 0000000..9be989d --- /dev/null +++ b/mold-2.35.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2703f1c88c588523815886478950bcae1ef02190dc4787e0d120a293b1a46e3b +size 10056856 diff --git a/mold-2.35.1.tar.gz b/mold-2.35.1.tar.gz new file mode 100644 index 0000000..0937b5e --- /dev/null +++ b/mold-2.35.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:912b90afe7fde03e53db08d85a62c7b03a57417e54afc72c08e2fa07cab421ff +size 10094602 diff --git a/mold.changes b/mold.changes new file mode 100644 index 0000000..c06411d --- /dev/null +++ b/mold.changes @@ -0,0 +1,1000 @@ +------------------------------------------------------------------- +Tue Dec 17 06:02:19 UTC 2024 - Martin Liška + +- Update to version 2.35.1 + * mold guarantees that outputs are reproducible, meaning that if you provide the + exact same set of input files and command-line options to the same version of + mold, the output is assured to be byte-for-byte identical. However, there was a + bug where the --icf option caused outputs to be indeterministic, even though all + possible outputs were logically correct (#1377). This issue has now been + resolved. (2a78b1b) + * [RISC-V] Support for obsolete GP-relative relocations has been removed. These + relocations were ratified (riscv-non-isa/riscv-elf-psabi-doc@d49e480) but then + removed (riscv-non-isa/riscv-elf-psabi-doc@ad02546) from the processor-specific + ABI. There are no known real-world use cases for these relocations. (04066d1) + +------------------------------------------------------------------- +Sun Dec 8 08:58:41 UTC 2024 - Martin Liška + +- Update to version 2.35.0 + * Big-endian ARM64 is now supported. ARM64 is a bi-endian processor, meaning that + the processor can run in either little- or big-endian mode. Even though + little-endian is the de facto standard, the ARM64 processor-specific ABI defines + its big-endian variant, and the ARM toolchain supports it. Now we support it + too. (882e7eb) + * Big-endian SH4 is now supported. SH4 has become a minor CPU nowadays, and its + big-endian variant is even more so, but some SHARP scientific calculators still + use SH4 processors in big-endian mode. (0cb9fc6) + * mold attempts to overwrite an existing file if a specified output file already + exists because reusing an existing file is much faster than creating a fresh + file and writing to it on Linux. If an existing file is currently running, + open(2) for that file fails with ETXTBSY. When that happens, mold falls back to + creating a new file. The problem here is that Linux kernel version 6.11 changed + that well-known behavior of open(2), and it now allows user programs to + overwrite a running executable. That caused a very mysterious issue for programs + that rebuild themselves during the build, such as gcc or ninja (#1361). Even + though the kernel's change has been reverted (torvalds/linux@3b83203), we need + to make adjustments to mold for that particular version of the Linux kernel. So, + if mold detects that it is running on Linux 6.11, it no longer tries to reuse an + existing output file. (8e4f7b5) + * On rare occasions, mold could fail with a "ConcurrentMap is full" error. Now the + issue has been resolved. (e56b649) + * Even if a user choose not to use mimalloc memory allocator (i.e. built mold with + -DMOLD_USE_MIMALLOC=0), mold was still being built with mimalloc. This issue has + been resolved. (ffd10dd) + * [s390x] s390x uses nonstandard 8-byte entries for the .hash section. Previously, + mold created 4-byte entries for .hash, which caused mold-generated executables + to crash on startup if they were built with -Wl,--hash-style=sysv. Now, mold + generates a psABI-compliant .hash section. (e2e1146) + +------------------------------------------------------------------- +Fri Oct 4 18:37:30 UTC 2024 - Martin Liška + +- Update to version 2.34.1 + * [ARM32] Fixed a regression that R_ARM_TARGET1 wasn't handled as a synonym for + R_ARM_ABS32 relocation. This issue caused some ARM32 programs to crash on + startup if linked with mold. (186272a) + * [RISC-V] mold now sets the STO_RISCV_VARIANT_CC dynamic tag if the ELF module + exports a function symbol with a non-standard calling convention. (16eb513) + +------------------------------------------------------------------- +Wed Sep 25 14:21:13 UTC 2024 - Martin Liška + +- Update to version 2.34.0 + * [ARM32] mold now deduplicates exception handling records in a .ARM.exidx section + to reduce the size of the table. (742ea87) + * [LoongArch] TLSDESC relocations are now supported. (dbaa6d7) + * --build-id=fast is now supported for compatibility with LLVM lld. mold handles + it as a synonym for --build-id=sha256. (afc52ee) + * Previously, if the same symbol was provided both by a static archive and dynamic + library, and if the symbol's visibility was hidden, mold sometimes failed to + link it and handled the symbol as if it were undefined. Now, mold can correctly + link such programs. (1efbe3f) + * Under rare circumstances, mold could create corrupted binaries if they were + linked with --retain-symbols-file. This bug has been fixed. (0ee12e4) + * [LoongArch] R_LARCH_CALL36 relocation with a large offset is now correctly + written. (1c32102) + * [FreeBSD] If all thread-local variables in a program have no initial values, + mold-produced executables could crash or misbehave on FreeBSD. This bug has been + fixed. (f6822fb) + * DEC Alpha support has been removed due to lack of demand. In fact, mold's Alpha + support has never been tested for real-world programs and was likely unable to + link them in the first place. This should not affect anyone because the last + Alpha processor was released more than 20 years ago. (3711ddb) + +------------------------------------------------------------------- +Wed Aug 7 06:37:53 UTC 2024 - Martin Liška + +- Update to version 2.33.0 + * mold gained a new linker flag --separate-debug-info to bundle debug info + sections into a separate file instead of putting them into a main output file. + You can optionally specify a filename in the form of + --separate-debug-info=. By default, a debug info file is created in + the same directory as the main output file with the .dbg extension. mold embeds + the debug file's filename into the main output file so that gdb can + automatically follow the link to find debug info when debugging the main output + file. + + * The main objective of this flag is to speed up the mold linker even more. By + default, mold creates a separate debug file in the background after creating a + main output file, so that you can start running the executable as soon as + possible while mold is still working on linking its debug info sections. For + example, linking clang with debug info normally takes ~1.70s on a Threadripper + 7980X machine, while it takes only ~0.52s with --separate-debug-info. Shaving + off a full second in quick edit-rebuild-run cycles should improve programmers' + productivity. If you do not want mold to work in the background, pass the + --no-detach option. (596ffa9) + + * mold now supports the --no-allow-shlib-undefined flag. If the option is given, + mold checks if all undefined symbols are resolved not only for input object + files but also for shared libraries passed to the linker. To use the feature, + you need to pass all shared libraries, including transitively dependent ones, to + the linker so that the linker can resolve all symbols that are available at + runtime. (3001f02) + + * mold gained the --dynamic-list-data flag for the sake of compatibility with GNU + ld. If the flag is given, all data symbols are exported as dynamic symbols. + (dd8d971) + + * [x86-64] -z x86-64-v2, -z x86-64-v3, -z x86-64-v4 flags are supported. (5606087) + + * [x86-64] Recent x86-64 processors support Intel CET to protect control flow + integrity. When the feature is enabled, the instruction that is executed + immediately after an indirect branch must be endbr64 or a CPU fault will raise. + In other words, it restricts the locations where the control can transfer to + with indirect branches. Doing that makes ROP attacks harder to conduct. + + * A problem with that is the compiler needs to conservatively emit an endbr64 at + the beginning of each global function because the compiler doesn't know whether + or not the function's address is taken in other translation units. As a result, + the resulting binary contains more endbr64s than necessary, weakening the + protection. + + * mold supports the -z rewrite-endbr option to conduct a whole program analysis + and rewrite endbr64 with nop if a function's address is not actually taken + within the program. Previously, mold didn't take section symbols into account + when conducting the analysis, which resulted in culling some endbr64s that must + not be removed. Now, the bug has been fixed. We confirmed that mold can build + itself with -z rewrite-endbr, and the resulting mold executable works fine with + Intel CET. (ed7eec5) + + * mold now creates a .eh_frame section even if it's empty. (14a4b05) + + * [LoongArch] The following relocations are now supported: R_LARCH_TLS_LE_HI20_R, + R_LARCH_TLS_LE_ADD_R, R_LARCH_TLS_LE_LO12_R, R_LARCH_CALL36, R_LARCH_RELAX + (36e5b4b, 98a7cff, 2c6f379) + + * [LoongArch] Some relaxations that reduce the section size are now supported. + (74b359f, 121f917) + + * [LoongArch] Range extension thunk support has been removed in favor of + R_LARCH_CALL36 relocations. (47c092a) + +------------------------------------------------------------------- +Thu Jun 27 06:56:15 UTC 2024 - Martin Liška + +- Update to version 2.32.1 + * Previously, shared libraries specified with --as-needed were not considered as + "needed" if they were referenced only by weak undefined symbols. Such weak + symbols were converted to absolute symbols at address zero at link-time. + Although this behavior was not technically wrong, it caused a significant issue + in a rare occasion (#1286). Now, weak undefined symbols retain --as-needed + shared libraries. (06b5926) + * [RISC-V] RISC-V object files contain ISA strings in the .riscv.attributes + section. Previously, we had reported valid ISA strings containing digits as + errors. The issue has now been resolved. (841a186) + * [RISC-V] We no longer write dynamic relocation addends to relocated places + because it caused static position-independent executables to crash on process + startup in some environments. In other words, --no-apply-dynamic-relocs is + enabled by default. + * LTO now works on MinGW. (50bf031) + +------------------------------------------------------------------- +Sun Jun 9 10:41:50 UTC 2024 - Martin Liška + +- Update to version 2.32.0 + * mold supports a feature called Identical Code Folding, or ICF. As the name + suggests, ICF finds identical functions and merges them to reduce the size of an + output file. This is especially effective for template-heavy C++ programs since + templates tend to be instantiated to the same machine code for different types. + For example, std::vector is likely to be instantiated to the same code as + std::vector. We've made an improvement to our ICF algorithm so that + the --icf feature is ~50% faster than the previous version. (fa8e95a) + * The -z rodynamic option is now supported for compatibility with LLVM lld. With + the option, mold places the .dynamic section into a read-only segment. (9a233df) + * Previously, mold behaved differently compared to other linkers if both -z defs + and --undefined=ignore-in-object-files were given (#1270). Now, they override + each other so that the mold's behavior is compatible with others. (8cd85aa) + * Previously, --dependency-file mistakenly recorded response files as dependencies + (#1258). This bug has been fixed. (4281f45) + * There was a bug that mold corrupted debug info section contents when the + --relocatable option was given (#1265). This issue has been fixed. (08b0a16) + * [PPC64] The R_PPC64_TPREL16_LO_DS relocation type is supported. (a8cd2e8) + * [ARM64, PPC64, LoongArch] mold 2.31.0 or earlier may have failed with an + assertion failure when creating a large output file (#1224). This issue has been + resolved. (c7c8583) + +------------------------------------------------------------------- +Fri May 3 05:46:37 UTC 2024 - Martin Liška + +- Update to version 2.31.0 + * mold is now up to 10% faster when linking very large, debug info-enabled + executables such as Blender (~1.8 GiB) or Clang (~3.8 GiB), thanks to several + improvements we've made to the string merging algorithm. (53ebcd8, d714301, + 40f6b17, c9faf3d) + * -z start-stop-visibility=hidden is now supported so that linker-synthesized + __start_ and __stop_ symbols can be completely + hidden from other ELF modules. Previously, only -z + start-stop-visibility=protected was supported. (99a5b15) + * -Bsymbolic-non-weak and -Bsymbolic-non-weak-functions options are now supported + for compatibility with LLVM lld. Just like lld, these options control which + symbols are exported as dynamic symbols. -Bsymbolic-non-weak makes the linker to + export only weak symbols, whereas -Bsymbolic-non-weak-functions makes it to + export only weak function symbols. (7d17aa8) + * Previously, if a linker script contains a newline character in the beginning + four bytes of a file, it was not recognized as a linker script by mold. Now, + mold allows newlines at the beginning of a file. (ea054cc) + * Under rare circumstances, the INPUT linker script command may have found a + different file than GNU ld would. Now, mold's behavior aligns with GNU ld's. + (163975d) + * Previously, the --repro option produced corrupted tar files. Now the bug has + been fixed. (32c4a09) + * mold generally guarantees that its output is reproducible, meaning that if you + run the linker with the exact same command line options and input files, the + output is guaranteed to be bit-for-bit identical to the previous outputs. + However, under rare circumstances, it might produce different output due to a + bug. It's reported that this nondeterminism caused random crashes for some + programs (#1247). This bug has been fixed. (6463a7c) + * mold no longer sets the address of the .text section as the entry point address + if --entry option is not given, just like LLVM lld. (020b1a7) + * [RISC-V] __global_pointer$ symbol is now exported from executables as required + by the processor-specific ABI. (3df7c8e) + * [ARM32] --long-plt option is now recognized as known option by mold. mold + ignores the option, though, because the PLTs generated by our linker is always + long. (d432e98) + +------------------------------------------------------------------- +Sun Mar 17 05:42:45 UTC 2024 - Martin Liška + +- Update to version 2.30.0 + * We have increased the version number from 2.4.1 to 2.30.0, even though this + release contains only minor bug fixes. This change was made to prevent GNU + libtool from mistaking mold 2.4.1 for GNU ld 2.4.1, which led it to incorrectly + conclude that our linker was an outdated version of the GNU linker. Bumping up + the version number to align with GNU ld may not be the most elegant solution, + but it is a practical approach to resolve the compatibility issue with GNU + libtool. (c7f6a91) + * Previously, mold may have inserted an unnecessary gap before the .bss section in + an output file, thereby creating an extra segment for it. While not technically + incorrect, it was certainly unnecessary. mold 2.30.0 eliminates this unnecessary + on-disk gap for .bss. (c395da1) + * Previously, under rare circumstances, mold might fail with the "ConcurrentMap is + full" error message if --gdb-index was used. This bug has been resolved. + (c60d1d0) + * Previously, mold might generate an excessive number of "ignoring .llvm_addrsig + section without sh_link" warnings. These warnings are now suppressed. (51f871f) + * Sections with unknown section types are now reported as errors. (d21207c) + * [PPC32] A crash bug related to --gc-sections has been fixed. (8eae0a3) + +------------------------------------------------------------------- +Fri Mar 1 16:17:35 UTC 2024 - Martin Liška + +- Align path for document installation between openSUSE versions. + +------------------------------------------------------------------- +Fri Mar 1 14:47:15 UTC 2024 - Martin Liška + +- Update to version 2.4.1 + * mold 2.4.0 or prior may promote weak dynamic symbols to strong ones under a rare + circumstance, which caused "undefined symbol" error at runtime. The bug has been + fixed. (50bdf39) + * Previously, if two or more VERSION clauses in a version script match to the same + symbol, the first one took precedence. This was incompatible with GNU ld, which + gives the last one the highest priority, causing a Qt library link failure. This + compatibility issue has been resolved. (e1e16bf) + * By default, we demangle symbols in error messages so that they are easier to + read. Previously, Rust symbols could accidentally be demangled as C++ symbols. + Now, mold attempts to demangle symbols as Rust ones only for object files + created by rustc. (ea9864b) + * [RISC-V] mold now relaxes a GOT-load instruction sequence into a direct address + materialization if the symbol address is known at link time. This relaxation + eliminates one memory load and slightly improves the linked program's + performance. (2ccaa81) + * [PowerPC64 ELFv2] GCC may emit references to _savegpr0_*, _restgpr0_*, + _savegpr1_* and _restgpr1_* symbols for the -Os command line option to optimize + the output for code size. These symbols are not defined by any object file and + expected to be synthesized by the linker. mold didn't use to synthesize these + symbols, and therefore object files created with -Os sometimes failed due to + missing symbol errors. Now, mold synthesizes these symbols. (d4ff48a) + * [PowerPC64] R_PPC64_DTPREL16_LO_DS relocation type has now been supported. + (6d8e6af) + * [Illumos] On Illumos OS, absolute symbols in DSOs need to be resolved at runtime + because the dynamic linker treats such symbols in a special manner. Previously, + mold directly used absolute symbol addresses at link-time and did not place them + into the dynamic symbol table. That optimization has been removed for + compatibility with Illumos. (bed5b17, 7f8d77d) + +------------------------------------------------------------------- +Thu Nov 30 05:33:24 UTC 2023 - Martin Liška + +- Update to version 2.4.0 + * mold gained the --spare-program-headers= option, which adds a specified + number of spare entries at the end of the program header. The option aims to + make post-processing tools to add program header entries very easily. Note that + sorting program header entries after adding new ones may be necessary to meet + the constraints of the ELF file format. For details, see the elf(5) man page. + (eb6c213) + * mold's -z rewrite-endbr option rewrites superflous endbr64 instructions with nop + as a countermeasure against control-flow highjacking attacks. Previously, this + worked exclusively with object files compiled with -ffunction-sections, + requiring each function to be compiled into a separate section. Starting from + this release, -z rewrite-endbr works on object files compiled without it. In + other words, mold is now capable of rewriting endbr64 instructions even if the + instruction is not at the beginning of a section. (3cb8a52) + * Previously, mold couldn't handle object files containing multiple .eh_frame + sections. The .eh_frame is a section containing data for exception handling. + Usually, an object file contains only one .eh_frame which describes how to + handle exceptions for all text sections in the same file. However, on rare + conditions, it seems ld -r creates an object file containing multiple .eh_frame + sections. mold is now able to handle such object files. (f4c5a8a) + * mold -run is an easy way to run the given command with a virtual + environment in which the ld command is replaced with mold. The feature is + implemented using LD_PRELOAD to hook fork(2)-family functions. Before this + release, some invocations of ld were not intercepted correctly because we missed + the posix_spawnp(2) function. Now, the function is intercepted just like other + fork(2)-family functions. (3fd1cec) + * mold used to produce a non-working executable on a rare occasion when all + thread-local variables lacked an initial value and the read-only data required + alignment equal to or greater than the page size. This bug has been resolved. + (de7d37e) + * Previously, mold might assign a different symbol version to a symbol compared to + GNU ld if it matches both a wildcard pattern and an exact pattern in a version + script. Our behavior is now compatible with that of GNU ld. (0fdbace) + * [x86-64, i686] Recent versions of LLVM emit a machine code sequence for TLSDESC + thread-local variables that differs from GCC's, and mold previously + mis-optimized this sequence, leading to crashes in the linked programs. In other + words, if you are using LLVM/Clang and compile object files with + -mtls-dialect=gnu2, mold might mis-optimize the output file. Now, the bug has + been fixed. (000ce0e) + +------------------------------------------------------------------- +Tue Nov 14 14:57:48 UTC 2023 - Martin Liška + +- Update to version 2.3.3 + * --dynamic-list has different semantics for executables and DSOs. Previously, + mold implemented only the semantics for executables, causing issues with + libraries such as musl that used this option. mold now handles the option for + DSOs correctly. (da3f5dd) + * Old object files often contain .ctors and .dtors sections, which hold function + pointers for initializing and finalizing processes, respectively. Their roles + have been superseded by .init_array and .fini_array on most targets. mold worked + functioned correctly as long as input object files consistently use the old or + the new sections. However, mixing object files that contain both types of + initializers/finalizers resulted in some functions not being executed. This + issue has been fixed. (3f88964) + * --defsym can cause the linker to crash if a given symbol is not defined. The + crash bug has been fixed. (ff3d54d) + * [POWER10] On rare occasions, pointers statically initialized to functions could + be left as null pointers. This bug has been fixed. (31c3b53) +- Remove upstreamed patch power10-fix.patch. + +------------------------------------------------------------------- +Mon Nov 6 18:20:07 UTC 2023 - Martin Liška + +- Add power10 fix power10-fix.patch for #1142. + +------------------------------------------------------------------- +Sun Nov 5 06:53:29 UTC 2023 - Martin Liška + +- Update to version 2.3.2 + * Remove upstream patch fix-arm.patch. + * mold no longer emits dynamic relocations against the text segment for GNU ifunc + symbols. Previously, mold emitted such relocations for position-dependent + executables. (4cdfc7e) + * mold no longer reports the "REL-type relocation table is not supported for this + target" error and instead ignore incompatible relocation tables. LLVM generates + such non-conforming relocation tables for the .llvm.call-graph-profile section. + This change was made for compatibility. (3791900) + * mold now pads unused gaps in the text segment with interrupt or NOP + instructions, instead of leaving them filled with zeros. This alteration does + not change the program's semantics but prevents disassemblers from interpreting + the spaces between functions as valid instructions. (c86a59a) + * mold now creates the .mold-lock file for MOLD_JOBS not in the home directory but + in $XDG_RUNTIME_DIR, which is usually /var/user/. (39cdf61) + * [ARM32] There was an issue preventing mold from being built on an ARMv8 64-bit + ARM processor with an ARM32 userland, such as the 32-bit Raspberry Pi OS running + on a Raspberry Pi 4. This build issue has been resolved. (02ead29) + * [LoongArch] mold can now handle R_LARCH_PCALA_LO12 relocation for the jirl + instruction. (d3188e3) + +------------------------------------------------------------------- +Wed Oct 25 13:02:13 UTC 2023 - Martin Liška + +- Add fix-arm.patch in order to fix failing arm-arm_range-extension-thunk2 test. + +------------------------------------------------------------------- +Fri Oct 20 08:21:20 UTC 2023 - Martin Liška + +- Update to version 2.3.1 + * [ARM32, ARM64, PowerPC, LoongArch] mold 2.3.0 would crash when handling large + output files. This was due to a bug in the code that creates range extension + thunks. This issue has now been resolved. (7be1b66) + * [LoongArch] mold is now capable of handling relocations generated for the + -mcmodel=extreme flag. (4bd80ec) + +------------------------------------------------------------------- +Wed Oct 18 12:34:13 UTC 2023 - Martin Liska + +- Update to version 2.3.0 + * [x86-64] mold 2.3.0 has introduced an experimental flag, -z rewrite-endbr, which + rewrites superfluous endbr64 instructions as nop. + * endbr64 is a relatively recent x86 instruction used to mark locations where an + indirect jump instruction can transfer control. With control-flow integrity + enabled (meaning endbr64 is effective), an indirect jump can only target an + endbr64 or it will trigger a runtime exception. This mechanism significantly + hinders certain control hijacking attacks, such as ROP or JOP, since attackers + cannot jump to just any location. + * When given the -fcf-protection flag, GCC conservatively places an endbr64 at the + beginning of every global function. This is because the function's address might + be taken as a pointer by other translation units. However, in most cases, + function addresses are not actually taken. This conservative approach results in + an overabundance of unnecessary endbr64 instructions, leading to not only code + bloating but also a potential decrease in security as there are more locations + for an attacker to exploit. + * The new linker option, -z rewrite-endbr, aims to alleviate this issue. The + linker can carry out a whole-program analysis on the input files to identify + functions whose addresses are never taken. If -z rewrite-endbr is specified, + mold will conduct this analysis and replace the initial endbr64 with a nop for + functions whose addresses aren't taken. (17f0d85) + * mold now produces a more compact .gdb_index section when using the --gdb-index + flag. Additionally, mold now generates a correct .gdb_index section for object + files created by Clang. (a396fa4) + * mold is now capable of handling input sections larger than 4 GiB. (0ce32d3) + * [PPC] mold can now generate executables for POWER10 processors. Previously, + executables produced by mold would crash immediately on startup on POWER10. + (0f71471) + * [ARM64] When a function with a non-standard calling convention is exported, it's + mandatory for the linker to turn on the STO_AARCH64_VARIANT_PCS flag to notify + the dynamic linker. mold now appropriately sets this flag. (2e3b56e) + * [RISC-V] mold now supports new GP-relative relocations. (ac3ee91) + +------------------------------------------------------------------- +Tue Sep 26 20:11:13 UTC 2023 - Martin Liška + +- Add build-blake-3-as-static.patch that builts BLAKE 3 support as static library + into mold. The library is not provided in openSUSE yet. + +------------------------------------------------------------------- +Sun Sep 24 17:50:53 UTC 2023 - Martin Liška + +- Update to version 2.2.0 + * We now use BLAKE3 as a cryptographic hash function instead of SHA256. This + change has made --build-id a few percent faster. libssl is no longer a build + dependency. (7f7a744) + * mold is now a few percent faster than the previous version due to an + optimization of string merging code path. (1a13c50) + * mold now emits slightly optimized code for thread-local variable accesses. + (f057fda, d56f528) + * [RISC-V] mold now supports TLSDESC relocations. TLSDESC is a new mechanism for + faster thread-local variable access. We (@ishitatsuyuki) actually led the effort + to ratify the specification (riscv-non-isa/riscv-elf-psabi-doc#373) and + implement it to compiler toolchain including GCC, GNU binutils and, of course, + mold. (141556d) + * mold no longer marks an as-needed .so as "needed" if the .so file is not + directly used by the output file. Previously, mold marked a .so file as "needed" + if the .so file was used by another "needed" .so file. (f02db0f) + * [PPC64] --execute-only now works on 64-bit PowerPC. (ac20d87, 51fec5f) +- Remove openssl dependency. + +------------------------------------------------------------------- +Sun Aug 13 19:37:35 UTC 2023 - Martin Liška + +- Update to version 2.1.0 + * Loongson's LoongArch CPU has been supported. (03b1a1c) + * -z nosectionheader has been added to eliminate section headers from the output + file. (084ca55) + * Previously, linking with the -z pack-relative-relocs option produces an + executable that glibc 2.38 refuses to run with DT_RELR without GLIBC_ABI_DT_RELR + dependency error. Now, mold produces binaries compatible with glibc 2.38. + (f467ad1) + * [ARM64] R_AARCH64_ADR_PREL_PG_HI21_NC relocation type has been supported. + (17a5c3e) + * [ARM64] R_AARCH64_MOVW_UABS_G3 relocation type has now been handled as a + PLT-generating relocation to fix an issue when main is not defined in the main + executable but rather in a .so file. (e764557) + * [RISC-V] We now merge input .riscv.attributes contents. Previously, we just + concatenated them. (aa64491) + +------------------------------------------------------------------- +Wed Jul 26 13:07:20 UTC 2023 - Martin Liška + +- Update to version 2.0.0 + * License changed to MIT. + * Previously, mold could not produce an object file with more than 65520 sections + using the --relocatable option. Now the bug has been fixed. (2e8bd0b) + * mold now interprets -undefined as a synonym for --undefined instead of -u + ndefined. This seems inconsistent, as -ufoo is generally treated as -u foo + (which is an alias for --undefined foo), but this is the behavior of the GNU + linkers and LLVM lld, so we prioritize compatibility over consistency. + * -nopie is now handled as a synonym for --no-pie. + * [RISC-V] R_RISCV_SET_ULEB128 and R_RISCV_SUB_ULEB128 relocation types are now + supported (4bffe26, 1ac5fe7) + * [PPC64] R_PPC64_REL32 relocation type is now supported. (ebd780e) + +------------------------------------------------------------------- +Thu Mar 16 09:48:39 UTC 2023 - Martin Liška + +- Update to version 1.11.0 + * IBM Power10 has been supported. Previously, mold created broken executables for + that target. (5065547) + * --hash-style=none has been added to cancel --hash-style=sysv, --hash-style=gnu + or --hash-style=both. (ec75633) + * [ARM32] R_ARM_PLT32 relocation type has been supported. (e505900) + * [RISC-V] R_RISCV_PLT32 relocation type has been supported. (51845ac) + * Previous versions of mold failed to link some programs in rare corner cases if + Link-Time Optimization (LTO) is enabled. These bugs have been fixed. (e1a7590, + 62d6537) + * mold used to ignore dependencies between DSOs. Since this version, if a required + DSO depends on other as-needed DSO, mold keeps the latter DSO as a required one. + This improves compatibility with GNU linkers. (1adde7a) + * [x86-64] mold can now link object files generated by old buggy versions of GCC. + (d2970e0) + * [x86-64] Previously, a program with a very large .bss section may fail to link + due to R_X86_64_REX_GOTPCRELX relocation overflow (#975). This bug has been + fixed. (627bf7c) + +------------------------------------------------------------------- +Sun Jan 22 08:23:35 UTC 2023 - Martin Liška + +- Update to version 1.10.1 + * mold 1.10.0 had a buffer overrun bug that causes the linker to terminate + immediately if compiled with -D_GLIBCXX_ASSERTIONS. We fixed the unsafe memory + access in this release. (7e65546) + +------------------------------------------------------------------- +Fri Jan 20 12:19:11 UTC 2023 - Martin Liška + +- Update to version 1.10.0 + * mold now officially supports the --print-dependencies option to print out + dependency information between input files. Here is a truncated example output + when linking mold itself with the option. There are many use cases of the + option; for example, if you want to eliminate the dependency to some library + from your program, you can use this option to find out all the functions that + use the library's function to fix them. (6fd47db) + * [x86-64][s390x] mold now optimizes thread-local variable accesses in shared + libraries if the library is linked with -z nodlopen. If your shared library is + not intended to be used via dlopen(2) and your library frequently accesses + thread-local variables, you might want to pass that option when linking your + library. (25d02bb, f32ce33) + * [arm64] mold is now able to optimize GOT load by rewriting an ADDR+LDR + instruction pair with an ADDR+ADD if the loaded GOT value is known at link-time. + (f2311b1) + * mold 1.9.0 was up to 10% slower than 1.8.0 on some multicore machines. We fixed + the performance regression and made it even faster than 1.8.0. (7132822) + * Previously, mold failed to report an undefined symbol error if there's a weak + undefined symbol of the same name. That bug resulted in producing a non-working + executable instead of reporting a link failure. Now, mold correctly reports such + link errors. (8936194) + * mold 1.9.0 might crash with SIGSEGV if --emit-relocs is used with object files + containing debug info. That bug has been fixed. (e17d7da) + +------------------------------------------------------------------- +Fri Jan 6 11:38:43 UTC 2023 - John Paul Adrian Glaubitz + +- Enable build on ppc now that the target is supported upstream + +------------------------------------------------------------------- +Fri Jan 6 09:38:06 UTC 2023 - Martin Liška + +- Update to version 1.9.0 + * mold gained support for the three new targets: 32-bit PowerPC, SH-4 and DEC + Alpha. Each porting work didn't take more than a few days for us to complete, + which demonstrate how portable the mold linker is. You can typically port mold + to a new target just by writing a few hundreds lines of target-specific code. + See arch-*.cc files in mold/elf/ directory to see how target-specific code + actually looks like. (651adad, 3411e17, 6231510) + * Bug fixes and compatibility improvements + * In a rare occasion, a statically-initialized function pointer might get a wrong + address in a statically-linked executable. This bug has been fixed. (ccd47db) + * Fixed a -gdb-index option's crash bug on big-endian hosts. (3c96828) + * [RISC-V] mold rewrote machine instructions in a wrong way as a result of a wrong + R_RISCV_HI20 relaxation if the output file was being linked against the high + address. It's not a problem for user-land programs, but kernels linked with mold + could crash due to this bug. This bug has been fixed. (3c96828) + +------------------------------------------------------------------- +Tue Dec 27 09:47:12 UTC 2022 - Martin Liška + +- Update to version 1.8.0 + * The --relocatable (or -r) option has been reimplemented to improve its + performance and compatibility with the GNU linkers. That option tells the linker + to combine input object files into another object file instead of into an + executable or a shared library file. mold has been supporting the feature since + version 0.9, but until now the output file created with -r looked fairly + different from what GNU linkers would produce. GHC (Glasgow Haskell Compiler) in + particular uses re-linkable object files as dynamic libraries instead of real + .so files, and it didn't work with mold. Now, mold can produce object files that + GHC can load. Note that this work was funded by Mercury, so thanks to the + company to help us improve the product. (Yes, you can ask us to prioritize your + feature request by funding the project.) (c9a7ae7) + * --relocatable-merge-sections option has been added. By default, mold keeps + original input section names for the --relocatable output and therefore does not + merge input sections into a single output sections unless they are of the same + name. If --relocatable-merge-sections is given, mold merges input by the usual + default merging rule. For example, .text.foo and .text.bar are merged to .text + if and only if --relocatable-merge-sections is given for the --relocatable + output. (c2a0ae1) + * -z [no]dynamic-undefined-weak options have been added. This option controls + whether an undefined weak symbol is promoted to a dynamic symbol or not. + (ed235f3) + * --[no-]undefined-version options have been supported. Now, mold warns on a + symbol name in a version script if it does not match with any defined symbol. + This change was made so that it is easy to find a typo in a version script. + (e2d7353) + * mold now warns on symbol type mismatch. If two object files have the same symbol + with different symbol types, it usually means your program has a bug. Chances + are, you are using the same identifier as a function name in one translation + unit and as a global variable name in another. So it makes sense to warn on the + mismatch. (b70211e) + * mold now merges .gnu.note.property sections for various x86 properties. + (d30d743) + * The experimental macOS/iOS support has been removed from mold. If you want to + use it, please use our sold linker instead. + * --wrap now works with LTO. (07d8911) + * A global variable initialized with an IFUNC function pointer is now initialized + correctly with the function's address. Previously, it was mistakenly initialized + to the function resolver's address. (b2858d2) + * The filename specified by --version-script or --dynamic-list is now searched + from library search paths if it does not exist in the current working directory. + This behavior is compatible with GNU linkers. (3c1a055, 8c87f16) + * mold now tries to avoid creating copy relocations as much as possible. This + change fixed a compatibility issue with GHC. (5866c9e) + * Thread-local variables are now correctly aligned even if there's a TLV with a + large alignment. (bd46edf) + * mold can now handle GCC LTO files created with -ffat-lto-objects. (804b843) + * mold now accepts -z nopack-relative-relocs as an alias for + --pack-dyn-relocs=none for the sake of compatibility with GNU linkers. (b510588) + * mold now recognizes -z start-stop-visibility=hidden but ignores it because it's + the default for mold. GNU linkers support this option to control the visibility + of linker-synthesized __start_ and __stop_ symbols, with + global as the default visibility. mold creates these symbols with the hidden + visibility by default, which is desirable for almost all cases. (22c9ec8) + * [ARM32, i386] mold now emits REL-type relocations instead of RELA-type for the + --relocatable output file. (8b373d3) + +------------------------------------------------------------------- +Fri Nov 18 14:08:15 UTC 2022 - Martin Liška + +- Update to version 1.7.1 + * mold 1.7.0 may generate the same build-id for two different output files. We + fixed the issue in 1.7.1 so that build-id is guaranteed to be unique for each + different output file. (d8dd124) + +------------------------------------------------------------------- +Mon Nov 14 11:12:19 UTC 2022 - Martin Liška + +- Update to version 1.7.0 + * [m68k] mold now supports the Motorola 68000 series microprocessors. Yes, it's + the processor in the original Mac or Sun workstations in the 80s. This work is + sponsored by m68k hobbyist communities. + * We fixed a few issues for Facebook/Meta's BOLT optimizer (#789). Starting from + the next LLVM release (we need llvm/llvm-project@20204db), BOLT should work on + mold-generated executables out of the box. + * We fixed a long-standing symbol resolution issue involving GNU UNIQUE symbols + which caused a link failure for a few programs. (730e970) + * Previously, if a version script contains a "C++" directive, and a symbol matches + a non-C++ version pattern and a C++ version pattern, a wrong version could be + assigned to the symbol. This has been fixed so that the mold's behavior matches + with GNU ld. (9875150) + +------------------------------------------------------------------- +Wed Oct 19 08:20:22 UTC 2022 - Martin Liška + +- Update to version 1.6.0 + * [ppc64] mold now supports the original 64-bit big-endian PowerPC ABI (which is + also known as PPC64 ELFv1 or just ppc64), so that you can build applications for + older PPC64 systems with mold. Note that this should not be confused with the + modern PPC64 ELFv2 ABI (which is also known as ppc64le), which is already + supported by mold. + * [s390x] Linux/s390x is now supported. Linux/s390x is the Linux environment + running on IBM z/Architecture mainframes. I've personally never seen a + mainframe, but we wanted to support it because many Linux distros actively + support that target, which in turn means there are many enterprise users who are + using IBM mainframes. Speaking of the porting effort, we do not only port our + linker to s390x but also found a couple of issues with the existing GCC + toolchain for s390x. So, we are improving the whole IBM mainframe ecosystem! + * mold now creates smaller output files. It is most noticeable on targets with + large page sizes such as PPC64 (on which the common page size is 64 KiB), but + even on x86-64, it should save a few kilobytes per an output file. + * [arm64] mold can now link executables with -static-pie. Previously, executables + linked with that flag crashed immediately. +- Exclude ppc architecture as it is not supported right now. + +------------------------------------------------------------------- +Thu Sep 29 07:06:19 UTC 2022 - Martin Liška + +- Update to version 1.5.1 + * We changed the memory layout to save both memory and disk space in 1.5.0. Even + though the new layout works fine on most systems, the change made the linker to + create unusable executables for systems with large pages. Specifically, if you + specify a large number for the -z max-page-size option, the loader refused to + execute it with the error while loading shared libraries: cannot apply + additional memory protection after relocation: Cannot allocate memory error. We + reverted our recent commits so that mold creates output files with the same + memory layout as it did before 1.5.0. (e62de0b) + +------------------------------------------------------------------- +Tue Sep 27 07:10:17 UTC 2022 - Martin Liška + +- Update to version 1.5.0 + * PPC64LE and SPARC64 are now supported as new targets. They haven't yet been as + well tested as other targets, but they are already able to link mold itself on + these platforms. (Note that PPC64LE is very unlikely to work on the most recent + POWER10 machines as we didn't have a chance to test it due to a limited + availability (POWER10 was released in 2021). If you can support us on this + matter, please contact us. We also accept donations, so please consider + supporting our project!) + * RV32BE and RV64BE (32-bit and 64-bit big-endian RISC-V) are now supported as + experimental targets. RISC-V is usually little-endian, but there exists a + big-endian RISC-V as an extension. You can make gcc to emit code for big-endian + RISC-V by passing -mbig-endian. mold can now link object files generated with + that option. + * --compress-debug-sections=zstd is now supported. This is an option to compress + debug info embedded to an output file with Zstandard compression algorithm. + Compared to the existing --compress-debug-sections=zlib, zstd is faster and + gives a higher compression ratio. You probably can't start using zstd + compression today though, because other tools such as gdb may not be able to + read zstd-compressed debug info yet. But adding this option early makes mold + future-proof. (ede7a5a) + * mold no longer aligns loadable segments to page boundaries to reduce output file + size. Previously, we allocated holes between loadable segments. The saving by + this change is most visible for small programs. For example, a "hello world" + program used to be ~18 KiB on x86-64. It's now 7.2 KiB. (2941d75) + * Bug fixes and compatibility improvements + * [RISCV] We optimized code so that the link speed for RISC-V is now comparable to + the other targets. As an example, linking mold itself (~150 MiB in size) for + RV64 used to take ~45 seconds on a simulated 16-core machine. It now takes only + ~0.25 seconds. (3ab5489) + * mold used to create more than one .rodata section under a certain condition. + It's not technically wrong but confused Valgrind. This issue has been resolved. + (25c7aee) + * [ARM32] Previously, mold failed to promote remaining undefined symbols to + dynamic symbols if symbols are undefined weak. That caused a link failure for + libxml (#660). This issue has been resolved. (72e26d9) + * mold didn't copy symbol types when creating symbol aliases for the --defsym + option. (8c7f31c) + * --compress-debug-sections=zlib-gnu has been removed. LLVM lld removed that + option too as there seems to be no usage of the flag. +- Enable ppc64le and use system zstd library as package dependency. + +------------------------------------------------------------------- +Sun Sep 4 06:29:52 UTC 2022 - Martin Liška + +- Update to version 1.4.2 + * [RV32] We've fixed several issues for 32-bit RISC-V. + mold can now build complex programs including itself for the target. + * [ARM32] mold gained range extension thunks so that it can now link programs whose + .text is larger than 16 MiB. Previously, mold couldn't link such large programs. + We've also fixed general stability issues for ARM32. + +------------------------------------------------------------------- +Thu Aug 18 09:28:25 UTC 2022 - Martin Liška + +- Update to version 1.4.1 + * mold/macOS is now available as an alpha feature. We do not recommend using it for anything + serious though. Starting from this version, we accept not only mold/Unix issues but also + mold/macOS ones on our GitHub Issues. Feel free to file a bug if you encounter any problem. + * We started supporting CMake in addition to Make to build mold. Our long-term plan is to migrate + from Make to CMake because we want to support Windows eventually and CMake provides + a better Windows support than Make does. (e6a0e67) + * There was a bug that mold accidentally exported a hidden symbol from an executable + if a shared library linked to that executable happened to define the same symbol. + This caused a build issue with Blender (#606). The bug has been fixed. (b163068) + --hash-style=both is now the default if no --hash-style option is given. Previously, + --hash-style=sysv was the default. This change shouldn't affect most users because + the compiler driver (cc, gcc, clang, etc.) always passes --hash-style to the linker. + We made this change because GNU ld defaults to --hash-style=both. + * Alias symbols defined by the --defsym option now have the same scope as the aliased symbols. + Previously, alias symbols defined by --defsym were always hidden and never + be exported as dynamic symbols. (5dd1227) + * mold now accepts foo = bar-style linker script directive to define symbol aliases. + Previously, such statement was treated as a syntax error. + This change was made to link mariadb-connector-c correctly (f0e1237) + * Symbols in mergeable string sections now have correct output section + indices instead of SHN_UNDEF. (a595c48) + * [ARM32] Previously, calling a function from ARM code to Thumb code + caused a program crash due to bug #442. This issue has been fixed. (053b90b) +- Run tests in parallel. + +------------------------------------------------------------------- +Fri Aug 5 16:54:51 UTC 2022 - Martin Liška + +- Update to version 1.4.0 + * Initial support for the 32-bit RISC-V (RV32) has landed. (d9db6bc) + * mold now demangles Rust symbols in error messages thanks to @eddyb's rust-demangle.c. (22e1bba) + * --export-dynamic-symbol and --export-dynamic-symbol-list are now supported for + the sake of compatibility with LLVM lld. With these options, you can specify + symbols that should be exported using glob pattern. (e115aae) + * [x86-64] PLT entries created by mold now always begins with ENDBR64 instruction + to improve compatibility with Intel IBT (Indirect Branch Tracking.) (e3e371d) + * mold now defines __dso_handle symbol. The lack of this linker-synthesized symbol + caused a link error with GCC in some environments (#507). (764d757) +- Remove fix-tests.patch. + +------------------------------------------------------------------- +Mon Aug 1 05:35:29 UTC 2022 - Martin Liška + +- Add fix-tests.patch which fixes tests on i586. + +------------------------------------------------------------------- +Fri Jul 1 09:13:58 UTC 2022 - Martin Liška + +- Update to version 1.3.1 + * mold now supports .preinit_array sections. Without this, + AddressSanitizer didn't work in some environments. (3b75398) + * [ARM32] R_ARM_MOVT_PREL and R_ARM_PREL31 relocations are now handled + correctly so that mold no longer emit spurious "recompile with -fPIC" errors. (5294300) + +------------------------------------------------------------------- +Sat Jun 18 07:10:09 UTC 2022 - Martin Liška + +- Update to version 1.3.0 + * The --icf=safe option has been supported. + * LTO now works reliably under a heavy load. + mold used to abort occasionally under such condition on Linux + due to a spurious failure of pthread_create(2). (d8a8877) + * mold now prints out undefined symbol errors in a format similar to LLVM lld. (13816a1) + * mold now prints out a better error message for the disk full situation. (5969260) + * mold can now build GCC 12 with LTO. (708ad63) + * Fixed an LTO issue on 32-bits hosts such as i686. (920266b) + * mold is now AddressSanitizer and UndefinedSanitizer clean. (fafb75b, 3499ee6) + * mold used to create broken debug info on 32-bits hosts (#490). + The bug has been fixed. (0abd0a4) + * mold used to accept not only a single dash but also double + dashes for single-letter options. For example, --S was accidentally accepted as an alias for-S. + This is unconventional, and such options are no longer accepted. (232dafa) + * --color-diagnostics is now an alias for --color-diagnostics=auto + instead of --color-diagnostics=always for compatibility with LLVM lld. + * pkg-config is no longer needed to build mold. + * The --package-metadata option is supported. (#505, e9f6715) + +------------------------------------------------------------------- +Fri May 13 09:31:25 UTC 2022 - Martin Liška + +- Use better CC and TEST_CC variables. + +------------------------------------------------------------------- +Fri May 13 09:21:22 UTC 2022 - Martin Liška + +- Add memory per job constraint. + +------------------------------------------------------------------- +Tue May 10 12:30:07 UTC 2022 - Martin Liška + +- Do not use mimalloc, use system glibc allocator. + +------------------------------------------------------------------- +Thu May 5 11:17:01 UTC 2022 - Martin Liška + +- Add valgrind as BuildRequire argument. + +------------------------------------------------------------------- +Thu Apr 28 12:49:30 UTC 2022 - Martin Liška + +- Update to version 1.2.1 + * Various bugs in --gdb-index have been fixed. + * mold now recognizes --thinlto-cache-dir and --thinlto-cache-policy + for the sake of compatibility with LLVM lld. (7ebd071) + * mold can now handle TLS common symbols. It looks like GCC + sometimes creates such symbol for a thread-local variable. (cf850f8) + * In some edge cases, mold created a non-versioned symbol and + a versioned one for the same symbol, even though if one symbol is versioned, + all symbols of the same name must be versioned. + This bug has been fixed. (8298c0a) + * mold used to write a PLT address of a symbol instead + of its address to .symtab. This bug has been fixed. (e088db7) + * mold can now handle an input file + with more than 219 symbols. (f1f2d40) + * /usr/local/libexec/mold/ld is now installed + as a relative symlink instead of an absolute symlink. (5803c3c) +- Removed upstreamed fix-gdb-index.patch patch. + +------------------------------------------------------------------- +Wed Apr 20 06:50:40 UTC 2022 - Martin Liška + +- Run test serially. +- Install some packages in order to increase test coverage. +- Use ExclusiveArch. + +------------------------------------------------------------------- +Tue Apr 19 06:43:50 UTC 2022 - Martin Liška + +- Add fix-gdb-index.patch. +- Enable tests. + +------------------------------------------------------------------- +Fri Apr 15 11:53:51 UTC 2022 - Martin Liška + +- Update to version 1.2.0 + * The ARM32 target is now supported. + * --gdb-index is implemented. + * mold now supports the following flags: --start-address, -Tbss, + -Tdata, -Ttext, --oformat=binary, --disable-new-dtags + +------------------------------------------------------------------- +Fri Apr 8 15:40:19 UTC 2022 - Callum Farmer + +- Set LIBEXECDIR +- Disable default stripping + +------------------------------------------------------------------- +Tue Mar 8 12:07:34 UTC 2022 - Martin Liška + +- Respect %{optflags}. + +------------------------------------------------------------------- +Tue Mar 8 09:58:13 UTC 2022 - Martin Liška + +- Update to version 1.1.1 + * Native LTO (Link-Time Optimization) support + * RISC-V CPU architecture support + * Optimize memory usage by reducing the sizes of + frequently-allocated objects; roughly 6% redux in the maximum + RSS. + +------------------------------------------------------------------- +Wed Feb 23 23:29:01 UTC 2022 - Christoph G + +- Fix building for openSUSE Leap 15.3 and 15.4. + +------------------------------------------------------------------- +Mon Feb 21 07:51:37 UTC 2022 - Martin Liška + +- Update to version 1.1: + https://github.com/rui314/mold/releases/tag/v1.1. + +------------------------------------------------------------------- +Mon Jan 31 10:24:17 UTC 2022 - Martin Liška + +- Start using system library mimalloc. + +------------------------------------------------------------------- +Sun Jan 30 15:53:00 UTC 2022 - Martin Liška + +- Update to version 1.0.3: + https://github.com/rui314/mold/releases/tag/v1.0.3. + +------------------------------------------------------------------- +Sun Jan 23 09:44:13 UTC 2022 - Martin Liška + +- Update to version 1.0.2: complete release notes can be found here: + https://github.com/rui314/mold/releases/tag/v1.0.2. + +------------------------------------------------------------------- +Mon Jan 3 08:33:39 UTC 2022 - Martin Liška + +- Start using %{_libexecdir} as an installation location. + +------------------------------------------------------------------- +Sat Jan 1 22:23:26 UTC 2022 - Christoph G + +- Remove quotationsmarks from build_args as it prevented the use + of system packages for TBB and xxHash. +- Drop configure-fix.patch as xxHash is used from system package, + so we don't need to patch the wrong configuration of xxHash. +- Use telling name of source tarball, adjust GitHub url to have + matching names. + +------------------------------------------------------------------- +Sat Jan 1 21:37:43 UTC 2022 - Martin Liška + +- Update to version 1.0.1: + * make install now creates /usr/local/libexec/mold/ld as + a symlink to the mold executable. We do this for GCC. + By passing -B/usr/local/libexec/mold, you can tell GCC to use ld + inside that directory instead of /usr/bin/ld. (e8dcecf) + * xxHash library is now included in the mold's source tree as a subtree for ease of building. + If you want to link against a libxxhash in a system library directory, pass SYSTEM_XXHASH=1 to make. (665bffa) + * The extern "C++" directive is now supported in the dynamic list. (7aa5c39) + * --color-diagnostics is supported. mold used to ignore that flag. (6e290aa) + * Not only * but also ? are now treated as special characters in the version script wildcard pattern. (31b0248) + * The --threads=N option has been added as + an alias for --thread-count=N. (f9ff048) + * The following option has been added: --defsym (f6e8006), -z nodefaultlib (8c86c28), + -z separate-code, -z noseparate-code and -z separate-lodable-segments (5601cf4), -z max-page-size (f3766cd) +- Add workaround patch configure-fix.patch. + +------------------------------------------------------------------- +Tue Dec 21 17:04:56 UTC 2021 - Martin Liška + +- Ignore -Wno-sign-compare for now. + +------------------------------------------------------------------- +Tue Dec 21 16:35:38 UTC 2021 - Martin Liška + +- Use system package for tbb and xxhash. + +------------------------------------------------------------------- +Tue Dec 21 15:03:07 UTC 2021 - Mark Nefedov + +- Start with version 1.0.0. diff --git a/mold.spec b/mold.spec new file mode 100644 index 0000000..44ab952 --- /dev/null +++ b/mold.spec @@ -0,0 +1,114 @@ +# +# spec file for package mold +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +Name: mold +Version: 2.35.1 +Release: 0 +Summary: A Modern Linker (mold) +License: MIT +Group: Development/Tools/Building +URL: https://github.com/rui314/mold +Source: https://github.com/rui314/mold/archive/v%{version}/mold-%{version}.tar.gz +Patch0: build-blake-3-as-static.patch +BuildRequires: cmake +%if %{suse_version} < 1550 +BuildRequires: gcc11-c++ +%else +# These libraries are not present for openSUSE Leap +BuildRequires: gcc-c++ +BuildRequires: clang +BuildRequires: libdwarf-tools +BuildRequires: llvm +BuildRequires: llvm-gold +BuildRequires: tbb-devel +%ifarch x86_64 +BuildRequires: gcc-32bit +%endif +%endif +BuildRequires: gdb +BuildRequires: glibc-devel-static +BuildRequires: libzstd-devel +%ifnarch ppc64 +BuildRequires: valgrind +%endif +BuildRequires: zlib-devel +BuildRequires: zstd +PreReq: update-alternatives + +%if %{suse_version} < 1600 +%define build_args -DMOLD_USE_MIMALLOC=OFF -DMOLD_USE_MIMALLOC=OFF -DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/%{name} +%else +%define build_args -DMOLD_USE_MIMALLOC=OFF -DMOLD_USE_MIMALLOC=OFF -DMOLD_USE_SYSTEM_TBB=ON +%endif + +%description +mold is a faster drop-in replacement for existing Unix linkers. +It is several times faster than LLVM lld linker, the second-fastest +open-source linker. +mold is created for increasing developer productivity by reducing +build time especially in rapid debug-edit-rebuild cycles. + +%prep +%autosetup -p1 + +%build +%if %{suse_version} < 1550 +export CC=gcc-11 +export CXX=g++-11 +%endif +%cmake %{build_args} +%cmake_build + +%install +%cmake_install + +%check +%if %{suse_version} < 1550 +export TEST_CC=gcc-11 +export TEST_CXX=g++-11 +%endif +%ctest + +%post +"%_sbindir/update-alternatives" --install \ + "%_bindir/ld" ld "%_bindir/ld.mold" 1 + +%pre +if [ "$1" -gt 0 ] && [ -f %{_sbindir}/update-alternatives ] ; then + "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.mold"; +fi; + +%postun +if [ ! -f %{_bindir}/lld ] ; then + "%{_sbindir}/update-alternatives" --remove ld "%{_bindir}/ld.mold" +fi + +%files +%ghost %_sysconfdir/alternatives/ld +%{_bindir}/mold +%{_bindir}/ld.mold +%dir %{_libdir}/mold +%{_libexecdir}/mold/ld +%dir %{_libexecdir}/mold +%{_libdir}/mold/mold-wrapper.so +%{_mandir}/man1/mold.1.gz +%{_mandir}/man1/ld.mold.1.gz +%dir %{_docdir}/mold +%doc %{_docdir}/mold/LICENSE + +%changelog