| |||
| Home > Linker Errors and Warnings > List of the armlink error and warning messages | |||
The error and warning messages for armlink are:
Out of memory.
This error is reported by RVCT v4.0 and earlier. For more
details on why you might see this error and possible solutions,
see the description for error L6815U.
Could not read from file <filename>.
Could not open file <filename>: <reason>
This indicates that the linker was unable to open a file specified on the linker command line. This can indicate a problem accessing the file or a fault with the command line specified. Some common occurrences of this message are:
L6002U: Could not open file /armlib/{libname}: No such file or directory
Either specify the library path with --libpath or
set the ARMCC environment
variable to nnLIB.install_directory\lib
See the following in the Linker Reference:
See the following in Introducing the ARM Compiler toolchain:
In ARM Compiler toolchain v5.0 and later, armlink does
not require the ARMCC environment
variables to be set.nnLIB
Error : armlink : L6002: Could not open file errors=ver.txt
Caused by the double-dash (--) missing
from in front of errors=ver.txt. If you do
not prefix options with -- or - the
linker treats them as input files and fails the link step because
it is unable to load all the specified files. The correct switch
is --errors=ver.txt
Could not write to file <filename>.
An file I/O error occurred while reading, opening, or writing to the specified file.
Incomplete library member list <list> for <library>.
This can occur where there is whitespace in the list of library objects.
The example below fails:
armlink x.lib(foo.o, bar.o)
Fatal error: L6004U: Missing library member in member list for x.lib.
The example below succeeds:
armlink x.lib(foo.o,bar.o)
Another less common occurrence is caused by a corrupt library, or possibly a library in an unsupported format.
Extra characters on end of member list for <library>.
Overalignment value not specified with OVERALIGN attribute for execution region <regionname>.
See the following in the Linker Reference:
See the following in Using the Linker:
Could not recognize the format of file <filename>.
The linker can recognize object files in the ELF format, and library files in AR formats. The specified file is either corrupt, or is in a file format that the linker cannot recognize.
Could not recognize the format of member <mem> from <lib>.
The linker can recognize library member objects in the ELF file format. The specified library member is either corrupt, or is in a file format that the linker cannot recognize.
File <filename> : Endianness mismatch.
The endianness of the specified file or object did not match the endianness of the other input files. The linker can handle input of either big endian or little endian objects in a single link step, but not a mixed input of some big and some little endian objects.
Could not reopen stderr to file <filename>: <reason>
An file I/O error occurred while reading, opening, or writing to the specified file.
Invalid integer constant : <number>.
Specifying an illegal integer constant causes this. An integer
can be entered in hexadecimal format by prefixing &, 0x,
or 0X. A suffix of k or m can
be used to specify a multiple of 1024 or 1024*1024.
Could not find any input files to link.
The linker must be provided with at least one object file to link.
For example, If you try to link with:
armlink lib.a -o foo.axf
you get the above error.
You must instead use, for example:
armlink foo_1.o foo_2.o lib.a -o foo.axf
Symbol table missing/corrupt in object/library <object>.
This can occur when linking with libraries built with the
GNU tools. This is because GNU ar can generate
incompatible information.
The workaround is to replace ar with armar and
use the same command line arguments. Alternatively, the error is
recoverable by using armar -s to rebuild the symbol
table.
Library <library> symbol table contains an invalid entry, no member at offset 0x<offset>.
The library might be corrupted. Try rebuilding it.
<filename> is not a valid ELF file.
<filename> is not a valid 64 bit ELF file.
<filename> is not a valid 32 bit ELF file.
Object <objname> has multiple <table>.
The object file is faulty or corrupted. This might indicate a compiler fault. Contact your supplier.
Library <library> contains an invalid member name.
The file specified is not a valid library file, is faulty or corrupted. Try rebuilding it.
Cannot extract members from a non-library file <library>.
The file specified is not a valid library file, is faulty or corrupted. Try rebuilding it.
ELF file <filename> has neither little or big endian encoding
The ELF file is invalid. Try rebuilding it.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) has invalid/unknown type.
This might indicate a compiler fault. Contact your supplier.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) has invalid offset.
This might indicate a compiler fault. Contact your supplier.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is wrt invalid/missing symbol.
The relocation is with respect to a symbol that is either:
invalid or missing from the object symbol table
a symbol that is not suited to be used by a relocation.
This might indicate a compiler fault. Contact your supplier.
Overalignment <overalignment> for region <regname> must be at least 4 and a power of 2
See the following in the Linker Reference:
See the following in Using the Linker:
Could not open scatter description file <filename>: <reason>
An I/O error occurred while trying to open the specified file. This could be due to an invalid filename.
Invalid <text> <value> (maximum <max_value>) found in <object>
Symbol <symbolname> in <objname> is defined relative to an invalid section.
Symbol <symbolname> in <objname> has invalid value.
This is most often caused by a section-relative symbol having a value that exceeds the section boundaries.
Relocation #<rel_class>:<rel_number> in ZI Section <objname>(<secname>) has invalid type.
ZI Sections cannot have relocations other than of type R_ARM_NONE.
Could not close file <filename>: <reason>
An I/O error occurred while closing the specified file.
'<arg>' is not a valid argument for option '<option>'.
The argument is not valid for this option. This could be due to a spelling error, or due to the use of an unsupported abbreviation of an argument.
Could not create a temporary file to write updated SYMDEFS.
An I/O error occurred while creating the temporary file required for storing the SYMDEFS output.
Relocation from #<rel_class>:<rel_number> in <objname>(<secname>) with respect to <symname>. Skipping creation of R-type relocation. No corresponding R-type relocation exists for type <rel_type>.
--reloc is used with objects containing relocations
that do not have a corresponding R-type relocation.
An internal error has occurred (<clue>).
Contact your supplier.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is wrt a mapping symbol(#<idx>, Last Map Symbol = #<last>).
Relocations with respect to mapping symbols are not permitted. This might indicate a compiler fault. Contact your supplier.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is with respect to an out of range symbol(#<val>, Range = 1-<max>).
Relocations can only be made wrt symbols in the range (1-n), where n is the number of symbols.
The size of this image (<actual_size> bytes) exceeds the maximum allowed for this version of the linker
The linker is unable to continue the link step (<id>). This version of the linker will not create this image.
The linker is unable to continue the link step (<id>). This version of the linker will not link with one or more given libraries.
The code size of this image (<actual_size> bytes) exceeds the maximum allowed for this version of the linker.
Syntax error parsing linker script <script> at line <lineno> : <token>
The link ld script has a syntax error at the line number.
See the following in Using the Linker:
ELF Executable file <filename> given as input on command line
This might be because you specified an object file as output
from from the compiler without specifying the -c compiler
option. For example:
armcc file.c -o file.o
armlink file.o -o file.axf
See the following in the Compiler Reference:
-c.
Load region <name> (size <size>) is larger than maximum writable contiguous block size of 0x80000000.
The linker attempted to write a segment larger than 2GB. The size of a segment is limited to 2GB.
EMPTY region <regname> cannot have any section selectors.
A negative max_size cannot be used for region <regname> without the EMPTY attribute.
Only regions with the EMPTY attribute are permitted to have a negative max-size.
A negative max_size cannot be used for region <regname> which uses the +offset form of base address.
Regions using the +offset form of base
address are not permitted to have a negative max-size.
Special section <sec1> multiply defined by <obj1> and <obj2>.
A special section is one that can only be used once, such
as "Veneer$$Code".
Cannot specify both '<attr1>' and '<attr2>' for region <regname>
See the following in the Linker Reference:
Symbol <symbolname> multiply defined by <object1> and <object2>.
A common example where this occurs:
Symbol __stdout multiply defined (by retarget.o and stdio.o).
means that there are two conflicting definitions of __stdout present
in retarget.o and stdio.o.
The one in retarget.o is your own definition.
The one in stdio.o is the default implementation,
which was probably linked-in inadvertently.
stdio.o contains a number symbol definitions
and implementations of file functions like fopen, fclose,
and fflush.
stdio.o is being linked-in because it satisfies
some unresolved references.
To identify why stdio.o is being linked-in,
you must use the verbose link option switch.
For example:
armlink [... your normal options...] --verbose --list err.txt
Then study err.txt to see exactly what
the linker is linking in, from where, and why.
You might have to either:
eliminate the calls like fopen, fclose,
and fflush
re-implement the _sys_xxxx family
of functions.
See the following in Using ARM® C and C++ Libraries and Floating-Point Support:
Object <objname> contains multiple entry sections.
The input object specifies more than one entry point. Use
the --entry command-line option to select the entry
point to use.
See the following in the Linker Reference:
<objname>(<secname>) cannot be assigned to non-root region '<regionname>'
A root region is a region that has an execution address the same as its load address. The region does not therefore require moving or copying by the scatter-load initialization code.
Certain sections must be placed in root region in the image. __main.o and
the linker-generated table (Region$$Table) must
be in a root region. If not, the linker reports, for example:
Region$$Table cannot be assigned to a non-root region.
Scatter-loading (__scatter*.o) and decompressor
(__dc*.o) objects from the library must be placed
in a root region. These can all be placed together using InRoot$$Sections:
ROM_LOAD 0x0000 0x4000
{
ROM_EXEC 0x0000 0x4000 ; root region
{
vectors.o (Vect, +FIRST) ; Vector table
* (InRoot$$Sections) ; All library sections
; that must be in a root region
; for example, __main.o, __scatter*.o,
; dc*.o and * Region$$Table
}
RAM 0x10000 0x8000
{
* (+RO, +RW, +ZI) ; all other sections
}
}
See also Placing root region library objects.
Entry point (<address>) lies within non-root region <regionname>.
The image entry point must correspond to a valid instruction in a root-region of the image.
Entry point (<address>) does not point to an instruction.
The image entry point you specified with the --entry command-line
option must correspond to a valid instruction in the root-region
of the image.
See the following in the Linker Reference:
Entry point (<address>) must be word aligned for ARM instructions.
This message is displayed because the image entry point you
specified with the --entry command-line option
is not word aligned. For example, you specified --entry=0x8001 instead
of --entry=0x8000.
See the following in the Linker Reference:
Entry point (<address>) lies outside the image.
The image entry point you specified with the --entry command-line
option is outside the image. For example, you might have specified
an entry address of 0x80000 instead of 0x8000,
as follows:
armlink --entry=0x80000 test.o -o test.axf
See the following in the Linker Reference:
Invalid argument for --entry command: '<arg>'
See the following in the Linker Reference:
Invalid offset constant specified for --entry (<arg>)
See the following in the Linker Reference:
Image cannot have multiple entry points. (<address1>,<address2>)
One or more input objects specifies more than one entry point
for the image. Use the --entry command-line option
to select the entry point to use.
See the following in the Linker Reference:
Ambiguous section selection. Object <objname> contains more than one section.
This can occur when using the linker option --keep on
an assembler object that contains more than one AREA.
The linker must know which AREA you want to keep.
To solve this, use more than one --keep option
to specify the names of the AREAs to keep, such as:
--keep boot.o(vectors) --keep boot.o(resethandler) …
Using assembler files with more than one AREA might
give other problems elsewhere, so this is best avoided.
Multiple First section <object2>(<section2>) not allowed. <object1>(<section1>) already exists.
Only one FIRST section is permitted.
Multiple Last section <object2>(<section2>) not allowed. <object1>(<section1>) already exists.
Only one LAST section is permitted.
Ambiguous symbol selection for --First/--Last. Symbol <symbol> has more than one definition.
See the following in the Linker Reference:
Cannot use base/limit symbols for non-contiguous section <secname>
The exception-handling index tables generated by the compiler
are given the section name .ARM.exidx. For more
information, see Exception
Handling ABI for the ARM Architecture.
At link time these tables must be placed in the same execution region and be contiguous. If you explicitly place these sections non-contiguously using specific selector patterns in your scatter file, then this error message is likely to occur. For example:
LOAD_ROM 0x00000000
{
ER1 0x00000000
{
file1.o (+RO) ; from a C++ source
* (+RO)
}
ER2 0x01000000
{
file2.o (+RO) ; from a C++ source
}
ER3 +0
{
* (+RW, +ZI)
}
}
This might produce the following error if exception-handling
index tables are in both file1.o and file2.o,
because the linker cannot place them in separate regions:
Error: L6216E: Cannot use base/limit symbols for non-contiguous section .ARM.exidx
Also, the .init_array sections must be
placed contiguously within the same region for their base and limit
symbols to be accessible.
The corrected example is:
LOAD_ROM 0x00000000
{
ER1 0x00000000
{
file1.o (+RO) ; from a C++ source
* (.ARM.exidx) ; Section .ARM.exidx must be placed explicitly,
; otherwise it is shared between two regions, and
; the linker is unable to decide where to place it.
*(.init_array) ; Section .init_array must be placed explicitly,
; otherwise it is shared between two regions, and
; the linker is unable to decide where to place it.
* (+RO)
}
ER2 0x01000000
{
file2.o (+RO) ; from a C++ source
}
ER3 +0
{
* (+RW, +ZI)
}
}
In the corrected example, the base and limit symbols are contained
in .init_array in a single region.
For more information, see the following in Using ARM® C and C++ Libraries and Floating-Point Support:
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect to <symbol>. R_ARM_SBREL32 relocation to imported symbol
Undefined symbol <symbol> (referred from <objname>).
Some common examples where this can occur are:
User Error. Somebody has referenced a symbol and has either forgotten to define it or has incorrectly defined it.
Undefined symbol __ARM_switch8 or __ARM_ll_<xxxx> functions
The helper functions are automatically generated into the object file by the compiler.
An undefined reference error can, however, still be generated
if linking objects from legacy projects where the helper functions
are in the h_ libraries
(xxxh indicates that these are compiler helper libraries,
rather than standard C library code).
Re-compile the object or ensure that these libraries can be found by the linker.
When attempting to refer to a function/entity in
C from a function/entity in C++. This is caused by C++ name mangling,
and can be avoided by marking C functions extern "C".
Undefined symbol thunk{v:0,-44} to Foo_i::~Foo_i() (referred from Bar_i.o)
The symbol thunk{v:0,-44} to Foo_i::~Foo_i() is
a wrapper function round the regular Foo_i::~Foo_i().
Foo_i is a derived class of some other
base class, therefore:
it has a base-class vtable for when it is referred to by a pointer to that base class
the base-class vtable has an entry for the thunk
the destructor thunk is output when the actual (derived class) destructor is output.
Therefore, to avoid the error, ensure this destructor is defined.
<type> section <object1>(<section1>) attributes {<attributes>} incompatible with neighboring section <object2>(<section2>).
This error occurs when the default ordering rules used by
the linker (RO followed by RW followed by ZI) are violated. This
typically happens when one uses +FIRST or +LAST,
for example in a scatter file, attempting to force RW before RO.
<type> region <regionname> size (<size> bytes) exceeds limit (<limit> bytes).
Example:
Execution region ROM_EXEC size (4208184 bytes) exceeds limit (4194304 bytes).
This can occur where a region has been given an (optional)
maximum length in the scatter file, but this size of the code/data
being placed in that region has exceeded the given limit. This error
is suppressible with --diag_suppress 6220.
For example, this might occur when using .ANY selectors
with the numALIGN directive in a scatter file to force
the linker to insert padding. You might be able to fix this using
the --any_contingency option.
See the following in Using the Linker:
See the following in the Linker Reference:
<type1> region <regionname1> with <addrtype1> range [<base1>,<limit1>) overlaps with <type2> region <regionname2> with <addrtype2> range [<base2>,<limit2>).
This represents an incorrect scatter file. A non-ZI section must have a unique load address and in most cases must have a unique execution address. This error might be because a load region LR2 with a relative base address immediately follows a ZI execution region in a load region LR1. From RVCT v3.1 onwards, the linker no longer assigns space to ZI execution regions.
See the following in the Linker Reference:
Partial object cannot have multiple ENTRY sections, <e_oname>(<e_sname>) and <oname>(<sname>).
Where objects are being linked together into a partially-linked object, only one of the sections in the objects can have an entry point.
It is not possible in this case to use the linker option --entry to
select one of the entry points.
Ambiguous selectors found for <objname>(<secname>) from Exec regions <region1> and <region2>.
This occurs if the scatter file specifies <objname>(<secname>) to
be placed in more than one execution region. This can occur accidentally
when using wildcards (*). The solution is to
make the selections more specific in the scatter file.
Could not place <objname>(<secname>) in any Execution region.
This occurs if the linker can not match an input section to any of the selectors in your scatter file. You must correct your scatter file by adding an appropriate selector.
See the following in Using the Linker:
Number <str...> is too long.
Missing base address for region <regname>.
Using --reloc with --rw-base without --split is not allowed.
See the following in the Linker Reference:
Expected '<str1>', found '<str2>'.
Scatter description <file> is empty.
Multiple execution regions (<region1>,<region2>) cannot select <secname>.
Missing module selector.
Missing section selector.
Unknown section selector '+<selector>'.
<ss> must follow a single selector.
For example, in a scatter file:
: * (+FIRST, +RO) :
+FIRST means place this (single) section
first. Selectors that can match multiple sections (for example, +RO or +ENTRY)
are not permitted to be used with +FIRST (or +LAST).
If used together, the error message is generated.
More than one section matches selector - cannot all be FIRST/LAST.
See the following in Using the Linker:
See the following in the Linker Reference:
No section matches selector - no section to be FIRST/LAST.
The scatter file specifies a section to be +FIRST or +LAST,
but that section does not exist, or has been removed by the linker
because it believes it to be unused. Use the linker option --info
unused to reveal which objects are removed from your project.
Example:
ROM_LOAD 0x00000000 0x4000
{
ROM_EXEC 0x00000000
{
vectors.o (Vect, +First) << error here
* (+RO)
}
RAM_EXEC 0x40000000
{
* (+RW, +ZI)
}
}
Some possible solutions are:
Ensure vectors.o is
specified on the linker command-line.
Link with --keep vectors.o to
force the linker not to remove this, or switch off this optimization
entirely, with --no_remove. This is not recommended.
ARM recommends that you add the ENTRY directive
to vectors.s, to tell the linker that it is
a possible entry point of your application such as, for example:
AREA Vect, CODE ENTRY ; define this as an entry point Vector_table ...
Then link with --entry Vector_table to
define the real start of your code.
See the following in Using the Linker:
See the following in the Linker Reference:
See the following in the Assembler Reference:
<objname>(<secname>) contains relocation(s) to unaligned data.
<objname>(<secname>) contains invalid call from '<attr1>' function to '<attr2>' function <sym>.
This linker error is given where a stack alignment conflict
is detected in object code. The ABI for the ARM Architecture suggests
that code maintains eight-byte stack alignment at its interfaces.
This permits efficient use of LDRD and STRD instructions (in ARM
Architecture 5TE and later) to access eight-byte aligned double and long
long data types.
Symbols such as ~PRES8 and REQ8 are Build
Attributes of the objects:
PRES8 means
the object PREServes eight-byte alignment of the stack
~PRES8 means the object does
NOT preserve eight-byte alignment of the stack (~ meaning NOT)
REQ8 means the object REQuires
eight-byte alignment of the stack.
This link error typically occurs in two cases:
Where assembler code (that does not preserve eight-byte stack alignment) calls compiled C/C++ code (that requires eight-byte stack alignment).
Where attempting to link legacy objects that were
compiled with older tools with objects compiled with recent tools.
Legacy objects that do not have these attributes are treated as ~PRES8,
even if they do actually happen to preserve eight-byte alignment.
For example:
Error: L6238E: foo.o(.text) contains invalid call from '~PRES8' function to 'REQ8' function foobar
This means that there is a function in the object foo.o (in
the section named .text) that does not preserve
eight-byte stack alignment, but which is trying to call function foobar that
requires eight-byte stack alignment.
A similar warning that might be encountered is:
Warning: L6306W: '~PRES8' section foo.o(.text) should not use the address of 'REQ8' function foobar
where the address of an external symbol is being referred to.
There are two possible solutions to work-around this issue:
Rebuild all your objects/libraries.
If you have any assembler files, you must check that all instructions preserve eight-byte stack alignment, and if necessary, correct them.
For example, change:
STMFD sp!, {r0-r3, lr} ; push an odd number of registers
to
STMFD sp!, {r0-r3, r12, lr} ; push even number of registers
The assembler automatically marks the object with the PRES8 attribute
if all instructions preserve eight-byte stack alignment, so it is
no longer necessary to add the PRESERVE8 directive
to the top of each assembler file.
If you have any legacy objects/libraries that cannot be rebuilt, either because you do not have the source code, or because the old objects must not be rebuilt (for example, for qualification/certification reasons), then you must inspect the legacy objects to check whether they preserve eight-byte alignment or not.
Use fromelf -c to disassemble the object
code. C/C++ code compiled with ADS 1.1 or later normally preserves
eight-byte alignment, but assembled code does not.
If your objects do indeed preserve eight-byte alignment, then
the linker error L6238E can be suppressed with the use of --diag_suppress 6238 on the
linker command line.
By using this, you are effectively guaranteeing that these
objects are PRES8.
The linker warning L6306W is suppressible with --diag_suppress 6306.
See also Linker Error: L6238E: foo.o(.text) contains invalid call from '~PRES8' function to 'REQ8' function foobar.
Cannot call non-interworking <t2> symbol '<sym>' in <obj2> from <t1> code in <obj1>(<sec1>)
Example:
Cannot call non-interworking ARM symbol 'ArmFunc' in object foo.o from THUMB code in bar.o(.text)
This problem can be caused by foo.c not
being compiled with the option --apcs /interwork,
to enable ARM code to call Thumb code (and Thumb to ARM) by linker-generated
interworking veneers.
<objname>(<secname>) cannot use the address of '<attr1>' function <sym> as the image contains '<attr2>' functions.
When linking with '--strict', the linker
reports conditions that might fail as errors, for example:
Error: L6241E: foo.o(.text) cannot use the address of '~IW' function main as the image contains 'IW' functions.
IW means interworking,
and ~IW means non-interworking.
Cannot link object <objname> as its attributes are incompatible with the image attributes.
In most cases the error message you receive is similar to:
Error: L6242E: Cannot link object foo.o as its attributes are incompatible with the image attributes. require four-byte alignment of eight-byte datatypes clashes with require eight-byte alignment of eight-byte data types.
This occurs when you try to link object files built for the
ADS ABI (ADS objects or compiled with --apcs=/adsabi).
To avoid this error message you must re-compile the offending object files that use the ADS ABI.
Selector only matches removed unused sections - no section to be FIRST/LAST.
All sections matching this selector have been removed from
the image because they were unused. For more information, use
--info unused.
<type> region <regionname> address (<addr>) not aligned on a <align> byte boundary.
Failed to create requested ZI section '<name>'.
<objname>(<secname>) in <attr1> region '<r1>' cannot have <rtype> relocation to <symname> in <attr2> region '<r2>'.
Example: L6248E: foo.o(areaname) in ABSOLUTE region 'ER_RO' cannot have address/offset type relocation to symbol in PI region 'ER_ZI'.
See compiler error number 1359.
See also What does "Error: L6248E: cannot have address type relocation" mean?.
Entry point (<address>) lies within multiple sections.
Object <objname> contains illegal definition of special symbol <symbol>.
Object <objname> contains illegal reference to special symbol <symbol>.
Invalid argument for --xreffrom/--xrefto command: '<arg>'
Invalid SYMDEF address: <number>.
Invalid SYMDEF type : <type>.
The content of the symdefs file is invalid.
See the following in Using the Linker:
Could not delete file <filename>: <reason>
An I/O error occurred while trying to delete the specified file. The file was either read-only, or was not found.
<object>(<secname>) cannot be assigned to overlaid Execution region '<ername>'.
This message indicates a problem with the scatter file.
See the following in the Linker Reference:
Entry point (<address>) lies in an overlaid Execution region.
This message indicates a problem with the scatter file.
See the following in the Linker Reference:
Reserved Word '<name>' cannot be used as a <type> region name.
<name> is a reserved word, so choose
a different name for your region.
Multiple load regions with the same name (<regionname>) are not allowed.
This message indicates a problem with the scatter file.
See the following in the Linker Reference:
Multiple execution regions with the same name (<regionname>) are not allowed.
This message indicates a problem with the scatter file.
See the following in the Linker Reference:
<addr> address of <regionname> cannot be addressed from <pi_or_abs> Region Table in <regtabregionname>
The Region Table contains information used by the C-library initialization code to copy, decompress, or create ZI. This error message is given when the scatter file specifies an image structure that cannot be described by the Region Table.
The error message is most common when PI and non-PI Load Regions are mixed in the same image.
Non-PI Section <obj>(<sec>) cannot be assigned to PI Exec region <er>.
This might be caused by explicitly specifying the wrong ARM library on the linker command-line. Either:
remove the explicit specification of the ARM library
replace the library, for example, c_t.l,
with the correct library.
RWPI Section <obj>(<sec>) cannot be assigned to non-PI Exec region <er>.
A file compiled with --apcs=/rwpi is placed
in an Execution Region that does not have the PI attribute.
Two or more mutually exclusive attributes specified for Load region <regname>
This message indicates a problem with the scatter file.
Two or more mutually exclusive attributes specified for Execution region <regname>
This message indicates a problem with the scatter file.
Section <objname>(<secname>) has mutually exclusive attributes (READONLY and ZI)
This message indicates a problem with the object file.
COMMON section <obj1>(<sec1>) does not define <sym> (defined in <obj2>(<sec2>))
Given a set of COMMON sections with the
same name, the linker selects one of them to be added to the image
and discards all others. The selected COMMON section
must define all the symbols defined by any rejected COMMON section,
otherwise, a symbol which was defined by the rejected section now
becomes undefined again. The linker generates an error if the selected
copy does not define a symbol that a rejected copy does. This error
is normally be caused by a compiler fault. Contact your supplier.
Address <addr> marked both as <s1>(from <sp1>(<obj1>) via <src1>) and <s2>(from <sp2>(<obj2>) via <src2>).
The image cannot contain contradictory mapping symbols for
a given address, because the contents of each word in the image
are uniquely typed as ARM ($a) or THUMB ($t)
code, DATA ($d), or NUMBER. It is not possible
for a word to be both ARM code and DATA. This might indicate a compiler
fault. Contact your supplier.
Unknown command '<cmd>'.
Missing expected <str>.
Ambiguous selectors found for <sym> ('<sel1>' and '<sel2>').
Cannot rename both <sym1> and <sym2> to <newname>.
See the following in the Linker Reference:
Cannot rename <sym> to <newname> as a global symbol of that name exists (defined) in <obj>).
See the following in the Linker Reference:
Object <objname> contains illegal local reference to symbol <symbolname>.
An object cannot contain a reference to a local symbol, since local symbols are always defined within the object itself.
Non-relocatable Load region <lr_name> contains R-Type dynamic relocations. First R-Type dynamic relocation found in <object>(<secname>) at offset 0x<offset>.
This error occurs where there is a PI reference between two separate segments, if the two segments can be moved apart at runtime. When the linker sees that the two sections can be moved apart at runtime it generates a relocation (an R-Type relocation) that can be resolved if the sections are moved from their statically linked address. However the linker faults this relocation (giving error L6285E) because PI regions must not have relocations with respect to other sections as this invalidates the criteria for being position independent.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect to {symname|%s}. Value(<val>) out of range(<range>) for (<rtype>)
This can typically occur in handwritten assembler code, where the limited number of bits for a field within the instruction opcode is too small to refer to a symbol so far away. For example, for an LDR or STR where the offset is too large for the instruction (+/-4095 for ARM state LDR/STR instruction). In other cases, please make sure you have the latest patch installed from: http://www.arm.com/support/downloads.
For more information see Value out of range for relocation.
Illegal alignment constraint (<align>) specified for <objname>(<secname>).
An illegal alignment was specified for an ELF object.
Cannot assign Fixed Execution Region <ername> Load Address:<addr>. Load Address must be greater than or equal to next available Load Address:<load_addr>.
See the following in the Linker Reference:
Ignoring unknown attribute '<attr>' specified for region <regname>.
This error message is specific to execution regions with the FIXED attribute. FIXED means
make the load address the same as the execution address. The linker
can only do this if the execution address is greater than or equal
to the next available load address within the load region.
See the following in Using the Linker:
See the following in the Linker Reference:
<type> region <regionname> spans beyond 32 bit address space (base <base>, size <size> bytes).
The above error message relates to a problem with the scatter file.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect to <symname> SBREL relocation requires image to be RWPI
Definition of special symbol <sym1> is illegal as symbol <sym2> is absolute.
See L6188E.
Common section <object1>(<section1>) is larger than its definition <object2>(<section2>).
This might indicate a compiler fault. Contact your supplier.
Could not find file <filename>: <reason>
The specified file was not found in the default directories.
Ignoring multiple SHLNAME entry.
There can be only one SHLNAME entry in
an edit file. Only the first such entry is accepted by the linker.
All subsequent SHLNAME entries are ignored.
Duplicate input file <filename> ignored.
The specified filename occurred more than once in the list of input files.
Image does not have an entry point. (Not specified or not set due to multiple choices.)
The entry point for the ELF image was either not specified,
or was not set because there was more than one section with an entry
point linked-in. You must use linker option --entry to
specify the single, unique entry, for example:
--entry 0x0
or
--entry <label>
The label form is typical for an embedded system.
'<attr1>' section <objname>(<secname>) should not use the address of '<attr2>' function <sym>.
See L6238E.
Relocation #<rel_class>:<rel_num> in <objname>(<secname>) with respect to <sym>. Branch to unaligned destination.
Could not find any object matching <membername> in library <libraryname>.
The name of an object in a library is specified on the link-line, but the library does not contain an object with that name.
Library <libraryname> does not contain any members.
A library is specified on the linker command-line, but the library does not contain any members.
Unable to find ARM libraries.
This is most often caused by incorrect arguments to --libpath or
an invalid value for the environment variable ARMCC,
if defined.nnLIB
Set the the correct path with either the --libpath linker
option or the ARMCC environment
variable. The default path for a Windows installation is:nnLIB
install_directory\lib
Ensure this path does not include:
\armlib
\cpplib
any trailing slashes (\) at the
end. These are added by the linker automatically.
Use --verbose or --info libraries to
display where the linker is attempting to locate the libraries.
See the following in the Linker Reference:
See the following in Introducing the ARM Compiler toolchain:
Undefined symbol <symbol> (referred from <objname>).
See L6218E.
Empty <type> region description for region <region>
Using <oldname> as an section selector is obsolete. Please use <newname> instead.
For example, use of IWV$$Code within the
scatter file is obsolete. Replace IWV$$Code with Veneer$$Code.
No section matches pattern <module>(<section>).
Example:
No section matches pattern foo.*o(ZI).
This can occur for two possible reasons:
The file foo.o is mentioned in your scatter
file, but it is not listed on the linker command-line. To resolve
this, add foo.o to the link-line.
You are trying to place the ZI data of foo.o using
a scatter file, but foo.o does not contain any
ZI data. To resolve this, remove the +ZI attribute
from the foo.o line in your scatter file.
Ignoring multiple Build Attribute symbols in Object <objname>.
An object can contain at most one absolute BuildAttribute$$... symbol.
Only the first such symbol from the object symbol table is accepted
by the linker. All subsequent ones are ignored.
Ignoring multiple Build Attribute symbols in Object <objname> for section <sec_no>
An object can contain at most one BuildAttribute$$... symbol
applicable to a given section. Only the first such symbol from the
object symbol table is accepted by the linker. All subsequent ones
are ignored.
<objname>(<secname>) should not use the address of '<attr1>' function <sym> as the image contains '<attr2>' functions.
<objname>(<secname>) contains branch to a non-code symbol <sym>.
This warning means that in the (usually assembler) file, there
is a branch to a non-code symbol (in another AREA)
in the same file. This is most likely a branch to a label or address
where there is data, not code.
For example:
AREA foo, CODE B bar AREA bar, DATA DCD 0 END
This results in the message:
init.o(foo) contains branch to a non-code symbol bar.
If the destination has no name:
BL 0x200 ; Branch with link to 0x200 bytes ahead of PC
the following message is displayed:
bootsys.o(BOOTSYS_IVT) contains branch to a non-code symbol <Anonymous Symbol>.
This warning can also appear when linking objects generated
by GCC. GCC uses linker relocations for references internal to each
object. The targets of these relocations might not have appropriate
mapping symbols that permit the linker to determine whether the
target is code or data, so a warning is generated. By contrast, armcc resolves
all such references at compile-time.
Ignoring <cmd> command. Cannot find section <objname>(<secname>).
For example, when building a Linux application, you might have:
--keep *(.init_array)
on the linker command-line in your makefile, but this section might not be present when building with no C++, in which case this warning is reported:
Ignoring --keep command. Cannot find section *(.init_array)
You can often ignore this warning, or suppress it with --diag_suppress 6319.
Ignoring <cmd> command. Cannot find argument '<argname>'.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect to <sym>. Multiple variants exist. Using the <type> variant to resolve ambiguity
Ignoring <attr> attribute specified for Load region <regname>.
This attribute is applicable to execution regions only. If specified for a Load region, the linker ignores it.
Ignoring <attr> attribute for region <regname> which uses the +offset form of base address.
This attribute is not applicable to regions using the +offset form
of base address. If specified for a region, which uses the +offset form,
the linker ignores it.
A region that uses the +offset form of
base address inherits the PI, RELOC,
or OVERLAY attributes from either:
the previous region in the description
the parent load region if it is the first execution region in the load region.
See the following in the Linker Reference:
Ignoring ZEROPAD attribute for non-root execution region <ername>.
ZEROPAD only applies to root execution
regions. A root region is a region whose execution address is the
same as its load address, and so does not require moving or copying
at run-time.
See the following in the Linker Reference:
Pattern <module>(<section>) only matches removed unused sections.
All sections matching this pattern have been removed from
the image because they were unused. For more information, use --info
unused.
See the following in Using the Linker:
See the following in the Linker Reference:
Undefined symbol <symbol> (referred from <objname>). Unused section has been removed.
This means that an unused section has had its base and limit
symbols referenced. For more information, use --info unused.
See the following in Using the Linker:
See the following in the Linker Reference:
No eligible global symbol matches pattern <pat>.
Undefined symbol <sym1> (referred from <obj1>). Resolved to symbol <sym2>.
Overalignment <overalignment> for region <regname> cannot be negative.
See the following in Using the Linker:
ARM interworking code in <objname>(<secname>) may contain invalid tailcalls to ARM non-interworking code.
The compiler is able to perform tailcall optimization for improved code size and performance. However, there is a problematic sequence for Architecture 4T code where a Thumb IW function calls (by a veneer) an ARM IW function, which tailcalls an ARM not-IW function. The return from the ARM not-IW function can pop the return address off the stack into the PC instead of using the correct BX instruction. The linker can warn of this situation and report the above warning.
Thumb IW tailcalls to Thumb not-IW do not occur because Thumb tailcalls with B are so short ranged that they can only be generated to functions in the same ELF section which must also be Thumb.
The warning is pessimistic in that an object might contain invalid tailcalls, but the linker cannot be sure because it only looks at the attributes of the objects, not at the contents of their sections.
To avoid the warning, either recompile your entire code base,
including any user libraries, with --apcs /interwork,
or manually inspect the ARM IW function to check for tailcalls (that
is, where function calls are made using an ordinary branch B instruction),
to check whether this is a real problem. This warning can be suppressed
with --diag_suppress L6335W.
Common code sections <o1>(<s1>) and <o2>(<s2>) have incompatible floating-point linkage
Ignoring RELOC attribute for execution region <er_name>.
Execution regions cannot explicitly be given RELOC attribute.
They can only gain this attribute by inheriting from the parent
load region or the previous execution region if using the +offset form
of addressing.
See the following in the Linker Reference:
options first and last are ignored for link type of <linktype>
The --first and --last options
are meaningless when creating a partially-linked object.
<object> attributes<attr> are not compatible with the provided cpu and fpu attributes<cli> <diff>.
<object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes<cli> <diff>
<symbol> defined in <object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes<cli> <diff>
<symbol> defined in <object>(ABSOLUTE) are not compatible with the provided cpu and fpu Attributes<cli> <diff>
cpu <cpu> is not compatible with fpu <fpu>
See the following in the Linker Reference:
Adding attributes from cpu and fpu: <attrs>
Image needs at least one load region.
libattrs.map file not found in System Library directory <dir>. Library selection may be impaired.
No Load Execution Region of name <region> seen yet at line <line>.
This might be because you have used the current base address in a limit calculation in a scatter file. For example:
ER_foo 0 ImageBase(ER_foo)
Addition overflow on line <line>
Exec Region Expressions can only be used in base address calculations on line <line>
Load Region Expressions can only be used in ScatterAssert expressions on line <line>
See the following in the Linker Reference:
ScatterAssert expression <expr> failed on line <line>
See the following in the Linker Reference:
Load Region <name> on line <line> not yet complete, cannot use operations that depend on length of region
Conditional operator (expr) ? (expr) : (expr) on line <line> has no : (expr).
See the following in the Linker Reference:
FILL value preferred to combination of EMPTY, ZEROPAD and PADVALUE for Execution Region <name>.
See the following in the Linker Reference:
No .ANY selector matches Section <name>(<objname>).
See the following in Using the Linker:
No space in execution regions with .ANY selector matching Section <name>(<objname>).
This occurs if there is not sufficient space in the scatter
file regions containing .ANY to place the section
listed. You must modify your scatter file to ensure there is sufficient
space for the section.
See the following in Using the Linker:
Sections of aggregate size 0x<size> bytes could not fit into .ANY selector(s).
This warning identifies the total amount of image data that
cannot be placed in any .ANY selectors.
For example, .ANY(+ZI) is placed in an
execution region that is too small for the amount of ZI data:
ROM_LOAD 0x8000
{
ROM_EXEC 0x8000
{
.ANY(+RO,+RW)
}
RAM +0 0x{...} <<< region max length is too small
{
.ANY(+ZI)
}
}
See the following in Using the Linker:
Output is --fpic yet section <sec> from <obj> has no FPIC attribute.
Output is --fpic yet object <obj> has no FPIC attribute.
Symbol <sym> with non STV_DEFAULT visibility <vis> should be resolved statically, cannot use definition in <lib>.
No compatible library exists with a definition of startup symbol <name>.
Disabling merging for section <sec> from object <obj>, non R_ARM_ABS32 relocation from section <srcsec> from object <srcobj>
Disabling merging for section <sec> from object <obj>, Section contains misaligned string(s).
--ropi used without --rwpi or --rw-base.
See the following in the Linker Reference:
Could not find a unique set of libraries compatible with this image. Suggest using the --cpu option to select a specific library.
See the following in the Linker Reference:
Relocation <type> at <relclass>:<idx> <objname>(<secname>) cannot be veneered as it has an offset <offset> from its target.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is with respect to a reserved tagging symbol(#<idx>).
Tagging symbol <symname> defined in <objname>(<secname>) is not recognized.
Undefined symbol <symbol> (referred from <objname>) imported.
Ignoring <oepname>(<secname>:<secnum>) as it is not of a recognized type.
PLT generation requires an architecture with ARM instruction support.
For the linker to generate PLT, you must
be using a target that supports the ARM instruction set. For example,
the linker cannot generate PLT for a Cortex-M3 target.
Within the same collection, section <secname> cannot have different sort attributes.
Within the same collection, section <secname1> and section <secname2> cannot be separated into different execution regions.
Within the same collection, section <secname> cannot have their section names with different length.
Within the same collection, section <secname> cannot have its name duplicated.
Cannot rename <sym> to <newname> as it has already been renamed to <name>).
Attempt to set maximum number of open files to <val> failed with error code <error>.
An attempt to increase the number of file handles armlink can keep open at any one time has failed.
Ignoring incompatible enum size attribute on Symbol <symbol> defined in <object>(<section>).
Ignoring incompatible enum size attribute on Object <object>(<section>).
Ignoring incompatible enum size attribute on object <object>.
Ignoring incompatible wchar_t size attribute on Symbol <symbol> defined in <object>(<section>).
Ignoring incompatible wchar_t size attribute on Section <object>(<section>).
Ignoring incompatible wchar_t size attribute on object <object>.
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <armsym>. Branch relocation to untyped symol in object <armobjname>, target state unknown.
__AT section <objname>(<secname>) address <address> must be at least 4 byte aligned.
Multiply defined Global Symbol <sym> defined in <objname>(<secname>) rejected in favour of Symbol defined in <selobj>(<selsec>).
Unexpected failure in link-time code generation
System call to get maximum number of open files failed <error>.
Linker requires a minimum of <min> open files, current system limit is <max> files.
Data Compression for region <region> turned off. Region contains reference to symbol <symname> which depends on a compressed address.
The linker requires the contents of a region to be fixed before it can be compressed and cannot modify it after it has been compressed. Therefore a compressible region cannot refer to a memory location that depends on the compression process.
symbol visibility : <symname> set to <visibility>.
symbol visibility : <symname> merged to <set_vis> from existing <old_vis> and new <new_vis>.
SHT_PREINIT_ARRAY sections are not permitted in shared objects.
While processing <filename>: <message>
While processing <filename>: <message>
Cannot find library <libname>.
<object> built permitting Thumb is forbidden in an ARM-only link.
<object>(<section>) built permitting Thumb is forbidden in an ARM-only link.
<symbol> defined in <object>(<section>) built permitting Thumb is forbidden in an ARM-only link.
<symbol> defined in <object>(ABSOLUTE) built permitting Thumb is forbidden in an ARM-only link.
Symbol <symbolname> has deprecated ARM/Thumb Synonym definitions (by <object1> and <object2>).
Could not create temporary file.
Reference to <sym> from a shared library only matches a definition with Hidden or Protected Visibility in Object <obj>.
Input Objects contain <archtype> instructions but could not find valid target for <archtype> architecture based on object attributes. Suggest using --cpu option to select a specific cpu.
See the following in the Linker Reference:
Only one of --dynamic_debug, --emit-relocs and --emit-debug-overlay-relocs can be selected.
See the following in the Linker Reference:
Library reports remark: <msg>
Only --pltgot=direct or --pltgot=none supported for --base_platform with multiple Load Regions containing code.
See the following in the Linker Reference:
--base_platform does not support RELOC Load Regions containing non RELOC Execution Regions. Please use +0 for the Base Address of Execution Region <ername> in Load Region <lrname>.
See the following in the Linker Reference:
PLT section <secname> cannot be moved outside Load Region <lrname>.
Branch Relocation <rel_class>:<idx> in section <secname> from object <objname> refers to ARM Absolute <armsym> symbol from object <armobjname>, Suppress error to treat as a Thumb address.
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <armsym>. Branch refers to ARM Absolute Symbol defined in <armobjname>, Suppress error to treat as a Thumb address.
IMPORT/EXPORT commands ignored when --override_visibility is not specified
The symbol you are trying to export, either with an EXPORT command
in a steering file or with the --undefined_and_export command-line
option, is not exported becuase of low visibility.
See the following in the Linker Reference:
Cannot increase size of RegionTable <sec_name> from <obj_name>
Cannot increase size of ZISectionTable <sec_name> from <obj_name>
Unmatched parentheses expecting ) but found <character> at position <col> on line <line>
This message indicates a parsing error in the scatter file.
Invalid token start expected number or ( but found <character> at position <col> on line <line>
This message indicates a parsing error in the scatter file.
Division by zero on line <line>
This message indicates an expression evaluation error in the scatter file.
Subtraction underflow on line <line>
This message indicates an expression evaluation error in the scatter file.
Pre-processor command in '<filename>'too long, maximum length of <max_size>
This message indicates a problem with pre-processing the scatter file.
Could not open intermediate file '<filename>' produced by pre-processor: <reason>
This message indicates a problem with pre-processing the scatter file.
Pre-processor step failed for '<filename>'
This message indicates a problem with pre-processing the scatter file.
No input objects specified. At least one input object or library(object) must be specified.
At least one input object or library(object) must be specified.
Object <objname> has a link order dependency cycle, check sections with SHF_LINK_ORDER
PDTTable section not least static data address, least static data section is <secname>
Systems that implement shared libraries with RWPI use a process data table (PDT). It is created at static link time by the linker and must be placed first in the data area of the image.
This message indicates that the scatter file does not permit placing the PDT first in the data area of the image.
To avoid the message, adjust your scatter file so that the
PDT is placed correctly. This message can also be triggered if you
accidentally build object files with --apcs=/rwpi.
Unused virtual function elimination might not work correctly, because <obj_name> has not been compiled with --vfe
The virtual function elimination information in section <sectionname> refers to the wrong section.
This message might indicate a compiler fault. Contact your supplier.
Unexpectedly reached the end of the buffer when reading the virtual function elimination information in section <oepname>(<sectionname>).
This message might indicate a compiler fault. Contact your supplier.
The virtual function elimination information in section <oepname>(<sectionname>) is incorrect: there should be a relocation at offset <offset>.
This message might indicate a compiler fault. Contact your supplier.
The virtual function elimination information in section <oepname>(<sectionname>) contains garbage from offset <offset> onwards.
This message might indicate a compiler fault. Contact your supplier.
The virtual function elimination information for <vcall_objectname>(<vcall_sectionname>) incorrectly indicates that section <curr_sectionname>(object <curr_objectname>), offset <offset> is a relocation (to a virtual function or RTTI), but there is no relocation at that offset.
This message might indicate a compiler fault. Contact your supplier.
EMPTY region <regname> must have a maximum size.
See the following in the Linker Reference:
Object <objname> Group section <sectionidx> contains invalid symbol index <symidx>.
Section <secname> from object <objname> has SHF_GROUP flag but is not member of any group.
Cannot reverse Byte Order of Data Sections, input objects are <inputendian> requested data byte order is <dataendian>.
Rejected Local symbol <symname> referred to from a non group member <objname>(<nongrpname>)
This message might indicate a compiler fault. Contact your supplier.
Internal error: the vfe section list contains a non-vfe section called <oepname>(<secname>).
This message might indicate a compiler fault. Contact your supplier.
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is with respect to a symbol(#<idx> before last Map Symbol #<last>).
Neither Lib$$Request$$armlib Lib$$Request$$cpplib defined, not searching ARM libraries.
This reproduces the warning:
AREA Block, CODE, READONLY EXPORT func1 ;IMPORT || Lib$$Request$$armlib|| IMPORT printf func1 LDR r0,=string BL printf BX lr AREA BlockData, DATA string DCB "mystring" END
The linker has not been told to look in the libraries and
so cannot find the symbol printf.
This also causes an error:
L6218E: Undefined symbol printf (referred from L6665W.o).
If you do not want the libraries, then ignore this message. Otherwise, to fix both the error and the warning uncomment the line:
IMPORT || Lib$$Request$$armlib||
Data in output ELF section #<sec> '<secname>' was not suitable for compression (<data_size> bytes to <compressed_size> bytes).
Merge Section <oepname>(<spname>) is a code section
Merge Section <oepname>(<spname>) has an element size of zero
Section <spname> from object <oepname> has SHF_STRINGS flag but not SHF_MERGE flag
Section <spname> from object <oepname> has a branch reloc <rel_idx> to a SHF_MERGE section
Relocation #<rel_class>:<rel_idx> in <oepname>(<spname>) references a negative element
Relocation #<rel_class>:<rel_idx> in <oepname>(<spname>). Destination is in the middle of a multibyte character
Merge Section <spname> from object <oepname> has no symbols
Section <er> implicitly marked as non-compressible.
Padding value not specified with PADVALUE attribute for execution region <regionname>.
See the following in the Linker Reference:
Could not process debug frame from <secname> from object <oepname>.
Could not associate fde from <secname> from object <oepname>.
Function at offset <offset> in <oepname>(<secname>) has no symbol.
Exception index table section .ARM.exidx from object <oepname> has no data.
Exception table <spname> from object <oepname> present in image, --noexceptions specified.
See the following in the Linker Reference:
Section #<secnum> '<secname>' in <oepname> is not recognized and cannot be processed generically.
Unused virtual function elimination might not work correctly, because there are dynamic relocations.
Link order dependency on invalid section number <to> from section number <from>.
Relocation #<rel_class>:<index> in <objname>(<secname>) with respect to <name>. Symbol has ABI type <type>, legacy type <legacy_type>.
A change in the linker behavior gives warnings about strict compliance with the ABI.
The following example produces a warning only if linking with a toolchain that is compliant with an earlier version of the Application Binary Interface (ABI). The ARM Compiler toolchain v4.1and later does not give this warning.
Example:
AREA foo, CODE, READONLY
CODE32
ENTRY
KEEP
func proc
NOP
ENDP
DCD foo
END
The warning is related to how the assembler marks sections
for interworking. Previously, the section symbol foo would
be marked as ARM or Thumb code in the ELF file. The DCD
foo above would therefore also be marked as subject to interworking.
However, the ABI specifies that only functions are be subject
to interworking and marked as ARM or Thumb. The linker therefore
warns that it is expecting DCD <number>, which
does not match the symbol type (ARM, or Thumb if you use CODE16)
of the area section.
The simplest solution is to move the data into a separate data area in the assembly source file.
Alternatively, you can use --diag_suppress 6730 to
suppress this warning.
Unused virtual function elimination might not work correctly, because the section referred to from <secname> does not exist.
<objname>(<secname>) contains offset relocation from <lr1name> to <lr2name>, load regions must be rigidly relative.
Relocation #<rel_class>:<relocnum> in <oepname>(<secname>) with respect to <wrtsym> is a GOT-relative relocation, but _GLOBAL_OFFSET_TABLE_ is undefined.
Some GNU produced images can refer to the symbol named _GLOBAL_OFFSET_TABLE_.
If there are no GOT Slot generating relocations
and the linker is unable to pick a suitable address for the GOT
base the linker issues this error message.
Version '<vername>' has a dependency to undefined version '<depname>'.
Symbol '<symname>' versioned '<vername>' defined in '<symverscr>' but not found in any input object.
Versioned symbol binding should be 'local:' or 'global:'.
Symbol '<symname>' defined by '<oepname>'. Cannot not match to default version symbol '<defversym>'
Relocation #<rel_class>:<index> in <oepname>(<spname>) with respect to <symname> that has an alternate def. Internal consistency check failed
Relocation #<rel_class>:<index> <oepname>(<spname>) with respect to undefined symbol <symname>. Internal consistency check:
Target CPU <cpuname> does not Support ARM, <objname>(<secname>) contains ARM code
Raising target architecture from <oldversion> to <newversion>.
If the linker detects objects that specify the obsolete ARMv3, it upgrades these to ARMv4 to be usable with ARM libraries.
Missing dynamic array, symbol table or string table in file <oepname>.
No such sorting algorithm <str> available.
CallTree sorting needs Entry Point to lie within a CallTree Sort ER.
Removing symbol <symname>.
Cannot build '<type>' PLT entries when building a <imgtype>.
'<optname>' cannot be used when building a shared object or DLL. Switching it off
Cannot create a PLT entry for target architecture 4T that calls Thumb symbol <symname>
Shared object entry points must be ARM-state when linking architecture 4T objects.
This can occur when linking with GNU C libraries. The GNU
startup code crt1.o does not have any build attributes
for the entry point, so the linker cannot determine which execution
state (ARM or Thumb) the code runs in. Because the GNU C library
startup code is ARM code, you can safely ignore this warning, or suppress
it with --diag_suppress 6765.
PLT entries for architecture 4T do not support incremental linking.
Relocation #<rel_class>:<relocnum> in <oepname>(<secname>) with respect to <wrtsym>. No GOTSLOTexists for symbol.
The size and content of the dynamic array changed too late to be fixed.
<oepname>(<secname>) contains one or more address-type relocations in RO data. Making section RW to be dynamically relocated at run-time.
<objname>(<secname>) has debug frame entries of a bad length.
<objname>(<secname>) has FDEs which use CIEs which are not in this section.
The debug frame in <objname>(<secname>) does not describe an executable section.
The debug frame in <objname>(<secname>) has <actual> relocations (expected <expected>)
The debug frame in <objname>(<secname>) uses 64-bit DWARF.
<origvis> visibility removed from symbol '<symname>' through <impexp>.
Value(<val>) Cannot be represented by partition number <part> for relocation #<rel_class>:<rel_number> (<rtype>, wrt symbol <symname>) in <objname>(<secname>)
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect to <symname>. Value(<val>) Cannot be represented by partition number <part> for relocation type >rtype>
Relocation #<rel_class>:<relnum> '<rtype>' in <oepname> may not access data correctly alongside <pltgot_type> PLT entries
Mapping symbol #<symnum> '<msym>' in <oepname>(<secnum>:<secname>) defined at the end of, or beyond, the section size (symbol offset=0x<moffset>, section size=0x<secsize>)
This indicates that the address for a section points to a
location at the end of or outside of the ELF section. This can be
caused by an empty inlined data section and indicates there might
be a problem with the object file. You can use --diag_warning
6783 to suppress this error.
Symbol #<symnum> '<symname>' in <oepname>(<secnum>:<secname>) with value <value> has size 0x<size> that extends to outside the section.
The linker encountered a symbol with a size that extends outside
of its containing section. This message is only a warning by default
in the RVCT 2.2 SP1 and later toolchains. Use --diag_warning
6784 to suppress this error.
Symbol '<symname>' marked for import from '<libname>' already defined by '<oepname>'
Mapping symbol #<symnum> '<msym>' in <oepname>(<secnum>:<secname>) defined at unaligned offset=0x<moffset>
Region table handler '<handlername>' needed by entry for <regionname> was not found.
Scatter-loading of execution region <er1name> to [<base1>,<limit1>) will cause the contents of execution region <er2name> at [<base2>,<limit2>) to be corrupted at run-time.
This occurs when scatter-loading takes place and an execution region is put in a position where is overwrites partially or wholly another execution region (which can be itself or another region).
For example, this works:
LOAD_ROM 0x0000 0x4000
{
EXEC1 0x0000 0x4000
{
* (+RO)
}
EXEC2 0x4000 0x4000
{
* (+RW,+ZI)
}
}
This generates the error:
LOAD_ROM 0x0000 0x4000
{
EXEC1 0x4000 0x4000
{
* (+RW,+ZI)
}
EXEC2 0x0000 0x4000
{
* (+RO)
}
and reports:
Error: L6788E: Scatter-loading of execution region EXEC2 will cause the contents of execution region EXEC2 to be corrupted at run-time.
See the following in Using the Linker:
Library <library> member <filename> : Endianness mismatch.
Relocation #<rel_class>:<relnum> in <objname>(<secname>) with respect to <symname>. May not IMPORT weak reference through GOT-generating relocation
Unknown personality routine <pr> at 0x<offset> <oepname>(<secname>).
Descriptor at offset 0x<offset> <oepname>(<secname>).
Expecting Landing pad reference at offset 0x<offset> in cleanup descriptor <oepname>(<secname>).
Expecting Landing pad reference at offset 0x<offset> in catch descriptor <oepname>(<secname>).
Expecting RTTI reference at offset 0x<offset> in catch descriptor <oepname>(<secname>).
Descriptor at offset 0x<offset> <oepname>(<secname>) overruns end of section.
Data at Offset 0x<offset> in exception table <oepname>(<secname>) overruns end of section
Expecting RTTI reference at offset 0x<offset> in Function Specification descriptor <oepname>(<secname>).
Expecting Landing Pad reference at offset 0x<offset> in Function Specification descriptor <oepname>(<secname>).
A landing pad is code that cleans up after an exception has been raised. If the linker detects old-format exception tables, it automatically converts them to the new format.
This message does not appear unless you are using a later version of the linker with an earlier version of the compiler.
Cannot convert generic model personality routine at 0x<offset> <oepname>(<secname>).
A personality routine is used to unwind the exception handling stack. If the linker detects old-format exception tables then it automatically converts them to the new format. This message indicates a fault in the compiler. Contact your supplier.
<objname>(<secname>) containing <secarmthumb> code cannot use the address of '~IW (The user intended not all code should interwork)' <funarmthumb> function <sym>.
The linker can diagnose where a non-interworking (~IW)
function has its address taken by code in the other state. This
error is disabled by default, but can be enabled by linking with --strict.
The error can be downgraded to just a warning with --diag_warning
6801 and subsequently suppressed completely if required with --diag_suppress
6801
Where code, for example, in a.c uses the
address of a non-interworking function in t.c:
armcc -c a.c armcc --thumb -c t.c armlink t.o a.o --strict
reports:
Error: L6801E: a.o(.text) containing ARM code cannot use the address of '~IW' Thumb function foo.
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <armsym>. Thumb Branch to non-Thumb symbol in <armobjname>(<armsecname>).
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <armsym>. Thumb Branch is unlikely to reach target in<armobjname>(<armsym>).
Legacy use of symbol type STT_TFUNC detected
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <armsym>. Branch to untyped Absolute symbol in <armobjname>, target state unknown
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <othersym>. Branch to untyped symbol in <otherobjname>(<othersecname>), ABI requires external code symbols to be of type STT_FUNC.
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <othersym>. Branch to untyped symbol in same section. State change is required.
Relocation <rel_class>:<idx> in <objname>(<secname>) is of deprecated type <rtype>, please see ARMELF for ABI compliant alternative
Relocation <rel_class>:<idx> in <objname>(<secname>) is of obsolete type <rtype>
Relocation errors and warnings are most likely to occur if you are linking object files built with previous versions of the ARM tools.
To show relocation errors and warnings use the --strict_relocations switch. This
option enables you to ensure ABI compliance of objects. It is off
by default, and deprecated and obsolete relocations are handled
silently by the linker.
See the following in the Linker Reference:
Unknown symbol action type, please contact your supplier.
Could not find Symbol <symname> to rename to <newname>.
See the following in the Linker Reference:
Out of memory. Allocation Size:<alloc_size> System Size:<system_size>.
This error is reported by ARM Compiler toolchain v4.1 and later. It provides information about the amount of memory available and the amount of memory required to perform the link step.
This error occurs because the linker does not have enough memory to link your target object. This is not common, but might be triggered for a number of reasons, such as:
linking very large objects or libraries together
generating a large amount of debug information
having very large regions defined in your scatter file.
In these cases, your workstation might run out of virtual memory.
This issue might also occur if you use the FIXED scatter-loading
attribute. The FIXED attribute forces an execution
region to become a root region in ROM at a fixed address. The linker
might have to add padding bytes between the end of the previous
execution region and the FIXED region, to generate
the ROM image. The linker might run out of memory if large amounts
of padding are added when the address of the FIXED region
is far away from the end of the execution region. The link step
might succeed if the gap is reduced.
See the following in the Linker Reference:
See the following in the Using the Linker:
While the linker can generate images of almost any size, it requires a larger amount of memory to run and finish the link. Try the following solutions to improve link-time performance, to avoid the Out of memory error:
Shut down all non-essential applications and processes when you are linking.
For example, if you are running under Eclipse, try running your linker from the command-line, or exiting and restarting Eclipse between builds.
Use the 64-bit version of the linker.
If you are using a 64-bit operating system, it is possible to make use of a 64-bit version of armlink. See the following in the Introducing the ARM Compiler toolchain:
Use the --no_debug linker option.
This command tells the linker to create the object without including any debug information. See the following in the Linker Reference:
It is not possible to perform source level debugging if you use this option.
Reduce debug information.
If you do not want to use the --no_debug option,
there are other methods you can use to try and reduce debug information.
See the following in Using the Compiler:
You can also use the fromelf utility to strip debug information from objects and libraries that you do not need to debug. See the following in Using the fromelf Image Converter:
Use partial linking.
You can use partial linking to split the link stage over a few smaller operations. Doing this also stops duplication of the object files in memory in the final link.
See the following in the Linker Reference:
Increase memory support on Windows operating systems.
On some Windows operating systems it is possible to increase the virtual address space from 2GB (the default) to 3GB. For more information, see the following Microsoft article:
Use the --no_eager_load_debug linker
option.
This option is available in RVCT 4.0 build 697 and later. It causes the linker to remove debug section data from memory after object loading. This lowers the peak memory usage of the linker at the expense of some linker performance, because much of the debug data has to be loaded again when the final image is written.
See the following in the Linker Reference:
If you are still experiencing the same problem, raise a support case.
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <symname>, Branch source address <srcaddr> cannot reach next available pool at [<pool_base>,<pool_limit>). Please use the --veneer_pool_size option to increase the contingency.
The --veneer_inject_type=pool veneer generation
model requires branches to veneers in the pool to be able to reach
the pool limit, which is the highest possible address a veneer can
use. If a branch is later found that cannot reach the pool limit, and armlink is
able to fit all the veneers in the pool into the lower pool limit,
then armlink reduces the pool limit to accomodate
the branch. Error message L6828 is issued only if armlink is
unable to lower the pool limit.
See the following in the Linker Reference:
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <armsym>. ARM branch to non-ARM/Thumb symbol in <armobjname>(<armsecname>).
Existing SYMDEFS file '<filename> 'is read-only.
Expected parentheses to specify priority between AND and OR operators.
Expected symbol name.
Expected a string.
Cannot execute '<text>' in '<clause>' clause of script.
Destination symbol of rename operation clashes with another rename.
Source symbol of rename operation clashes with another rename.
(This is the rename operation which it clashes with.)
Expected an expression.
Expected a phase name.
Symbol <symname> defined at index <idx> in <oepname>(<secname>), has ABI symbol type <symtype> which is inconsistent with mapping symbol type <maptype>.
Expected execution region name.
option <spurious> ignored when using --<memoption>.
Library reports error: <msg>
The message is typically one of the following:
Error: L6915E: Library reports error: scatter-load file declares no heap or stack regions and __user_initial_stackheap is not defined.
or
Error: L6915E: Library reports error: The semihosting __user_initial_stackheap cannot reliably set up a usable heap region if scatter loading is in use
It is most likely that you have not re-implemented __user_setup_stackheap() or
you have not defined ARM_LIB_STACK or ARM_LIB_HEAP regions
in the respective scatter file.
__user_setup_stackheap() supersedes the
deprecated function __user_initial_stackheap().
See the following in Developing Software for ARM® Processors:
See the following in C and C++ Libraries and Floating-Point Support Reference:
See the following in Using the Linker:
Error: L6915E: Library reports error: __use_no_semihosting was requested but <function> was referenced.
Where <function> represents __user_initial_stackheap, _sys_exit, _sys_open, _sys_tmpnam, _ttywrch,
system, remove, rename, _sys_command_string, time,
or clock
This error can appear when retargeting semihosting-using functions,
in order to avoid any SVC/BKPT instructions
being linked-in from the C libraries.
Ensure that no semihosting-using functions are linked in from the C library by using:
#pragma import(__use_no_semihosting)
See the following in Using C and C++ Libraries and Floating-Point Support:
If there are still semihosting-using functions being linked in, the linker reports this error.
To resolve this, you must provide your own implementations of these C library functions.
The emb_sw_dev directory contains examples
of how to re-implement some of the more common semihosting-using
functions. See the file retarget.c.
See Using C and C++ Libraries and Floating-Point Support for more information on using semihosting-using C library functions.
The linker does not report any semihosting-using functions
such as, for example, __semihost(), in your
own application code.
To identify which semihosting-using functions are still being linked-in from the C libraries:
Link
with armlink --verbose --list err.txt
Search err.txt for occurrences
of __I_use_semihosting
For example:
… Loading member sys_exit.o from c_4.l. reference : __I_use_semihosting definition: _sys_exit …
This shows that the semihosting-using function _sys_exit is
linked-in from the C library. To prevent this, you must provide
your own implementation of this function.
Error: L6915E: Library reports error:__use_no_heap was requested, but <reason> was referenced
If <reason> represents malloc, free, __heapstats,
or __heapvalid, the use of __use_no_heap conflicts
with these functions.
Error: L6915E: Library reports error:__use_no_heap_region was requested, but <reason> was referenced
If <reason> represents malloc, free, __heapstats, __heapvalid,
or __argv_alloc, the use of __use_no_heap_region conflicts
with these functions.
Relocation #<rel_class>:<idx> in <oepname>(<spname>). R_ARM_CALL for conditional BL instruction).
Relocation #<rel_class>:<idx> in <oepname>(<spname>). R_ARM_JUMP24 for BLX instruction.
Execution region <ername> placed at 0x<eraddr> needs padding to ensure alignment <spalign> of <oepname>(<spname>).
Section <objname>(<secname>) has mutually exclusive attributes (READONLY and TLS)
Relocation #<rel_class>:<idx> in <oepname>(<spname>) with respect to <symname>. TLS relocation <type> to non-TLS symbol in <symobjname>(<symsecname>).
Relocation #<rel_class>:<idx> in <oepname>(<spname>) with respect to <symname>. Non-TLS relocation <type> to STT_TLS symbol in <symobjname>(<symsecname>).
Ignoring <token> attribute for region <region>. MemAccess support has been removed.
Relocation #<rel_class>:<idx> in <oepname>(<spname>) has incorrect relocation type <rtype> for instruction encoding 0x<bl>.
Relocation #<rel_class>:<idx> in <oepname>(<spname>) has incorrect relocation type <rtype> for instruction encoding 0x<bl1><bl2>.
Library reports warning: <msg>
Debug Group contents are not identical, <name> with signature sym <sig> from objects (<new>) and (<old>)
Multiple RESOLVE clauses in library script for symbol '<sym>'.
Multiple definitions of library script function '<func>'.
Missing alignment for region <regname>.
Alignment <alignment> for region <regname> must be at least 4 and a power of 2 or MAX.
chmod system call failed for file <filename> error <perr>
Execution Region <ername> contains multiple <type>, sections:
Alignment <alignment> for region <regname> cannot be negative.
Entry point (<address>) points to a THUMB instruction but is not a valid THUMB code pointer.
Could not parse Linux Kernel version \"<kernel>\".
Changing AT Section <name> type from RW to RO in <ername>.
<objname>(<secname>) type <type> incompatible with <prevobj>(<prevname>) type <prevtype> in er <ername>.
You might see this message when placing __at sections
with a scatter file. For example, the following code in main.c and
the related scatter file gives this error:
int variable __attribute__((at(0x200000)));
LR1 0x0000 0x20000
{
ER1 0x0 0x2000
{
*(+RO)
}
ER2 0x8000 0x2000
{
main.o
}
RAM 0x200000 (0x1FF00-0x2000)
{
*(+RW, +ZI)
}
}
The variable has the type ZI, and the linker attempts to place
it at address 0x200000. However, this address
is reserved for RW sections by the scatter file. This produces the
error:
Error: L6971E: stdio_streams.o(.data) type RW incompatible with main.o(.ARM.__AT_0x00200000) type ZI in er RAM.
To fix this change the address in your source code, for example:
int variable __attribute__((at(0x210000)));
See the following in Using the Linker:
<objname>(<secname>) with required base 0x<required> has been assigned base address 0x<actual>.
Error placing AT section at address 0x<addr> in overlay ER <ername>.
See the following in Using the Linker:
AT section <name> does not have a base address.
See the following in Using the Linker:
<objname>(<secname>) cannot have a required base and SHF_MERGE.
<objname>(<secname>) cannot have a required base and SHF_LINK_ORDER.
<objname>(<secname>) cannot be part of a contiguous block of sections
<objname>(<secname>) has a user defined section type and a required base address.
<objname>(<secname>) with required base address cannot be placed in Position Independent ER <ername>.
FIRST and LAST ignored for <objname>(<secname>) with required base address.
See the following in Using the Linker:
__AT incompatible with BPABI and SystemV Image types
See the following in Using the Linker:
AT section <objname>(<spname>) with base <base> limit <limit> overlaps address range with AT section <obj2name>(<sp2name>) with base <base2> limit <limit2>.
See the following in Using the Linker:
AT section <objname>(<spname>) with required base address <base> out of range for ER <ername> with base <erbase> and limit <erlimit>.
See the following in Using the Linker:
AT section <objname>(<spname>) has required base address <base> which is not aligned to section alignment <alignment>.
See the following in Using the Linker:
Unable to automatically place AT section <objname>(<spname>) with required base address <base>. Please manually place in the scatter file using the --no_autoat option.
See the following in Using the Linker:
See the following in Linker Reference: