2022-07-02 23:22:44 by Frederic Cambus | Files touched by this commit (2) | |
Log message:
mold: update to 1.3.1.
mold 1.3.1 is a maintenance release of the high-speed linker. This release
contains the following minor bug fixes.
Bug fixes and compatibility improvements:
- 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)
|
2022-06-23 16:24:33 by Frederic Cambus | Files touched by this commit (1) |
Log message:
mold: fix the build by reverting to using SYSTEM_TBB=1.
|
2022-06-18 16:23:13 by Frederic Cambus | Files touched by this commit (3) | |
Log message:
mold: update to 1.3.0.
Pkgsrc changes:
- Remove now unneeded pkg-config from USE_TOOLS
- Use <stdlib.h> on systems where <alloca.h> doesn't exist
- Link the bundled (patched) libtbb, as per upstream recommendation
Bug fixes and compatibility improvements:
- The --icf=safe option has been supported. This option enables a feature
to find and deduplicate identical code that can be merged safely. For C++
programs, it typically reduces the output binary size by a few percent.
--icf=safe needs to be used with a compiler that supports .llvm_addrsig
section; if a compiler does not support it, --icf=safe doesn't do any harm
but cannot optimize a given program at all. That section is supported by
LLVM/Clang at the moment, and we are working on adding it to GCC.
- 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).
- mold now prints out undefined symbol errors in a format similar to LLVM lld.
- mold now prints out a better error message for the disk full situation.
- mold can now build GCC 12 with LTO.
- Fixed an LTO issue on 32-bits hosts such as i686.
- mold is now AddressSanitizer and UndefinedSanitizer clean.
- mold used to create broken debug info on 32-bits hosts. The bug has been
fixed.
- 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.
- --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.
Removed features:
- An experimental --preload flag has been removed.
|
2022-05-11 09:02:11 by Frederic Cambus | Files touched by this commit (1) |
Log message:
mold: install phase uses python3 command, provide a symlink.
Thanks to wiz@ once again for the heads up.
|
2022-05-05 23:22:29 by Frederic Cambus | Files touched by this commit (1) |
Log message:
mold: the install target requires Python.
|
2022-05-05 23:11:55 by Frederic Cambus | Files touched by this commit (1) |
Log message:
mold: needs pkg-config.
|
2022-04-29 08:45:45 by Frederic Cambus | Files touched by this commit (2) | |
Log message:
mold: update to 1.2.1.
Bug fixes and compatibility improvements:
- 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)
|
2022-04-15 18:30:37 by Frederic Cambus | Files touched by this commit (2) | |
Log message:
mold: update to 1.2.0.
mold 1.2.0 is a new release of the high-speed linker. The highlight of this
release is the 32-bit ARM support. We also added other features, and as
always, we fixed many bugs and compatibility issues in this release.
New features:
- The ARM32 target is now supported.
- --gdb-index is implemented. If this option is given, mold creates an
.gdb_index section in an output file to speed up GNU debugger. Users have
to compile their object files with -ggnu-pubnames to use this flag. mold
used to ignore --gdb-index. (a7475dd)
- mold now supports the following flags: --start-address, -Tbss, -Tdata,
-Ttext, --oformat=binary, --disable-new-dtags
Deprecated features:
- An experimental, mold-specific --preload flag has been marked as
deprecated. It's still usable, but a warning message will be displayed
if that flag is given.
Bug fixes and compatibility improvements:
- -dy and -dn are now accepted as aliases for -Bdynamic and -Bstatic,
respectively. (82e8072)
- -static-pie now works with older versions of glibc thanks to a few bug
fixes. (3d68824, 0884f27)
- Issues found by UndefinedBehaviorSanizer, AddressSanitizer and
ThreadSanitizer are fixed. (bf26753, f4753b3, e1e4e9f)
- mold used to place sections with very large section alignment
requirements to wrong places in an output file. That caused a mysterious
crash of a produced binary (#405). That bug was most noticeable when
Nvidia-provided object files are given because they tend to contain such
sections. This bug has been fixed. (100922b)
- .ctors and .dtors sections are now recognized by mold, and their contents
are sorted with a special rule. This shouldn't affect most build
environments because these sections have been superseded by .init_array
and .fini_array sections a long time ago. But it looks like some old
i386 compilers are still using .ctors and .dtors. (392781a)
- For a non-position-independent executable, we have to make address-taken
PLT entries as "canonical". Marking all PLT entries canonical should be
harmless in theory, so we did so. However, some programs, notably Qt
library, assume that non-address-taken PLTs can never be canonical
(#352). For the sake of compatibility with such programs, we now make
PLTs canonical only when their addresses are taken. (e0bc74a)
- mold now defines _TLS_MODULE_BASE_ symbol. A reference to this symbol
can occur if -mtls-dialect=gnu2 is given to a compiler. The flag tells
the compiler to use TLSDESC mechanism instead of the regular TLS access
mechanism to access thread-local variables. (5feab82)
- libbacktrace sometimes fail to read compressed debug sections in
mold-generated files due to a bug. We not only fix that libbacktrace's
bug (ianlancetaylor/libbacktrace#87) but also implemented a workaround
to mold (ba63479) so that mold works with older versions of libbacktrace.
- [ARM64] mold now recognizes R_AARCH64_LD_PREL_LO19 relocation. (146ddd7)
- [RISCV64] The correct semantics of R_RISCV_ALIGN is implemented.
(0daf623)
|
2022-03-08 15:04:57 by Frederic Cambus | Files touched by this commit (3) | |
Log message:
mold: update to 1.1.1.
New features:
- The --dependency-file option has been added. The option is analogous to
the compiler's -MM option; it generates a text file containing dependency
information in the Makefile format, so that you can include a generated
file into a Makefile to automate the file dependency management. (a054bcd)
- mold has gained the --reverse-sections option. If the option is given,
mold reverses the list of input sections before assigning them the
addresses in an output file. This option is useful to find a bug in global
initializers (e.g. constructors of global variables.) In C++, the execution
order of global initializers is guaranteed only within a single compilation
unit (they are executed from top to bottom.) If two global initializers
are in different object files, they can be executed in any order. Reversing
the execution order of the global initializers in different input files
should help you identify a bug in your program. If your program does not
work with -Wl,--reverse-sections, your program depends on the undefined
behavior.
- --shuffle-sections now takes an optional seed for the random number
generator in the form of --shuffle-sections=<number>. (8f21cc3)
- mold now supports the following LTO-related options for compatibility
with LLVM lld: --disable-verify, --lto-O, --lto-cs-profile-file,
--lto-cs-profile-generate, --lto-debug-pass-manager, --lto-emit-asm,
--lto-obj-path, --lto-partitions, --lto-pseudo-probe-for-profiling,
--lto-sample-profile, --no-legacy-pass-manager,
--no-lto-legacy-pass-manager, --opt-remarks-filename, --opt-remarks-format,
--opt-remarks-hotness-threshold, --opt-remarks-passes,
--opt-remarks-with_hotness, --save-temps, --thinlto-emit-imports-files,
--thinlto-index-only, --thinlto-index-only, --thinlto-jobs, --thinlto-jobs,
--thinlto-object-suffix-replace, --thinlto-prefix-replace (e413433)
- -noinhibit-exec and --warn-shared-textrel have been supported.
Performance improvements:
- We optimized mold's memory usage by reducing the sizes of
frequently-allocated objects. Compared to mold 1.1, we observed ~6%
reduction of maximum resident set size (RSS) when linking Chromium. Our
maximum RSS is smaller than LLVM lld and GNU gold as far as we tested. We
measured maximum RSSes with time -v. (f2d27d8, 7068c0c, 83e05da, 4dae896)
- If Intel CET-based security-enhanced PLT is enabled (i.e. -z ibtplt is
given), mold used to create a PLT section in which each entry is 32 bytes
long. We optimized the machine code sequence of the CET-enabled PLT
section, so each PLT entry now occupies only 16 bytes, reducing the size
of .plt by almost half. (480efde)
Bug fixes and compatibility improvements:
- -static-pie now works with recent versions of glibc. Previously,
statically-linked position-independent executable would crash on startup
when linked with mold. (3999aa8)
- Previously, mold sometimes created corrupted output file on x86-64 if
an input file containing thread-local variables were compiled with
-mcmodel=large (#360). This issue has been fixed. (4aa4bfa)
- Previously, mold created corrupted debug info section on i386 if an
input debug section is also compressed using the compiler -gz option.
(#361) This issue has been fixed. (3068364)
- mold used to create multiple .init_array sections if input files contain
both writable and non-writable .int_array sections. That caused an issue
that some initializer functions would not be executed on process startup.
(#363). This issue has been fixed. (4198627)
- When building a large program with GCC LTO, mold occasionally failed
with "too many open files" error. This issue has been resolved. (e67f460)
- Previously, mold created a corrupted dynamic relocation table if .got.plt
is missing. This issue has been fixed by always creating
_GLOBAL_OFFSET_TABLE_ symbol in .got on any target. mold used to try to
create the symbol in .got.plt on x86-64 or i386. (eb79859)
|
2022-02-21 12:47:41 by Frederic Cambus | Files touched by this commit (3) | |
Log message:
mold: update to 1.1.
mold 1.1 is a new release of the high-performance linker. It contains
a few new major features and various bug fixes.
New features:
- Native LTO (link-time optimization) support has been added.
mold used to invoke ld.bfd or ld.lld if it encountered a GCC
IR (intermediate representation) file or an LLVM IR file to
delegate the task to the LTO-capable linkers, respectively.
Now, mold handles IR files directly. This feature is implemented
using the linker plugin API which is also used by GNU ld and
GNU gold. Note that the LTO support has been added for completeness
and not for speed. mold is only marginally faster than the
other linkers for LTO builds because not linking but code
optimization dominates. (46995bc)
- RISC-V (RV64) is now supported as both host and target platforms.
mold can link real-world large programs such as mold itself or
LLVM Clang for RISC-V. (e76f7c0)
- The -emit-relocs option is supported. If the option is given,
mold copies relocation sections from input files to an output
file. This feature is used by some post-link binary optimization
or analysis tools such as Facebook's Bolt. (26fe71d)
- mold gained the --shuffle-sections option. If the option is
given, the linker randomly shuffle the order of input sections
before fixing their addresses in the virtual address space.
This feature is useful in some situations. First, it can be
used as a strong form of ASLR (address space layout randomization).
Second, you can enable it when you are benchmarking some other
program to get more reliable benchmark numbers, because even
the same machine code can vary in performance if they are laid
out differently in the virtual address space. You want to make
sure that you got good/bad benchmark numbers not by coincidence
by shuffling input sections. (7e91897)
- The --print-dependencies and --print-dependencies=full options
were added. They print out dependencies between input files in
the CSV format. That is, they print out the information as to
which file depends on which file to use which symbol. We added
this feature with a few use cases in mind. First, you can use
this to analyze why some object file was pulled out from an
archive and got linked to an output file. Second, when you want
to eliminate all dependencies to some library, you can find
all of them very easy with this feature. Note that this is an
experimental feature and may change or removed in feature
releases of mold. (a1287c2)
- The following options are added: --warn-once (f24b997),
--warn-textrel (6ffcae4)
- Runtime dependency to libxxhash has been eliminated. (e5f4b96)
Bug fixes and compatibility improvements:
- A PT_GNU_RELRO segment is now aligned up to the next page
boundary. Previously, mold didn't align it up, and the runtime
loader align it down, so the last partial page would not be
protected by the RELRO mechanism. Now, the entire RELRO segment
is guaranteed to be read-only at runtime. (0a0f9b3)
- The .got.plt section is now protected by RELRO if -z now is
given. This is possible because writes to .got.plt happen only
during process startup if all symbols are resolved on process
startup. (73159e2)
- Previously, mold reported an error if object files created with
old GCC (with -fgnu-unique) are mixed with ones created with
newer GCC or Clang (with -fno-gnu-unique) (#324). Now, mold
accepts such input files. (e65c5d2)
- mold can now be built with musl libc. (42b7eb8)
- mold-generated .symtab section now contains section symbols
and symbols derived from input shared object files. (e4c03c2,
1550b5a)
- mold-generated executables can now run under valgrind. Previously,
valgrind aborted on startup due to an assertion failure because
it didn't expect for an executable to have both .bss and .dynbss
sections. mold generated .dynbss to contain copy-relocated
symbols. The section has been renamed .copyrel to workaround
the valgrind's issue. (0f8bf23)
|