You copied the Doc URL to your clipboard.

About mapping symbols

Mapping symbols are generated by the compiler and assembler to identify various inline transitions.

For Arm®v7‑A, inline transitions can be between:

  • Code and data at literal pool boundaries.
  • Arm code and Thumb® code, such as Arm and Thumb interworking veneers.

For Armv8‑A, inline transitions can be between:

  • Code and data at literal pool boundaries.
  • A32 code and T32 code, such as A32/T32 interworking veneers.

For Armv6‑M, Armv7‑M, and Armv8‑M, inline transitions can be between code and data at literal pool boundaries.

The mapping symbols available for each architecture are:

Symbol Description Architecture
$a Start of a sequence of Arm/A32 instructions. All
$t Start of a sequence of Thumb/T32 instructions. All
$t.x Start of a sequence of ThumbEE instructions. Armv7‑A
$d Start of a sequence of data items, such as a literal pool. All
$x Start of A64 code. Armv8‑A

armlink generates the $d.realdata mapping symbol to communicate to fromelf that the data is from a non-executable section. Therefore, the code and data sizes output by fromelf -z are the same as the output from armlink --info sizes, for example:

      Code (inc. data)   RO Data
         x          y          z

In this example, the y is marked with $d, and RO Data is marked with $d.realdata.

Note

Symbols beginning with the characters $v are mapping symbols related to VFP and might be output when building for a target with VFP. Avoid using symbols beginning with $v in your source code.

Be aware that modifying an executable image with the fromelf --elf --strip=localsymbols command removes all mapping symbols from the image.

Was this page helpful? Yes No