You copied the Doc URL to your clipboard.

Specifying the maximum size permitted for placing unassigned sections

The execution region attribute ANY_SIZE max_size enables you to specify the maximum size in a region that armlink can fill with unassigned sections.

Be aware of the following restrictions when using this keyword:

  • max_size must be less than or equal to the region size.

  • You can use ANY_SIZE on a region without a .ANY selector but it is ignored by armlink.

When ANY_SIZE is present, armlink:

  • Does not override a given .ANY size. That is, it does not reduce the priority then try to fit more sections in later.

  • Never recalculates contingency.

  • Never assigns sections in the contingency space.

ANY_SIZE does not require --any_contingency to be specified. However, when --any_contingency is specified and ANY_SIZE is not, armlink attempts to adjust contingencies. The aims are to:

  • Never overflow a .ANY region.

  • Never refuse to place a section in a contingency reserved space.

If you specify --any_contingency on the command line, it is ignored for regions that have ANY_SIZE specified. It is used as normal for regions that do not have ANY_SIZE specified.

The following example shows how to use ANY_SIZE:

LOAD_REGION 0x0 0x3000
{
   ER_1 0x0 ANY_SIZE 0xF00 0x1000
   {
      .ANY
   }
   ER_2 0x0 ANY_SIZE 0xFB0 0x1000
   {
      .ANY
   }
   ER_3 0x0 ANY_SIZE 0x1000 0x1000
   {
      .ANY
   }
}

In this example:

  • ER_1 has 0x100 reserved for linker-generated content.

  • ER_2 has 0x50 reserved for linker-generated content. That is about the same as the automatic contingency of --any_contingency.

  • ER_3 has no reserved space. Therefore 100% of the region is filled, with no contingency for veneers. Omitting the ANY_SIZE parameter causes 98% of the region to be filled, with a two percent contingency for veneers.