4.3 Elimination of unused sections

Elimination of unused sections is the most significant optimization on image size that is performed by the linker.

Unused section elimination:

  • Removes unreachable code and data from the final image.

  • Is suppressed in cases that might result in the removal of all sections.

To control this optimization use the --remove, --no_remove, --first, --last, and --keep linker options.

Unused section elimination requires an entry point. Therefore, if there is no entry point specified for an image, use the --entry linker option to specify an entry point and permit unused section elimination to work, if it is enabled.

Note:

By default, unused section elimination is disabled if you are building DLLs with --dll, or shared libraries with --shared. Therefore, you must explicitly include --remove to re-enable unused section elimination.

Use the --info unused linker option to instruct the linker to generate a list of the unused sections that it eliminates.

An input section is retained in the final image when:

  • It contains an entry point.

  • It is referred to, directly or indirectly, by a non-weak reference from an input section containing an entry point.

  • It is specified as the first or last input section by the --first or --last option (or a scatter-loading equivalent).

  • It is marked as unremovable by the --keep option.

Note:

Compilers usually collect functions and data together and emit one section for each category. The linker can only eliminate a section if it is entirely unused.

You can mark a function or variable in source code with the __attribute__((used)) attribute. This causes armcc to generate the symbol __tagsym$$used for each of the functions and variables. A section containing a definition of __tagsym$$used is not removed by unused section elimination.

You can also use the --split_sections compiler command-line option to instruct the compiler to generate one ELF section for each function in the source file.

Non-ConfidentialPDF file icon PDF versionARM DUI0474M
Copyright © 2010-2016 ARM Limited or its affiliates. All rights reserved.