--largeregions, --no_largeregions

This option controls the sorting order of sections in large execution regions to minimize the distance between sections that call each other.

Show/hideUsage

If the execution region contains more code than the range of a branch instruction then the linker switches to large region mode. In this mode the linker sorts according to the approximated average call depth of each section in ascending order. The linker might also place distribute veneers amongst the code sections to minimize the number of veneers.

Note

Large region mode can result in large changes to the layout of an image even when small changes are made to the input.

To disable large region mode and revert to lexical order, use --no_largeregions. Section placement is then predictable and image comparisons are more predictable. However some branches might not reach the target causing the link step to fail. If this happens you must place code/data sections explicitly using an appropriate scatter file or write your own veneer.

Large region support enables:

  • average call depth sorting, --sort=AvgCallDepth

  • API sorting, --api

  • veneer injection, --veneerinject.

The following command lines are equivalent:

armlink --largeregions --no_api --no_veneerinject --sort=Lexical
armlink --no_largeregions

Show/hideDefault

The default is --no_largeregions. The linker automatically switches to --largeregions if at least one execution region contains more code than the smallest inter-section branch. The smallest inter-section branch depends on the code in the region and the target processor:

32Mb

Execution region contains only ARM.

16Mb

Execution region contains Thumb, 32-bit Thumb is supported.

4Mb

Execution region contains Thumb, no 32-bit Thumb support.

Show/hideSee also

Copyright © 2008, 2011-2012 ARM. All rights reserved.ARM DUI 0458C
Non-ConfidentialID062912