Arm® Compiler For Embedded Errors and Warnings Reference Guide
Arm® Compiler For Embedded Errors and Warnings Reference Guide
Version 6.22
Non-Confidential Issue 00
Copyright © 2014–2024 Arm Limited (or its affiliates). 100074_6.22_00_en
All rights reserved.
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Release information
Document history
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 2 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
0616- 12 March 2021 Non- Documentation update 1 for Arm Compiler v6.16
01 Confidential Release.
0617- 20 October 2021 Non- Arm Compiler for Embedded v6.17 Release.
00 Confidential
0618- 22 March 2022 Non- Arm Compiler for Embedded v6.18 Release.
00 Confidential
0619- 12 October 2022 Non- Arm Compiler for Embedded v6.19 Release.
00 Confidential
0620- 15 March 2023 Non- Arm Compiler for Embedded v6.20 Release.
00 Confidential
0621- 11 October 2023 Non- Arm Compiler for Embedded v6.21 Release.
00 Confidential
0622- 13 March 2024 Non- Arm Compiler for Embedded v6.22 Release.
00 Confidential
Proprietary Notice
This document is protected by copyright and other related rights and the use or implementation of
the information contained in this document may be protected by one or more patents or pending
patent applications. No part of this document may be reproduced in any form by any means
without the express prior written permission of Arm Limited ("Arm"). No license, express or implied,
by estoppel or otherwise to any intellectual property rights is granted by this document unless
specifically stated.
Your access to the information in this document is conditional upon your acceptance that you
will not use or permit others to use the information for the purposes of determining whether the
subject matter of this document infringes any third party patents.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 3 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
The content of this document is informational only. Any solutions presented herein are subject
to changing conditions, information, scope, and data. This document was produced using
reasonable efforts based on information available as of the date of issue of this document.
The scope of information in this document may exceed that which Arm is required to provide,
and such additional information is merely intended to further assist the recipient and does not
represent Arm’s view of the scope of its obligations. You acknowledge and agree that you possess
the necessary expertise in system security and functional safety and that you shall be solely
responsible for compliance with all legal, regulatory, safety and security related requirements
concerning your products, notwithstanding any information or support that may be provided by
Arm herein. conjunction with any Arm technology described in this document, and to minimize
risks, adequate design and operating safeguards should be provided for by you.
This document may include technical inaccuracies or typographical errors. THIS DOCUMENT IS
PROVIDED "AS IS". ARM PROVIDES NO REPRESENTATIONS AND NO WARRANTIES, EXPRESS,
IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES
OF MERCHANTABILITY, SATISFACTORY QUALITY, NON-INFRINGEMENT OR FITNESS FOR A
PARTICULAR PURPOSE WITH RESPECT TO THE DOCUMENT. For the avoidance of doubt, Arm
makes no representation with respect to, and has undertaken no analysis to identify or understand
the scope and content of, any patents, copyrights, trade secrets, trademarks, or other rights.
TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL ARM BE LIABLE FOR
ANY DAMAGES, INCLUDING WITHOUT LIMITATION ANY DIRECT, INDIRECT, SPECIAL,
INCIDENTAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED AND
REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF ANY USE OF THIS
DOCUMENT, EVEN IF ARM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Reference by Arm to any third party’s products or services within this document is not an express
or implied approval or endorsement of the use thereof.
This document consists solely of commercial items. You shall be responsible for ensuring that
any permitted use, duplication, or disclosure of this document complies fully with any relevant
export laws and regulations to assure that this document or any portion thereof is not exported,
directly or indirectly, in violation of such export laws. Use of the word “partner” in reference to
Arm’s customers is not intended to create or refer to any partnership relationship with any other
company. Arm may make changes to this document at any time and without notice.
This document may be translated into other languages for convenience, and you agree that if there
is any conflict between the English version of this document and any translation, the terms of the
English version of this document shall prevail.
The validity, construction and performance of this notice shall be governed by English Law.
The Arm corporate logo and words marked with ® or ™ are registered trademarks or trademarks
of Arm Limited (or its affiliates) in the US and/or elsewhere. Please follow Arm’s trademark usage
guidelines at https://www.arm.com/company/policies/trademarks. All rights reserved. Other brands
and names mentioned in this document may be the trademarks of their respective owners.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 4 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
PRE-1121-V1.0
Confidentiality Status
This document is Non-Confidential. The right to use, copy and disclose this document may be
subject to license restrictions in accordance with the terms of the agreement entered into by Arm
and the party that Arm delivered this document to.
Product Status
Feedback
Arm welcomes feedback on this product and its documentation. To provide feedback on the
product, create a ticket on https://support.developer.arm.com
We believe that this document contains no offensive language. To report offensive language in this
document, email [email protected].
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 5 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Contents
Contents
List of Tables.........................................................................................................................................7
1. Introduction...................................................................................................................................................... 8
1.1 Conventions......................................................................................................................................................8
1.2 Useful resources..............................................................................................................................................9
1.3 Other information.........................................................................................................................................10
A. Arm Compiler for Embedded Errors and Warnings Reference Guide Changes.......................... 114
A.1 Changes for the Arm Compiler for Embedded Errors and Warnings Reference Guide............. 114
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 6 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
List of Tables
List of Tables
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 7 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Introduction
1. Introduction
The Arm® Compiler for Embedded Errors and Warnings Reference Guide provides lists of the
errors and warnings that each of the compilation tools can generate. It does not include errors and
warnings produced by armclang.
1.1 Conventions
The following subsections describe conventions used in Arm documents.
Glossary
The Arm Glossary is a list of terms used in Arm documentation, together with definitions for
those terms. The Arm Glossary does not contain terms that are industry standard unless the Arm
meaning differs from the generally accepted meaning.
Typographic conventions
Arm documentation uses typographical conventions to convey specific meaning.
Convention Use
italic Citations.
bold Interface elements, such as menu names.
For example:
SMALL CAPITALS Terms that have specific technical meanings as defined in the Arm® Glossary. For example,
IMPLEMENTATION DEFINED, IMPLEMENTATION SPECIFIC, UNKNOWN, and UNPREDICTABLE.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 8 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Introduction
Your system requires the following. If you do not follow these requirements your
system will not work.
You are at risk of causing permanent damage to your system or your equipment, or
harming yourself.
A useful tip that might make it easier, better or faster to perform a task.
A reminder of something important that relates to the information you are reading.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 9 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Introduction
• Arm® Developer.
• Arm® Documentation.
• Technical Support.
• Arm® Glossary.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 10 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Licensing Errors and Warnings
The license error codes have three components; a prefix letter, an error number, and a suffix letter:
<L><NNNN><D>
The prefix letter <L> indicates the tool that generated the error:
• For the legacy assembler, armasm, the error code starts with A.
• For the linker, armlink, the error code starts with L.
• For the ELF image converter, fromelf, the error code starts with Q.
For the compiler, armclang, error messages are still generated, but with no error
code.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 11 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Licensing Errors and Warnings
[A9521E|L9521E|Q9521E]: File I/O error when determining the current toolkit. Ensure
that ARM_TOOL_VARIANT is set correctly, and you have read permissions for the complete
toolchain installation.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 12 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Licensing Errors and Warnings
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 13 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
The armasm legacy assembler is deprecated, and it has not been updated since Arm®
Compiler 6.10. Also, armasm does not support:
• Armv8.4-A or later architectures.
• Certain backported options in Armv8.2-A and Armv8.3-A.
• Assembling SVE instructions.
• Armv8.1-M or later architectures, including MVE.
• All versions of the Armv8-R architecture.
The armasm legacy assembler is deprecated, and it has not been updated since Arm®
Compiler 6.10. Also, armasm does not support:
• Armv8.4-A or later architectures.
• Certain backported options in Armv8.2-A and Armv8.3-A.
• Assembling SVE instructions.
• Armv8.1-M or later architectures, including MVE.
• All versions of the Armv8-R architecture.
License-related error messages can be found in the List of the licensing error and
warning messages section.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 14 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
If you require the offset of a label called <label> within an area called <areaname>, use
<label> - <areaname>.
If the SETS directive is used, the argument to the directive must also be enclosed in quotes,
which might require escaping, depending on the operating system and shell. For example:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 15 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
Check you have specified the correct path for the file.
A1072E: The specified listing file '<filename>' must not be a .s or .o file
The filename argument to the --list command-line option has an extension that indicates
it is a source or object file. This might be because the filename argument was accidentally
omitted from the command line. Check that the correct argument is given to the --list
command-line option.
A1073E: The specified output file '<filename>' must not be a source file
The object file specified on the command line has a filename extension that indicates it is
a source file. This might be because the object filename was accidentally omitted from the
command line.
A1074E: The specified depend file '<filename>' must not be a source file
The filename argument to the --depend command-line option has an extension that indicates
it is a source (.s) file. This might be because the filename argument was accidentally omitted
from the command line. Check that the correct arguments are given.
A1075E: The specified errors file '<filename>' must not be a source file
The filename argument to the --errors command-line option has an extension that indicates
it is a source (.s) file. This might be because the filename argument was accidentally omitted
from the command line. Check that the correct arguments are given.
A1085W: Forced user-mode LDM/STM must not be followed by use of banked R8-R14
The Arm architecture does not permit you to access banked registers in the instruction
immediately following a User registers LDM or STM. Adding a NOP immediately after the LDM or
STM is one way to avoid this.
For example:
change to:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 16 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 17 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1134E: Bad required symbol type, expect (symbol is either external or label) and
(symbol is relocatable and absolute)
to:
For example:
A1138E: String "<string>" too short for operation, length must be > <oplength>
IMPORT sym1
IMPORT sym2
DCD (sym2 - sym1)
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 18 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1148E: Unknown shift name <name>, expected one of LSL, LSR, ASR, ROR, RRX
In this case, the solution is to include the required definitions file. For example:
INCLUDE targets/eb40.inc
• When the current file requires IMPORT for some symbols, for example:
"init.s", line 4: Error: A1150E: Bad symbol 4 00000000 LDR r0, =||Image$$RAM
$$ZI$$Limit||
In this case, the solution is to import the required symbol, for example:
IMPORT ||Image$$RAM$$ZI$$Limit||
The coprocessor registers CR must be labeled as a lowercase c for the code to build. The
register can be r or R:
or
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 19 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
my_func FUNCTION
or
label SETS
MOV r0,#1
to:
MOV r0,#1
• Use of a hardware floating point instruction without using the --fpu switch. For example:
FMXR FPEXC, r1 ;
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 20 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
ADDD
instead of:
ADD
A1170E: Immediate 0x<adr> out of range for this operation, must be below (0x<adr>)
This error is given when a DCB, DCW or DCWU directive is used with an immediate that is too
large.
A1176E: Branch offset 0x<val> out of range. Permitted values are 0x<min> to 0x<max>
Branches are PC-relative, and have a limited range. If you are using numeric local labels, you
can use the ROUT directive to limit their scope. This helps to avoid referring to the wrong label
by accident.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 21 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1188E: Register value <val> out of range. Permitted values are <min> to <max>
For example:
must be:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 22 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
AREA test,CODE,READONLY,HALFWORD
AREA directive.
A1209E: ADRL cannot be used with PC as destination
It is necessary to specify which status register to use (CPSR or SPSR), such as, for example:
A1221E: Area attribute '<entity>' not supported for <entity> object file format
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 23 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1224E: <entity> format does not allow PC-relative data transfers between areas
A1227E: Comdat Associated area '<name>' undefined at this point in the file
A1238E: Immediate value must be word aligned when used in this operation
A1242E: Offset must be word aligned when used with this operation
A1250E: Pre indexed addressing mode not available for this instruction, use [Rn, Rm]
A1253E: Thumb branch to external symbol cannot be relocated: not representable in <fmt>
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 24 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1259E: Invalid PSR field specifier, syntax is <PSR>_ where <PSR> is either CPSR or
SPSR
A1261E: MRS cannot select fields, use APSR, CPSR or SPSR directly
This error is caused by an attempt to use fields for CPSR or SPSR with an MRS instruction. For
example:
A1283E: Literal pool too distant, use LTORG to assemble it within 1KB
For T32 code, a literal pool must be within 1KB of an LDR instruction that is trying to access
it. See also messages A1284E: and A1471W.
A1284E: Literal pool too distant, use LTORG to assemble it within 4KB
For A32 code, a literal pool must be within 4KB of an LDR instruction that is trying to access
it. To solve this, add an LTORG directive into your assembly source code at a convenient place.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 25 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1322E: Unaligned transfer of PC, destination address must be 4 byte aligned, otherwise
result is UNPREDICTABLE
This error is reported when you try to use an LDR instruction to load the PC from a non word-
aligned address. For example:
A1327E: Non portable instruction (LDM with writeback and base in register list, final
value of base unpredictable)
In the LDM instruction, if the base register <Rn> is specified in <registers>, and base register
writeback is specified, the final value of <Rn> is UNKNOWN.
A1328E: Non portable instruction (STM with writeback and base not first in register
list, stored value of base unpredictable)
In the STM instruction, if <Rn> is specified in <registers> and base register writeback is
specified:
• If <Rn> is the lowest-numbered register specified in <register_list>, the original value of
<Rn> is stored.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 26 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1329E: Unpredictable instruction (forced user mode transfer with write-back to base)
This error is caused by an instruction such as PUSH {r0}^ where the ^ indicates access to
user registers. Writeback to the base register is not available with this instruction. Instead,
the base register must be updated separately. For example:
A1342W: <name> of symbol in another AREA will cause link-time failure if symbol is not
close enough to this instruction
IF :DEF: FOO
; code
ENDIF
instead of:
IF :DEF: FOO
; code
ENDIF
A1414E: Vector wraps round over itself, length * stride should not be greater than
<max>
A1416E: Vector length does not match current vector length <len>
A1418E: Register has incorrect type '<type>' for instruction, expect floating point/
double register type
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 28 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1450E: Deprecated form of PSR field specifier used (use _cxsf for future
compatibility)
armasm supports the full range of MRS and MSR instructions, in the following forms:
Legacy versions of the assembler permitted other forms of the MSR instruction to modify the
control field and flags field:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 29 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
These forms are deprecated and must not be used. If your legacy code contains them, the
legacy assembler reports:
To avoid the warning, in most cases you can modify your code to use _c, _f, _cf or _cxsf
instead.
1. Move the two AREA s into separate assembly files, for example, test1.s and test2.s.
2. Remove , INTERWORK from the AREA line in test2.s.
3. Assemble test1.s with armasm --apcs /nointerwork.
4. Assemble test2.s with armasm --apcs /interwork.
5. At link time, the linker adds any necessary interworking veneers.
For example, in the following command line, code.s contains T32 code but the --arm_only
option forces only A32 code to be generated.
A1463E: SPACE directive too big to fit in area, area size limit 2^32
A1468W: FRAME SAVE saving registers above the canonical frame address is not
recommended
A1469E: FRAME STATE REMEMBER directive without a corresponding FRAME STATE RESTORE
See the following in the legacy armasm documentation:
• Frame directives.
• FRAME-STATE-REMEMBER directive.
• FRAME-STATE-RESTORE directive.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 31 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
To prevent this warning, the data must be placed where the processor cannot execute them
as instructions. A good place for an LTORG is immediately after an unconditional branch, or
after the return instruction at the end of a subroutine.
As a last resort, you could add a branch over the LTORG to avoid the data being executed. For
example:
B unique_label
LTORG
unique_label
A1479W: Requested alignment <alignreq> is greater than area alignment <align>, which
has been increased
This warning is about an ALIGN directive that has a coarser alignment boundary than its
containing AREA. Such an alignement is not permitted. To compensate, the legacy assembler
automatically increases the alignment of the containing AREA for you. A simple test case that
gives the warning is:
In this example, the alignment of the AREA (ALIGN=3) is 2^3=8 byte boundary, but the BX lr
instruction is on a 16-byte boundary, causing the error.
This warning can also occur when using AREA ... ALIGN=0 to align a code section on a byte
boundary. Such an alignment is not possible. Code sections can only be aligned on:
• A four-byte boundary for A32 code, so use "ALIGN=2".
• A two-byte boundary for T32 code, so use "ALIGN=1".
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 32 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
• AREA directive.
A1480W: Macro cannot have same name as a directive or instruction
A1481E: Object file format does not support this area alignment
A1482E: Shift option out of range, allowable values are from <min> to <max>
• ASR.
• LSR.
• LSL.
An arithmetic (that is, signed) shift left is the same as a logical shift left, because the sign bit
always gets shifted out.
If the name ASL is used, the legacy assembler reports this warning and converts the ASL to
LSL.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 33 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1497W: Absolute relocation of RWPI address with respect to symbol '<symbol>' at offset
<offset> may cause link failure
For example, when assembling the following code with --apcs /rwpi, this warning is given.
This warning is because it generates an absolute relocation (R_ARM_ABS32) to a PI data symbol.
However, the following instruction is invalid in pre-UAL T32 code. The unexpected
characters are , ASR #1.
A1502W: Register <reg> is a caller-save register, not valid for this operation
A1507E: Second parameter of register list must be greater than or equal to the first
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 34 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1512E: Immediate 0x<val> out of range for this operation. Permitted values are <min>
to <max>
A1544E: Invalid empty PSR field specifier, field must contain at least one of c,x,s,f
PUSH {r0}
PUSH {r0,r1}
This warning is given because you have not explicitly set the PRESERVE8 directive, but the
legacy assembler has set it automatically. This warning is suppressed by default. To enable it,
use --diag_warning 1547.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 35 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1548W: Code contains LDRD/STRD indexed/offset from SP but REQUIRE8 is not set
This warning is given when the REQUIRE8 directive is not set when required. For example:
PRESERVE8
STRD r0,[sp,#8]
PRESERVE8 {FALSE}
REQUIRE8
STRD r0,[sp,#8]
a higher alignment. For example, to ensure A32 instructions start on a four-byte boundary
after some T32 instructions, or where there is a DCB followed by a DCD.
For example:
The warning can also occur when using ADR in T32-only code. The ADR T32 pseudo-
instruction can only load addresses that are word aligned, but a label within T32 code might
not be word aligned. Use ALIGN to ensure four-byte alignment of an address within T32 code.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 37 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1607E: Thumb-2 wide branch instruction used, but offset could fit in Thumb-1 narrow
branch instruction
A1609W: MOV <rd>,pc instruction does not set bit zero, so does not create a return
address
This warning is caused when the current value of the PC is copied into a register while
executing in T32 state. An attempt to create a return address in this way fails because bit[0]
is not set. Attempting to branch with BX to this instruction causes a state change to A32.
--diag_suppress 1609
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 38 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
See A32 and T32 Instructions in the Instruction Set Assembly Guide for Armv7 and earlier Arm
architectures Reference Guide.
A1617E: Specified width is not supported by the current instruction set
A1622E: Negative register offsets are not supported by the current instruction set
A1633E: LDR rx,= pseudo instruction only allowed in load word form
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 39 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
For the T32 instruction set, unpredictable single register LDM s are transformed into LDRs.
This warning is suppressed by default, but can be enabled with --diag_warning 1645.
For example, when the following code is assembled with --diag_warning 1645:
foo
0x00000000: e2400001 ..@. SUB r0,r0,#1
0x00000004: e3e00000 .... MVN r0,#0
0x00000008: e3700001 ..p. CMN r0,#1
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 40 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1649E: Bad register name symbol, expected Wireless MMX Status/Control or General
Purpose register
A1650E: Bad register name symbol, expected any Wireless MMX register
A1651E: TANDC, TEXTRC and TORC instructions with destination register other than R15 is
undefined
A1656E: Target must be at least word-aligned when used with this instruction
A1673E: Both source data types must be same type and size
A1674E: Source operand 1 should have integer type and be double the size of source
operand 2
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 41 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1675E: Data types and sizes for destination must be same as source
A1676E: Destination type must be integer and be double the size of source
A1677E: Destination type must be same as source, but half the size
A1679E: Destination type must be same as source, but double the size
A1680E: Destination must be unsigned and half the size of signed source
A1681E: Destination must be unsigned and have same size as signed source
A1682E: Destination must be un/signed and source floating, or destination floating and
source un/signed, and size of both must be 32-bits
A1683E: Data type specifiers do not match a valid encoding of this instruction
A1684E: Source operand type should be signed or unsigned with size between <min> and
<max>
A1685E: Source operand type should be signed, unsigned or floating point with size
between <min> and <max>
A1686E: Source operand type should be signed or floating point with size between <min>
and <max>
A1687E: Source operand type should be integer or floating point with size between <min>
and <max>
A1688E: Source operand type should be untyped with size between <min> and <max>
A1690E: Source operand type should be signed with size between <min> and <max>
A1691E: Source operand type should be integer, floating point or polynomial with size
between <min> and <max>
A1692E: Source operand type should be signed, unsigned or polynomial with size between
<min> and <max>
A1693E: Source operand type should be unsigned or floating point with size between
<min> and <max>
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 42 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1700E: Source operand type should be integer with size between <min> and <max>
A1704E: Register Dm must be in the range D0-D<upper> for this data type
A1711E: Scalar registers cannot be used in register list for this instruction
A1713E: Invalid field specifiers for APSR: must be APSR_ followed by at least one of n,
z, c, v, q or g
A1716E: Destination for VMOV instruction must be ARM integer, 32-bit single-precision,
64-bit doubleword register or 64-bit doubleword scalar register
A1718E: Source register must be an ARM integer register or same as the destination
register
A1719W: This PSR name is deprecated and may be removed in a future release
A1724E: RELOC may only be used immediately after an instruction or data generating
directive
A1727W: Immediate could have been generated using the 16-bit Thumb MOVS instruction
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 43 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1729E: Register list may only contain 32-bit single-precision or 64-bit doubleword
registers
A1731E: Register list increment of 2 or more is not allowed for quadword registers
A1732E: Register list must contain between 1 and 4 contiguous doubleword registers
A1733E: Register list must contain 2 or 4 doubleword registers, and increment 2 is only
allowed for 2 registers
A1734E: Register list must contain <n> doubleword registers with increment 1 or 2
A1735E: Post-indexed offset must equal the number of bytes loaded/stored (<n>)
A1739W: Constant generated using single VMOV instruction; second instruction is a NOP
A1740E: Number of bytes in FRAME PUSH or FRAME POP directive must not be less than zero
A1745W: This register combination is DEPRECATED and may not work in future architecture
revisions
This warning is generated when all the following conditions are satisfied:
• You are using a deprecated register combination, for example:
• You are assembling for a target architecture that supports 32-bit T32 instructions.
• You are assembling to A32 code.
When assembling to T32, rather than A32 code, the legacy assembler
generates error A1477E instead.
A1757W: Symbol attributes must be within square brackets; Any other syntax is
deprecated
A1762E: Branch offset 0x<val> out of range of 16-bit Thumb branch, but offset encodable
in 32-bit Thumb branch
This error is caused when assembling for T32 if an offset to a branch instruction is too large
to fit in a 16-bit branch. The .W suffix can be added to the instruction to instruct the legacy
assembler to generate a 32-bit branch.
A1763W: Inserted an IT block for this instruction
This error indicates that the legacy assembler has inserted an IT block to permit a number of
conditional instructions in T32 code. For example:
MOVEQ r0,r1
A1772E: Destination type must be signed or unsigned integer, and source type must be
32-bit or 64-bit floating-point
A1773E: Floating-point conversion only possible between 32-bit single-precision and 64-
bit double-precision types
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 45 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1774E: Fixed-point conversion only possible for 16-bit or 32-bit signed or unsigned
types
A1776E: This operation is not available for 32-bit single-precision floating point
types
A1777E: <n> is out of range for symbol type; value must be between <min> and <max>
A1778E: <n> is out of range for symbol binding; value must be between <min> and <max>
A1786W: This instruction using SP is deprecated and may not work in future architecture
revisions
This warning is generated when all the following conditions are satisfied:
• You explicitly use the SP in a deprecated way, for example:
• You are assembling for a target architecture that supports 32-bit T32 instructions.
• You are assembling to A32 code.
Arm deprecates the explicit use of the SP in A32 instructions in any way that is not possible
in the corresponding T32 instruction. Such deprecated register uses are still possible in A32
instructions for backwards compatibility and you can suppress this warning by using the
legacy assembler's command-line option --diag_suppress=1786. However, Arm recommends
you modify your code, because it might not work in future architecture revisions.
You can replace the deprecated use of the SP shown in the example with a sequence like:
When assembling to T32, rather than A32 code, the legacy assembler
generates error A1477E instead.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 46 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1788W: Explicit use of PC in this instruction is deprecated and may not work in future
architecture revisions
This warning is generated when all the following conditions are satisfied:
• You explicitly use the PC in a deprecated way, for example:
CMP pc, #1
• You are assembling for a target architecture that supports 32-bit T32 instructions.
• You are assembling to A32 code.
Arm deprecates the explicit use of the SP in A32 instructions in any way that is not possible
in the corresponding T32 instruction. Such deprecated register uses are still possible in A32
instructions for backwards compatibility and you can suppress this warning by using the
legacy assembler's command-line option --diag_suppress=1786. However, Arm recommends
you modify your code, because it might not work in future architecture revisions.
When assembling to T32, rather than A32 code, the legacy assembler
generates error A1477E instead.
A1789W: Explicit use of PC in this instruction is deprecated and may not work in future
architecture revisions, except as destination register
For example:
is not a legal instruction because r0 is the base register and is also in the destination register
list. In this case, the legacy assembler ignores the writeback and generates:
A1793E: Conversion only possible between 16-bit and 32-bit floating point
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 47 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1809W: Instruction aligns PC before using it; section ought to be at least 4 byte
aligned
This warning is generated when all the following conditions apply:
• You are using a PC-relative offset in a T32 instruction that requires the PC to be word-
aligned.
• The code section containing this instruction has less than 4-byte alignment.
• The instruction is not relocated at link time (because of a relocation emitted by the legacy
assembler).
If these conditions are all met, and the code section containing this instruction is not placed
at a 4-byte aligned address when linking, the instruction might operate on or with the wrong
address at runtime. This erroneous operation is because the instruction aligns the PC to a 4-
byte address before using it.
The following example shows an LDR instruction in T32 that is diagnosed by this warning
because the section has an alignment of 2 bytes:
A1810E: Base register writeback value unclear; use '[rn,#n]!' or '[rn],#n' syntax
A1811E: Size of fill value must be 1, 2 or 4 bytes and a factor of fill size
A1813W: 32-bit instruction used where 16-bit could have been used
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 48 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1818W: ATTR COMPAT flag <flag> and vendor '<vendor>' setting ignored in <scope>
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 49 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1846E: Invalid field specifiers for CPSR or SPSR: must be followed by at least one of
c, x, s or f
or its equivalent:
A1851E: Invalid line start - local label not supported on this directive
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 50 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1867E: Immediate 0x<val> out of range for this operation. Permitted values are
multiples of <mult> from 0x<min> to 0x<max>
For example, the following instruction causes this error in T32 state:
A1874E: Specified register list cannot be loaded or stored in target instruction set
A1877E: Specified register for <field> not allowed in current instruction set
A1878E: Offset must be <reqalign>-byte aligned when used with this operation
A1887E: Specified source data type not allowed; must be one of: <str>
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 51 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1888E: Specified destination data type not allowed; must be one of: <str>
A1892W: Writeback with this register combination is deprecated and may not work in
future architecture revisions
A1898E: Target cannot be relocated. No suitable relocation exists for this instruction
AREA x,CODE
[ :DEF: foo
num EQU 42 ; Assembler does not see this line during pass 1 because
; foo is not defined at this point during pass 1
]
foo DCD num
END
A1907W: Test for this symbol has been seen and may cause failure in the second pass.
This diagnostic is suppressed by default. Enable it to identify situations that might result in
errors A1903E, A1908E, or A1909E.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 52 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1908E: Label '<name>' value inconsistent: in pass 1 it was <val1>; in pass 2 it was
<val2>
The following example generates this error because in pass 1 the value of x is 0x0004+r9, and
in pass 2 the value of x is 0x0000+r0:
map 0, r0
if :lnot: :def: sym
map 0, r9
field 4
endif
x field 4
sym LDR r0, x
AREA x,CODE
[ :LNOT: :DEF: foo
MOV r1, r2 ; Assembler does not see this line during pass 2 because
; foo is already defined
]
foo MOV r3, r4
END
A1911E: Immediate 0x<val> out of range for this operation. Immediate value must be 0
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 53 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Legacy Assembler Errors and Warnings
A1936E: Literal pool too distant, use LTORG to assemble it within <distance>
A1950W: The legacy armasm assembler is deprecated. Consider using the armclang
integrated assembler instead.
The armasm legacy assembler is deprecated, and it has not been updated since Arm Compiler
6.10. Also, armasm does not support:
• Armv8.4-A or later architectures.
• Certain backported options in Armv8.2-A and Armv8.3-A.
• Assembling SVE instructions.
• Armv8.1-M or later architectures, including MVE.
• All versions of the Armv8-R architecture.
Migrate your legacy Arm-syntax assembly code to the armclang integrated assembler GNU
syntax. For more information, see:
• Migrating from armasm to the armclang Integrated Assembler.
• armclang Integrated Assembler.
A1992E: MOVT of external symbol must follow corresponding MOVW instruction
A1998E: Comdat Associated area must have Comdat Associative selection type
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 54 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
--diag_suppress 6306
Reducing the severity of diagnostic messages might prevent the tool from
reporting important faults. Arm recommends that you do not reduce the severity of
diagnostics unless you understand the impact on your software.
Some errors such as L6220E, L6238E and L6784E can be downgraded to a warning by using:
--diag_warning
Related information
--diag_suppress=tag[,tag,…] (armlink)
License-related error messages can be found in the List of the licensing error and
warning messages section.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 55 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
See Toolchain environment variables in the Arm Compiler for Embedded User Guide.
L6003U: Could not write to file <filename>.
An file I/O error occurred while reading, opening, or writing to the specified file.
L6004U: Incomplete library member list <list> for <library>.
This can occur if there is whitespace in the list of library objects.
The following example fails with Fatal error: L6004U: Missing library member in member
list for x.lib:
armlink x.lib(foo.o,bar.o)
L6006U: Overalignment value not specified with OVERALIGN attribute for execution region
<regionname>.
See the following in the Arm Compiler for Embedded Reference Guide:
• Syntax of an input section description.
• Alignment of execution regions and input sections.
L6007U: Could not recognize the format of file <filename>.
The linker can recognize object files in ELF format and library files in AR format. The specified
file is either corrupt, or is in a file format that the linker cannot recognize.
L6008U: 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.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 56 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
For example, the linker reports this error if you try to link with:
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.
L6017U: Library <library> symbol table contains an invalid entry, no member at offset
0x<offset>.
The library might be corrupted. Try rebuilding it.
L6018U: <filename> is not a valid ELF file.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 57 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 58 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6048U: Invalid input. This variant of Arm Compiler is licensed only for use with
<toolkit>.
L6049U: The linker is unable to continue the link step (<id>). This version of the
linker will not link with one or more given libraries.
L6050U: The code size of this image (<actual_size> bytes) exceeds the maximum allowed
for this version of the linker.
L6065E: 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.
L6077E: Region table entry for region <region> is missing.
armlink generates a region table entry in preparation for adding sections at a later stage in
its processing. You might have placed an object in an execution region that is also used for
linker-generated sections, such as veneers to enable long branches. If this object is removed
by the unused section elimination feature of the linker, then the linker also removes the
region table entry associated with this execution region. Subsequently, when the linker later
attempts to assign linker-generated sections to the execution region, it cannot.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 59 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
To prevent armlink from removing the region table entry, link with either the armlink option
--no-remove or --keep.
For more information, see the following in the Arm Compiler Reference Guide:
• --keep=section_id (armlink).
• --remove, --no_remove.
• Scatter-loading Features.
• Scatter File Syntax.
L6089E: Execution Region <exec_regname> appears after ZI data in Load Region
<load_regname>. With option <option>, all ZI data must be at the end of the Load
Region.
You must modify your scatter-file to place all execution regions containing ZI data at the end
of the load region.
L6099E: <attribute> region attribute is not allowed in SysV.
The specified execution region attribute is not allowed in SysV. For example:
• ARM_LIB_HEAP
• ARM_LIB_STACKHEAP
To use scatter files containing these region names in the bare-metal context, you must also
specify the --bare-metal-sysv option. For more information, see --bare_metal_sysv.
L6109E: Execution Region <regname> does not immediately follow from previous Execution
Region or from its load address. With option <option>, all non-EMPTY Execution Regions
must be root regions.
Your scatter file contains execution regions without the EMPTY attribute. Such non-EMPTY
execution regions must be root regions when linking with --paged or --sysv.
• --sysv.
L6110W: Composition of BTI and non-BTI objects detected. The PACBTI-M library
variant has been selected. Use --info=bti to print out the list of objects with their
corresponding BTI mark.
You are linking mixed BTI and non-BTI user objects without specifying the --
library_security=pacbti-m option. For more information, see:
• --info=topic[,topic,…] (armlink).
• --library_security=protection.
• --require-bti.
L6111E: Composition of BTI and non-BTI objects detected. Use --info=bti to print out
the list of objects with their corresponding BTI mark.
You are linking mixed BTI and non-BTI user objects with --require-bti, but without
specifying the --library_security=pacbti-m option. For more information, see:
• --info=topic[,topic,…] (armlink).
• --library_security=protection.
• --require-bti.
L6123E: LTO bitcode in <objname> was generated by an incompatible version of armclang
You have attempted to link objects containing bitcode for Link-Time Optimization (LTO) that
were created by different versions of the compiler. Any objects or libraries created for LTO
must all be compiled and linked with the same Arm® Compiler for Embedded version.
L6134E: LTO module created from LLVM bitcode in <objname>(<llvmbitcode>) could not be
added to the codegen.
A general error that is generated when a problem with LTO occurs. <llvmbitcode> is
either .llvmbc or .llvm.lto depending on the Arm Compiler for Embedded version use
to create the object <objname>. Arm Compiler for Embedded version 6.21 and later uses
.llvm.lto. You must compile and link all objects and libraries with the same Arm Compiler
for Embedded version.
You might also see another error that points to a specific issue. See Restrictions with Link-
Time Optimization in the Arm Compiler for Embedded User Guide for more information.
L6137E: Symbol <symname> was not preserved by the LTO codegen but is needed by the
image.
L6142W: Composition of PAC and non-PAC objects detected. Use --info=pac to print out
the list of objects with their corresponding PAC mark.
You have linked mixed PAC objects and non-PAC objects, and used the --
check_pac_mismatch linker option to ask for a warning in that situation. See:
• --info=topic[,topic,…] (armlink).
• --library_security=protection.
• --check_pac_mismatch.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 61 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
This 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 of symbol definitions and implementations of file functions like
fopen, fclose, and fflush.
To identify why stdio.o is being linked-in, you must use the --verbose link option switch. For
example:
Then study err.txt to see exactly what the linker is linking in, from where, and why.
See Tailoring input output functions in the C and C++ libraries in the Arm Compiler for
Embedded Arm C and C++ Libraries and Floating-Point Support User Guide.
L6201E: 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.
If a required section is not placed in a root region, the linker reports, for example:
You can use InRoot$$Sections to include all required sections in a root region:
L6205E: 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.
To solve this, use more than one --keep option to specify the names of the AREAs to keep,
such as:
Using assembler files with more than one AREA might give other problems
elsewhere, so such use is best avoided.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 64 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6215E: Ambiguous symbol selection for --First/--Last. Symbol <symbol> has more than
one definition.
See the following in the Arm Compiler for Embedded Reference Guide:
• --first=section_id
• --last=section_id
L6216E: Cannot use base/limit symbols for non-contiguous section <secname>
The exception handling index tables that are generated by the compiler are placed in
SHT_ARM_EXIDX sections. For more information, see Exception Handling ABI for the Arm
Architecture - ABI 2020Q3.
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:
Also, the .init_array sections must be placed contiguously within the same region for their
base and limit symbols to be accessible.
LOAD_ROM 0x00000000
{
ER1 0x00000000
{
file1.o (+RO) ; from a C++ source
*(0x70000001) ; The exception handling index tables must be placed
; explicitly in a single region. We use 0x70000001,
; the identifier of SHT_ARM_EXIDX, to collect all the
; exception tables into this execution region.
*(.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.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 65 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
* (+RO)
}
ER2 0x01000000
{
file2.o (+RO) ; from a C++ source
}
ER3 +0
{
* (+RW, +ZI)
}
}
In this example, the base and limit symbols are contained in .init_array in a single region.
See C++ initialization, construction and destruction in the Arm Compiler for Embedded Arm C
and C++ Libraries and Floating-Point Support User Guide.
L6217E: Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect to
<symbol>. R_ARM_SBREL32 relocation to imported symbol
The helper functions are automatically generated into the object file by the compiler.
Re-compile the object or ensure that these libraries can be found by the
linker.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 66 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
• Undefined symbol main (referred from kernel.o) The linker is reporting that your
application does not include a main() function.
• Consider a project containing the following functions.c program:
When linking, armlink might remove func_b() during unused section elimination.
However, references made by func_b() still remain, and armlink always reports func_c()
as an unresolved symbol.
armlink always produces this L6218E error, even if func_b() is removed by unused
section elimination. The reason is because unused section elimination is an optimization
and the program must not rely on an optimization for correctness. This behavior is
different to open-source linkers that usually only give an undefined symbol error if the
symbol is directly referred to by the program.
To workaround this issue, define the symbol func_c(). You do not have to fully
implement it. Using a symdefs file is sufficient. See Access symbols in another image.
L6219E: <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.
L6220E: <type> region <regionname> size (<size> bytes) exceeds limit (<limit> bytes).
Example:
Execution region ROM_EXEC size (4208184 bytes) exceeds limit (4194304 bytes).
This error can occur where a region is given an (optional) maximum length in the scatter file,
but the size of the code and data being placed in that region has exceeded the limit. You can
suppress this error with --diag_suppress 6220.
For example, this error might occur when using .ANY<num> selectors with the ALIGN 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 the Arm Compiler for Embedded Reference Guide:
• Manual placement of unassigned sections.
• --any-contingency.
• --diag_error=tag[,tag,…] (armlink).
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 67 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
LR1 0x8000
{
ER1 +0
{
*(+ro)
}
ER2 +0
{
*(+zi)
}
ER3 +0
{
*(+rw)
}
}
Build with:
armasm test.s
armlink -o test.axf --scatter scatter.txt test.o
armlink generates:
The linker might emit warning message L6221E when an execution region base address
overlaps with the load address of another region. This could be due to an incorrect scatter
file. The memory map of the image has a load view and an execution view, described by the
scatter-loading file. A non-ZI section must have a unique load address and in most cases
must have a unique execution address. The linker does not assign space to ZI execution
regions. Therefore this warning might be because a load region LR2 with a relative base
address immediately follows a ZI execution region in a load region LR1.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 68 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
Because the overlapping part might not have real code or data inside, the warning might be
harmless. You can use the following linker options to find out the addresses of each region,
and any regions that overlap with a load region:
See the following in the Arm Compiler for Embedded Reference Guide:
• Scatter files containing relative base address load regions and a ZI execution region.
• Execution region attributes.
• Effect of the FIXED attribute on a root region.
L6222E: 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.
L6223E: Ambiguous selectors found for <objname>(<secname>) from Exec regions <region1>
and <region2>.
This error 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.
L6224E: Could not place <objname>(<secname>) in any Execution region.
This error occurs if the linker cannot 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 Section placement with the linker in the Arm Compiler for Embedded Reference Guide.
L6225E: Number <str...> is too long.
• --reloc.
• --ro_base=address.
• --split.
L6228E: Expected '<str1>', found '<str2>'.
:
* (+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.
L6235E: More than one section matches selector - cannot all be FIRST/LAST.
See the following in the Arm Compiler for Embedded Reference Guide:
• Section placement with the FIRST and LAST attributes.
• Syntax of an input section description.
L6236E: 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:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 70 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
• Link with --keep vectors.o to force the linker not to remove this, or switch off this
optimization entirely, with --no_remove. Arm does not recommend this.
You might also encounter this error when linking against a static library. When the name of
a library is specified to the linker, the objects within the library are loaded on-demand, so it
is possible that objects referred to by the scatter file have not been loaded. Some possible
solutions are:
• Use the --verbose option to discover what objects the linker has extracted from libraries.
• If you know the name of a specific object within a library you can ensure it is loaded
by specifying it explicitly. For example, if foo.o is in lib.a then you can specify
lib.a(foo.o) on the linker command line rather than lib.a to ensure that foo.o is
loaded.
Symbols such as ~PRES8 and REQ8 are used in place of Build Attributes of the objects:
• PRES8 means that the object preserves eight-byte alignment of the stack.
• ~PRES8 means that the object does not preserve eight-byte alignment of the stack
(~ meaning NOT).
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 71 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
• REQ8 means that the object requires eight-byte alignment of the stack.
For example:
Error: L6238E: foo.o(.text) contains invalid call from '~PRES8 (The user
did not require code to preserve 8-byte aligment of 8-byte data objects)'
function to 'REQ8 (Code was permitted to depend on the 8-byte aligment of
8-byte data items)' function bar.
This error means that a function (in the object foo.o, section .text) that does not
preserve eight-byte stack alignment, is trying to call function bar that requires eight-
byte stack alignment.
Warning: L6306W: '~PRES8' section foo.o(.text) should not use the address
of 'REQ8' function bar
If you have any assembler files, you must check that all instructions preserve eight-
byte stack alignment, and if necessary, correct them.
to
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 72 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
.eabi_attribute Tag_ABI_align_preserved, 1
• You might have legacy objects and libraries that cannot be rebuilt for the following
reasons:
◦ You do not have the source code.
◦ The old objects must not be rebuilt (for example, for qualification and
certification reasons).
If you have objects and libraries that cannot be rebuilt, then you must inspect them
to check whether they preserve eight-byte alignment or not.
If your objects do preserve eight-byte alignment, then you can suppress the linker
error L6238E with the use of --diag_suppress 6238 on the linker command line.
By using the --diag_suppress 6238 option, you are guaranteeing that these
objects preserve eight-byte alignment.
See also --strict_preserve8_require8 in the Arm Compiler for Embedded Reference Guide.
L6239E: 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 A32 code to call T32 code (and T32 to A32) by linker-generated
interworking veneers.
L6241E: <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.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 73 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6242E: Cannot link object <objname> as its attributes are incompatible with the image
attributes.
Each object file generated by the compilation tools includes a set of attributes that indicates
the options that it was built with. The linker checks the attributes of each object file it
processes. If it finds attributes that are incompatible with those of object files it has loaded
previously, it generates this error.
#include <stdio.h>
This error occurs because the compiler generates a global pointer str that must be initialized
to the address of the string in the .conststring section. However, absolute addresses cannot
be used in a PI system, so the link step fails.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 74 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
To resolve this, you must re-write the code to avoid the explicit pointer. You can do this using
either of the following methods:
• Use a global array instead of a global pointer, for example:
#include <stdio.h>
const char str[] = "test";
int main(void)
{
printf ("%s",str);
}
#include <stdio.h>
int main(void)
{
const char *str = "test";
printf ("%s",str);
}
the linker reports a separate error for each element in the array. In this case,
Arm recommends you declare a two dimensional array for the list, with
the first dimension as the number of elements in the array, and the second
dimension as the maximum size of an element in the array, for example:
printf("%s", list[1]);
See Symdefs file format in the Arm Compiler for Embedded Reference Guide.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 75 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
See Scatter File Syntax in the Arm Compiler for Embedded Reference Guide.
L6258E: Entry point (<address>) lies in an overlaid Execution region.
This message indicates a problem with the scatter file.
See Scatter File Syntax in the Arm Compiler for Embedded Reference Guide.
L6259E: Reserved Word '<name>' cannot be used as a <type> region name.
<name> is a reserved word, so choose a different name for your region.
L6260E: Multiple load regions with the same name (<regionname>) are not allowed.
This message indicates a problem with the scatter file.
See Scatter File Syntax in the Arm Compiler for Embedded Reference Guide.
L6261E: Multiple execution regions with the same name (<regionname>) are not allowed.
This message indicates a problem with the scatter file.
See Scatter File Syntax in the Arm Compiler for Embedded Reference Guide.
L6263E: <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.
L6265E: 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.
L6266E: 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.
L6271E: Two or more mutually exclusive attributes specified for Load region <regname>
This message indicates a problem with the scatter file.
L6272E: Two or more mutually exclusive attributes specified for Execution region
<regname>
This message indicates a problem with the scatter file.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 76 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 77 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
• In handwritten assembly code, where there are not enough bits within the instruction
opcode to hold the offset to a symbol.
For example, the offset range is ±4095 for an A32 state LDR or STR instruction.
• When the linker is having difficulty placing veneers around a large code section in your
image.
When the linker places a veneer near a very large section it must decide whether to place
the veneer before or after the section. When the linker has placed the veneer it might
have to place more veneers, which could be placed between the original veneer and its
target. The additional veneers increases the distance between the veneer and its target.
The linker automatically allows for modest increases in distances between veneers and
their targets. However, a large number of veneers placed between the original veneer
and its target might result in the target moving out of range. If this situation occurs, the
linker generates message L6286E.
To work around this issue, you can move large code sections away from areas where the
linker is placing many veneers. You can either place large sections in their own regions or
place them first in the region containing them using the +FIRST directive in the scatter-
loading description file.
For example:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 78 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
This behavior is specified in the Exception Handling ABI for the Arm Architecture (EHABI).
The EHABI states that the R_ARM_PREL31 relocation, which .ARM.exidx uses, does not use
the highest bit (bit 31) for calculating the relocation.
The most likely cause of this error is that C++ code that must access the .ARM.exidx
sections, has been split and placed into separate execution regions, outside of the valid
range (-0x40000000 to 0x3fffffff).
To resolve this error, if you have memory between the separated execution regions, place
the .ARM.exidx section there with the selector *(.ARM.exidx). For example:
LOAD_ROM 0x00000000
{
ER1 0x00000000 ; The distance from ER2 to ER1 is out of
{ ; range.
file1.o (+RO) ; From a C++ source.
* (+RO)
}
ERx 0x30000000
{
*(.ARM.exidx) ; ARM.exidx to ER1 and ER2 both in range.
}
ER2 0x60000000
{
file2.o (+RO) ; From a C++ source.
}
ER3 +0
{
* (+RW, +ZI)
}
}
Otherwise, try placing the code into an execution region close enough to the tables
(within the range of -0x40000000 to 0x3fffffff).
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 79 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
execution address is greater than or equal to the next available load address within the load
region.
See the following in the Arm Compiler for Embedded Reference Guide:
• Effect of the FIXED attribute on a root region.
• Execution region attributes.
L6294E: <type> region <regionname> spans beyond 32 bit address space (base <base>, size
<size> bytes).
This error message relates to a problem with the scatter file.
L6295E: Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect to
<symname> SBREL relocation requires image to be RWPI
--entry 0x0
or
--entry <label>
See the following in the Arm Compiler for Embedded Reference Guide:
• Image entry points.
• --entry=location.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 80 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6306W: '<attr1>' section <objname>(<secname>) should not use the address of '<attr2>'
function <sym>.
See L6238E.
L6307W: Relocation #<rel_class>:<rel_num> in <objname>(<secname>) with respect to
<sym>. Branch to unaligned destination.
L6308W: 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.
L6309W: Library <libraryname> does not contain any members.
A library is specified on the linker command-line, but the library does not contain any
members.
L6310W: Unable to find ARM libraries.
This warning is most often caused by incorrect arguments to --libpath.
Set the correct path with the --libpath linker option. The default path for a Windows
installation is:
<install_directory>\lib
• \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 Arm Compiler for Embedded Reference Guide:
• --info=topic[,topic,…] (armlink).
• --libpath=pathlist.
• --verbose.
See the following in the Arm Compiler for Embedded User Guide:
• Toolchain environment variables.
L6311W: Undefined symbol <symbol> (referred from <objname>).
See L6218E.
L6312W: Empty <type> region description for region <region>
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 81 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
Linking with --sysv suppresses this warning by default. To display this message, use --
diag_warning=L6314 or the --remarks option.
See the following in the Arm Compiler for Embedded Reference Guide:
• Methods of placing functions and data at specific addresses.
• Placement of __at sections at a specific address.
• --sysv.
• --remarks.
L6315W: 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.
L6316W: 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.
L6317W: <objname>(<secname>) should not use the address of '<attr1>' function <sym> as
the image contains '<attr2>' functions.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 82 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
For example:
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.
L6319W: Ignoring <cmd> command. Cannot find section <objname>(<secname>).
For example, when building a Linux application, you might have the following option on the
linker command-line in your makefile:
--keep *(.init_array)
However, this section might not be present when building with no C++, in which case this
warning is reported:
You can often ignore this warning, or suppress it with --diag_suppress 6319.
L6320W: Ignoring <cmd> command. Cannot find argument '<argname>'.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 83 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
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 Arm Compiler for Embedded Reference Guide:
• Inheritance rules for load region address attributes.
• Inheritance rules for execution region address attributes.
• Inheritance rules for the RELOC address attribute.
L6326W: 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 Execution region attributes in the Arm Compiler for Embedded Reference Guide.
L6329W: 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 the Arm Compiler for Embedded Reference Guide:
• Elimination of unused sections.
• --info=topic[,topic,…] (armlink).
L6330W: 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 the Arm Compiler for Embedded Reference Guide:
• Elimination of unused sections.
• --info=topic[,topic,…] (armlink).
L6331W: No eligible global symbol matches pattern <pat>.
L6332W: Undefined symbol <sym1> (referred from <obj1>). Resolved to symbol <sym2>.
into the PC instead of using the correct BX instruction. The linker can detect this situation and
report this warning.
T32 IW tailcalls to T32 non-IW do not occur because T32 tailcalls with B are so short ranged
that they can only be generated to functions in the same ELF section which must also be
T32.
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.
See Execution region attributes in the Arm Compiler for Embedded Reference Guide.
L6340W: options first and last are ignored for link type of <linktype>
The --first and --last options are meaningless when creating a partially-linked object.
L6366E: <object> attributes<attr> are not compatible with the provided cpu and fpu
attributes<cli> <diff>.
L6367E: <object>(<section>) attributes<attr> are not compatible with the provided cpu
and fpu attributes<cli> <diff>
L6369E: <symbol> defined in <object>(ABSOLUTE) are not compatible with the provided cpu
and fpu Attributes<cli> <diff>
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 85 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6373E: libattrs.map file not found in System Library directory <dir>. Library
selection may be impaired.
L6384E: 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)
L6386E: Exec Region Expressions can only be used in base address calculations on line
<line>
L6387E: Load Region Expressions can only be used in ScatterAssert expressions on line
<line>
See the following in the Arm Compiler for Embedded Reference Guide:
L6390E: Conditional operator (expr) ? (expr) : (expr) on line <line> has no : (expr).
See the following in the Arm Compiler for Embedded Reference Guide:
• Expression evaluation in scatter files.
• Expression rules in scatter files.
L6404W: FILL value preferred to combination of EMPTY, ZEROPAD and PADVALUE for
Execution Region <name>.
See Execution region attributes in the Arm Compiler for Embedded Reference Guide.
L6405W: No .ANY selector matches Section <name>(<objname>).
See Manual placement of unassigned sections in the Arm Compiler for Embedded Reference
Guide.
L6406W: No space in execution regions with .ANY selector matching Section
<name>(<objname>).
This warning 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 Manual placement of unassigned sections in the Arm Compiler for Embedded Reference
Guide:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 86 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6407W: 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 Manual placement of unassigned sections in the Arm Compiler for Embedded Reference
Guide.
L6408W: Output is --fpic yet section <sec> from <obj> has no FPIC attribute.
L6410W: Symbol <sym> with non STV_DEFAULT visibility <vis> should be resolved
statically, cannot use definition in <lib>.
L6413W: Disabling merging for section <sec> from object <obj>, Section contains
misaligned string(s).
L6415E: Could not find a unique set of libraries compatible with this image. Suggest
using the --cpu option to select a specific library.
armlink could not find any build attributes to determine which libraries are required for the
link. In this case, you must use the armlink option --cpu to help the linker select the required
library.
See --cpu=name (armlink) in the Arm Compiler for Embedded Reference Guide.
L6416E: Relocation <type> at <relclass>:<idx> <objname>(<secname>) cannot be veneered
as it has an offset <offset> from its target.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 87 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6424E: Within the same collection, section <secname1> and section <secname2> cannot be
separated into different execution regions.
L6425E: Within the same collection, section <secname> cannot have their section names
with different length.
L6426E: Within the same collection, section <secname> cannot have its name duplicated.
L6427E: Cannot rename <sym> to <newname> as it has already been renamed to <name>).
L6429U: 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.
L6431W: Ignoring incompatible enum size attribute on Symbol <symbol> defined in
<object>(<section>).
L6441U: System call to get maximum number of open files failed <error>.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 88 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6442U: Linker requires a minimum of <min> open files, current system limit is <max>
files.
L6443W: 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.
L6444I: symbol visibility : <symname> set to <visibility>.
L6445I: symbol visibility : <symname> merged to <set_vis> from existing <old_vis> and
new <new_vis>.
L6455E: Symbol <symbolname> has deprecated ARM/Thumb Synonym definitions (by <object1>
and <object2>).
L6462E: Reference to <sym> from a shared library only matches a definition with Hidden
or Protected Visibility in Object <obj>.
L6463U: 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 --cpu=name (armlink) in the Arm Compiler for Embedded Reference Guide.
L6464E: Only one of --emit-relocs and --emit-debug-overlay-relocs can be selected.
See the following in the Arm Compiler for Embedded Reference Guide:
• --emit_debug_overlay_relocs.
• --emit_relocs.
L6467W: Library reports remark: <msg>
L6470E: PLT section <secname> cannot be moved outside Load Region <lrname>.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 89 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
See the following in the Arm Compiler for Embedded Reference Guide:
• --override_visibility.
• --undefined_and_export=symbol.
• EXPORT steering file command.
L6616E: Cannot increase size of RegionTable <sec_name> from <obj_name>
L6640E: 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.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 90 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
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.
L6642W: Unused virtual function elimination might not work correctly, because
<obj_name> has not been compiled with --vfe
L6651E: Section <secname> from object <objname> has SHF_GROUP flag but is not member of
any group.
L6652E: Cannot reverse Byte Order of Data Sections, input objects are <inputendian>
requested data byte order is <dataendian>.
L6654E: Rejected Local symbol <symname> referred to from a non group member
<objname>(<nongrpname>)
This message might indicate a compiler fault. Contact your supplier.
L6656E: Internal error: the vfe section list contains a non-vfe section called
<oepname>(<secname>).
This message might indicate a compiler fault. Contact your supplier.
L6664W: Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is with respect to
a symbol(#<idx> before last Map Symbol #<last>).
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 91 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6679W: Data in output ELF section #<sec> '<secname>' was not suitable for compression
(<data_size> bytes to <compressed_size> bytes).
L6684E: Section <spname> from object <oepname> has SHF_STRINGS flag but not SHF_MERGE
flag
L6685E: Section <spname> from object <oepname> has a branch reloc <rel_idx> to a
SHF_MERGE section
L6707E: Padding value not specified with PADVALUE attribute for execution region
<regionname>.
See Execution region attributes in the Arm Compiler for Embedded Reference Guide.
L6708E: Could not process debug frame from <secname> from object <oepname>.
L6709E: Could not associate fde from <secname> from object <oepname>.
L6714W: Exception index table section .ARM.exidx from object <oepname> has no data.
L6720U: Exception table <spname> from object <oepname> present in image, --noexceptions
specified.
See --exceptions, --no_exceptions in the Arm Compiler for Embedded Reference Guide.
L6721E: Section #<secnum> '<secname>' in <oepname> is not recognized and cannot be
processed generically.
L6725W: Unused virtual function elimination might not work correctly, because there are
dynamic relocations.
L6728U: Link order dependency on invalid section number <to> from section number
<from>.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 92 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
In RVCT 2.0 and earlier, the linker determines whether interworking is needed based on
the content, which in this example is A32 code. In RVCT 2.1 and later, the linker follows the
ABI, which defines that it is the type of the symbol, in this example STT_SECTION (which is
interpreted as data), that determines whether interworking is applied.
The simplest solution is to move the data into a separate data area in the assembly source
file.
L6740W: Symbol '<symname>' versioned '<vername>' defined in '<symverscr>' but not found
in any input object.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 93 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6742E: Symbol '<symname>' defined by '<oepname>'. Cannot not match to default version
symbol '<defversym>'
L6745E: Target CPU <cpuname> does not Support ARM, <objname>(<secname>) contains ARM
code
L6748U: Missing dynamic array, symbol table or string table in file <oepname>.
L6753E: CallTree sorting needs Entry Point to lie within a CallTree Sort ER.
L6763W: '<optname>' cannot be used when building a shared object or DLL. Switching it
off
L6764E: Cannot create a PLT entry for target architecture 4T that calls Thumb symbol
<symname>
L6765W: 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 (A32 or T32) the code runs in. Because the GNU C library startup code is A32 code,
you can safely ignore this warning, or you can suppress it by using --diag_suppress 6765.
L6766W: PLT entries for architecture 4T do not support incremental linking.
L6770E: The size and content of the dynamic array changed too late to be fixed.
L6775W: <objname>(<secname>) has FDEs which use CIEs which are not in this section.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 94 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
Check if you are using the Control Flow Integrity (CFI) sanitizer. If you are, then you can use --
diag_suppress 6784 to suppress this error.
L6785U: Symbol '<symname>' marked for import from '<libname>' already defined by
'<oepname>'
L6787U: Region table handler '<handlername>' needed by entry for <regionname> was not
found.
This error can occur after you have added some functionality. For example, you might get the
error:
As a normal step at link time, the linker tests if compressing RW init data would save some
code space. In case it does, decompression routines are pulled in from the Arm runtime
library. In some special cases, the linker can later change this decision and does not compress
that RW init data. Instead, this data would be copied by the library startup code. But because
the copy functions have not been pulled in before, the linker reports this error.
A trigger for this error can be a data object with a large alignment requirement.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 95 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
--undefined=__scatterload_copy
This option manually creates a reference to the copy function of the Arm runtime library.
Therefore, the __scatterload_copy function is always pulled in regardless of the linker
decision to compress or copy RW init data.
• Use linker option --datacompressor:
--datacompressor=off
This option causes the linker to not try to compress RW init data. All RW init data is
copied, and the __scatterload_copy function is correctly pulled in.
See the following in the Arm Compiler for Embedded Reference Guide:
• --undefined.
• --datacompressor.
L6788E: 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 error occurs when scatter-loading takes place and an execution region is put in a
position where it partially or wholly overwrites another execution region (which can be itself
or another region).
and reports:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 96 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
}
EXEC2 0x4000 0x4000
{
* (+RW,+ZI)
}
}
See Scatter-loading Features in the Arm Compiler for Embedded Reference Guide.
L6789U: Library <library> member <filename> : Endianness mismatch.
This message does not appear unless you are using a later version of the linker with an earlier
version of the compiler.
L6800W: Cannot convert generic model personality routine at 0x<offset>
<oepname>(<secname>).
A personality routine unwinds 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.
L6801E: <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 a warning with --diag_warning 6801 and
subsequently suppressed completely if required with --diag_suppress 6801.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 97 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
Where code, for example, in a.c uses the address of a non-interworking function in t.c:
reports:
Error: L6801E: a.o(.text) containing ARM code cannot use the address of '~IW'
Thumb function foo.
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.
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 Arm Compiler for Embedded Reference Guide:
• Execution region attributes.
• Effect of the FIXED attribute on a root region.
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:
1. 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.
2. Use the --no_debug linker option.
This command tells the linker to create the object without including any debug
information.
It is not possible to perform source level debugging if you use this option.
If you do not want to use the --no_debug option, there are other methods you can use to
try to reduce debug information.
You can also use the fromelf utility to strip debug information from objects and libraries
that you do not have to debug.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 99 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
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.
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 Microsoft article Memory Support and Windows Operating
Systems.
6. Use the --no_eager_load_debug linker option.
This option 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.
If you are still experiencing the same problem, raise a support case.
L6828E: 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
accommodate the branch. Error message L6828 is issued only if armlink is unable to lower
the pool limit.
You can find the machine type of an ELF file in the ELF Header. Use fromelf to display this
information under Machine: in ** ELF Header Information, for example:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 100 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
ABI Version: 0
File Type: ET_REL (Relocatable object) (1)
Machine: EM_ARM (ARM)
...
L6837E: Illegal data mapping symbol found in execute-only section <section> at offset
<offset>.
You compiled with the function sanitizer, -fsanitize=function, and -mexecute-only. The -
fsanitize=undefined compiler option also enables the function sanitizer. Therefore, if you
use , then you must also use the -fno-sanitize=function option.
For more information, see -fsanitize, -fno-sanitize in the Arm Compiler for Embedded Reference
Guide.
L6873W: <loadregion> has multiple non-contiguous child regions <regs>
You have provided a scatter file with multiple relocations that has more than one relocation
for each load region. The output text contains the names of the execute regions that cause
the problem.
See the following in the Arm Compiler for Embedded Reference Guide:
• Scatter-loading Features.
• Scatter File Syntax.
L6874W: Load Region <loadregion> requires that the first exec region to be root
<rootregion>, contains Read-Only Data <read>, and not contain overlay regions <overlay>
Check all load regions to ensure that:
• There is at least one RO region and one root region.
• None of the regions are overlays.
See the following in the Arm Compiler for Embedded Reference Guide:
• Scatter-loading Features.
• Scatter File Syntax.
L6875W: Unable to find placement of region in <region> within <placement> (<range>)
For each region that overlaps, outputs the load region that armlink is trying to place into and
the range of addresses in the case of unnamed regions.
See the following in the Arm Compiler for Embedded Reference Guide:
• Scatter-loading Features.
• Scatter File Syntax.
L6898E: Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to <armsym>.
ARM branch to non-ARM/Thumb symbol in <armobjname>(<armsecname>).
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 101 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6912W: Symbol <symname> defined at index <idx> in <oepname>(<secname>), has ABI symbol
type <symtype> which is inconsistent with mapping symbol type <maptype>.
or
You have most likely not reimplemented __user_setup_stackheap() or you have not
defined ARM_LIB_STACK or ARM_LIB_HEAP regions in the respective scatter file.
See the following in the Arm Compiler for Embedded Arm C and C++ Libraries and Floating-
Point Support User Guide:
◦ __user_setup_stackheap().
◦ Legacy function __user_initial_stackheap().
See Reserving an empty block of memory in the Arm Compiler for Embedded Reference
Guide.
• Error: L6915E: Library reports error: __use_no_semihosting was requested but
<function> was referenced.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 102 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
This error can appear when retargeting semihosting-using functions, to avoid any SVC or
BKPT instructions being linked-in from the C libraries.
Ensure that no semihosting-using functions are linked in from the C library by using:
__asm(".global __use_no_semihosting");
See Using the libraries in a nonsemihosting environment in the Arm Compiler for
Embedded Arm C and C++ Libraries and Floating-Point Support User Guide.
If there are still semihosting-using functions being linked in, the linker reports this error.
To resolve this error, you must provide your own implementations of these C library
functions.
The emb_sw_dev directory contains examples of how to reimplement some of the more
common semihosting-using functions. See the file retarget.c.
See Arm Compiler for Embedded Arm C and C++ Libraries and Floating-Point Support
User Guide for more information on 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 the semihosting-using functions that are still linked-in from the C libraries:
1. Link with armlink --cpu=8-M --verbose --list err.txt
2. Search err.txt for occurrences of __I$use$semihosting
For example:
...
Loading member sys_exit.o from c_2.l.
reference : __I$use$semihosting
definition: _sys_exit
...
This example shows that the semihosting-using function _sys_exit is linked-in from
the C library. To prevent the C library being linked-in, you must provide your own
implementation of this function.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 103 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
◦ __user_setup_stackheap.
L6925E: Ignoring <token> attribute for region <region>. MemAccess support has been
removed.
L6935E: Debug Group contents are not identical, <name> with signature sym <sig> from
objects (<new>) and (<old>)
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 104 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
L6940E: Alignment <alignment> for region <regname> must be at least 4 and a power of 2
or MAX.
L6941W: chmod system call failed for file <filename> error <perr>
L6967E: Entry point (<address>) points to a THUMB instruction but is not a valid THUMB
code pointer.
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:
See the following in the Arm Compiler for Embedded Reference Guide:
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 105 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
See the following in the Arm Compiler for Embedded Reference Guide:
• Placement of __at sections at a specific address.
• --autoat, --no_autoat.
Root-region-and-the-initial-entry-point/Placement-of-at-sections-at-a-specific-address
L6974E: AT section <name> does not have a base address.
See Placement of __at sections at a specific address in the Arm Compiler for Embedded
Reference Guide.
L6975E: <objname>(<secname>) cannot have a required base and SHF_MERGE.
L6978W: <objname>(<secname>) has a user defined section type and a required base
address.
L6980W: FIRST and LAST ignored for <objname>(<secname>) with required base address.
See Section placement with the FIRST and LAST attributes in the Arm Compiler for Embedded
Reference Guide.
L6981E: __AT incompatible with BPABI and SystemV Image types
See Restrictions on placing __at sections in the Arm Compiler for Embedded Reference Guide.
L6982E: AT section <objname>(<spname>) with base <base> limit <limit> overlaps address
range with AT section <obj2name>(<sp2name>) with base <base2> limit <limit2>.
See Placement of __at sections at a specific address in the Arm Compiler for Embedded
Reference Guide.
L6983E: AT section <objname>(<spname>) with required base address <base> out of range
for ER <ername> with base <erbase> and limit <erlimit>.
This can occur if you specify __attribute__((section(".ARM.__at_<address>"))) in
your code, .ARM.__at_<address> in your scatter file, and --no_autoat option on the linker
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 106 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Linker Errors and Warnings
command line. In this case, the address part of .ARM.__at_<address> must be specified as
eight hexadecimal digits. For example:
; scatter file
LR1 0x0
{
...
function.o(.ARM.__at_0x00004000)
...
}
See the following in the Arm Compiler for Embedded Reference Guide:
• Placement of __at sections at a specific address.
• --autoat, --no_autoat.
L6984E: AT section <objname>(<spname>) has required base address <base> which is not
aligned to section alignment <alignment>.
See Placement of __at sections at a specific address in the Arm Compiler for Embedded
Reference Guide.
L6985E: 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 the Arm Compiler for Embedded Reference Guide:
• Placement of __at sections at a specific address.
• --autoat, --no_autoat.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 107 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
ELF Image Converter Errors and Warnings
See List of the licensing error and warning messages for a list of license-related
error messages.
On Windows, use:
See input_file (fromelf) in the Arm Compiler for Embedded Reference Guide.
Q0128E: File i/o failure.
This error can occur if you specify a directory for the --output command-line option, but you
did not terminate the directory with a path separator. For example, --output=my_elf_files/.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 108 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
ELF Image Converter Errors and Warnings
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 109 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
ELF Image Converter Errors and Warnings
Q0448W: Read past the end of the compressed data while decompressing section
'<secname>' #<secnum> in <file>
This warning might indicate an internal fault. Contact your supplier.
Q0449W: Write past the end of the uncompressed data buffer of size <bufsize> while
decompressing section '<secname>' #<secnum> in <file>
This warning might indicate an internal fault. Contact your supplier.
Q0450W: Section '<secname>' #<secnum> in file <file> uses a mixture of legacy and
current ABI relocation types.
Q0451W: Option '--strip symbols' used without '--strip debug' on an ELF file that has
debug information.
Q0452W: Option '--strip filesymbols' used without '--strip debug' on an ELF file that
has debug information.
Q0453W: Stripping path names from '<path1>' and '<path2>' produces a duplicate file
name '<filename>'.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 110 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Librarian Errors and Warnings
L6876W: Minor variants of archive member '<member>' include multiple base variants
Two object files are placed into your archive that define the same set of symbols. In
particular, adding the same object file twice causes this error. Check for a duplicate of the
object file that is mentioned in the message and remove it from the command line.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 111 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Other Errors and Warnings
For example:
To facilitate the investigation, try to send only the single image, object, source file, or function that
is causing the error, plus the command-line options used.
If the assembler causes the internal fault, and the source code contains pre-processor macros, it
might be necessary to use the compiler to preprocess the source before sending it to your supplier.
That is, to take account of files added with #include, pass the file through the preprocessor as
follows:
Where <options> are your normal compile options, such as -O2, -g, -I, -D, but without -c.
Check that the error is still reproducible with the preprocessed file. For example, compile it with:
Then provide the PPsourcefile.c file and the <options> to your supplier.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 112 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Other Errors and Warnings
When the message is displayed, the <X> prefixing the message number is replaced
by an appropriate letter relating to the tool. For example, the code X3900U is
displayed as L3900U by the linker when you have specified an unrecognized option.
X3902U: Recursive via file inclusion depth of <limit> reached in file '<file>'.
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 113 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Arm Compiler for Embedded Errors and Warnings Reference Guide
Changes
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 114 of 115
Arm® Compiler for Embedded Errors and Warnings Document ID: 100074_6.22_00_en
Reference Guide Version 6.22
Arm Compiler for Embedded Errors and Warnings Reference Guide
Changes
Copyright © 2014–2024 Arm Limited (or its affiliates). All rights reserved.
Non-Confidential
Page 115 of 115