# Use the linker

This document describes the Qualcomm® Snapdragon™ Arm LLVM linker,
including commands and options as well as linker map and script files.

The linker merges object and archive files into executable images,
relocates program data to its final location in memory, and resolves
symbol references within and between files. The linker accepts files
built for Arm and Arch64 architecture.

## Start the linker

To start the linker from a command line, enter the following:

**ld.qcld [&lt;option&gt; …] [&lt;input\_object\_file&gt; …]**

The linker is invoked like the GNU linker, and it supports the most
commonly used options in the GNU linker.

Arguments that are specified on the command line without an option
switch are treated as the names of input object files. If the linker
does not recognize an input file as an object file, it treats the file
as a linker script (see [Linker scripts](https://docs.qualcomm.com/doc/80-VB419-102/topic/linker_scripts.html)).

The linker command can read its arguments from a text file rather than
from the command line. When starting the linker, specify file name after
an @ symbol:

**ld.qcld @&lt;file&gt;**

> 
> 
> Note
> 
> 
> The arm-link command name is a symbolic link to ld.qcld,
> and it can be used when starting the linker.
> 
> 
> To specify the one or more target architectures on the command line, use
> -march. For example, to specify the AArch64 architecture (instead of
> using the default target of Arm):

**ld.qcld -march=aarch64 &lt;other\_arguments&gt; …**

> 
> 
> Note
> 
> 
> In the Snapdragon LLVM Arm compiler, the clang driver
> recognizes the -fuse-ld=qcld option as a directive to use ld.qcld
> as the system linker.

## Options

The linker accepts command options, which are prefixed with one or two
hyphens, on the command line. To list all linker options, enter the
following:

ld.qcld -help
    Copy to clipboard

The slashes (/) in certain options indicate aliases for those options.

### [General options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id1)

-build-id=<style> / --build-id | -d / -dc / -dp
    --help | -o <output>
    --repository-version | -sysroot=<pathname>
    --version
    Copy to clipboard

### [Arm-only linker options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id2)

-fix-cortex-a53-843419
    --fix-cortex-a8 | --no-fix-cortex-a8
    -fropi | -frwpi
    Copy to clipboard

### [Arm/AArch64 linker options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id3)

-compact | --disable-bss-conversion
    --enable-bss-mixing | --use-mov-veneer
    Copy to clipboard

### [Ignored options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id4)

--add-needed / --no-add-needed
    --copy-dt-needed-entries | --no-copy-dt-needed-entries
    --gpsize=<value> | --nmagic
    --no-omagic | --omagic
    -Qy | -R <value>
    Copy to clipboard

### [Diagnostic options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id5)

-color <value>
    -cref | --error-style <value>
    --fatal-warnings | --no-fatal-warnings
    --gc-cref <value> | --no-warn-mismatch
    -t | -trace <value>
    --verbose | -verify-options <value>
    --warn-common
    Copy to clipboard

### [Dynamic library options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id6)

-Bgroup
    -Bsymbolic-functions / -Bsymbolic | -fPIC
    -g | --hash-size <value>
    -hash-style | -soname=<value>
    --warn-shared-textrel | --no-warn-shared-textrel
    Copy to clipboard

### [Dynamic library/executable options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id7)

-dynamic-linker <value> | -export-dynamic
    -export-dynamic-symbol <value> | -force-dynamic
    -rpath=<pathname> | -rpath-link=<pathname>
    Copy to clipboard

### [Executable options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id8)

-e <value> \| -emit-relocs
    -fini=<function> | -init=<function>
    -l <libName> | --library=<namespec>
    --library-path=<searchdir>> / -L<searchdir>
    --noinhibit-exec | -nostdlib
    -whole-archive | -no-whole-archive
    -Y <path>
    Copy to clipboard

### [Extended options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id9)

--align-segments | --no-align-segments
    -copy-farcalls-from-file <value> | -emit-relocs-llvm
    --enable-new-dtags | --disable-new-dtags
    -no-emit-relocs | -no-reuse-trampolines-file <value>
    --no-verify | -rosegment
    -z <value>
    Copy to clipboard

### [Symbol defining options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id10)

-symdef
    --symdef-file <filename>
    Copy to clipboard

### [Target options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id11)

-m=<emulation> | -march=[arm|aarch64]
    -mcpu=<cpu-name> | -mllvm <option>
    -mtriple=<value>
    Copy to clipboard

### [LTO options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id12)

--exclude-lto-filelist <filename> | --include-lto-filelist <filename>
    -flto | -flto-options <value>
    -flto-options=(codegen=<option> [ ,<option> ...])
    -flto-use-as | -save-temps
    Copy to clipboard

### [Link time speedup options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id13)

-threads | -no-threads
    --thread-count <value>
    Copy to clipboard

### [Map options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id14)

--color-map
    -M | -Map <filename>
    -MapDetail <value> | -MapStyle <value>
    Copy to clipboard

### [Optimization options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id15)

-best-fit-section <value> | --eh-frame-hdr
    -gc-sections | -no-gc-sections
    --no-merge-strings | --no-trampolines
    -print-gc-sections
    Copy to clipboard

### [Output control options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id16)

-Bdynamic | -dynamic
    -pie | -r
    -shared | -static
    Copy to clipboard

### [Script options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id17)

-default-script=filename | -dynamic-list <symbol>
    --exclude-libs=<lib1>,<lib2>,<...> | -extern-list <value>
    --map-section <value> | -print-stats <value>
    -section-start <value> | -T <filename>
    -Tbss=<address> | -Tdata=<address>
    -Ttext=<address> | -Ttext-segment=<address>
    -version-script <value>
    Copy to clipboard

### [Symbol options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id18)

--demangle | --no-demangle
    --discard-all | --discard-locals
    -portable <symbol> | --strip-all
    --strip-debug | -wrap=<symbol>
    Copy to clipboard

### [Symbol resolution options](https://docs.qualcomm.com/doc/80-VB419-102/topic/use_the_linker.html#id19)

--allow-multiple-definition
    -allow-shlib-undefined | --no-allow-shlib-undefined
    --as-needed | --no-as-needed
    -defsym symbol=<expression> | -no-undefined
    -start-group | -end-group
    -u *symbol* | --unresolved-symbols=<method>
    --use-shlib-undefines | --warn-once
    Copy to clipboard

### General options

- **-build-id=&lt;style&gt;** | **–build-id**
    - Request the creation of the .note.gnu.build-id ELF note section.

- **-d** | **-dc** | **-dp**
    - Assign space for common symbols.

- **–help**
    - Print option help.

- **-o &lt;output&gt;**
    - Specify a file path to write output.

- **–repository-version**
    - Print the linker repository version.

- **-sysroot=&lt;pathname&gt;**
    - Specify the system root directory, overriding the configure-time
default. This option is useful only in Linux.

- **–version**
    - Print the linker version.

### Arm-only linker options

- **-fix-cortex-a53-843419**
    - Fix the Cortex A53 errata 843419.

- **–fix-cortex-a8**
    - Fix the Cortex A8 errata.

- **–no-fix-cortex-a8**
    - Do not fix the Cortex A8 bug.

- **-fropi**
    - Enable PC-relative references to address code and read-only data.

- **-frwpi**
    - Enable read-write data access relative to a static base register.

### Arm/AArch64 linker options

- **-compact**
    - Create a smaller output file by computing the file offset based on the
previous section.

The physical address of the section should be congruent to the offset
from the segment that the section is really in. The loader must be able
to support such files.

- **–disable-bss-conversion**
    - Do not convert a BSS section to a non-BSS section when BSS and non-BSS
sections are mixed.

- **–enable-bss-mixing**
    - Enable the mixing of BSS and non-BSS sections.

- **–use-mov-veneer**
    - Use movt or movw to load an address in veneers with absolute relocation.

### Ignored options

- **–add-needed** | **–no-add-needed**
    - Deprecated.

- **–copy-dt-needed-entries**
    - Add the dynamic libraries mentioned to DT\_NEEDED.

- **–no-copy-dt-needed-entries**
    - Turn off the effect of –copy-dt-needed-entries.

- **–gpsize=&lt;value&gt;**
    - Set the maximum size of objects to be optimized using a global pointer (GP).

- **–nmagic**
    - Turn off the page alignment of sections, and disable linking against
shared libraries.

- **–no-omagic**
    - Negate most of the effects of the -N option, and disable linking with
shared libraries.

- **–omagic**
    - Set the text and data sections to be readable and writable. Do not
page-align the data segment. Disable linking against shared libraries.

- **-Qy**
    - For SVR4 compatibility, this option is ignored.

- **-R** &lt;value&gt;
    - Read symbol names and addresses from the filename.

### Diagnostic options

- **-color &lt;value&gt;**
    - Enable color output for diagnostics.

- **-cref**
    - Print the references for a symbol or section.

- **–error-style &lt;value&gt;**
    - Specify an error style: LLVM or GNU.

- **–fatal-warnings**
    - Enable fatal warnings.

- **–no-fatal-warnings**
    - Disable fatal warnings.

- **–gc-cref &lt;value&gt;**
    - Print references for a symbol or section when garbage collection is
enabled.

- **–no-warn-mismatch**
    - Do not warn when incompatible files are passed to the linker.

- **-t**
    - Print all files processed by the linker.

- **-trace** &lt;value&gt;
    - Allow tracing of files, relocations, symbols, link time optimization
(LTO), or threads.

- **–verbose**
    - Enable verbose output.

- **-verify-options** &lt;value&gt;
    - Verify internal linker computations. This option currently supports
relocation.

- **–warn-common**
    - Warn when a common symbol is combined with another common symbol or a
symbol definition.

Note

This option is parsed only and generates no warning messages.

### Dynamic library options

- **-Bgroup**
    - Enable the runtime linker to handle lookups in the object and its
dependencies; to be performed only within the group.

- **-Bsymbolic-functions** | **-Bsymbolic**
    - Bind references to global symbols to the definition within the shared library.

- **-fPIC**
    - Enable PIC mode.

- **-g**
    - Enable debug output when building shared libraries or executables.

- **–hash-size** &lt;value&gt;
    - Specify a hash size when creating the hash sections for the dynamic loader.

- **-hash-style [sysv|gnu|both]**
    - Specify a hash style when creating the hash sections for the dynamic loader:

- **sysv**
    - Classic ELF .hash section

- **gnu**
    - New-style GNU .gnu.hash section

- **both**
    - ELF and GNU hash tables.

- **-soname=&lt;value&gt;**
    - Set the internal DT\_SONAME to the specified name.

- **–warn-shared-textrel**
    - Warn if the linker adds a DT\_TEXTREL.

- **–no-warn-shared-textrel**
    - Do not warn if the linker adds a DT\_TEXTREL.

### Dynamic library/executable options

- **-dynamic-linker &lt;value&gt;**
    - Set the path to the dynamic linker.

- **-export-dynamic**
    - Add all symbols to the dynamic symbol table when creating executables.

- **-export-dynamic-symbol &lt;value&gt;**
    - Export the specified defined symbol to the dynamic symbol table.

Garbage collection is disabled for the specified symbol and for any
references made by this symbol.

- **-force-dynamic**
    - Force the output file to include dynamic sections and force the linker
to create dynamic sections. This makes a dynamic executable, -fPIC.

Set the relocation model to PIC.

- **-rpath=&lt;pathname&gt;**
    - Add a directory to the runtime library search path.

- **-rpath-link=&lt;pathname&gt;**
    - Specify the first set of directories to search.

This option has no effect; it is provided for compatibility with the GNU linker.

### Executable options

- **-e &lt;value&gt;**
    - Name of the entry point symbol.

- **-emit-relocs**
    - Generate GNU linker-compatible relocations, which use the relocation
target address as the virtual memory address (VMA) of the executable
instead of the offset within sections.

- **-fini=&lt;function&gt;**
    - Specify the function that is called when an executable or shared object
is unloaded: set DT\_FINI. The default function name is \_fini.

- **-init=&lt;function&gt;**
    - Specify the function called when an executable or shared object is
loaded: set DT\_INIT. The default function name is \_init.

- **-l &lt;libName&gt;**
    - Root name of the library to use.

- **–library=&lt;namespec&gt;**
    - Specify a library to use.

- **–library-path=&lt;searchdir&gt;** | **-L&lt;searchdir&gt;**
    - Specify the directory to search for libraries or linker scripts.

- **–noinhibit-exec**
    - Retain the executable output file whenever it is still usable.

- **-nostdlib**
    - Disable the default search path for libraries.

- **-whole-archive**
    - Link into the program every object file that is contained in the
specified archives. Specify the archives by placing them between the
-whole-archive and -no-whole-archive options.

- **-no-whole-archive**
    - Restore the default behavior of loading archive members.

- **-Y &lt;path&gt;**
    - Add a path to the default library search path.

### Extended options

- **–align-segments**
    - Align segments to page boundaries.

- **–no-align-segments**
    - Do not align segments to page boundaries.

- **-copy-farcalls-from-file &lt;value&gt;**
    - Copy far calls instead of using trampolines.

- **-emit-relocs-llvm**
    - Emit relocations sections.

- **–enable-new-dtags**
    - Enable new dynamic tags.

- **–disable-new-dtags**
    - Disable new dynamic tags.

- **-no-emit-relocs**
    - Do not emit relocations in the output file. This option also applies
to –emit-relocs-llvm.

- **-no-reuse-trampolines-file &lt;value&gt;**
    - Do not reuse trampolines for symbols specified in a file.

- **–no-verify**
    - Do not verify the link output.

- **-rosegment**
    - Put read-only non-executable sections in their own segment.

- **-z** &lt;value&gt;
    - Specify the following extended or nonstandard options. Supported values:

- combreloc - Merge dynamic relocatables into one section and sort them.
- nocombreloc - Do not merge dynamic relocatables into one section.
- common-page-size=*SIZE* - Set the common page size to SIZE.
- compactdyn - Create a dynamic section with a minimal number of entries.
- defs - Report unresolved symbols in object files.
- execstack - Mark the executable as requiring an executable stack.
- noexecstack - Mark the executable as not requiring an executable stack.
- global - Make symbols in the dynamic shared object (DSO) available to subsequently loaded objects.
- initfirst - Mark the DSO to be initialized first at runtime.
- lazy - Mark an object as lazy runtime binding (default).
- now - Mark an object as non-lazy runtime binding.
- max-page-size=*SIZE* - Set the maximum page size to SIZE.
- muldefs - Allow multiple definitions.
- nocopyreloc - Do not create copy relocatables.
- nodelete - Mark the DSO as non-deletable at runtime.
- relro - Create a RELRO program header.
- norelro - Do not create a RELRO program header.
- origin - Mark an object as requiring immediate $ORIGIN processing at runtime.

### Symbol defining options

- **-symdef**
    - Output the SymDef file to the console.

- **–symdef-file &lt;filename&gt;**
    - Emit the symbol definitions to a specified file.

### Target options

- **-m=&lt;emulation&gt;**
    - Select the target emulation.

- **-march=[arm|aarch64]**
    - Specify the target architecture. The default is arm.

- **-mcpu=&lt;cpu-name&gt;**
    - Specify the Arm/AArch64 processor version.

When the target is cortex-m0, -mcpu=cortex-m0 must be specified.

- **-mllvm &lt;option&gt;**
    - Options to pass to the LLVM.

- **-mtriple=&lt;value&gt;**
    - Specify the architecture, ABI, and operating system of the linker output
file. For example, -mtriple=arm-gnu-linux.

When this option is used, the -march option must be specified with a
NULL value, -march=.

Note

We do not recommend using -mtriple. Instead, use -march to
specify the target architecture.

### LTO options

- **–exclude-lto-filelist &lt;filename&gt;** | **–include-lto-filelist &lt;filename&gt;**
    - Specify a file that contains a list of files (which can include glob
patterns) whose embedded bitcode sections (if any) are to be used with
LTO instead of traditional linking with contained ELF sections.

Note

These exclude/include options are mutually exclusive.

- **-flto**
    - If the embedded bitcode section is present for linking, the linker uses
LTO. There is no effect on a simple ELF binary.

For options and the method of emitting embedded bitcode sections
inside an ELF file, see the *Qualcomm Snapdragon LLVM Arm CompilerUser Guide* (80-VB419-99).

- **-flto-options &lt;value&gt;**
    - Specify various options with LTO.

- **-flto-options=(codegen=option [ ,option …])**
    - Pass the specified -mllvm compiler options to the compiler during LTO.

- **-flto-use-as**
    - Use the standalone assembler instead of the integrated assembler for LTO.

- **-save-temps**
    - Save the temporary files produced by LTO. To display the path name of
the file, use -trace=lto.

### Link time speedup options

- **-threads**
    - Enable threads at link time.

- **-no-threads**
    - Disable threads at link time (the default behavior).

- **–thread-count &lt;value&gt;**
    - Specify the number of threads for all linker operations.

### Map options

- **–color-map**
    - Color the map file.

- **-M**
    - Emit the map file in the standard output.

- **-Map &lt;filename&gt;**
    - Dump the output layout to the map file. The value is the output file name.

- **-MapDetail &lt;value&gt;**
    - Detail information in the map file. Valid values are show-strings and
absolute- path.

- **-MapStyle &lt;value&gt;**
    - Dump the output layout to the map file in YAML/text form. Valid values
are gnu, yaml, and llvm.

### Optimization options

- **-best-fit-section &lt;value&gt;**
    - Reorder the section content to minimize its alignment requirement.

This option minimizes the gap created by the alignment requirement so
that the section size is reduced. The value is the name of the section
that is processed.

This option can be used multiple times with different section names.

- **–eh-frame-hdr**
    - Create an EH frame header section for faster exception handling.

- **-gc-sections**
    - Delete all unused input sections from the output file (garbage
collection). Display the deleted sections with –print-gcsections.

- **-no-gc-sections**
    - Disable garbage collection.

- **–no-merge-strings**
    - Disable string merging.

- **–no-trampolines**
    - Disable trampolines.

- **-print-gc-sections**
    - Print sections that are garbage-collected. Use this option with
-gc-sections.

### Output control options

- **-Bdynamic**
    - Link against a dynamic library.

- **-dynamic**
    - Create a dynamic executable (default).

- **-pie**
    - Create a position independent executable (PIE) file.

- **-r**
    - Create a relocatable object file.

- **-shared**
    - Create a dynamic library.

- **-static**
    - Create a static executable.

### Script options

- **-default-script=&lt;filename&gt;**
    - Specify the default linker script. The script is loaded after all other
linker options are processed.

- **-dynamic-list &lt;symbol&gt;**
    - Specify a list of symbols that, if present, are exported.

- **–exclude-libs=&lt;lib1&gt;,&lt;lib2&gt;,&lt;…&gt;**
    - Exclude specified archive libraries from automatic export.

- **-extern-list &lt;value&gt;**
    - Specify a list of symbols that exist as external dependencies.

- **–map-section &lt;value&gt;**
    - Specify an input section that maps to an output section.

- **-print-stats &lt;value&gt;**
    - Display linker operation statistics.

- **-section-start &lt;value&gt;**
    - Specify a hexadecimal integer as the virtual output section address for
a specified section. This option can be repeated multiple times.

- **-T &lt;filename&gt;**
    - Specify the linker script file.

The order in which the linker script is loaded (relative to when other
linker options are processed) is determined by the order of the options
specified on the command line.

- **-Tbss=&lt;address&gt;**
    - Specify an address for the .bss section.

- **-Tdata=&lt;address&gt;**
    - Specify an address for the .data section.

- **-Ttext=&lt;address&gt;**
    - Specify an address for the .text section.

- **-Ttext-segment &lt;value&gt;**
    - Specify an address for the .text-segment segment.

- **-version-script &lt;value&gt;**
    - Use the linker script as a version script.

### Symbol options

- **–demangle**
    - Demangle C++ symbols.

- **–no-demangle**
    - Do not demangle C++ symbols.

- **–discard-all**
    - Discard all local symbols.

- **–discard-locals**
    - Discard temporary local symbols.

- **-portable &lt;symbol&gt;**
    - Specify the symbol to be portable.

- **–strip-all**
    - Omit all symbol information from the output.

- **–strip-debug**
    - Omit all debug information from the output.

- **-wrap=&lt;symbol&gt;**
    - Create a wrapper for the specified symbol.

Resolve any undefined references to the symbol as references
wrap\_*symbol*. Resolve any undefined references to
real\_*symbol* as references to *symbol*.

This option can be repeated multiple times.

### Symbol resolution options

- **–allow-multiple-definition**
    - Allow multiple definitions of a symbol in the files being linked. By
default, this option is disabled.

Only the first definition is used; additional definitions are ignored.

- **-allow-shlib-undefined**
    - When creating executables, allow undefined symbols from a dynamic library.

- **–no-allow-shlib-undefined**
    - Do not allow undefined symbols from dynamic libraries when creating executables.

- **–as-needed**
    - By default, a DT\_NEEDED entry is added for every shared library
specified on the command line.

This option enables DT\_NEEDED entries to be added only if the shared
library is used to resolve symbols referenced from object files. The
–no-as-needed option restores the default behavior.

- **–no-as-needed**
    - Restore the default behavior of adding DT\_NEEDED entries.

- **-defsym symbol=&lt;expression&gt;**
    - Create a global symbol in the output file that contains the absolute
address given by expression.

This option can be used multiple times. The expression is limited to a
hexadecimal constant or existing symbol name, with the optional addition
or subtraction of a second hexadecimal constant or symbol.

- **-no-undefined**
    - Report unresolved symbol references from regular object files.

- **-start-group**
    - Start a group.

- **-end-group**
    - Resolve circular symbol references in the specified files and libraries.

Because the linker must repeatedly search the libraries to resolve
circular references, this option significantly affects the linker
performance. It should only be used when circular symbol references are
present.

Note

Specify files and libraries by placing them between the -( and -)
options, or the start-group and end- group options.

- **-u &lt;symbol&gt;**
    - Include the specified symbol in the output file as an undefined symbol.
This option forces additional object files to be linked to a program.

This option can be repeated multiple times.

- **–unresolved-symbols=&lt;method&gt;**
    - Determine how to handle unresolved symbols. The possible values are:

- ignore-all - Do not report any unresolved symbols.
- report-all - Report all unresolved symbols (default).
- ignore-in-object-files - Report unresolved symbols contained in
shared libraries, but ignore them if they come from regular object
files.
- ignore-in-shared-library - Report unresolved symbols from regular
object files, but ignore them if they come from shared libraries.
This value is useful when creating a dynamic binary and all the
shared libraries referenced are included on the linker command line.

- **–use-shlib-undefines**
    - Resolve undefined symbols from dynamic libraries.

- **–warn-once**
    - Warn every undefined reference only once.

## Link time optimization (LTO)

LTO is a type of code optimization that is performed by the linker. In
LTO, the linker drives the compiler to perform inter-procedure
optimizations and apply global program information to improve the code
optimizations performed by the compiler.

![../_images/lto_flow_performed_by_linker.png](data:image/png;base64,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)

**LTO flow performed by the linker**

If any linker inputs are in LLVM bitcode format, the linker
automatically enables LTO. For best LTO results, all the linker input
files should be in LLVM bitcode format. Do this by compiling all the
source files with the -flto compiler option. For more information on
compiling files for LTO, see the *Qualcomm Snapdragon LLVM Arm CompilerUser Guide* (80-VB419-99).

Use -flto-options=codegen to pass the -mllvm options to the compiler
as part of LTO.

The linker uses the LLVM integrated assembler to generate bit code
directly to a binary object file. To preserve the assembler file and see
where it is stored, use save-temps and -t=lto.

## Link ROPI/RWPI objects

The Arm processor supports the following relocation models:

- Read-only position independence (ROPI)

    Code and read-only data is accessed PC-relative. Offsets between code
and RO data sections are known at static link time.
- Read-write position independence (RWPI)

    Read-write data is accessed relative to a static base register (R9).
Offsets between all writable data sections are known at static link
time.

These modes are typically used by bare metal systems or small real-time
operating systems. They avoid the need for a dynamic linker because the
only initialization required is setting the static base register to an
appropriate value for RWPI code. They also minimize the size of the
writable portion of the executable for systems with limited RAM.

Enable additional clang flags with -fropi, -fwrpi.

### Linker behavior

The linker creates an error if the relocation of RWPI data falls into
different segments. The `_RWPI_BASE` variable is provided at the start
of the segment used for SBREL32 relocation. All other errors are captured
by the Attribute parser when mixing RWPI and non-RWPI objects.

### LTO behavior

When -frwpi or -fropi is passed to the linker, the linker passes the
command line option to the LTO backend using the relocation model.

Note

This relocation is not supported with native development
toolkit (NDK) builds.

## Region tables

The region tables feature removes the restriction that prevents the
mixing of NOBITS and PROGBITS sections in the same segment. This feature
is available on the 32-bit Arm processor.

The linker creates a table of mixed NOBITS and PROGBITS sections in the
same segment. The loader, which loads the program, iterates over the
table to initialize all NOBITS sections to the default initialization
value of zero.

The table is only emitted if a loadable segment has a linker script rule
for it:

*( region_table )
    Copy to clipboard

The text map file produces detailed information of the region table, but
the YAML map does not generate the information at this time.

Last Published: May 10, 2024

[Next Topic
Link maps](https://docs.qualcomm.com/bundle/publicresource/80-VB419-102/topics/link_maps.md)