Linker changes between ARM Compiler v4.1 and v4.1 SP1

The following changes to armlink have been made:

GNU ld script support enhancements

The linker now supports the GNU ld script keywords ABSOLUTE, ADDR, ALIGNOF, DEFINED, EXTERN, LOADADDR, and SIZEOF.

The default ld scripts for executable and shared objects align to 4 bytes after .bss region.

The --sysroot command-line option is supported.

String merging enhancements

The linker can merge strings where the address is generated by MOVT and MOVW instructions.

64-bit linker

A 64-bit version of armlink is provided that can utilize the greater amount of memory available to processes on 64-bit operating systems. It supports all the features that are supported by the 32-bit version of armlink in this release.

Note

The 32-bit version of armlink is the default even on 64-bit operating systems. You must manually set up your installation environment if you want to use the 64-bit version.

Placing and sorting input sections

Additional command-line options are available to control the placement and the sort order of input sections when using the .ANY module selector:

  • --any_contingency

  • --any_placement=algorithm

  • --any_sort_order=order.

The --info=any option is provided to show details of the sorting and placement of .ANY sections.

Using a tiebreaker when sorting input sections with equal properties

In ARM Compiler v4.1 and earlier, the sorting algorithm used by the linker is based on the order that the linker creates sections in its section data structure.

In ARM Compiler v4.1 SP1 and later, an additional sorting algorithm is available based on the order that sections appear on the linker command-line.

You select the algorithm using the --tiebreaker command-line option. For backwards compatibility, the section create order is the default.

The --section_index_display=cmdline option is provided to show the sections in the memory map output in the same order they appear on the command-line.

Controlling veneer sharing across execution regions

The --[no_]crosser_veneershare command-line option is available to enable and disable veneer sharing across execution regions.

Linker-defined symbols

The linker now supports the following linker-defined symbols:

Load$$region_name$$ZI$$BaseLoad$$region_name$$ZI$$LimitLoad$$region_name$$ZI$$Length
Additional command-line options supported

The following command-line options have been added:

  • --emit_non_debug_relocs

  • --[no_]load_addr_map_info

  • --[no_]strict_flags

  • --[no_]strict_symbols

  • --[no_]strict_visibility

  • --veneer_inject_type

  • --veneer_pool_size.

Changes to command-line options

The following changes have been made to existing command-line options:

  • the any and veneerpools topics have been added to --info

  • the cmdline type has been added to --section_index_display

  • the Alignment, BreadthFirstCallTree and LexicalState algorithms have been added to --sort

Changes to scatter files

The following changes have been made to scatter files:

  • +offset can be used in a conditional operator

  • execution address built-in functions can now be used for the max_size of a region.

Show/hideSee also

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0530C
Non-ConfidentialID080411