All notable behavior changes in this repository are documented in this file.
The format is based on Keep a Changelog, adapted to weekly buckets instead of release tags.
- December 2025
- November 2025
- October 2025
- September 2025
- August 2025
- July 2025
- June 2025
- May 2025
- April 2025
- March 2025
release/22.x(released 2026-03-14)
- added
-z separate-loadable-segments, fixed PIE handling for absolute--defsym, and improved AArch64 static TLS/IFunc support. - added linker script
INSERT BEFORE/AFTERandNEXT_SECTION, added--start-lib/--end-lib, and expanded LTO reporting options. - expanded LTO CLI compatibility (
--thinlto-jobs,--lto-partitions,--lto-obj-path) and improved layout convergence behavior.
- major x86_64 dynamic-linking improvements (PLT/GOT/.rela.plt, TLSGD/TLSLD, IRELATIVE/ifunc), plus initial shared-library symbol versioning support.
- substantial linker-script and diagnostics hardening, plus RISC-V
TLSDESCandDriverFlavorsupport. - foundational feature ramp-up across emulations, plugin APIs, x86_64 static relocations, and linker-script expression handling.
- Add
InputTarReaderand pluginTarFileAPI for tar lookup. - Support
--reproduce=defaultand--reproduce-on-fail=default.
- Apply ULEB128 fix for clang kernel test failures.
- Align start of tdata
- Support -z separate-loadable-segments
- [hexagon] Add linux emulation
- Separate ctors/dtors and init_array/fini_array sections
- Resolve --defsym absolute symbols at link time in PIE links
- Improve IFunc support for AArch64 static executables
- [build] Add external llvm support
- [AArch64] Static TLS support
- [LTO] Add --plugin-opt=stats-file= option
- [LTO] Add optimization remarks options
- Add support for parsing SORT(CONSTRUCTORS)
- [LTO] Move existing LTO option to the LTO group
- Fix _eh_frame* symbols
- [LinkerScript] fix sort constructors
- [aarch64] Fix TLS IE/GD support
- [RISC-V] Add -no-relax-tlsdesc
- Add support for NEXT_SECTION
- Add --record-command-line extended linker option
- Fix address of
_GLOBAL_OFFSET_TABLE_
- [LinkerScript] Add support for INSERT AFTER/BEFORE
- Add --start-lib/--end-lib command line option
- [AArch64] Add support for R_AARCH64_LD64_GOTPAGE_LO15
- Fix incorrect NEEDED entry due to unneeded shared lib reference
- Correct sysroot-prepend conditions for script inputs
- Fix __tbss_offset calculation
- Add padding in TLS section for alignment
- [AArch64] Add support for pointer authentication relocations
- Add Initializing state to getAllOutputSections link state check
- Read merge string sections in parallel
- UndefinedBehaviorSanitizer: signed integer overflow issue runtime error: signed integer overflow: 2147483628 + 2048 cannot be represented in type 'int' fix
- Fix resolving script inputs path when sysroot is specified
- [LinkerScript] Fix >RAM AT>RAM placement after RAM AT>ROM
- Remove ENABLE_ELD_PLUGIN_SUPPORT and related conditionals
- Add support for print cmd
- Add changes required for H2+Picolibc
- Add new linker script for H2+Picolibc
- Reiterate layout step until section addresses converge
- Improve help for previously added LTO options
- Default to Linux Emulation on RISC-V
- Fix crash when AArch64 objects contain unsupported relocations.
- disable ASSERT macro in non-debug builds
- Fix crash when image refer to certain kind of symbols
- Fix
FDEFragment::classoffunction
- Add --lto-obj-path option and its alias
- Handle NOLOAD/TBSS/PROGBITS sections
- Fix ELDExpected windows failure
- Add --plugin-opt=save-temps alias for --save-temps
- Add --thinlto-jobs= option and its alias --plugin-opt=jobs=
- Add lto-partitions= and --plugin-opt=lto-partitions= options
- Support
-z separate-code/-z noseparate-code
- Update lib/Readers/ELFSection.cpp
- [RISCV] Use Vendor Reloc Names
- Fix re-evaluation of DEFINED expression
- Add
-disable-verifyand its plugin-opt alias - Add
--lto-cs-profile-generateand--lto-cs-profile-file=options
- Fix parsing of
"archive:mem"input section description pattern
- Fix build failure error undeclared CHERIOT1VendorRelocationOffset
- Add
-debug-pass-manageroption for LTO (#662)
- Add initial support for creating shared library with symbol versioning
- Add eld tablegen targets to LLVM_COMMON_DEPENDS
- [ELFSection] Use sentinel value instead of optional
- [ArchiveFile] Store symbols by value and avoid storing strings.
- [ELFSection] Move DependentSections to side table
- Relax static assert in
ELFSection.h
- [ELD][x86-64] Implement IRELATIVE relocations for ifunc support
- [x86_64] Add support for R_X86_64_TLSLD relocation
- [x86_64] Add support for R_X86_64_TLSGD relocation
- Evaluate output section end symbol assignments in partial link
- Move PAddr from ELFSection to OutputSectionEntry
- [x86-64] Copy relocations for absolutely referenced data symbols
- Fix which function to handle spaces in executable paths on Windows
- [ELFSection] Remove unnecessary Annotations member.
- Add release artifact builder
- [x86_64] Add R_X86_64_64 dynamic linking handling
- [Relocator] Emit valid ranges in overflow diags (#599)
- Fix crash due to missing thin archive member
- Fix invalid 'Referenced Chunk ... deleted' error when printing map-file
- Add primitive support for plugin activity log file functionality
- Support signed 64 bit values in diagnostics.
- Add guide that describes linker support for backwards compatibility
- const GeneralOptions
- Report unbalanced chunk diag even if plugin fails in CreatingSections
- Fix FileCheck pattern for AbsoluteSymbolRelocation
- Fix YAML package dependecy and search path related windows failures
- x86_64: Implement data call support for dynamic linking
- Fix symbol resolution of EXTERN command symbols
- Fix crash on printing change out sect plugin op with invalid out sect
- x86_64: Implement R_X86_64_PLT32 handling for dynamic linking scenarios
- x86_64: Add .rela.plt section creation for dynamic linking
- x86_64: Implement GOTPLTN initialization
- x86_64: Fix PLTN stub instructions
- Fix classof usage for InputAction subclasses
- [Hexagon] V91 support
- Update symbols with retain attribute
- improve memory usage diagnostics
- [RISCV] Fix JAL overflow check
- Add Memory and RegionAlias commands in eld::plugin::Script
- x86_64: Enable creation of .dynamic section
- Add support for --push-state / --pop-state functionality
- Eval AFTER_SECTIONS assignments after assignments within SECTIONS cmd
- Re-evaluate OUTSIDE_SECTIONS assignments whenever layout resets
- Divide OUTSIDE_SECTIONS into BEFORE_SECTIONS and AFTER_SECTIONS
- x86_64: Fix PLT0 stub instructions to reference GOTPLT[1] and GOTPLT[2]
- x86_64: Fix GOTPLT0 to populate .dynamic address correctly
- x86_64: Add support for R_X86_64_DTPOFF32 and R_X86_64_DTPOFF32 relocations
- Add missing cstdint includes
- Fix NOCROSSREFS feature to work when there is no SECTIONS command
- fix break with llvm tip
- Emit text map-file even when the link crashes
- Add ARM, AArch64, RISCV
- Define _eh_frame* symbols as standard symbols
- Add __eh_frame_hdr_start/end symbols in template linker script
- Add support for displaying plugin stats in map file
- Fix -1 e_flags with binary inputs
- Fix missed code changes for linker detection of non contiguous tls sections
- Fix linker detection of non contiguous tls sections
- Fix YamlLayoutPrinter crash when the link contains an empty archive
- add reverse iterator github action
- Fix incorrect padding value when both fill expr and command are used
- Fix DiagnosticEngine deadlock that can happen when the link crashes
- Fix section hash computation in LW::doesRuleMatchWithSection
- Fix fragment padding size computation when output section is unaligned
- x86_64: Add TLS Local Exec relocations support
- Add InputFile PluginAPIs
- Parse MEMORY command expressions in LexState::Expr
- Fix UnaryOperator expression name
- Fixup: Add %opt
- LTO: Support --lto-sample-profile=
- [RISC-V] Sort relocations
- Driver changes to inferred arch from program name/emulation
- Support DriverFlavor
- Set emulation mode based on input files
- Return 0 instead of asserting if expression does not have result
- Skip invalid ASCII chars when parsing linker script
- Fix assertion failure due to invalid glob pattern in linker script
- Fix PROVIDE feature for output section prologue expressions
- [ARM][AArch64] Fix computation of local-exec TLS relocations
- [RISC-V] Add support for TLSDESC
- Add support for section annotations in map file
- Add a plugin API to add files to reproduce tarball
- [RISCV] Handle VENDOR Relocations with emit-relocs
- [LinkerScript] Fix parsing of invalid file and section patterns
- Support ALIGN_WITH_INPUT output section attribute
- Improve GNU-compatibility of the linker script parser
- Fix reproduce crash when input is passed through linkerscript
- [LinkerScript] Fix fill padding for certain sections.
- Fix incorrect evaluation of ternary expression during GC
- add sanitizer build
- Support PIE with TLS
- set alignment for loadable and non loadable segments
- empty segment warning should be delayed to postLayout
- annotate not provided symbols in the map file
- Fix crash when invalid section is used with 'ALIGNOF' linker script command
- Fix parsing of ':ALIGN(...)' in linker script
- Fix mapping file feature for findConfigFile and getFileContents idiom
- Add support for bitwise xor operator in linkerscript.
- Enable reproduce feature for findConfigFile + getFileContents use idiom
- Add both ternary branch expressions symbols into symbol resolver
- Initialize Expression::result as an empty optional object
- Emit empty segment warning only if linker-script warnings are enabled
- Update checkout step to dynamicall pull the PR branch from the correct source
- Fix dot file malformed render.
- Fix DEFINED(...) function evaluation for undef but referenced symbols
- Report undef symbol reference error for ALIGN linker script expression
- fix alignment for segments
- Fix crash on parsing ':ALIGN' in linker script
- Add support for GOTPCREL and related relocations for static linking
- Add R_X86_64_PLT32 static relocation support
- [RISCV] Implement Relaxations for QC.E.LI/QC.LI
- Correctly set hasOutputSection property of output section plugin cmd
- Switch to an lld-compatible option instead of -codegen=
- Fix x86_64 default image base
- Fix DT_NEEDED entry for shared libs without SO name
- Fix incorrect call to
Linker::emit()with-emit-timing-stats-in-outputflag
- Add output and input section plugin framework APIs
- Add InputSectionSpec and LinkerScript plugin framework APIs
- Add ternary condition expression symbol as undefined reference symbol
- Return true when symbol table section is missing
- Add -W[no-]error option to convert warnings into errors
- [RISCV] Fix ANDES Vendor Issue
- Add symbols referred by shared libs to dynamic symbol table
- Add
getLinkerVersionLinkerWrapper API
- silence symbol overrides
- Add support for x86_64 emulation options
- Add a warning for empty segments
- Add warn diagnostics for zero-sized memory regions
- Add
ELD_REGISTER_PLUGINmacro
- support omagic
- local symbols that need GOT slot require dynamic relocation
- fix dllexport
- [RISCV] Implement Relaxations for QC.E.J/QC.E.JAL
- [risc-v] Add --no-relax-zero option
- Make dynamic string table simpler to use
- Fix dot counter handling for non-alloc sections
- Support 'archive: member' file-pattern in input section description
- [LinkerScript] Parse symbol assignment inside PROVIDE in LexState::Expr
- Add emulation option support for hexagon, arm and aarch64
- [LinkerScript] Add support for ALIGN_WITH_INPUT
- Explicitly disable copying/moving GeneralOptions and export GnuLdDriver
- Add exidx_start and exidx_end symbols with PROVIDE_HIDDEN semantics
- Add FAQ on linker script changes required for TLS functionality
- Allow --patch-enable and local symbol stripping (#27)
- assignments/defsym needs to be processed in link order
- [riscv] More cases of using PLT address (#41)
- Fix generation of duplicate DT_NEEDED entries
- [RISC-V] Disable default attribute mix warnings
- Support building eld when BUILD_SHARED_LIBS=On
- Add primitive support of emulation options with ld.eld
- Add delimiter to "cannot read" diagnostic
- Change sort-section to permit space-delim
- fix name of RISC-V extension
- [arm] Support --target2=abs/rel/got-rel
- Initial commit.
- Open-sourced the
eldlinker repository.