2.5 Base Platform linking model

Enables you to create dynamically linkable images that do not have the memory map enforced by the Base Platform Application Binary Interface (BPABI) or System V (SysV) linking models.

The Base Platform linking model enables you to:

  • Create images with a memory map described in a scatter file.
  • Have dynamic relocations so the images can be dynamically linked. The dynamic relocations can also target within the same image.

Note:

The BPABI specification places constraints on the memory model that can be violated using scatter-loading. However, because Base Platform is a superset of BPABI, it is possible to create a BPABI conformant image with Base Platform.

To link with the Base Platform model, use the --base_platform command-line option.

If you specify this option, the linker acts as if you specified --bpabi, with the following exceptions:

  • Scatter-loading is available with --scatter. If you do not specify --scatter, then the standard BPABI memory model scatter file is used.
  • The following options are available:

    • --dll.
    • --force_so_throw, --no_force_so_throw.
    • --pltgot=type.
    • --rosplit.
  • The default value of the --pltgot option is different to that for --bpabi:

    • For --base_platform, the default is --pltgot=none.
    • For --bpabi the default is --pltgot=direct.
  • Each load region containing code might require a Procedure Linkage Table (PLT) section to indirect calls from the load region to functions where the address is not known at static link time. The PLT section for a load region LR must be placed in LR and be accessible at all times to code within LR.

    If you do not use a scatter file, the linker can ensure that the PLT section is placed correctly, and contains entries for calls only to imported symbols. If you specify a scatter file, the linker might not be able to find a suitable location to place the PLT.

    To ensure calls between relocated load regions use a PLT entry:

    • Use the --pltgot=direct option to turn on PLT generation.
    • Use the --pltgot_opts=crosslr option to add entries in the PLT for calls between RELOC load regions. The linker generates a PLT for each load region so that calls do not have to be extended to reach a distant PLT.

Be aware of the following:

  • The model by default assumes that shared objects cannot throw a C++ exception (--no_force_so_throw).
  • You must use symbol versioning to ensure that all the required symbols are available at load time.
  • There are restrictions on the type of scatter files you can use.
Non-ConfidentialPDF file icon PDF versionARM DUI0474M
Copyright © 2010-2016 ARM Limited or its affiliates. All rights reserved.