Skip to content

Latest commit

 

History

History
executable file
·
233 lines (186 loc) · 10.8 KB

File metadata and controls

executable file
·
233 lines (186 loc) · 10.8 KB

ELD Roadmap – Key Focus Areas

ELD aims to be a production‑quality, open‑source linker for embedded systems, aligned with the LLVM ecosystem and the broader open‑source community.


Table of Contents


Areas for Development

ELF and Command Line Support

  • Expand command‑line option coverage for GNU ld and lld compatibility
  • Improve and extend ELF feature support across embedded targets

Linker Script Features and Compatibility

  • Incrementally add GNU linker script keywords and semantics
  • Improve compatibility to ease migration from existing toolchains

Core Linker Capabilities

  • LTO integration and performance improvements
  • Backward compatibility with existing embedded workflows
  • General linker optimizations focused on correctness and scalability

Target Enablement

  • Enable additional architectures and embedded targets
  • Support target‑specific features while keeping the core generic

Competitive Readiness and Usability

Performance and Scalability

  • Improve link‑time performance
  • Reduce peak memory usage during linking
  • Transparent comparisons with other linkers (code size, time, memory)

User Experience and Diagnostics

  • Clear, actionable diagnostics
  • Improved reproducibility and supportability
  • Richer and structured map file output

DeepMap Integration

  • Open‑source DeepMap for binary layout analysis
  • GUI and command‑line interfaces

Linker Plugin Ecosystem

  • Stable and extensible plugin APIs
  • Improved plugin diagnostics and observability
  • Encourage open‑source plugin development

Building Community Confidence

Testing and Quality

  • Open‑source CI workflows
  • Public build and test dashboards

Documentation

  • Clear release notes
  • Practical examples for embedded use cases

Community Engagement

  • Easy distribution and discoverability
  • Participation in LLVM and embedded communities
  • Conference talks, tutorials, and technical deep dives

Legend

  • Status: TBD (unknown / not yet validated), Planned, In Progress, Done
  • GNU ld / lld: TBD (unknown), Yes, No, Partial
  • Reference: link to upstream documentation (GNU ld manual / lld docs) or ELD docs

Note: The tables below use TBD as the default to avoid overstating compatibility until verified.

Command Line Support (Roadmap)

Page and Memory Layout

Option Description Status GNU ld lld Reference
-z common-page-size=SIZE Set common page size TBD TBD TBD
-z max-page-size=SIZE Set maximum page size TBD TBD TBD
-z stack-size=SIZE Set stack segment size TBD TBD TBD
-z separate-code Create separate code segment TBD TBD TBD
-z noseparate-code Disable separate code segment (default) TBD TBD TBD
--rosegment With -z separate-code, create a single read-only segment TBD TBD TBD
--no-rosegment With -z separate-code, create two read-only segments (default) TBD TBD TBD

Symbol Resolution and Definitions

Option Description Status GNU ld lld Reference
-z defs Report unresolved symbols in object files TBD TBD TBD
-z undefs Ignore unresolved symbols in object files TBD TBD TBD
-z muldefs Allow multiple definitions TBD TBD TBD
-z unique-symbol Avoid duplicated local symbol names TBD TBD TBD
-z nounique-symbol Keep duplicated local symbol names (default) TBD TBD TBD
-z common Generate common symbols with STT_COMMON type TBD TBD TBD
-z nocommon Generate common symbols with STT_OBJECT type TBD TBD TBD

Runtime Linking and Loading

Option Description Status GNU ld lld Reference
-z global Make symbols in DSO available for subsequently loaded objects TBD TBD TBD
-z initfirst Mark DSO to be initialized first at runtime TBD TBD TBD
-z interpose Mark object to interpose all DSOs but executable TBD TBD TBD
-z unique Mark DSO to be loaded at most once by default TBD TBD TBD
-z nounique Don't mark DSO as loadable at most once TBD TBD TBD
-z lazy Mark object lazy runtime binding (default) TBD TBD TBD
-z now Mark object non-lazy runtime binding TBD TBD TBD
-z loadfltr Mark object requiring immediate process TBD TBD TBD
-z origin Mark object requiring immediate $ORIGIN TBD TBD TBD

Security and Hardening

Option Description Status GNU ld lld Reference
-z execstack Mark executable as requiring executable stack TBD TBD TBD
-z noexecstack Mark executable as not requiring executable stack TBD TBD TBD
-z relro Create RELRO program header TBD TBD TBD
-z norelro Don't create RELRO program header (default) TBD TBD TBD
-z text Treat DT_TEXTREL in output as error TBD TBD TBD
-z notext Don't treat DT_TEXTREL in output as error (default) TBD TBD TBD
-z textoff Don't treat DT_TEXTREL in output as error (default) TBD TBD TBD
-z memory-seal Mark object to be memory sealed TBD TBD TBD
-z nomemory-seal Don't mark object to be memory sealed (default) TBD TBD TBD

Linker Behavior and Miscellaneous

Option Description Status GNU ld lld Reference
-z globalaudit Mark executable requiring global auditing TBD TBD TBD
-z start-stop-gc Enable garbage collection on __start/__stop TBD TBD TBD
-z nostart-stop-gc Don't garbage collect __start/__stop (default) TBD TBD TBD
-z start-stop-visibility=V Set visibility of built-in __start/__stop symbols TBD TBD TBD
-z sectionheader Generate section header (default) TBD TBD TBD
-z nosectionheader Do not generate section header TBD TBD TBD
-z combreloc Merge dynamic relocs into one section and sort TBD TBD TBD
-z nocombreloc Don't merge dynamic relocs into one section TBD TBD TBD
-z nocopyreloc Don't create copy relocs TBD TBD TBD
-z nodefaultlib Mark object not to use default search paths TBD TBD TBD
-z nodelete Mark DSO non-deletable at runtime TBD TBD TBD
-z nodlopen Mark DSO not available to dlopen TBD TBD TBD
-z nodump Mark DSO not available to dldump TBD TBD TBD

Linker Script Features (Roadmap)

Feature Priority Status GNU ld lld Reference
--enable-non-contiguous-regions Nice to have TBD TBD TBD
CLASS feature Low TBD TBD TBD
OVERLAY Nice to have TBD TBD TBD
OVERWRITE_SECTIONS Low TBD TBD TBD
INPUT_SECTION_FLAGS Nice to have TBD TBD TBD
REVERSE sort policy Low TBD TBD TBD
Version script complete support Nice to have TBD TBD TBD
ASCIZ output section data Low Done Done TBD https://sourceware.org/binutils/docs/ld/Output-Section-Data.html
STARTUP Low TBD TBD TBD
NEXT Low TBD TBD TBD
OUTPUT_SECTION READONLY Low TBD TBD TBD
Output section TYPE=<value> Low TBD TBD TBD
LD_FEATURE Nice to have TBD TBD TBD
INSERT AFTER/BEFORE Nice to have TBD TBD TBD
SIZEOF_HEADERS Nice to have TBD TBD TBD

Linker Plugins (Roadmap)

Task Priority Status GNU ld lld Reference
Improve plugin framework APIs (usability) Nice to have TBD N/A N/A
Diagnose plugin behavior and issues Must TBD N/A N/A
Tutorials and demos for plugins Must TBD N/A N/A
Run plugins in parallel Nice to have TBD N/A N/A
Inter-plugin communication Nice to have TBD N/A N/A
Map-file customization via plugins Nice to have TBD N/A N/A
Plugin-customized linker script commands Nice to have TBD N/A N/A

Build Dashboard (Roadmap)

Capability Priority Status GNU ld lld Reference
Open-source dashboard for build workflows using ELD Must TBD N/A N/A
Filters for pass/fail statistics Must TBD N/A N/A
Server-less dashboard accessible to the open-source community Must TBD N/A N/A
Summarized build stats surfaced on GitHub repo home page Must TBD N/A N/A
Interactive drill-down into failures/issues Must TBD N/A N/A
Scripts/docs to record build stats in any workflow Nice to have TBD N/A N/A

DeepMap (Roadmap)

Capability Priority Status GNU ld lld Reference
Improve plugin APIs for detailed binary map recording Must TBD N/A N/A
DeepMap GUI app for build/image analysis Must TBD N/A N/A
Record detailed binary map (bitsery serialization) Must TBD N/A N/A
Read ELF files in DeepMap Must TBD N/A N/A
Read JSON files in DeepMap Nice to have TBD N/A N/A
Documentation for DeepMap Must TBD N/A N/A
Update DeepMap plugin to integrate with bitsery Must TBD N/A N/A
Custom Python APIs for binary map Must TBD N/A N/A
Python command-line tools for binary map Must TBD N/A N/A
Build/image diff tool Nice to have TBD N/A N/A
GUI support for common use cases (Zephyr/Modem) Must TBD N/A N/A
DeepMap VSCode extension Must TBD N/A N/A
Open-source DeepMap app Must TBD N/A N/A