llext: Add option to garbage-collect unused syms #86108
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This commit adds a new configuration LLEXT_SYMBOL_GC. It enables link-time garbage collection for symbols in llexts. This can reduce code size in extensions that statically link libraries or have many unused functions for any reason. The implementation relies on gcc-specific linker flags for the actual garbage collection. To this end, the compiler is instructed to separate functions and global data into individual sections. The linker can then remove sections that are not referenced by the GC roots, which currently consist of the sections that contain the explicitly exported symbols.
Additionally, a linker script for llext extensions was added - its purpose is to merge the function and data sections after the link, as llext currently cannot handle having multiple text/data sections.
This feature is currently not supported on Xtensa.