0% found this document useful (0 votes)
513 views

DUI0496C Arm Errors Reference PDF

ARM Compiler toolchain (r) version 4. Errors and Warnings Reference Printed on: August 4, 2011 copyright (c) 2010-2011 ARM. All rights reserved. ARM is not liable for any loss or damage arising from the use of any information in this document, or any error or omission in such information, or any incorrect use of the product.

Uploaded by

piyushpandey
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
513 views

DUI0496C Arm Errors Reference PDF

ARM Compiler toolchain (r) version 4. Errors and Warnings Reference Printed on: August 4, 2011 copyright (c) 2010-2011 ARM. All rights reserved. ARM is not liable for any loss or damage arising from the use of any information in this document, or any error or omission in such information, or any incorrect use of the product.

Uploaded by

piyushpandey
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 155

ARM Compiler toolchain

Version 4.1

Errors and Warnings Reference

Printed on: August 4, 2011

Copyright 2010-2011 ARM. All rights reserved.


ARM DUI 0496C (ID080411)

ARM Compiler toolchain


Errors and Warnings Reference
Copyright 2010-2011 ARM. All rights reserved.
Release Information
Change history
Description

Issue

Confidentiality

Change

28 May 2010

Non-Confidential

ARM Compiler toolchain v4.1 Release

30 September 2010

Non-Confidential

Update 1 for ARM Compiler toolchain v4.1

28 January 2011

Non-Confidential

Update 2 for ARM Compiler toolchain v4.1 Patch 3

30 April 2011

Non-Confidential

Update 3 for ARM Compiler toolchain v4.1

29 July 2011

Non-Confidential

Update 4 for ARM Compiler toolchain v4.1 Patch 5

Proprietary Notice
Words and logos marked with or are registered trademarks or trademarks of ARM in the EU and other countries,
except as otherwise stated below in this proprietary notice. Other brands and names mentioned herein may be the
trademarks of their respective owners.
Neither the whole nor any part of the information contained in, or the product described in, this document may be
adapted or reproduced in any material form except with the prior written permission of the copyright holder.
The product described in this document is subject to continuous developments and improvements. All particulars of the
product and its use contained in this document are given by ARM in good faith. However, all warranties implied or
expressed, including but not limited to implied warranties of merchantability, or fitness for purpose, are excluded.
This document is intended only to assist the reader in the use of the product. ARM shall not be liable for any loss or
damage arising from the use of any information in this document, or any error or omission in such information, or any
incorrect use of the product.
Where the term ARM is used it means ARM or any of its subsidiaries as appropriate.
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
The information in this document is final, that is for a developed product.
Web Address
http://www.arm.com

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

ii

Contents
ARM Compiler toolchain Errors and Warnings
Reference

Chapter 1
Chapter 2

Conventions and feedback


C and C++ Compiler Errors and Warnings
2.1
2.2
2.3
2.4

Chapter 3

Assembler Errors and Warnings


3.1

Chapter 4

ARM DUI 0496C


ID080411

List of the armar error and warning messages ............................................................. 6-2

Other Errors and Warnings


7.1

Appendix A

List of the fromelf error and warning messages ............................................................ 5-2

Librarian Errors and Warnings


6.1

Chapter 7

Suppressing armlink error and warning messages ....................................................... 4-2


List of the armlink error and warning messages ........................................................... 4-3

ELF Image Converter Errors and Warnings


5.1

Chapter 6

List of the armasm error and warning messages .......................................................... 3-2

Linker Errors and Warnings


4.1
4.2

Chapter 5

Internal errors and other unexpected failures ............................................................... 2-2


Suppressing armcc error and warning messages ........................................................ 2-3
List of the armcc error and warning messages ............................................................. 2-4
List of the old-style armcc error and warning messages ............................................ 2-64

List of other error and warning messages .................................................................... 7-2

Revisions for the Errors and Warnings Reference

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

iii

Chapter 1
Conventions and feedback

The following describes the typographical conventions and how to give feedback:
Typographical conventions
The following typographical conventions are used:
monospace Denotes text that can be entered at the keyboard, such as commands, file

and program names, and source code.


monospace Denotes a permitted abbreviation for a command or option. The

underlined text can be entered instead of the full command or option


name.
monospace italic

Denotes arguments to commands and functions where the argument is to


be replaced by a specific value.
monospace bold

Denotes language keywords when used outside example code.


italic

Highlights important notes, introduces special terminology, denotes


internal cross-references, and citations.

bold

Highlights interface elements, such as menu names. Also used for


emphasis in descriptive lists, where appropriate, and for ARM processor
signal names.

Feedback on this product


If you have any comments and suggestions about this product, contact your supplier
and give:

ARM DUI 0496C


ID080411

your name and company

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

1-1

Conventions and feedback

the serial number of the product

details of the release you are using

details of the platform you are using, such as the hardware platform,
operating system type and version

a small standalone sample of code that reproduces the problem

a clear explanation of what you expected to happen, and what actually


happened

the commands you used, including any command-line options

sample output illustrating the problem

the version string of the tools, including the version number and build
numbers.

Feedback on content
If you have comments on content then send an e-mail to [email protected]. Give:

the title

the number, ARM DUI 0496C

if viewing online, the topic names to which your comments apply

if viewing a PDF version of a document, the page numbers to which your


comments apply

a concise explanation of your comments.

ARM also welcomes general suggestions for additions and improvements.


ARM periodically provides updates and corrections to its documentation on the ARM
Information Center, together with knowledge articles and Frequently Asked Questions (FAQs).
Other information

ARM Information Center, http://infocenter.arm.com/help/index.jsp

ARM Technical Support Knowledge Articles,


http://infocenter.arm.com/help/topic/com.arm.doc.faqs/index.html

ARM Support and Maintenance,


http://www.arm.com/support/services/support-maintenance.php

ARM Glossary,
http://infocenter.arm.com/help/topic/com.arm.doc.aeg0014-/index.html

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

1-2

Chapter 2
C and C++ Compiler Errors and Warnings

The following topics describe the error and warning messages for the C and C++ compiler, armcc:

Internal errors and other unexpected failures on page 2-2

Suppressing armcc error and warning messages on page 2-3

List of the armcc error and warning messages on page 2-4

List of the old-style armcc error and warning messages on page 2-64.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-1

C and C++ Compiler Errors and Warnings

2.1

Internal errors and other unexpected failures


Internal errors in the compiler are typically errors that have occurred but have not yet been
documented, or they might point to a potential issue in the compiler itself.
For example:
Internal fault: [0x87ecef:410591]

contains:

the message description (Internal Fault)

a six hex digit fault code for the error that occurred (0x87ecef).
In previous versions this was a 4 digit code.

the version number (41 is ARM Compiler v4.1)

the build number (0591 in this example).

If you see an internal fault, contact your supplier.


To facilitate the investigation, try to send only the single source file or function that is causing
the error, plus the compiler options used when compiling the code.
It might be necessary to preprocess the file (that is, to take account of files added with #include).
To do this, pass the file through the preprocessor as follows:
armcc <options> E sourcefile.c > PPsourcefile.c

where <options> are your normal compile switches, such as -O2, -g, -I, -D, but without -c.
Check that the error is still reproducible with the preprocessed file by compiling it with:
armcc <options> -c PPsourcefile.c

and then provide the PPsourcefile.c file and your compile <options> to your supplier.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-2

C and C++ Compiler Errors and Warnings

2.2

Suppressing armcc error and warning messages


The compiler normally warns of potential portability problems and other hazards.
When porting legacy code (for example, in old-style C) to the ARM, many warnings might be
reported. It might be tempting to disable all such warnings with W. ARM recommends however
that for portability reasons, you change the code to make it ANSI compatible rather than
suppressing the warnings.
Some warnings are suppressed by default. To override this, use the --strict_warnings switch to
enable all suppressed warnings.
By default optimization messages, that is most of the messages between 1593 and 2159, are not
warnings. To treat optimization messages as warnings, use the --diag_warning=optimizations
option.

2.2.1

See also
Reference
Compiler Reference:

--diag_warning=tag[,tag,...] on page 3-74

--strict_warnings on page 3-192

-W on page 3-216.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-3

C and C++ Compiler Errors and Warnings

2.3

List of the armcc error and warning messages


The error and warning messages for armcc are.
0

unknown error

last line of file ends without a new line

last line of file ends with a backslash

#include file <entity> includes itself

out of memory

cannot open <entity> input file <filename>: <reason>

For example:
#include <file.h>

results in the message:


Error: #5: cannot open source input file "file.h": No such file or
directory

because file.h does not exist in the system include directory.


6

comment unclosed at end of file

Comment started with /* but no matching */ to close the comment.


7

unrecognized token

missing closing quote

For example:
char foo[] = {"\"};

In this example, the backslash causes the following quote " to be treated as a
literal character rather than closing the string. To fix this, use:
char foo[] = {"\\"};

nested comment is not allowed

For example:
/*nested
/*comment*/

10

"#" not expected here

11

unrecognized preprocessing directive

For example:
#foo

12

parsing restarts here after previous syntax error

13

expected a file name

For example:
#include <stdio.h>

14

extra text after expected end of preprocessing directive

For example:
#if EMBEDDED foo

or:
#include <stdio.h> foo

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-4

C and C++ Compiler Errors and Warnings

or:
#ifdef SOMETHING
:
#endif SOMETHING

The #endif does not expect or require any argument. Enclosing the trailing part
of the line in a comment fixes the problem:
#endif /* SOMETHING */

16

<entity> is not a valid source file name

17

expected a "]"

18

expected a ")"

For example:
int main(void
{

where there is a missing ).


19

extra text after expected end of number

For example:
int a = 37r;

20

identifier <entity> is undefined

For example, when compiled for C++, the code:


void foo( arg ) { }

results in the message:


Error: #20: identifier <arg> is undefined

Another example of code that can cause this error is:


int foo(void)
{
int a = 4;
a = i;
}

which results in the message:


Error: #20: identifier "i" is undefined

because i has not been declared.


21

type qualifiers are meaningless in this declaration

22

invalid hexadecimal number

23

integer constant is too large

24

invalid octal digit

For example:
int a = 0378;

25

quoted string should contain at least one character

For example:
char a ='';

26

too many characters in character constant

For example:
char a =abcd;

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-5

C and C++ Compiler Errors and Warnings

results in an error.
Note
Only one character is permitted in a single-quoted string. For more than one
character, double quotes must be used. Strings must be assigned to an appropriate
variable such as a[].
27

character value is out of range

For example:
char foo[] = {"\xBBBB" };

results in the message:


Warning: #27-D: character value is out of range

28

expression must have a constant value

29

expected an expression

30

floating constant is out of range

31

expression must have integral type

32

expression must have arithmetic type

33

expected a line number

34

invalid line number

35

#error directive: <entity>

36

the #if for this directive is missing

37

the #endif for this directive is missing

An open #if was still active, but was not closed with #endif before the End Of
File.
38

directive is not allowed -- an #else has already appeared

39

division by zero

40

expected an identifier

This error is raised if preprocessor statements are incorrectly formatted such as


for example, if the identifier which must immediately follow a preprocessor
command is missing. For example, a missing identifier after #define results in:
Error: #40: expected an identifier

This error can also occur when C code containing C++ keywords is compiled with
the C++ compiler, for example:
int *new(void *p) { return p; }

causes an error because new is a keyword in C++.

ARM DUI 0496C


ID080411

41

expression must have arithmetic or pointer type

42

operand types are incompatible (<type> and <type>)

44

expression must have pointer type

45

#undef may not be used on this predefined name

46

<entity> is predefined; attempted redefinition ignored

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-6

C and C++ Compiler Errors and Warnings

47

incompatible redefinition of macro <entity>

Macro has been defined twice (with different replacement strings).


If it is necessary to do this, undefine the macro (#undef) before the second
definition.
For example:
#define TEST 0
#define TEST 1

causes the compiler to produce:


Warning: #47-D: incompatible redefinition of macro "TEST" (declared at
line 1)

There is no way to control this error directly by a compiler option, but you can
use conditional preprocessing. For example:
#ifdef TEST_EQUALS_ZERO
#define TEST 0
#else
#define TEST 1
#endif

Compiling with armcc -c foo.c defines TEST to be 1 (the default).


Compiling with armcc -c -DTEST_EQUALS_ZERO foo.c defines TEST to be 0.
49

duplicate macro parameter name

50

"##" may not be first in a macro definition

51

"##" may not be last in a macro definition

52

expected a macro parameter name

53

expected a ":"

54

too few arguments in macro invocation

55

too many arguments in macro invocation

56

operand of sizeof may not be a function

57

this operator is not allowed in a constant expression

58

this operator is not allowed in a preprocessing expression

59

function call is not allowed in a constant expression

60

this operator is not allowed in an integral constant expression

61

integer operation result is out of range

62

shift count is negative

63

shift count is too large

64

declaration does not declare anything

For example:
int;

65

expected a ";"

66

enumeration value is out of "int" range

This diagnostic message is generated by the compiler when an enum constant is


outside the range of a signed int.
ARM DUI 0496C
ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-7

C and C++ Compiler Errors and Warnings

For example:
typedef enum
{
Bit31 = 0x80000000
} Bits;

when compiled in C mode generates the this message as a warning.


Note
The behavior of the compiler has changed between past versions and also when
using --enum_is_int and --strict switches.
C Mode:

the warning is produced but the compiler promotes the constants to


unsigned

the switch --strict always produces this message as an error.

C++ Mode:

by default the out-of-range constants are promoted to unsigned without a


warning and also when --strict is used

As a work around for cases where the message is an error use the following code
example:
typedef enum
{
Bit31 = (int)0x80000000
} Bits;

An overflow no longer occurs, and so no error is reported.


Note
The value of Bit31 is now negative because it is a signed int.
See the following in in the Compiler Reference:

Structures, unions, enumerations, and bitfields on page 6-9.

67

expected a "}"

68

integer conversion resulted in a change of sign

The constant is too large to be represented in a signed long, and therefore has been
given unsigned type.
Example:
long l = 2147483648;

69

integer conversion resulted in truncation

70

incomplete type is not allowed

Example:
typedef struct {
unsigned char size;
char string[];
} FOO;

By not declaring a size for the array in the structure, the compiler is not able to
allocate a size of the structure. Incomplete types are allowed in --gnu and --c99
modes.
71

ARM DUI 0496C


ID080411

operand of sizeof may not be a bit field

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-8

C and C++ Compiler Errors and Warnings

76

argument to macro is empty

77

this declaration has no storage class or type specifier

78

a parameter declaration may not have an initializer

79

expected a type specifier

The ellipses to denote variadic functions, such as, for example, printf(), must
follow at least one parameter. Change:
int foo( ... );

to:
int foo( int bar, ... );

80

a storage class may not be specified here

81

more than one storage class may not be specified

82

storage class is not first

83

type qualifier specified more than once

84

invalid combination of type specifiers

The type name or type qualifier cannot be used in the same declaration as the
second type name or type qualifier. For example:
typedef int int;

85

invalid storage class for a parameter

86

invalid storage class for a function

87

a type specifier may not be used here

88

array of functions is not allowed

89

array of void is not allowed

90

function returning function is not allowed

91

function returning array is not allowed

92

identifier-list parameters may only be used in a function definition

93

function type may not come from a typedef

94

the size of an array must be greater than zero

Zero-sized arrays are allowed only when in GNU mode, --gnu. For example:
char name[0];

See the following in the Compiler Reference:

--gnu on page 3-105

GNU extensions to the C and C++ languages on page 4-47.


95

array is too large

There is a limit of 4GB on the maximum size of arrays or structures.

ARM DUI 0496C


ID080411

96

a translation unit must contain at least one declaration

97

a function may not return a value of this type

98

an array may not have elements of this type

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-9

C and C++ Compiler Errors and Warnings

99

a declaration here must declare a parameter

100

duplicate parameter name

101

<entity> has already been declared in the current scope

102

forward declaration of enum type is nonstandard

103

class is too large

104

struct or union is too large

105

invalid size for bit field

Bit fields must not be larger than the size of the type.
For example, with --strict:
struct X{
int y:5000;
};

106

invalid type for a bit field

Bit fields must have integral type.


Example:
struct X{
float x:5;
float y:2;
};

107

zero-length bit field must be unnamed

108

signed bit field of length 1

109

expression must have (pointer-to-) function type

110

expected either a definition or a tag name

111

statement is unreachable

112

expected "while"

114

<entity> was referenced but not defined

115

a continue statement may only be used within a loop

116

a break statement may only be used within a loop or switch

Example:
void foo(void){
int a=0;
continue;
}

or:
void bar(void){
int a=0;
break;
}

ARM DUI 0496C


ID080411

117

non-void <entity> should return a value

118

a void function may not return a value

119

cast to type <type> is not allowed

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-10

C and C++ Compiler Errors and Warnings

120

return value type does not match the function type

121

a case label may only be used within a switch

122

a default label may only be used within a switch

123

case label value has already appeared in this switch

124

default label has already appeared in this switch

125

expected a "("

126

expression must be an lvalue

127

expected a statement

128

loop is not reachable from preceding code

129

a block-scope function may only have extern storage class

130

expected a "{"

131

expression must have pointer-to-class type

132

expression must have pointer-to-struct-or-union type

133

expected a member name

134

expected a field name

135

<entity> has no member <entity>

136

<entity> has no field <entity>

137

expression must be a modifiable lvalue

138

taking the address of a register variable is not allowed

139

taking the address of a bit field is not allowed

140

too many arguments in function call

Function declaration does not match the number of parameters in an earlier


function prototype.
Example:
extern void foo(int x);
void bar(void)
{
foo(1,2);
}

141

unnamed prototyped parameters not allowed when body is present

142

expression must have pointer-to-object type

143

program too large or complicated to compile

144

a value of type <type> cannot be used to initialize an entity of type


<type>

The initializing string for a fixed size character array is exactly as long as the
array size, leaving no room for a terminating \0, for example:
char name[5] = "Hello";

The name array can hold up to 5 characters. "Hello" does not fit because C strings
are always null-terminated (for example, "Hello\0"). The compiler reports:

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-11

C and C++ Compiler Errors and Warnings

Error: #144: a value of type "const char [6]" cannot be used to initialize
an entity of type "char [5]"

A similar error is also raised if there is an implicit cast of non-zero int to pointer.
For example:
void foo_func( void )
{
char *foo=1;
}

results in the message:


#144: a value of type "int" cannot be used to initialize an entity of type
"char *"

For the cast, this error can be suppressed with the use of the
--loose_implicit_cast switch.
145

<entity> may not be initialized

146

too many initializer values

147

declaration is incompatible with <entity>

This incorrect C code:


typedef enum { e } E;
typedef enum { f } F;
E g(void);
F g(void);

is a discretionary error in all modes, and can be downgraded from an Error to a


Warning with --diag_warning 147, or suppressed completely with
--diag_suppress 147.

ARM DUI 0496C


ID080411

148

<entity> has already been initialized

149

a global-scope declaration may not have this storage class

150

a type name may not be redeclared as a parameter

151

a typedef name may not be redeclared as a parameter

152

conversion of nonzero integer to pointer

153

expression must have class type

154

expression must have struct or union type

155

old-fashioned assignment operator

156

old-fashioned initializer

157

expression must be an integral constant expression

158

expression must be an lvalue or a function designator

159

declaration is incompatible with previous <entity>

160

external name conflicts with external name of <entity>

161

unrecognized #pragma

163

could not open temporary file <entity>

164

name of directory for temporary files is too long (<entity>)

165

too few arguments in function call

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-12

C and C++ Compiler Errors and Warnings

Function prototype is defined with a number of parameters that does not match
the number of parameters passed in the function call.
For example:
extern void foo(int x);
void bar(void)
{
foo();
}

166

invalid floating constant

167

argument of type <type> is incompatible with parameter of type <type>

168

a function type is not allowed here

169

expected a declaration

This can occur when attempting to compile some C++ header files with the C
compiler instead of the C++ compiler. The following message is reported:
Error: #169: expected a declaration

170

pointer points outside of underlying object

171

invalid type conversion

172

external/internal linkage conflict with previous declaration

Errors about linkage disagreements where functions are implicitly declared as


extern and then later re-declared as static are suppressed unless compiled with
--strict.
Example:
extern void foo(void);
static void foo(void){}

173

floating-point value does not fit in required integral type

174

expression has no effect

175

subscript out of range

177

<entity> was declared but never referenced

By default, unused declaration warnings are given for:

local (within a function) declarations of variables, typedefs, and functions

labels (always within a function)

top-level static functions and static variables.

The --diag_suppress 177 option suppresses these warnings.


178

"&" applied to an array has no effect

179

right operand of "%" is zero

180

argument is incompatible with formal parameter

181

argument is incompatible with corresponding format string conversion

For example when compiling with --strict, the code:


unsigned long foo = 0x1234;
printf("%08X", foo);

results in the warning:

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-13

C and C++ Compiler Errors and Warnings

Warning: #181-D: argument is incompatible with corresponding format string


conversion

To avoid the warning, the code could be rewritten as:


unsigned long foo = 0x1234;
printf("%0lX", foo);

or perhaps:
unsigned int foo = 0x1234;
printf("%0X", foo);
%0X can be used for char, short or int. Use lX for a long integer, even though both
ints and longs are 32-bits wide on an ARM.

182

could not open source file <entity> (no directories in search list)

183

type of cast must be integral

184

type of cast must be arithmetic or pointer

185

dynamic initialization in unreachable code

186

pointless comparison of unsigned integer with zero

For example:
unsigned short foo;
if (foo<0) printf("This never happens");

gives a warning that the comparison between an unsigned (for example, char or
int) value and zero always evaluates to false.
187

use of "=" where "==" may have been intended

Example:
int main(void)
{
int a;
const int b =1;
if (a=b)
}

188

enumerated type mixed with another type

189

error while writing <entity> file

190

invalid intermediate language file

191

type qualifier is meaningless on cast type

The C specification states that a cast does not yield an lvalue, so a cast to a
qualified type has the same effect as a cast to the unqualified version of the type.
This warning is just to inform the user that the type qualifier has no effect,
although the code is still legal. The warning is suppressible with --diag_suppress
191.
Example:
"val2 = (const float)val1;" is equivalent to "val2 = (float)val1;"

192

unrecognized character escape sequence

This error is commonly associated with the attempted use of non-ASCII character
sets, such as 16-bit Unicode characters. The compiler supports multibyte
character sets, such as Unicode. Source files are compiled according to the
selected locale of that machine. It is possible to use Escape processing (as
recommended by Kernighan and Ritchie, section A2.5.2) to encode specific
values instead.
ARM DUI 0496C
ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-14

C and C++ Compiler Errors and Warnings

For example:
char *p = "\x12\x34\x56\x78"; // 12 34 56 78

In character and string escapes, if the character following the \ has no special
meaning, the value of the escape is the character itself, for example, \s is the same
as s and the warning is given.
193

zero used for undefined preprocessing identifier <entity>

194

expected an asm string

195

an asm function must be prototyped

196

an asm function may not have an ellipsis

219

error while deleting file <entity>

220

integral value does not fit in required floating-point type

221

floating-point value does not fit in required floating-point type

222

floating-point operation result is out of range

223

function <entity> declared implicitly

This is a common warning that occurs where there is no prototype for a function.
For example:
void foo(void)
{
printf("foo");
}

To fix this, add #include <stdio.h> that includes the prototype for printf.
For ANSI C, you can suppress this warning with --diag_suppress 223. This is
useful when compiling old-style C in ANSI C mode.
224

the format string requires additional arguments

225

the format string ends before this argument

226

invalid format string conversion

227

macro recursion

228

trailing comma is nonstandard

229

bit field cannot contain all values of the enumerated type

230

nonstandard type for a bit field

In strict ANSI C, the only types permitted for a bit field are int, signed int, and
unsigned int.
Example:
struct X {
char y:2;
};

ARM DUI 0496C


ID080411

231

declaration is not visible outside of function

232

old-fashioned typedef of "void" ignored

233

left operand is not a struct or union containing this field

234

pointer does not point to struct or union containing this field

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-15

C and C++ Compiler Errors and Warnings

235

variable <entity> was declared with a never-completed type

236

controlling expression is constant

237

selector expression is constant

238

invalid specifier on a parameter

239

invalid specifier outside a class declaration

240

duplicate specifier in declaration

241

a union is not allowed to have a base class

242

multiple access control specifiers are not allowed

243

class or struct definition is missing

244

qualified name is not a member of class <type> or its base classes

245

a nonstatic member reference must be relative to a specific object

246

a nonstatic data member may not be defined outside its class

247

<entity> has already been defined

A typical example of this is where a variable name has been used more than once.
This can sometimes occur when compiling legacy code that relies on tentative
declarations. Tentative declarations permit a variable to be declared and
initialized as separate statements such as:
int a;
int a = 1;

Tentative declarations are permitted by default for C code, but produce an error
with C++ code.
248

pointer to reference is not allowed

249

reference to reference is not allowed

250

reference to void is not allowed

251

array of reference is not allowed

252

reference <entity> requires an initializer

253

expected a ","

254

type name is not allowed

This occurs when a typedef name is being used directly in an expression:


typedef int footype;
int x = footype; // reports Error: #254: type name is not allowed

To fix this, first create an instance of that type (for example, a variable of the new
type):
typedef int footype;
footype bar = 1;
int x = bar;

ARM DUI 0496C


ID080411

255

type definition is not allowed

256

invalid redeclaration of type name <entity>

257

const <entity> requires an initializer

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-16

C and C++ Compiler Errors and Warnings

258

"this" may only be used inside a nonstatic member function

259

constant value is not known

260

explicit type is missing ("int" assumed)

261

access control not specified (<entity> by default)

262

not a class or struct name

263

duplicate base class name

264

invalid base class

265

<entity> is inaccessible

For C++ only, the --diag_warning 265 option downgrades access control errors to
warnings.
For example:
class A { void f() {}; }; // private member
A a;
void g() { a.f(); } // erroneous access

results in the message:


Error: #265-D: function "A::f" is inaccessible

ARM DUI 0496C


ID080411

266

<entity> is ambiguous

267

old-style parameter list (anachronism)

268

declaration may not appear after executable statement in block

269

conversion to inaccessible base class <type> is not allowed

274

improperly terminated macro invocation

276

name followed by "::" must be a class or namespace name

277

invalid friend declaration

278

a constructor or destructor may not return a value

279

invalid destructor declaration

280

declaration of a member with the same name as its class

281

global-scope qualifier (leading "::") is not allowed

282

the global scope has no <entity>

283

qualified name is not allowed

284

NULL reference is not allowed

285

initialization with "<...>" is not allowed for object of type <type>

286

base class <type> is ambiguous

287

derived class <type> contains more than one instance of class <type>

288

cannot convert pointer to base class <type> to pointer to derived class


<type> -- base class is virtual

289

no instance of constructor <entity> matches the argument list

290

copy constructor for class <type> is ambiguous

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-17

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

291

no default constructor exists for class <type>

292

<entity> is not a nonstatic data member or base class of class <type>

293

indirect nonvirtual base class is not allowed

294

invalid union member -- class <type> has a disallowed member function

296

invalid use of non-lvalue array

297

expected an operator

298

inherited member is not allowed

299

cannot determine which instance of <entity> is intended

300

a pointer to a bound function may only be used to call the function

301

typedef name has already been declared (with same type)

302

<entity> has already been defined

304

no instance of <entity> matches the argument list

305

type definition is not allowed in function return type declaration

306

default argument not at end of parameter list

307

redefinition of default argument

308

more than one instance of <entity> matches the argument list:

309

more than one instance of constructor <entity> matches the argument list:

310

default argument of type <type> is incompatible with parameter of type


<type>

311

cannot overload functions distinguished by return type alone

312

no suitable user-defined conversion from <type> to <type> exists

313

type qualifier is not allowed on this function

314

only nonstatic member functions may be virtual

315

the object has cv-qualifiers that are not compatible with the member
function

316

program too large to compile (too many virtual functions)

317

return type is not identical to nor covariant with return type <type> of
overridden virtual function <entity>

318

override of virtual <entity> is ambiguous

319

pure specifier ("= 0") allowed only on virtual functions

320

badly-formed pure specifier (only "= 0" is allowed)

321

data member initializer is not allowed

322

object of abstract class type <type> is not allowed:

323

function returning abstract class <type> is not allowed:

324

duplicate friend declaration

325

inline specifier allowed on function declarations only


Copyright 2010-2011 ARM. All rights reserved.
Non-Confidential

2-18

C and C++ Compiler Errors and Warnings

326

"inline" is not allowed

327

invalid storage class for an inline function

328

invalid storage class for a class member

329

local class member <entity> requires a definition

330

<entity> is inaccessible

332

class <type> has no copy constructor to copy a const object

333

defining an implicitly declared member function is not allowed

334

class <type> has no suitable copy constructor

335

linkage specification is not allowed

336

unknown external linkage specification

337

linkage specification is incompatible with previous <entity>

If the linkage for a function is redeclared with an incompatible specification to a


previous declaration this error is produced.
For example:
int foo(void);
int bar(void)
{
int x;
x = foo();
return x;
}
extern "C" int foo(void)
{
return 0;
}

results in the message:


Error: #337: linkage specification is incompatible with previous "foo"
(declared at line 1)

ARM DUI 0496C


ID080411

338

more than one instance of overloaded function <entity> has "C" linkage

339

class <type> has more than one default constructor

340

value copied to temporary, reference to temporary used

341

"operator<entity>" must be a member function

342

operator may not be a static member function

343

no arguments allowed on user-defined conversion

344

too many parameters for this operator function

345

too few parameters for this operator function

346

nonmember operator requires a parameter with class type

347

default argument is not allowed

348

more than one user-defined conversion from <type> to <type> applies:

349

no operator <entity> matches these operands

350

more than one operator <entity> matches these operands:

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-19

C and C++ Compiler Errors and Warnings

351

first parameter of allocation function must be of type "size_t"

352

allocation function requires "void *" return type

353

deallocation function requires "void" return type

354

first parameter of deallocation function must be of type "void *"

356

type must be an object type

357

base class <type> has already been initialized

358

base class name required -- <type> assumed (anachronism)

359

<entity> has already been initialized

360

name of member or base class is missing

361

assignment to "this" (anachronism)

362

"overload" keyword used (anachronism)

363

invalid anonymous union -- nonpublic member is not allowed

364

invalid anonymous union -- member function is not allowed

365

anonymous union at global or namespace scope must be declared static

366

<entity> provides no initializer for:

367

implicitly generated constructor for class <type> cannot initialize:

368

<entity> defines no constructor to initialize the following:

This indicates that you have a const structure or structure containing a const. It is
issued as a friendly warning to assist with error 369. This can safely be ignored
providing that the const members of structures are appropriately initialized.
369

<entity> has an uninitialized const or reference member

This indicates that you have a instance of a const structure or structure containing
a const that has not been correctly initialized. You must either initialise it
correctly for every instance or provide a constructor to initialise it.
370

<entity> has an uninitialized const field

371

class <type> has no assignment operator to copy a const object

372

class <type> has no suitable assignment operator

373

ambiguous assignment operator for class <type>

375

declaration requires a typedef name

377

"virtual" is not allowed

378

"static" is not allowed

379

cast of bound function to normal function pointer (anachronism)

380

expression must have pointer-to-member type

381

extra ";" ignored

In C, this can be caused by an unexpected semicolon at the end of a declaration


line, for example:
int x;;

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-20

C and C++ Compiler Errors and Warnings

This might occur inadvertently when using macros.


Similarly, in C++, this might be caused by constructions like:
class X { ... } ; ;

which probably resulted from some macro usage:


#define M(c) class c { ... } ;
M(X);

The extra semicolon is illegal because empty declarations are illegal.

ARM DUI 0496C


ID080411

382

nonstandard member constant declaration (standard form is a static const


integral member)

384

no instance of overloaded <entity> matches the argument list

386

no instance of <entity> matches the required type

387

delete array size expression used (anachronism)

389

a cast to abstract class <type> is not allowed:

390

function "main" may not be called or have its address taken

391

a new-initializer may not be specified for an array

392

member function <entity> may not be redeclared outside its class

393

pointer to incomplete class type is not allowed

394

reference to local variable of enclosing function is not allowed

395

single-argument function used for postfix <entity> (anachronism)

398

cast to array type is nonstandard (treated as cast to <type>)

399

<entity> has an operator new<entity>() but no default operator


delete<entity>()

400

<entity> has a default operator delete<entity>() but no operator


new<entity>()

401

destructor for base class <entity> is not virtual

403

invalid redeclaration of member <entity>

404

function "main" may not be declared inline

405

member function with the same name as its class must be a constructor

406

using nested <entity> (anachronism)

407

a destructor may not have parameters

408

copy constructor for class <type> may not have a parameter of type <type>

409

<entity> returns incomplete type <type>

410

protected <entity> is not accessible through a <type> pointer or object

411

a parameter is not allowed

412

an "asm" declaration is not allowed here

413

no suitable conversion function from <type> to <type> exists

414

delete of pointer to incomplete class

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-21

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

415

no suitable constructor exists to convert from <type> to <type>

416

more than one constructor applies to convert from <type> to <type>:

417

more than one conversion function from <type> to <type> applies:

418

more than one conversion function from <type> to a built-in type applies:

424

a constructor or destructor may not have its address taken

427

qualified name is not allowed in member declaration

428

enumerated type mixed with another type (anachronism)

429

the size of an array in "new" must be non-negative

430

returning reference to local temporary

433

qualifiers dropped in binding reference of type <type> to initializer of


type <type>

434

a reference of type <type> (not const-qualified) cannot be initialized


with a value of type <type>

435

a pointer to function may not be deleted

436

conversion function must be a nonstatic member function

437

template declaration is not allowed here

438

expected a "<"

439

expected a ">"

440

template parameter declaration is missing

441

argument list for <entity> is missing

442

too few arguments for <entity>

443

too many arguments for <entity>

450

the type "long long" is nonstandard

451

omission of <entity> is nonstandard

452

return type may not be specified on a conversion function

456

excessive recursion at instantiation of <entity>

457

<entity> is not a function or static data member

458

argument of type <type> is incompatible with template parameter of type


<type>

459

initialization requiring a temporary or conversion is not allowed

460

declaration of <entity> hides function parameter

461

initial value of reference to non-const must be an lvalue

463

"template" is not allowed

464

<type> is not a class template

467

invalid reference to <entity> (union/nonunion mismatch)

468

a template argument may not reference a local type


Copyright 2010-2011 ARM. All rights reserved.
Non-Confidential

2-22

C and C++ Compiler Errors and Warnings

469

tag kind of <entity> is incompatible with declaration of <entity>

470

the global scope has no tag named <entity>

471

<entity> has no tag member named <entity>

473

<entity> may be used only in pointer-to-member declaration

476

name followed by "::~" must be a class name or a type name

477

destructor name does not match name of class <type>

478

type used as destructor name does not match type <type>

479

<entity> redeclared "inline" after being called

485

<entity> is not an entity that can be instantiated

486

compiler generated <entity> cannot be explicitly instantiated

487

inline <entity> cannot be explicitly instantiated

490

<entity> cannot be instantiated -- it has been explicitly specialized

494

declaring a void parameter list with a typedef is nonstandard

When the compiler is in ANSI C mode, this error might be produced by a function
declaration f(V) where V is a void type.
In the special syntax f(<void>) that indicates that f is a function taking no
arguments, the keyword <void> is required. The name of a void type cannot be
used instead.
496

template parameter <entity> may not be redeclared in this scope

497

declaration of <entity> hides template parameter

498

template argument list must match the parameter list

501

an operator name must be declared as a function

502

operator name is not allowed

503

<entity> cannot be specialized in the current scope

504

nonstandard form for taking the address of a member function

The C++ standard requires that a pointer to member be named using a qualified
name and a & character such as for &A::f.
The front end previously accepted nonstandard forms like &f, or even simply f, as
a concession to existing practice. This usage now produces a discretionary error.

ARM DUI 0496C


ID080411

505

too few template parameters -- does not match previous declaration

506

too many template parameters -- does not match previous declaration

507

function template for operator delete(void *) is not allowed

508

class template and template parameter may not have the same name

511

enumerated type is not allowed

512

type qualifier on a reference type is not allowed

513

a value of type <type> cannot be assigned to an entity of type <type>

514

pointless comparison of unsigned integer with a negative constant

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-23

C and C++ Compiler Errors and Warnings

515

cannot convert to incomplete class <type>

516

const object requires an initializer

517

object has an uninitialized const or reference member

518

nonstandard preprocessing directive

519

<entity> may not have a template argument list

520

initialization with "<...>" expected for aggregate object

521

pointer-to-member selection class types are incompatible (<type> and


<type>)

522

pointless friend declaration

524

non-const function called for const object (anachronism)

525

a dependent statement may not be a declaration

526

a parameter may not have void type

For example:
void foo(void a) { }

529

this operator is not allowed in a template argument expression

530

try block requires at least one handler

531

handler requires an exception declaration

532

handler is masked by default handler

533

handler is potentially masked by previous handler for type <type>

534

use of a local type to specify an exception

535

redundant type in exception specification

536

exception specification is incompatible with that of previous <entity>

540

support for exception handling is disabled

541

omission of exception specification is incompatible with previous <entity>

542

could not create instantiation request file <entity>

543

non-arithmetic operation not allowed in nontype template argument

544

use of a local type to declare a nonlocal variable

545

use of a local type to declare a function

546

transfer of control bypasses initialization of:

Example:
int main(void){
int choice = 1;
int z =1;
switch(choice)
{
case 1:
int y = 1;
z = y + z;
break;
case 2:

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-24

C and C++ Compiler Errors and Warnings

break;
}
return 0;

In the example, y is an initialized variable that is in scope (but unused) in the other
cases.
The C++ Standard says in section 6.7:
"It is possible to transfer into a block, but not in a way that bypasses declarations
with initialization. A program that jumps from a point where a local variable with
automatic storage duration is not in scope to a point where it is in scope is
ill-formed unless the variable has POD type (3.9) and is declared without an
initializer (8.5)."
Note
The transfer from the condition of a switch statement to a case label is considered
a jump in this respect.
The usual way to fix this is to enclose the case that declares y in braces:
case 1:
{
int y = 1;
z = y + z;
}
break;

Because y is a POD (Plain Old Data) type, so an alternative is to not use


initialization:
case 1:
int y;
y = 1;
z = y + z;
break;

ARM DUI 0496C


ID080411

548

transfer of control into an exception handler

549

<entity> is used before its value is set

550

<entity> was set but never used

551

<entity> cannot be defined in the current scope

552

exception specification is not allowed

553

external/internal linkage conflict for <entity>

554

<entity> will not be called for implicit or explicit conversions

555

tag kind of <entity> is incompatible with template parameter of type


<type>

556

function template for operator new(size_t) is not allowed

558

pointer to member of type <type> is not allowed

559

ellipsis is not allowed in operator function parameter list

560

<entity> is reserved for future use as a keyword

561

invalid macro definition:

562

invalid macro undefinition:

563

invalid <entity> output file <filename>

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-25

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

564

cannot open <entity> output file <filename>: <reason>

570

error in debug option argument

571

invalid option:

574

invalid number:

576

invalid instantiation mode:

578

invalid error limit:

585

virtual function tables can only be suppressed when compiling C++

586

anachronism option can be used only when compiling C++

587

instantiation mode option can be used only when compiling C++

588

automatic instantiation mode can be used only when compiling C++

589

implicit template inclusion mode can be used only when compiling C++

590

exception handling option can be used only when compiling C++

593

missing source file name

594

output files may not be specified when compiling several input files

595

too many arguments on command line

596

an output file was specified, but none is needed

598

a template parameter may not have void type

600

strict mode is incompatible with allowing anachronisms

601

a throw expression may not have void type

602

local instantiation mode is incompatible with automatic instantiation

603

parameter of abstract class type <type> is not allowed:

604

array of abstract class <type> is not allowed:

605

floating-point template parameter is nonstandard

606

this pragma must immediately precede a declaration

607

this pragma must immediately precede a statement

608

this pragma must immediately precede a declaration or statement

609

this kind of pragma may not be used here

611

overloaded virtual function <entity> is only partially overridden in


<entity>

612

specific definition of inline template function must precede its first use

613

invalid error tag in diagnostic control option:

614

invalid error number in diagnostic control option:

615

parameter type involves pointer to array of unknown bound

616

parameter type involves reference to array of unknown bound

617

pointer-to-member-function cast to pointer to function

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-26

C and C++ Compiler Errors and Warnings

618

struct or union declares no named members

619

nonstandard unnamed field

620

nonstandard unnamed member

624

<entity> is not a type name

625

cannot open precompiled header input file <entity>: <reason>

626

precompiled header file <entity> is either invalid or not generated by


this version of the compiler

627

precompiled header file <entity> was not generated in this directory

628

header files used to generate precompiled header file <entity> have


changed

629

the command line options do not match those used when precompiled header
file <entity> was created

630

the initial sequence of preprocessing directives is not compatible with


those of precompiled header file <entity>

631

unable to obtain mapped memory for <entity>: <reason>

This can occur if you are trying to use a large PreCompiled Header (PCH), and
you have a size limitation on the TMP directory that the ARM Compiler toolchain
uses. A possible workaround is to remove the TMP environment variable. This
forces the tools to create temporary files in the current working directory.
See the following in Introducing the ARM Compiler toolchain:

TMP and TMPDIR environment variables for temporary file directories on


page 2-27

632

"<entity>": using precompiled header file "<entity>"

633

"<entity>": creating precompiled header file "<entity>"

634

memory usage conflict with precompiled header file <entity>

This can occur if a PCH file cannot be mapped back into the build because the
required parts of the address space of the compiler are not available.
See also error 631.

ARM DUI 0496C


ID080411

635

invalid PCH memory size

636

PCH options must appear first in the command line

637

insufficient memory for PCH memory allocation

638

precompiled header files may not be used when compiling several input
files

639

insufficient preallocated memory for generation of precompiled header file


(<entity> bytes required)

640

very large entity in program prevents generation of precompiled header


file

641

<entity> is not a valid directory

642

cannot build temporary file name

643

"restrict" is not allowed

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-27

C and C++ Compiler Errors and Warnings

644

a pointer or reference to function type may not be qualified by "restrict"

645

<entity> is an unrecognized __declspec attribute

646

a calling convention modifier may not be specified here

647

conflicting calling convention modifiers

650

calling convention specified here is ignored

651

a calling convention may not be followed by a nested declarator

652

calling convention is ignored for this type

654

declaration modifiers are incompatible with previous declaration

655

the modifier <entity> is not allowed on this declaration

656

transfer of control into a try block

657

inline specification is incompatible with previous <entity>

658

closing brace of template definition not found

659

wchar_t keyword option can be used only when compiling C++

660

invalid packing alignment value

661

expected an integer constant

662

call of pure virtual function

A pure virtual function pvfn is being called, for example:


struct T { T(); virtual void pvfn() = 0; };
// a pure virtual function
T::T() { pvfn(); } // warning given here

By default, calling a pure virtual function results in:


1.

a call to the library function __cxa_pure_virtual()

2.

the __cxa_pure_virtual() function raising the signal SIGPVFN

3.

the signal being trapped by the default_signal_handler

4.

the handler displaying Pure virtual fn called on the console using


semihosting.

See the following in the Compiler Reference:

ARM DUI 0496C


ID080411

Calling a pure virtual function on page E-3.

663

invalid source file identifier string

664

a class template cannot be defined in a friend declaration

665

"asm" is not allowed

666

"asm" must be used with a function definition

667

"asm" function is nonstandard

668

ellipsis with no explicit parameters is nonstandard

669

"&..." is nonstandard

670

invalid use of "&..."

672

temporary used for initial value of reference to const volatile


(anachronism)

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-28

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

673

a reference of type <type> cannot be initialized with a value of type


<type>

674

initial value of reference to const volatile must be an lvalue

676

using out-of-scope declaration of <entity>

678

call of <entity> cannot be inlined

679

<entity> cannot be inlined

680

invalid PCH directory:

688

<entity> not found on pack alignment stack

689

empty pack alignment stack

690

RTTI option can be used only when compiling C++

691

<entity>, required for copy that was eliminated, is inaccessible

692

<entity>, required for copy that was eliminated, is not callable because
reference parameter cannot be bound to rvalue

693

<typeinfo> must be included before typeid is used

694

<entity> cannot cast away const or other type qualifiers

695

the type in a dynamic_cast must be a pointer or reference to a complete


class type, or void *

696

the operand of a pointer dynamic_cast must be a pointer to a complete


class type

697

the operand of a reference dynamic_cast must be an lvalue of a complete


class type

698

the operand of a runtime dynamic_cast must have a polymorphic class type

699

bool option can be used only when compiling C++

702

expected an "="

703

expected a declarator in condition declaration

704

<entity>, declared in condition, may not be redeclared in this scope

705

default template arguments are not allowed for function templates

706

expected a "," or ">"

707

expected a template parameter list

708

incrementing a bool value is deprecated

709

bool type is not allowed

710

offset of base class <entity> within class <entity> is too large

711

expression must have bool type (or be convertible to bool)

712

array new and delete option can be used only when compiling C++

713

<entity> is not a variable name

717

the type in a const_cast must be a pointer, reference, or pointer to


member to an object type

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-29

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

718

a const_cast can only adjust type qualifiers; it cannot change the


underlying type

719

mutable is not allowed

720

redeclaration of <entity> is not allowed to alter its access

722

use of alternative token "<:" appears to be unintended

723

use of alternative token "%:" appears to be unintended

724

namespace definition is not allowed

725

name must be a namespace name

726

namespace alias definition is not allowed

727

namespace-qualified name is required

728

a namespace name is not allowed

730

<entity> is not a class template

731

array with incomplete element type is nonstandard

732

allocation operator may not be declared in a namespace

733

deallocation operator may not be declared in a namespace

734

<entity> conflicts with using-declaration of <entity>

735

using-declaration of <entity> conflicts with <entity>

736

namespaces option can be used only when compiling C++

737

using-declaration ignored -- it refers to the current namespace

738

a class-qualified name is required

744

incompatible memory attributes specified

745

memory attribute ignored

746

memory attribute may not be followed by a nested declarator

747

memory attribute specified more than once

748

calling convention specified more than once

749

a type qualifier is not allowed

750

<entity> was used before its template was declared

751

static and nonstatic member functions with same parameter types cannot be
overloaded

752

no prior declaration of <entity>

753

a template-id is not allowed

754

a class-qualified name is not allowed

755

<entity> may not be redeclared in the current scope

756

qualified name is not allowed in namespace member declaration

757

<entity> is not a type name

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-30

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

758

explicit instantiation is not allowed in the current scope

759

<entity> cannot be explicitly instantiated in the current scope

760

<entity> explicitly instantiated more than once

761

typename may only be used within a template

763

typename option can be used only when compiling C++

764

implicit typename option can be used only when compiling C++

765

nonstandard character at start of object-like macro definition

766

exception specification for virtual <entity> is incompatible with that of


overridden <entity>

767

conversion from pointer to smaller integer

768

exception specification for implicitly declared virtual <entity> is


incompatible with that of overridden <entity>

769

<entity>, implicitly called from <entity>, is ambiguous

770

option "explicit" can be used only when compiling C++

771

"explicit" is not allowed

772

declaration conflicts with <entity> (reserved class name)

773

only "()" is allowed as initializer for array <entity>

774

"virtual" is not allowed in a function template declaration

775

invalid anonymous union -- class member template is not allowed

776

template nesting depth does not match the previous declaration of <entity>

777

this declaration cannot have multiple "template <...>" clauses

778

option to control the for-init scope can be used only when compiling C++

779

<entity>, declared in for-loop initialization, may not be redeclared in


this scope

780

reference is to <entity> -- under old for-init scoping rules it would have


been <entity>

781

option to control warnings on for-init differences can be used only when


compiling C++

782

definition of virtual <entity> is required here

783

empty comment interpreted as token-pasting operator "##"

784

a storage class is not allowed in a friend declaration

785

template parameter list for <entity> is not allowed in this declaration

786

<entity> is not a valid member class or function template

787

not a valid member class or function template declaration

788

a template declaration containing a template parameter list may not be


followed by an explicit specialization declaration

789

explicit specialization of <entity> must precede the first use of <entity>

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-31

C and C++ Compiler Errors and Warnings

790

explicit specialization is not allowed in the current scope

791

partial specialization of <entity> is not allowed

792

<entity> is not an entity that can be explicitly specialized

793

explicit specialization of <entity> must precede its first use

794

template parameter <entity> may not be used in an elaborated type


specifier

795

specializing <entity> requires "template<>" syntax

798

option old_specializations can be used only when compiling C++

799

specializing <entity> without "template<>" syntax is nonstandard

800

this declaration may not have extern "C" linkage

801

<entity> is not a class or function template name in the current scope

802

specifying a default argument when redeclaring an unreferenced function


template is nonstandard

803

specifying a default argument when redeclaring an already referenced


function template is not allowed

804

cannot convert pointer to member of base class <type> to pointer to member


of derived class <type> -- base class is virtual

805

exception specification is incompatible with that of <entity><entity>

806

omission of exception specification is incompatible with <entity>

807

unexpected end of default argument expression

808

default-initialization of reference is not allowed

809

uninitialized <entity> has a const member

810

uninitialized base class <type> has a const member

811

const <entity> requires an initializer -- class <type> has no explicitly


declared default constructor

812

const object requires an initializer -- class <type> has no explicitly


declared default constructor

814

strict mode is incompatible with long preserving rules

815

type qualifier on return type is meaningless

For example:
__packed void foo( void ) { }

The __packed qualifier is ignored because the return type cannot be __packed.

ARM DUI 0496C


ID080411

816

in a function definition a type qualifier on a "void" return type is not


allowed

817

static data member declaration is not allowed in this class

818

template instantiation resulted in an invalid function declaration

819

"..." is not allowed

821

extern inline <entity> was referenced but not defined

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-32

C and C++ Compiler Errors and Warnings

822

invalid destructor name for type <type>

824

destructor reference is ambiguous -- both <entity> and <entity> could be


used

825

<entity> could be used

826

<entity> was never referenced

827

only one member of a union may be specified in a constructor initializer


list

828

support for "new[]" and "delete[]" is disabled

829

"double" used for "long double" in generated C code

830

<entity> has no corresponding operator delete<entity> (to be called if an


exception is thrown during initialization of an allocated object)

831

support for placement delete is disabled

832

no appropriate operator delete is visible

833

pointer or reference to incomplete type is not allowed

834

invalid partial specialization -- <entity> is already fully specialized

835

incompatible exception specifications

836

returning reference to local variable

837

omission of explicit type is nonstandard ("int" assumed)

A function has been declared or defined with no return type.


Example, with the code:
foo(void){
int a;
}

an int result is assumed.


If you want it to return no result, use void as the return type. This is widespread
in old-style C.
The --diag_suppress 837 option suppresses this warning.
See also message number 938, that is a special case of this message for main().

ARM DUI 0496C


ID080411

838

more than one partial specialization matches the template argument list of
<entity>

840

a template argument list is not allowed in a declaration of a primary


template

841

partial specializations may not have default template arguments

842

<entity> is not used in template argument list of <entity>

844

the template argument list of the partial specialization includes a


nontype argument whose type depends on a template parameter

845

this partial specialization would have been used to instantiate <entity>

846

this partial specialization would have been made the instantiation of


<entity> ambiguous

847

expression must have integral or enum type

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-33

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

848

expression must have arithmetic or enum type

849

expression must have arithmetic, enum, or pointer type

850

type of cast must be integral or enum

851

type of cast must be arithmetic, enum, or pointer

852

expression must be a pointer to a complete object type

854

a partial specialization nontype argument must be the name of a nontype


parameter or a constant

855

return type is not identical to return type <type> of overridden virtual


function <entity>

856

option "guiding_decls" can be used only when compiling C++

857

a partial specialization of a class template must be declared in the


namespace of which it is a member

858

<entity> is a pure virtual function

859

pure virtual <entity> has no overrider

860

__declspec attributes ignored

861

invalid character in input line

862

function returns incomplete type <type>

863

effect of this "#pragma pack" directive is local to <entity>

864

<entity> is not a template

865

a friend declaration may not declare a partial specialization

866

exception specification ignored

867

declaration of "size_t" does not match the expected type <type>

868

space required between adjacent ">" delimiters of nested template argument


lists (">>" is the right shift operator)

869

could not set locale <entity> to allow processing of multibyte characters

870

invalid multibyte character sequence

871

template instantiation resulted in unexpected function type of <type> (the


meaning of a name may have changed since the template declaration -- the
type of the template is <type>)

872

ambiguous guiding declaration -- more than one function template <entity>


matches type <type>

873

non-integral operation not allowed in nontype template argument

884

pointer-to-member representation <entity> has already been set for


<entity>

885

<type> cannot be used to designate constructor for <type>

886

invalid suffix on integral constant

890

variable length array with unspecified bound is not allowed

891

an explicit template argument list is not allowed on this declaration

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-34

C and C++ Compiler Errors and Warnings

892

an entity with linkage cannot have a type involving a variable length


array

893

a variable length array cannot have static storage duration

894

<entity> is not a template

895

variable length array dimension (declared <entity>)

896

expected a template argument

902

type qualifier ignored

912

ambiguous class member reference -- <entity> used in preference to


<entity>

915

a segment name has already been specified

916

cannot convert pointer to member of derived class <type> to pointer to


member of base class <type> -- base class is virtual

917

invalid directory for instantiation files:

921

an instantiation information file name may not be specified when compiling


several input files

923

more than one command line option matches the abbreviation "--<entity>":

925

type qualifiers on function types are ignored

926

cannot open definition list file: <entity>

928

incorrect use of va_start

929

incorrect use of va_arg

930

incorrect use of va_end

931

pending instantiations option can be used only when compiling C++

932

invalid directory for #import files:

934

a member with reference type is not allowed in a union

935

"typedef" may not be specified here

936

redeclaration of <entity> alters its access

937

a class or namespace qualified name is required

938

return type "int" omitted in declaration of function "main"


main() has been declared or defined with no return type.

For example:
main(void){
int a;
}

is reported as an error by the compiler if compiled with --strict.


If you want it to return no result, use void as the return type. This is widespread
in old-style C.
For ANSI C, the --diag_suppress 938 option suppresses this warning.
For C++, this always results in an error.
See also message number 837 for more general cases.
ARM DUI 0496C
ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-35

C and C++ Compiler Errors and Warnings

939

pointer-to-member representation <entity> is too restrictive for <entity>

940

missing return statement at end of non-void <entity>

A return type has been defined for a function, but no value is returned.
Example:
int foo(int a)
{
printf("Hello %d", a);
}

ARM DUI 0496C


ID080411

941

duplicate using-declaration of <entity> ignored

942

enum bit-fields are always unsigned, but enum <type> includes negative
enumerator

943

option "class_name_injection" can be used only when compiling C++

944

option "arg_dep_lookup" can be used only when compiling C++

945

option "friend_injection" can be used only when compiling C++

946

name following "template" must be a template

949

specifying a default argument on this declaration is nonstandard

951

return type of function "main" must be "int"

952

a nontype template parameter may not have class type

953

a default template argument cannot be specified on the declaration of a


member of a class template outside of its class

954

a return statement is not allowed in a handler of a function try block of


a constructor

955

ordinary and extended designators cannot be combined in an initializer


designation

956

the second subscript must not be smaller than the first

959

declared size for bit field is larger than the size of the bit field type;
truncated to <entity> bits

960

type used as constructor name does not match type <type>

961

use of a type with no linkage to declare a variable with linkage

962

use of a type with no linkage to declare a function

963

return type may not be specified on a constructor

964

return type may not be specified on a destructor

965

incorrectly formed universal character name

966

universal character name specifies an invalid character

967

a universal character name cannot designate a character in the basic


character set

968

this universal character is not allowed in an identifier

969

the identifier __VA_ARGS__ can only appear in the replacement lists of


variadic macros

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-36

C and C++ Compiler Errors and Warnings

970

the qualifier on this friend declaration is ignored

971

array range designators cannot be applied to dynamic initializers

972

property name cannot appear here

975

a variable-length array type is not allowed

976

a compound literal is not allowed in an integral constant expression

977

a compound literal of type <type> is not allowed

978

a template friend declaration cannot be declared in a local class

979

ambiguous "?" operation: second operand of type <type> can be converted to


third operand type <type>, and vice versa

980

call of an object of a class type without appropriate operator() or


conversion functions to pointer-to-function type

982

there is more than one way an object of type <type> can be called for the
argument list:

983

typedef name has already been declared (with similar type)

984

operator new and operator delete cannot be given internal linkage

985

storage class "mutable" is not allowed for anonymous unions

986

invalid precompiled header file

987

abstract class type <type> is not allowed as catch type:

988

a qualified function type cannot be used to declare a nonmember function


or a static member function

989

a qualified function type cannot be used to declare a parameter

990

cannot create a pointer or reference to qualified function type

991

extra braces are nonstandard

992

invalid macro definition:

Incorrect use of -D on the compile line, for example, "-D##"

ARM DUI 0496C


ID080411

993

subtraction of pointer types <type> and <type> is nonstandard

994

an empty template parameter list is not allowed in a template template


parameter declaration

995

expected "class"

996

the "class" keyword must be used when declaring a template template


parameter

997

<entity> is hidden by <entity> -- virtual function override intended?

998

a qualified name is not allowed for a friend declaration that is a


function definition

999

<entity> is not compatible with <entity>

1000

a storage class may not be specified here

1001

class member designated by a using-declaration must be visible in a direct


base class

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-37

C and C++ Compiler Errors and Warnings

1006

a template template parameter cannot have the same name as one of its
template parameters

1007

recursive instantiation of default argument

1009

<entity> is not an entity that can be defined

1010

destructor name must be qualified

1011

friend class name may not be introduced with "typename"

1012

a using-declaration may not name a constructor or destructor

1013

a qualified friend template declaration must refer to a specific


previously declared template

1014

invalid specifier in class template declaration

1015

argument is incompatible with formal parameter

1016

prefix form of ARM function qualifier not permitted in this position

1017

Duplicate ARM function qualifiers not permitted

1018

ARM function qualifiers not permitted on this declaration/definition

ARM function qualifiers include qualifiers such as __svc, __pure and __irq
amongst others.
See the following in the Compiler Reference:

Keywords and operators on page 5-2.

1019

function qualifier <entity> not permitted on a non-static member function

1020

__irq functions must take no arguments

1021

__irq functions must return no result

1022

cannot have pointer nor reference to <entity> function

1023

__global_reg not allowed on this declaration

1024

invalid global register number; 1 to 8 allowed

An invalid register is being used in __global_reg.


Example:
__global_reg(786) int x;

1025

__svc parameter <entity> is not within permitted range (0 to 0xffffff) for


ARM SVC instruction

SVC numbers are limited to the range 0 to 0xffffff for the ARM compilers, and
0 to 0xFF for the Thumb compilers.
For standard semihosting SVCs, 0x123456 is used for ARM, 0xAB is used for
Thumb.

ARM DUI 0496C


ID080411

1026

taking the address of a global register variable is not allowed

1027

__svc_indirect function must have arguments

1028

conflicting global register declaration with <entity>

1029

__packed ignored for non-pointer parameter

1030

<entity> <type> previously declared without __packed

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-38

C and C++ Compiler Errors and Warnings

1031

Definition of <type> in packed <type> must be __packed

The Compiler Reference states:


"All substructures of a packed structure must be declared using __packed."
The compiler faults a non-packed child structure contained in a packed parent
structure. This includes the case where the substructure is an array.
For example:
typedef struct ChildStruct {
int a;
} ChildStruct;
typedef __packed struct ParentStruct {
ChildStruct child[1];
} ParentStruct;

correctly results in the message:


Error: #1031: Definition of "ChildStruct" in packed "ParentStruct" must be
__packed

See the following in the Compiler Reference:

__packed on page 5-14.

1032

Definition of nested anonymous <entity> in packed <type> must be __packed

1033

<entity> incompatible with function definition

1034

__irq functions must not be the target of a function call

1038

invalid alignment specified; only integer powers of 2 allowed

1039

conflicting alignment declaration with <entity>

1040

under-alignment not allowed

1041

alignment for an auto object may not be larger than 8

For example:
int main(void){
__align(16) int foo = 10;
}
__align is not permitted for a local variable foo, so the error is given.

See the following in the Compiler Reference:

ARM DUI 0496C


ID080411

__align on page 5-3.

1042

<entity> cannot be dynamically initialized when compiled position


independent

1043

<entity> cannot be const because it contains a mutable member

1044

option "dep_name" can be used only when compiling C++

1045

loop in sequence of "operator->" functions starting at class <type>

1046

<entity> has no member class <entity>

1047

the global scope has no class named <entity>

1048

recursive instantiation of template default argument

1049

access declarations and using-declarations cannot appear in unions

1050

<entity> is not a class member

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-39

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1051

nonstandard member constant declaration is not allowed

1053

option "parse_templates" can be used only when compiling C++

1054

option "dep_name" cannot be used with "no_parse_templates"

1055

language modes specified are incompatible

1056

invalid redeclaration of nested class

1057

type containing an unknown-size array is not allowed

1058

a variable with static storage duration cannot be defined within an inline


function

1059

an entity with internal linkage cannot be referenced within an inline


function with external linkage

1060

argument type <type> does not match this type-generic function macro

1062

friend declaration cannot add default arguments to previous declaration

1063

<entity> cannot be declared in this scope

1064

the reserved identifier <entity> may only be used inside a function

1065

this universal character cannot begin an identifier

1066

expected a string literal

1070

incorrect use of va_copy

1071

<entity> can only be used with floating-point types

1072

complex type is not allowed

1073

invalid designator kind

1074

floating-point value cannot be represented exactly

1075

complex floating-point operation result is out of range

1077

an initializer cannot be specified for a flexible array member

1079

standard requires that <entity> be given a type by a subsequent


declaration ("int" assumed)

1080

a definition is required for inline <entity>

1081

conversion from integer to smaller pointer

1082

a floating-point type must be included in the type specifier for a


_Complex or _Imaginary type

1083

Inline assembler syntax error

1084

This instruction not permitted in inline assembler

1085

Missing operand

1086

Operand is wrong type

1087

Operand should be constant

1088

Wrong number of operands

1089

Invalid PSR operand

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-40

C and C++ Compiler Errors and Warnings

1090

Expected PSR operand

1091

Invalid shift specified

1092

Should be acc0

1093

Must be a modifiable lvalue

1094

Expected a register expression

1095

Expected a label or function name

1096

Instruction cannot be conditional

1097

Expected a [ or ]

1098

Expected a shift operation

1099

Unexpected ]

1100

Register specified shift not allowed

1101

Pre-Indexed addressing not allowed

1102

Post-Indexed addressing not allowed

1103

Writeback not allowed in the addressing mode

1104

Expected {

1105

Expected }

1106

Too many registers in register list

1107

Only ^ valid here

1108

Cannot mix virtual register and C/C++ expressions in register list

1109

Only virtual registers can be specified in a register range

1110

User mode register selection/CPSR update not supported in inline


assembler. Use embedded assembler or out-of-line assembler

1111

Expected a coprocessor name

1112

Expected a coprocessor register name

These errors are given by the inline assembler if either:

the coprocessor number is accidentally omitted from an MCR or MRC


instruction

an invalid coprocessor number/coprocessor register number has been


given.

An example of correct use is shown below:


void foo()
{
int reg0;
__asm
{
MRC p15, 0, reg0, c1, c0, 0
}
}

1113

ARM DUI 0496C


ID080411

Inline assembler not permitted when generating Thumb code

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-41

C and C++ Compiler Errors and Warnings

The Thumb inline assembler is deprecated when compiling for ARM architecture
v7 (ARMv7) or later, that is, most processors in the Cortex series.
The inline assembler does not support Thumb(-1) or Thumb-2, or all the ARMv6
instructions. However, the inline assembler does still support the (ARM-only)
ARMv4T, ARMv5TE, and a subset of the new ARMv6 instructions (only the
ARMv6 media instructions), so legacy inline assembly code continues to build
correctly.
This warning is intended as a reminder to consider using the embedded assembler
or built-in intrinsics instead of inline assembler. If you cannot change your code
but require elimination of the warning, suppress the warning or compile the
module for an earlier cpu such as ARMv6.
1114

this feature not supported on target architecture/processor

Example when compiled with armcc --cpu 4T:


int main(void) {
int a,b,c;
__asm {
QADD a,b,c
}
return(a);
}

results in an error message because the saturated add instruction is only supported
in ARMv5TE and later.

ARM DUI 0496C


ID080411

1115

Cannot assign to const operand

1116

Register list cannot be empty

1117

Unqualified virtual function not allowed

1118

Expected a newline

1119

Reference to static variable not allowed in __asm function

1120

Reference to static function not allowed in __asm function

1121

Pointer to data member not allowed in __asm function

1122

__asm function cannot have static qualifier

1123

base class <type> is a virtual base class of <type>

1124

base class <type> is not virtual base class of <type>

1125

<entity> has no member function <entity>

1126

"__asm" is not allowed in this declaration

1127

Member initializer list not permitted for __asm constructors

1128

try block not permitted for __asm constructors

1129

Order of operands not compatible with previous compiler versions

1130

__align not permitted in typedef

1131

Non portable instruction (LDM with writeback and base in reg. list, final
value of base unpredictable)

1132

Non portable instruction (STM with writeback and base not first in reg.
list, stored value of base unpredictable)

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-42

C and C++ Compiler Errors and Warnings

1133

Expression operands not permitted with virtual base register

1134

literal treated as "long long"

The constant is too large to be represented in a signed long, and therefore has been
treated as a (signed) long long.
For example:
int foo(unsigned int bar)
{
return (bar == 2147483648);
}

gives a warning because 2147483648 is one greater than the maximum value
permitted for a signed long. The ll suffix means that the constant is treated as a
(64-bit) long long type rather than a signed long.
To eliminate the warning, explicitly add the ll or LL suffix to your constants. For
example:
int foo(unsigned int bar)
{
return (bar == 2147483648LL);
}

See the following in the Compiler Reference:

1135

long long on page 4-13.

literal treated as "unsigned long long"

The constant is too large to be represented in a signed long long, and therefore
has been given type unsigned long long. See error number 1134.

ARM DUI 0496C


ID080411

1137

Expected a comma

1138

Unexpected comma after this expression

1139

MRRC operation opcode must lie in range 0-15

1140

MCRR operation opcode must lie in range 0-15

1141

CDP operation opcode must lie in range 0-15

1142

MRC operation opcode must lie in range 0-7

1143

MCR operation opcode must lie in range 0-7

1144

opcode_2 must lie in range 0-7

1145

LDC/STC extra opcode must lie in range 0-255

1146

LDC/STC offset must lie in range -1020 to 1020 and be word aligned

1147

Constant operand out of range

1148

floating-point operator is not permitted with --fpu=none

1149

floating-point return type in function definition is not permitted with


-fpu=none

1150

floating-point parameter type in function definition is not permitted with


-fpu=none

1151

floating-point variable definition with initialiser is not permitted with


-fpu=none

1152

polymorphic base classes need to be exported as well

1153

Cannot assign physical registers in this register list


Copyright 2010-2011 ARM. All rights reserved.
Non-Confidential

2-43

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1154

Can only specify an even-numbered physical register here

1155

Can only specify an assignment to a physical register here

1156

Can only specify an assignment from a physical register here

1157

Can only specify physical registers in a corrupted register list

1158

PSR operand not valid here

1159

Expected an unambiguous label or function name

1160

Calls to destructors for temporaries will overwrite the condition flags


updated by this instruction

1161

Cannot directly modify the stack pointer SP (r13)

1162

Cannot directly modify the link register LR (r14)

1163

Cannot directly modify the program counter PC (r15)

1164

Offset must be word-aligned

1165

types cannot be declared in anonymous unions

1166

returning pointer to local variable

1167

returning pointer to local temporary

1168

option "export" can be used only when compiling C++

1169

option "export" cannot be used with "no_dep_name"

1170

option "export" cannot be used with "implicit_include"

1171

declaration of <entity> is incompatible with a declaration in another


translation unit

1172

the other declaration is <entity>

1175

a field declaration cannot have a type involving a variable length array

1176

declaration of <entity> had a different meaning during compilation of


<entity>

1177

expected "template"

1178

"export" cannot be used on an explicit instantiation

1179

"export" cannot be used on this declaration

1180

a member of an unnamed namespace cannot be declared "export"

1181

a template cannot be declared "export" after it has been defined

1182

a declaration cannot have a label

1183

support for exported templates is disabled

1184

cannot open exported template file: <entity>

1185

<entity> already defined during compilation of <entity>

1186

<entity> already defined in another translation unit

1188

the option to list makefile dependencies may not be specified when


compiling more than one translation unit

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-44

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1190

the option to generate preprocessed output may not be specified when


compiling more than one translation unit

1191

a field with the same name as its class cannot be declared in a class with
a user-declared constructor

1192

"implicit_include" cannot be used when compiling more than one translation


unit

1193

exported template file <entity> is corrupted

1194

<entity> cannot be instantiated -- it has been explicitly specialized in


the translation unit containing the exported definition

1196

the object has cv-qualifiers that are not compatible with the member
<entity>

1197

no instance of <entity> matches the argument list and object (the object
has cv-qualifiers that prevent a match)

1198

an attribute specifies a mode incompatible with <type>

1199

there is no type with the width specified

1200

invalid alignment value specified by attribute

1201

invalid attribute for <type>

1202

invalid attribute for <entity>

1203

invalid attribute for parameter

1204

attribute <entity> does not take arguments

1207

attribute <entity> ignored

1208

attributes may not appear here

1209

invalid argument to attribute <entity>

1210

the "packed" attribute is ignored in a typedef

1211

in "goto *expr" expr must have type "void *"

1212

"goto *expr" is nonstandard

1213

taking the address of a label is nonstandard

1214

file name specified more than once:

1215

#warning directive: <entity>

1216

attribute <entity> is only allowed in a function definition

1217

the "transparent_union" attribute only applies to unions, and <type> is


not a union

1218

the "transparent_union" attribute is ignored on incomplete types

1219

<type> cannot be transparent because <entity> does not have the same size
as the union

1220

<type> cannot be transparent because it has a field of type <type> which


is not the same size as the union

1221

only parameters can be transparent

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-45

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1222

the <entity> attribute does not apply to local variables

1224

attributes are not permitted in a function definition

1225

declarations of local labels should only appear at the start of statement


expressions

1226

the second constant in a case range must be larger than the first

1227

an asm name is not permitted in a function definition

1228

an asm name is ignored in a typedef

1229

unknown register name "<entity>"

1230

modifier letter '<entity>' ignored in asm operand

1231

unknown asm constraint modifier '<entity>'

1232

unknown asm constraint letter '<entity>'

1233

asm operand has no constraint letter

1234

an asm output operand must have one of the '=' or '+' modifiers

1235

an asm input operand may not have the '=' or '+' modifiers

1236

too many operands to asm statement (maximum is 30; '+' modifier adds an
implicit operand)

1237

too many colons in asm statement

1238

register "<entity>" used more than once

1239

register "<entity>" is both used and clobbered

1240

register "<entity>" clobbered more than once

1241

register "<entity>" has a fixed purpose and may not be used in an asm
statement

1242

register "<entity>" has a fixed purpose and may not be clobbered in an asm
statement

1243

an empty clobbers list must be omitted entirely

1244

expected an asm operand

1245

expected a register to clobber

1246

"format" attribute applied to <entity> which does not have variable


arguments

1247

first substitution argument is not the first variable argument

1248

format argument index is greater than number of parameters

1249

format argument does not have string type

1250

the "template" keyword used for syntactic disambiguation may only be used
within a template

1253

attribute does not apply to non-function type <type>

1254

arithmetic on pointer to void or function type

1255

storage class must be auto or register

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-46

C and C++ Compiler Errors and Warnings

1256

<type> would have been promoted to <type> when passed through the ellipsis
parameter; use the latter type instead

1257

<entity> is not a base class member

1262

mangled name is too long

1263

Offset must be half-word aligned

1264

Offset must be double-word aligned

1265

converting to and from floating-point type is not permitted with


--fpu=none

1266

Operand should be a constant expression

1267

Implicit physical register <entity> should be defined as a variable

1268

declaration aliased to unknown entity <entity>

1269

declaration does not match its alias <entity>

1270

entity declared as alias cannot have definition

1271

variable-length array field type will be treated as zero-length array


field type

1272

nonstandard cast on lvalue not supported

1273

unrecognized flag name

1274

void return type cannot be qualified

1275

the auto specifier is ignored here (invalid in standard C/C++)

1276

a reduction in alignment without the "packed" attribute is ignored

1277

a member template corresponding to <entity> is declared as a template of a


different kind in another translation unit

1278

excess initializers are ignored

1279

va_start should only appear in a function with an ellipsis parameter

1282

variable <entity> cannot be used in a register range

1283

A physical register name is required here

1284

A register range cannot be specified here

1285

Implicit physical register <entity> has not been defined

1286

LDRD/STRD instruction will be expanded

When LDRD and STRD instructions are used in inline assembler the compiler
expands these into two LDR or STR instructions before being passed through the
compiler optimization stage.
The optimization stage normally combines the two LDR or STR instruction back
into a single LDRD or STRD instruction, however it is possible in some cases that a
LDRD or STRD is not used.
1287

LDM/STM instruction may be expanded

When LDM and STM instructions are used in inline assembler the compiler expands
these into a number of LDR or STR instructions before being passed through the
compiler optimization stage.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-47

C and C++ Compiler Errors and Warnings

The optimization stage normally combines the two LDR or STR instruction back
into LDM or STM instructions, however it is possible that in some cases that a single
LDM or STM instruction is not used.
1288

Implicit ARM register <entity> was not defined due to name clash

1289

statement expressions are only allowed in block scope

1291

an asm name is ignored on a non-register automatic variable

1292

inline function also declared as an alias; definition ignored

1293

assignment in condition

In a context where a boolean value is required (the controlling expression for if,
while, for or the first operand of a conditional expression, an expression contains
one of:

A bitwise not operator (~). It is likely that a logical not operator (!) was
intended.

An assignment operator (=). This could be a mis-typed equality operator


(==).

In either case if the operator is intended adding an explicit comparison against 0


might suppress the warning.
This warning can be suppressed with the --diag_suppress 1293 option.
Example:
int main(void)
{
int a,b;
if (a=b)
}

1294

Old-style function <entity>

The compilers accept both old-style and new-style function declarations.


The difference between an old-style and a new-style function declaration is as
follows.
// new style
int add2(int a, int b)
{
return a+b;
}
// old style
int oldadd2(a,b)
int a;
int b;
{
return a+b;
}

When compiling old style functions in C mode the compiler reports:


Warning: #1294-D: Old-style function oldadd2

1295

Deprecated declaration <entity> - give arg types

This warning is normally given when a declaration without argument types is


encountered in ANSI C mode. In ANSI C, declarations like this are deprecated.
However, it is sometimes useful to suppress this warning with the
--diag_suppress 1295 option when porting old code.
In C++:

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-48

C and C++ Compiler Errors and Warnings

void foo();

means:
void foo(void);

and no warning is generated.


1296

extended constant initialiser used

The expression used as a constant initialiser might not be portable.


This warns that there is a constant that does not follow the strict rules of ANSI C
even though there is a clause to permit it in the ANSI C specification.
Example compiled with --c90 switch:
const int foo_table[] = { (int)"foo", 0, 1, 2};

This is not ANSI C standard compliant. Compiling with --diag_suppress 1296


suppresses the warning.
1297

Header file not guarded against multiple inclusion

This warning is given when an unguarded header file is #included.


An unguarded header file is a header file not wrapped in a declaration such as:
#ifdef foo_h
#define foo_h
/* body of include file */
#endif

This warning is off by default. It can be enabled with:


--diag_warning 1297

1298

Header file is guarded by '<entity>', but does not #define it

Example:
#ifndef MYHEADER_H
//#define MYHEADER_H
#endif

To correct the code, remove the comment slashes (//). This warning is off by
default. It can be enabled with:
--diag_warning 1298

1299

members and base-classes will be initialized in declaration order, not in


member initialisation list order

1300

<entity> inherits implicit virtual

This warning is issued when a non-virtual member function of a derived class


hides a virtual member of a parent class. For example:
struct Base { virtual void f(); };
struct Derived : Base { void f(); };

results in the message:


Warning: #1300-D: f inherits implicit virtual
struct Derived : Base { void f(); };
^

Adding the virtual keyword in the derived class prevents the warning. For C++,
the --diag_suppress 1300 option suppresses the implicit virtual warning.
1301

padding inserted in struct <entity>

For the members of the structure to be correctly aligned, some padding has been
inserted between members. This warning is off by default and can be enabled with
--diag_warning 1301 or --remarks.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-49

C and C++ Compiler Errors and Warnings

For example:
struct X {
char x;
int y;
}

results in the message:


Warning: #1301-D: padding inserted in struct X

The compiler can also warn of padding added at the end of a struct or between
structs, see 2530.

ARM DUI 0496C


ID080411

1302

type too large to be returned in registers - __value_in_regs ignored

1303

using --force_new_nothrow: added "throw()"

1304

operator new missing exception specification

1305

using --force_new_nothrow: added "(::std::nothrow)"

1307

floating point argument not permitted with -fpu=none

1308

Base class <type> of __packed class <type> must be __packed

1310

shared block size does not match one previously specified

1311

bracketed expression is assumed to be a block size specification rather


than an array dimension

1312

the block size of a shared array must be greater than zero

1313

multiple block sizes not allowed

1314

strict or relaxed requires shared

1316

block size specified exceeds the maximum value of <entity>

1317

function returning shared is not allowed

1320

shared type inside a struct or union is not allowed

1321

parameters may not have shared types

1323

shared variables must be static or extern

1327

affinity expression must have a shared type or point to a shared type

1328

affinity has shared type (not pointer to shared)

1329

shared void* types can only be compared for equality

1331

null (zero) character in input line ignored

1332

null (zero) character in string or character constant

1333

null (zero) character in header name

1334

declaration in for-initializer hides a declaration in the surrounding


scope

1335

the hidden declaration is <entity>

1336

the prototype declaration of <entity> is ignored after this unprototyped


redeclaration

1338

<entity> must have external C linkage

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-50

C and C++ Compiler Errors and Warnings

1339

variable declaration hides declaration in for-initializer

1340

typedef <entity> may not be used in an elaborated type specifier

1341

call of zero constant ignored

1342

parameter <entity> may not be redeclared in a catch clause of function try


block

1343

the initial explicit specialization of <entity> must be declared in the


namespace containing the template

1345

"template" must be followed by an identifier

1347

layout qualifier cannot qualify pointer to shared

1348

layout qualifier cannot qualify an incomplete array

1349

declaration of <entity> hides handler parameter

1350

nonstandard cast to array type ignored

1351

this pragma cannot be used in a _Pragma operator (a #pragma directive must


be used)

1352

field uses tail padding of a base class

1353

GNU C++ compilers may use bit field padding

1354

memory mapping conflict with precompiled header file <entity>

1355

abstract class <type> has a non-virtual destructor, calling delete on a


pointer to this class is undefined behaviour

1356

an asm name is not allowed on a nonstatic member declaration

1357

static initialisation of <entity> using address of <entity> may cause link


failure <option>

See error number 1359.


1358

static initialisation of extern const <entity> using address of <entity>


cannot be lowered for ROPI

1359

static initialisation of <entity> using address of <entity> may cause link


failure <option>

Warnings 1357 and 1359 warn against the use of non-PI code constructs and that
a subsequent link step might fail.
For example, when compiled with --apcs /ropi:
char *str = "test"; /* global pointer */

results in the message:


Warning: #1357-D: static initialisation of variable "str" using address of
string literal may cause link failure --ropi

because the global pointer str must be initialized to the address of the char string
test in the .constdata section, but absolute addresses cannot be used in a PI
system.
For example, when compiled with --apcs /rwpi:
int bar;
int *foo = &bar; /* global pointer */

results in the message:

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-51

C and C++ Compiler Errors and Warnings

Warning: #1359-D: static initialisation of variable "foo" using address of


bar may cause link failure --rwpi

because the global pointer foo must be initialized to the address of bar in the .data
section, but absolute addresses cannot be used in a PI system.
The following workarounds are possible:

Change your code to avoid use of a global pointer. You can, for example,
use a global array or local pointer instead.

Do the initialization at run-time, for example:


int bar;
int *foo;

Then write code inside a function that sets foo = &bar;. This is because
when generating code as opposed to statically initializing data, the compiler
has scope to work around the ROPI/RWPI constraints.
See also the FAQ What does Error: L6248E: cannot have address type relocation
mean?, http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka3554.html.
1360

static initialisation of extern const <entity> using address of <entity>


cannot be lowered for RWPI

For example, when compiled with --apcs /rwpi:


extern int y;
int* const x = &y;
int* foo()
{
return(x);
}

produces a warning because prefixing y by extern prevents the compiler defining


a direct address offset between the variables x and y.

ARM DUI 0496C


ID080411

1361

<entity> was declared "deprecated"

1362

unrecognized format function type <entity> ignored

1363

base class <entity> uses tail padding of base class <entity>

1366

this anonymous union/struct field is hidden by <entity>

1367

invalid error number

1368

invalid error tag

1369

expected an error number or error tag

1370

size of class is affected by tail padding

1371

labels can be referenced only in function definitions

1372

transfer of control into a statement expression is not allowed

1374

transfer of control out of a statement expression is not allowed

1375

a non-POD class definition is not allowed inside of a statement expression

1376

destructible entities are not allowed inside of a statement expression

1377

a dynamically-initialized local static variable is not allowed inside of a


statement expression

1378

a variable-length array is not allowed inside of a statement expression

1379

a statement expression is not allowed inside of a default argument

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-52

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1382

nonstandard conversion between pointer to function and pointer to data

1383

interface types cannot have virtual base classes

1384

interface types cannot specify "private" or "protected"

1385

interface types can only derive from other interface types

1386

<type> is an interface type

1387

interface types cannot have typedef members

1388

interface types cannot have user-declared constructors or destructors

1389

interface types cannot have user-declared member operators

1390

interface types cannot be declared in functions

1391

cannot declare interface templates

1392

interface types cannot have data members

1393

interface types cannot contain friend declarations

1394

interface types cannot have nested classes

1395

interface types cannot be nested class types

1396

interface types cannot have member templates

1397

interface types cannot have static member functions

1398

this pragma cannot be used in a __pragma operator (a #pragma directive


must be used)

1399

qualifier must be base class of <type>

1400

declaration must correspond to a pure virtual member function in the


indicated base class

1401

integer overflow in internal computation due to size or complexity of


<type>

1402

integer overflow in internal computation

1404

potentially narrowing conversion when compiled in an environment where


int, long, or pointer types are 64 bits wide

1405

current value of pragma pack is <entity>

1406

arguments for pragma pack(show) are ignored

1407

invalid alignment specifier value

1408

expected an integer literal

1409

earlier __declspec(align(...)) ignored

1410

expected an argument value for the <entity> attribute parameter

1411

invalid argument value for the <entity> attribute parameter

1412

expected a boolean value for the <entity> attribute parameter

1413

a positional argument cannot follow a named argument in an attribute

1414

attribute <filename> has no parameter named <filename>

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-53

C and C++ Compiler Errors and Warnings

1415

expected an argument list for the <entity> attribute

1416

expected a "," or "]"

1417

attribute argument <entity> has already been given a value

1418

a value cannot be assigned to the <entity> attribute

1419

a throw expression may not have pointer-to-incomplete type

1420

alignment-of operator applied to incomplete type

1421

<entity> may only be used as a standalone attribute

1422

<entity> attribute cannot be used here

1423

unrecognized attribute <entity>

1424

attributes are not allowed here

1425

invalid argument value for the <entity> attribute parameter

1426

too many attribute arguments

1427

conversion from inaccessible base class <type> is not allowed

1428

option "export" requires distinct template signatures

1429

string literals with different character kinds cannot be concatenated

1430

GNU layout bug not emulated because it places virtual base <entity>
outside <entity> object boundaries

1431

virtual base <entity> placed outside <entity> object boundaries

1432

nonstandard qualified name in namespace member declaration

1433

reduction in alignment ignored

1434

const qualifier ignored

1436

__breakpoint argument must be an integral compile-time constant

1437

__breakpoint argument must be within 0-65535 when compiling for ARM

1438

__breakpoint argument must be within 0-255 when compiling for Thumb

1439

BKPT instruction is not supported on target architecture/processor

1440

oversize bitfield layout will change -- consider preceeding with


"<entity>:0;"

1441

nonstandard cast on lvalue

The C specification states "An assignment operator shall have a modifiable lvalue
as its left operand" and "a cast does not yield an lvalue".

ARM DUI 0496C


ID080411

1442

polymorphic base classes need to be exported if they are to be used for


exported derivation

1443

polymorphic base classes inherited via virtual derivation need to be


exported

1444

polymorphic base classes inherited via virtual derivation need all virtual
functions to be exported

1446

non-POD class type passed through ellipsis

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-54

C and C++ Compiler Errors and Warnings

1447

a non-POD class type cannot be fetched by va_arg

The C++ ISO Specification defines that the non-required arguments of a variadic
function must be of type POD (plain-old-data), such as an int or a char, but not
structs or classes.
To avoid the error or warning the address of a class or struct could be given
instead.

ARM DUI 0496C


ID080411

1448

the 'u' or 'U' suffix must appear before the 'l' or 'L' suffix in a
fixed-point literal

1450

integer operand may cause fixed-point overflow

1451

fixed-point constant is out of range

1452

fixed-point value cannot be represented exactly

1453

constant is too large for long long; given unsigned long long type
(nonstandard)

1454

layout qualifier cannot qualify pointer to shared void

1456

a strong using-directive may only appear in a namespace scope

1457

<entity> declares a non-template function -- add <> to refer to a template


instance

1458

operation may cause fixed-point overflow

1459

expression must have integral, enum, or fixed-point type

1460

expression must have integral or fixed-point type

1461

function declared with "noreturn" does return

1462

asm name ignored because it conflicts with a previous declaration

1463

class member typedef may not be redeclared

1464

taking the address of a temporary

1465

attributes are ignored on a class declaration that is not also a


definition

1466

fixed-point value implicitly converted to floating-point type

1467

fixed-point types have no classification

1468

a template parameter may not have fixed-point type

1469

hexadecimal floating-point constants are not allowed

1471

floating-point value does not fit in required fixed-point type

1472

value cannot be converted to fixed-point value exactly

1473

fixed-point conversion resulted in a change of sign

1474

integer value does not fit in required fixed-point type

1475

fixed-point operation result is out of range

1481

fixed-point value does not fit in required floating-point type

1482

fixed-point value does not fit in required integer type

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-55

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1483

value does not fit in required fixed-point type

1485

a named-register storage class is not allowed here

1486

<entity> redeclared with incompatible named-register storage class

1487

named-register storage class cannot be specified for aliased variable

1488

named-register storage specifier is already in use

1492

invalid predefined macro entry at line <entity>: <reason>

1493

invalid macro mode name <entity>

1494

incompatible redefinition of predefined macro <entity>

1495

redeclaration of <entity> is missing a named-register storage class

1496

named register is too small for the type of the variable

1497

arrays cannot be declared with named-register storage class

1498

const_cast to enum type is nonstandard

1500

__svc parameter <entity> is not within permitted range (0 to 0xff) for


Thumb SVC instruction

1501

too many arguments for __svc or __svc_indirect function

1502

arguments for __svc or __svc_indirect function must have integral type

1503

__svc_indirect function must have arguments

1504

first argument for __svc_indirect function must have integral type

1505

result of __svc or __svc_indirect function must be returned in integer


registers

1506

source file <entity> has bad format

1507

error while writing <entity> file: <reason>

1508

cannot overload functions distinguished by function qualifier alone

1509

function qualifier <entity> not permitted on a virtual member function

1510

function "__attribute__((__<entity>__))" present on overridden virtual


function <entity> must be present on overridding function

1511

function qualifier <entity> is not identical on overridden virtual


function <entity>

1512

function qualifier <entity> present on overridden virtual function


<entity> must be present on overridding function

1514

an empty initializer is invalid for an array with unspecified bound

1515

function returns incomplete class type <type>

1516

<entity> has already been initialized; the out-of-class initializer will


be ignored

1517

declaration hides <entity>

1519

invalid suffix on fixed-point or floating-point constant

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-56

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1522

<entity> has no corresponding member operator delete<entity> (to be called


if an exception is thrown during initialization of an allocated object)

1523

a thread-local variable cannot be declared with "dllimport" or "dllexport"

1525

an initializer cannot be specified for a flexible array member whose


elements have a nontrivial destructor

1526

an initializer cannot be specified for an indirect flexible array member

1528

variable attributes appearing after a parenthesized initializer are


ignored

1529

the result of this cast cannot be used as an lvalue

1530

negation of an unsigned fixed-point value

1531

this operator is not allowed at this point; use parentheses

1532

flexible array member initializer must be constant

1533

register names can only be used for register variables

1534

named-register variables cannot have void type

1535

__declspec modifiers not valid for this declaration

1536

parameters cannot have link scope specifiers

1537

multiple link scope specifiers

1538

link scope specifiers can only appear on functions and variables with
external linkage

1539

a redeclaration cannot weaken a link scope

1540

link scope specifier not allowed on this declaration

1541

nonstandard qualified name in global scope declaration

1542

implicit conversion of a 64-bit integral type to a smaller integral type


(potential portability problem)

1543

explicit conversion of a 64-bit integral type to a smaller integral type


(potential portability problem)

1544

conversion from pointer to same-sized integral type (potential portability


problem)

1547

only static and extern variables can use thread-local storage

1548

multiple thread-local storage specifiers

1549

virtual <entity> was not defined (and cannot be defined elsewhere because
it is a member of an unnamed namespace)

1550

carriage return character in source line outside of comment or


character/string literal

1551

expression must have fixed-point type

1552

invalid use of access specifier is ignored

1553

pointer converted to bool

1554

pointer-to-member converted to bool

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-57

C and C++ Compiler Errors and Warnings

1555

storage specifier ignored

1556

dllexport and dllimport are ignored on class templates

1557

base class dllexport/dllimport specification differs from that of the


derived class

1558

redeclaration cannot add dllexport/dllimport to <entity>

If this message is suppressed, the behavior is as though the dllexport or


dllimport had been omitted. For example:
void f(void);
__declspec(dllimport) void f(void) { } /* suppress treats as
void f(void) { } */

ARM DUI 0496C


ID080411

1559

dllexport/dllimport conflict with <entity>; dllexport assumed

1560

cannot define dllimport entity

1561

dllexport/dllimport requires external linkage

1562

a member of a class declared with dllexport/dllimport cannot itself be


declared with such a specifier

1563

field of class type without a DLL interface used in a class with a DLL
interface

1564

parenthesized member declaration is nonstandard

1565

white space between backslash and newline in line splice ignored

1566

dllexport/dllimport conflict with <entity>; dllimport/dllexport dropped

1567

invalid member for anonymous member class -- class <type> has a disallowed
member function

1568

nonstandard reinterpret_cast

1569

positional format specifier cannot be zero

1570

a local class cannot reference a variable-length array type from an


enclosing function

1571

member <entity> already has an explicit dllexport/dllimport specifier

1572

a variable-length array is not allowed in a function return type

1573

variable-length array type is not allowed in pointer to member of type


<type>

1574

the result of a statement expression cannot have a type involving a


variable-length array

1575

Load/Store with translation not supported in inline assembler. Use


embedded assembler or out-of-line assembler

1576

Flag-setting multiply instructions not supported in inline assembler. Use


embedded assembler or out-of-line assembler

1577

Flag-setting MOV/MVN instructions with constant operand not supported in


inline assembler. Use embedded assembler or out-of-line assembler

1578

an asm name is ignored on an automatic variable

1593

Could not optimize: Use of unsigned index prevents optimization

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-58

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1594

Could not optimize: Loop parameters must be integer for full optimization

1604

Could not optimize: Reference to this function inhibits optimization

1613

Could not optimize: Multiple store conflict

1617

Could not optimize: Loop too complex

1621

Optimization: Dead code eliminated

1624

Could not optimize: Too many overlapping conditions for efficient


translation

1629

Could not optimize: Iteration count too short for array optimization

1636

Could not optimize: Complicated use of variable

1637

Unknown pragma - ignored

1638

Unable to determine last value of scalar temporary

1639

Use nolstval directive if possible

1641

Could not optimize: Too many data dependency problems

1656

Problem in pragma syntax

1661

Could not optimize: Backward transfers cannot be optimized

1662

Could not optimize: Last value of promoted scalar required

1663

Could not optimize: Branches out of the loop prevent translation

1670

Optimization: If loop converted to for loop

1676

Could not optimize: This statement prevents loop optimization

1679

Optimization: Loop vectorized

1687

Could not optimize: Reduction function suppressed - needs associative


transformation

1690

Could not optimize: Unsupported data type for explicit vector operations

1691

Optimization: Loop fused with previous loop

1714

Could not optimize: Outer loop conditionally executes inner loop

1730

No indexing done along this loop

1742

Could not optimize: Feedback of array elements (equivalenced arrays)

1750

Optimization: Loop re-rolled

1759

Could not optimize: Non-unit stride interferes with vector optimization

1771

Could not optimize: Volatile items prevent analysis

1801

Optimization: Function expanded

1824

Could not optimize: Not enough vector operations to justify translation

1885

Could not optimize: Loop bounds exceed array dimensions

1861

Could not optimize: This store into array prevents optimization of outer
loop

1866

Could not optimize: Non-integer subscript


Copyright 2010-2011 ARM. All rights reserved.
Non-Confidential

2-59

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

1894

Optimization: Iterations peeled from loop in order to avoid dependence

1896

Optimization: Logical clause simplified

1947

Could not optimize: Cannot transform this combination of data types and
operations

1978

Could not optimize: Unable to optimize user-selected loop

1979

Could not optimize: This operation inhibits loop transformation

1987

Optimization: Loop switched

1988

Optimization: Alternate code generated

1997

Optimization: Constant-length loop unrolled

2091

Optimization: Loop unrolled

2168

Optimization: Outer loop moved inside inner loop(s)

2170

Optimization: Invariant expression moved outside of outer loop

2189

Optimization: Loop unrolled and rotated

2190

Optimization: Loop unrolled and optimized

2191

Optimization: Some loads lifted to top of loop

2218

Idiom detected and optimized

2300

Might not be able to optimize: Feedback of scalar value from one loop pass
to another. Conflict on line <entity>. Loop index is <entity>
(<filename>,<entity>)"

2301

Might not be able to optimize: Feedback of scalar value from one loop pass
to another. Conflict on line <entity>. Loop index is <entity> (<filename>)

2302

Might not be able to optimizee: Feedback of scalar value from one loop
pass to another. Conflict on line <entity>. (<entity>,<filename>)

2303

Might not be able to optimize: Feedback of scalar value from one loop pass
to another. Conflict on line <entity>. (<entity>)

2304

Might not be able to optimize: Potential multiple store conflict between


loop iterations. Conflict on line <entity>. Loop index is <entity>
(<filename>,<entity>)

2305

Might not be able to optimize: Potential multiple store conflict between


loop iterations. Conflict on line <entity>. Loop index is <entity>
(<filename>)

2306

Might not be able to optimize: Potential multiple store conflict between


loop iterations. Conflict on line <entity>. (<entity>,<filename>)

2307

Might not be able to optimize: Potential multiple store conflict between


loop iterations. Conflict on line <entity>. (<entity>)

2308

Might not be able to optimize: Potential feedback between loop iterations.


Conflict on line <entity>. Loop index is <entity> (<filename>,<entity>)

2309

Might not be able to optimize: Potential feedback between loop iterations.


Conflict on line <entity>. Loop index is <entity> (<filename>)

2310

Might not be able to optimize: Potential feedback between loop iterations.


Conflict on line <entity>. (<entity>,<filename>)

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-60

C and C++ Compiler Errors and Warnings

2311

Might not be able to optimize: Potential feedback between loop iterations.


Conflict on line <entity>. (<entity>)

2312

Could not optimize: Potential pointer aliasing - use restrict qualifier if


ok. Conflict on line <entity>. Loop index is <entity>
(<filename>,<entity>)

2313

Could not optimize: Potential pointer aliasing - use restrict qualifier if


ok. Conflict on line <entity>. Loop index is <entity> (<filename>)

2314

Could not optimize: Potential pointer aliasing - use restrict qualifier if


ok. Conflict on line <entity>. (<entity>,<filename>)

2315

Could not optimize: Potential pointer aliasing - use restrict qualifier if


ok. Conflict on line <entity>. (<entity>)

2351

Loop nest fused with following nest(s)

2438

Could not inline: Void function used in expression

2439

Could not inline: Identifier declaration

2442

Could not inline: Cannot remove function from expression

2516

High Level Optimization halted: assembly code in routine

2519

Unable to determine constant iteration count for this loop

2523

use of inline assembler is deprecated

The inline assembler is deprecated when compiling for ARMv7 or later, that is,
most processors in the Cortex series.
The inline assembler does not support Thumb(-1) or Thumb-2, or all the ARMv6
instructions. However, the inline assembler does still support the (ARM-only)
ARMv4T, ARMv5TE, and a subset of the new ARMv6 instructions (only the
ARMv6 media instructions), so legacy inline assembly code continues to build
correctly.
This warning is intended as a reminder to consider using the embedded assembler
or built-in intrinsics instead of inline assembler. If you cannot change your code
but require elimination of the warning, suppress the warning or compile the
module for an earlier CPU such as ARMv6.
Caution
Attempting to compile some inline assembler for Thumb (armcc --thumb) might
result in ARM instructions being generated in some cases.
2524

#pragma pop with no matching #pragma push

2525

#pragma push with no matching #pragma pop

2529

expression must be an integral constant in range <entity> to <entity>

2530

padding added to end of struct <entity>

The compiler can warn of padding added at the end of a struct or between structs.
This warning is off by default and can be enabled with --diag_warning 2530 or
--remarks.
For example:
typedef struct {
int x;
char y;

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-61

C and C++ Compiler Errors and Warnings

} A;
typedef struct {
int p;
int q;
} B;

results in the message:


Warning: #2530-D: padding added to end of struct 'anonymous'

The compiler can also warn of padding inserted within a structs, see 1301.

ARM DUI 0496C


ID080411

2531

dllimport/dllexport applied to a member of an unnamed namespace

2533

the <entity> attribute can only appear on functions and variables with
external linkage

2534

strict mode is incompatible with treating namespace std as an alias for


the global namespace

2535

in expansion of macro "<entity>" <entity>,

2537

in expansion of macro "<entity>" <entity><entity>

2540

invalid symbolic operand name <entity>

2541

a symbolic match constraint must refer to one of the first ten operands

2544

thread-local variable cannot be dynamically initialized

2546

some enumerator values cannot be represented by the integral type


underlying the enum type

2547

default argument is not allowed on a friend class template declaration

2548

multicharacter character literal (potential portability problem)

2549

expected a class, struct, or union type

2550

second operand of offsetof must be a field

2551

second operand of offsetof may not be a bit field

2552

cannot apply offsetof to a member of a virtual base

2553

offsetof applied to non-POD types is nonstandard

2554

default arguments are not allowed on a friend declaration of a member


function

2555

default arguments are not allowed on friend declarations that are not
definitions

2556

redeclaration of <entity> previously declared as a friend with default


arguments is not allowed

2557

invalid qualifier for <type> (a derived class is not allowed here)

2558

invalid qualifier for definition of class <type>

2560

wide string literal not allowed

2565

template argument list of <entity> must match the parameter list

2566

an incomplete class type is not allowed

2567

complex integral types are not supported

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-62

C and C++ Compiler Errors and Warnings

ARM DUI 0496C


ID080411

2570

<entity> was declared "deprecated (<entity>)"

2571

invalid redefinition of <entity>

2574

explicit specialization of <entity> must precede its first use (<entity>)

2575

a sealed class type cannot be used as a base class

2576

duplicate class modifier

2577

a member function cannot have both the "abstract" and "sealed" modifiers

2578

a sealed member cannot be pure virtual

2579

nonvirtual function cannot be declared with "abstract" or "sealed"


modifier

2580

member function declared with "override" modifier does not override a base
class member

2581

cannot override sealed <entity>

2582

<entity> was declared with the class modifier "abstract"

2662

unrecognized calling convention <entity>, must be one of:

2665

attribute <entity> not allowed on parameter declarations

2666

underlying type of enum type must be an integral type other than bool

2667

some enumerator constants cannot be represented by <type>

2668

<entity> not allowed in current mode

2676

no #pragma start_map_region is currently active: pragma ignored

2677

<entity> cannot be used to name a destructor (a type name is required)

2678

nonstandard empty wide character literal treated as L'\\0'

2679

"typename" may not be specified here

2680

a non-placement operator delete must be visible in a class with a virtual


destructor

2681

name linkage conflicts with previous declaration of <entity>

2682

alias creates cycle of aliased entities

2683

subscript must be constant

2684

a variable with static storage duration allocated in a specific register


cannot be declared with an initializer

2685

a variable allocated in a specific register must have POD type

2686

predefined meaning of <entity> discarded

2687

declaration hides built-in <entity>

2688

declaration overloads built-in <entity>

2689

static member function not permitted here

2690

the <entity> attribute can only appear on functions and variables with
internal linkage

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-63

C and C++ Compiler Errors and Warnings

2.4

List of the old-style armcc error and warning messages


The following old-style error and warning messages might still be given:
C3000E

SWI number 0x<num> too large

C3002W

illegal unaligned load or store access - use __packed instead

C3008W

splitting LDM/STM has no benefit

Inappropriate use of the switch "--split_ldm". This option has no significant


benefit for cached systems, or for processors with a write buffer.
C3009E

unsupported CPU <entity>

C3015E

Unbalanced pragma pop, ignored


#pragma push and #pragma pop save and restore the current pragma state.

A pop must be paired with a push. An error is given for:


#pragma push
:
#pragma pop
:
#pragma pop

C3016W

unknown option '-<entity><entity>': ignored

C3017W

<entity> may be used before being set

The data flow analysis feature in the compiler is on by default.


Note
Be aware that data flow analysis is always disabled at -O0 .
The compiler performs data flow analysis as part of its optimization process, and
this information can be used to identify potential problems in the code such as
variables being used before being set. However, this is really a by-product of
optimization rather than a feature in its own right. The data flow analysis that
detects used before being set only analyses hardware register use, that is,
variables that are held in processor registers. It does not analyze variables or
structures that are allocated on the stack, that is, stored in memory rather than in
processor registers.
As code (and also register memory usage) generated by the compiler varies with
the level of optimization, the warning might appear for code compiled at one level
of optimization but not others. You might see it, for example, at -O2, but not -O1.
Note
The data flow analysis is not intended to be a fully complete feature. You must
only treat the warnings of the form CnnnnW given by the compiler as a guide, and
not rely on these warnings to identify faulty code reliably. The compiler never
provides as much information as a special purpose tool such as Lint.
C3018W

division by zero: <entity>

Constant propagation shows that a divide or remainder operator has a second


operand with value 0. It is an error if execution reaches this expression. The
compiler returns a result of 0 for a divide by constant 0.

ARM DUI 0496C


ID080411

C3038E

Function too large or complicated to compile (0x<num>)

C3041U

I/O error writing '<entity>': <entity>

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-64

C and C++ Compiler Errors and Warnings

C3047U

Too many errors

C3048U

out of store while compiling with -g. Allocation size was <entity>, system
size is <entity>

C3049U

out of store. Allocation size was <entity>, system size is <entity>

A storage allocation request by the compiler failed. Compilation of the debugging


tables requested with the -g option might require a large amount of memory.
Recompiling without -g, or with the program split into smaller pieces, might help.
C3050U

Compilation aborted.

C3051E

couldn't write file '<entity>': <entity>

C3052E

couldn't read file '<entity>': <entity>

C3053W

couldn't read profile '<file>': <reason>

The compiler cannot access the file you specified when performing
Profiler-guided optimizations. You might see this if you have specified the
profiler data directory instead of the data file. For example, you specified
image_001.apd instead of the data file image_001.apd\filename.apa.
See the following in Using the Compiler:

About Profiler-guided optimization on page 5-3.

C3055U

internal fault in inferFileName

C3056E

bad option '<s>'

C3057E

bad option '<s1> <s2>'

C3064E

Overlong filename: <entity>

C3065E

type of input file '<entity>' unknown

C3066E

The code space needed for this object is too large for this version of the
compiler

Split the source file into smaller pieces.


C3075E

Can't open <entity> for output

C3078E

stdin ('-') combined with other files

C3079E

<entity> command with no effect

C3301W

configuration file appears to be from a newer version of the compiler

The configuration file is one of the XML files supplied to the compiler with the
--arm_linux_config_file switches when using --arm_linux_paths or GCC
command-line translation. For example:
armcc --arm_linux_paths --arm_linux_config_file=arm_linux_config.xml

This warning indicates the file is from a newer compiler so might contain
unsupported features. To avoid incompatibilites, either use the newer version of
the compiler that was used to generate the configuration file, or re-generate the
configuration file using your current compiler version.
See the following in the Compiler Reference:

--arm_linux_config_file=path on page 3-18

--arm_linux_paths on page 3-21.


C3302E

ARM DUI 0496C


ID080411

configuration file has an invalid version string

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-65

C and C++ Compiler Errors and Warnings

This represents an error reading from or writing to an ARM Linux configuration


file.
Do the following:
1.

Check that the file can be read from and written to and has valid
permissions.

2.

Try re-generating the configuration file using --arm_linux_configure.

See the following in the Compiler Reference:

--arm_linux_configure on page 3-19.


C3303E

configuration file was not specified

See the description for error C3302E.


C3304E

I/O error reading configuration file <file>

See the description for error C3302E.


C3305E

I/O error writing configuration file <file>

See the description for error C3302E.


C3306E

could not parse configuration file <file>

See the description for error C3302E.


C3307E

unable to read configuration file

See the description for error C3302E.


C3308W

cannot find system include directory

When using an ARM Linux mode, --arm_linux, --arm_linux_paths, or GCC


command-line translation, the ARMCC41INC environment variable must be set so the
compiler can find the arm_linux header subdirectory. Check that this environment
variable is set correctly.
See the following in the Compiler Reference:

--arm_linux on page 3-16

--arm_linux_paths on page 3-21.


See the following in Introducing the ARM Compiler toolchain:

C3309E

Toolchain environment variables on page 2-14.

automatic configuration failed - cannot find GCC

This error is produced when you try to automatically configure the tools with
--arm_linux_configure, but GCC cannot be found. Use the
--configure_gcc=path_to_gcc command -line option to specify the path to the
GCC executable, such as arm-none-linux-gnueabi-gcc.
See the following in the Compiler Reference:

--arm_linux_configure on page 3-19

--configure_gcc=path on page 3-43.


C3310W

automatic configuration is incomplete - cannot determine sysroot path from


GCC

The GCC that was used for the ARM Linux configuration process did not provide
a valid sysroot path. Use --configure_sysroot=sysroot_path to set the path.
See the following in the Compiler Reference:

--configure_sysroot=path on page 3-46.


C3311E

ARM DUI 0496C


ID080411

automatic configuration failed - cannot find GLD

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-66

C and C++ Compiler Errors and Warnings

This error is produced when you try to automatically configure the tools with
--arm_linux_configure, but the GNU linker (ld) could not be found. Use the
--configure_gkd=path_to_gcc command-line option to specify the path to the
GNU ld executable, such as arm-none-linux-gnueabi-ld.
See the following in the Compiler Reference:

--arm_linux_configure on page 3-19

--configure_gcc=path on page 3-43.


C3312E

automatic configuration failed - could not execute GCC

This error indicates that, when using automatic configuration for ARM Linux
with --arm_linux_configure, the respective tools (GCC or GNU ld) could not be
executed or failed when invoked. Check that they have execute permissions, and
your GNU toolchain installation is working correctly.
See the following in the Compiler Reference:

--arm_linux_configure on page 3-19.


C3313E

automatic configuration failed - could not execute GLD

See the description of error C3312E.


C3314W

gcc command line translation - ignoring option with no translation:


<option>

C3315W

gcc command line translation - translation for this command is not fully
supported: <option>

C3316W

option is not supported under arm linux: <option>

C3317W

translated cpu or architecture option <option> is not valid

C3318W

unable to read file <file>

C3319W

cannot recognise type of file <file> - file will be ignored

C3320W

cannot find file <file> - file will be ignored

C3321E

automatic configuration failed - could not determine configuration from


GCC

When configuring automatically for ARM Linux with --arm_linux_configure, the


compiler could not determine sufficient information from GCC to produce the
configuration. Try a manual configuration by specifying a sysroot path with
--configure_sysroot and a path to the GNU C++ header files with
--configure_cpp_headers.
See the following in the Compiler Reference:

--arm_linux_configure on page 3-19

--configure_cpp_headers=path on page 3-39

--configure_sysroot=path on page 3-46.


C3322W

could not accurately determine library configuration from GCC configuration might be incomplete

C3323E

automatic configuration failed - GCC internal specs configuration report


error: <text>

C3324W

could not determine libstdc++ header file path - specify this manually to
ensure that C++ code will compile correctly

The path to the libstdc++ header files could not be determined from GCC. Specify
this path with --configure_cpp_headers=path

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-67

C and C++ Compiler Errors and Warnings

See the following in the Compiler Reference:

--configure_cpp_headers=path on page 3-39.


C3327W

cannot determine application entry point function - using <value> as


default

C3328W

cannot determine library paths from GNU linker - trying to use defaults

C3329W

option is missing an argument : <option>

C3330E

GCC configuration is invalid

C3331W

script file <file> will be treated as a scatter file

C3332E

I/O error reading via file <file>

C3333E

I/O error closing via file <file>

C3334W

invalid GCC version in configuration file - using default

C3339W

ambiguous translation mode options specified - using <option>

Multiple translation mode options --translate_gcc, --translate_g++, and


--translate_gld were specified. You must specify only one of these options to
select a particular translation mode.
See the following in the Compiler Reference:

--translate_g++ on page 3-195

--translate_gcc on page 3-197

--translate_gld on page 3-199.


C3340W

could not obtain license for vectorization (implied by -O3) - defaulting


to -fno-tree-vectorize

With GCC command-line translation, -O3 implies vectorization. However, this


requires a license to use the NEON vectorization feature of the compiler. Where
a NEON vectorization license is not available, the compiler emits warning C3340W
and disables vectorization.
See the following in Introducing the ARM Compiler toolchain:

Licensed features of the toolchain on page 2-10.


See the following in the Compiler Reference:

-Onum on page 3-154.


C3403E

__alloca_state not defined

C3419W

dynamic stack alignment veneer inserted in <entity>

This warning is given when compiling __irq functions for --cpu=Cortex-M3-rev0


to force the stack to be 8-byte aligned on entry into the interrupt.
C3421W

write to string literal

There is a write through a pointer that has been assigned to point at a literal string.
The behavior is undefined by to the ANSI standard. A subsequent read from the
location written might not reflect the write.

ARM DUI 0496C


ID080411

C3435E

reference to <entity> not allowed

C3447E

option '-E' and input file '<filename>' type conflict

C3484E

Minimum toplevel array alignment must be 1, 2, 4 or 8

C3486W

option '-<optionchar>' causes input file '<filename>' to be ignored

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-68

C and C++ Compiler Errors and Warnings

C3487E

read from variable '<var>' with offset out of bounds

For example :
void foo(void) {
unsigned int pntr;
pntr = (unsigned int)&pntr;
pntr -= 4;
pntr = *(unsigned int*)pntr;
}

C3488E

write to variable '<var>' with offset out of bounds

C3489E

__vfp_status() intrinsic not supported for targets without VFP

C3490W

instruction set switching using file extension is deprecated

C3493E

Function alignment must be a power of 2 and greater than 1

C3494E

invalid global register number <num>; 1 to <num> allowed

C3497E

invalid syntax for retention constraint: <text>

C3498E

option conflicts with an arm linux targeting option: <option>

Certain options are expected to be used when targeting ARM Linux, for example
to select the correct ABI variant options. This message is given to indicate when
an incompatible option is specified.
See the following in the Compiler Reference:

--arm_linux on page 3-16.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

2-69

Chapter 3
Assembler Errors and Warnings

The error and warning messages for the assembler, armasm, are listed in the following topic:

ARM DUI 0496C


ID080411

List of the armasm error and warning messages on page 3-2.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-1

Assembler Errors and Warnings

3.1

List of the armasm error and warning messages


The error and warning messages for armasm are:
A1017E

:INDEX: cannot be used on a pc-relative expression

The :INDEX: expression operator has been applied to a PC-relative expression,


most likely a program label. :INDEX: returns the offset from the base register in a
register-relative expression.
If you require the offset of a label called <label> within an area called <areaname>,
use <label> - <areaname>.
See the following in Using the Assembler:

A1020E

Unary operators on page 8-21.

Bad predefine: <directive>

The operand to the --predefine (-pd) command line option was not recognized.
The directive must be enclosed in quotes if it contains spaces, for example on
Windows:
--predefine "versionnum SETA 5"

If the SETS directive is used, the argument to the directive must also be enclosed
in quotes, which might require escaping depending upon operating system and
shell. For example:
--predefine "versionstr SETS \"5A\""

A1021U

No input file

No input file was specified on the command line. This might be because there was
no terminating quote on a quoted argument.
A1023E

File "<filename>" could not be opened: <reason>

A1024E

File "<filename>" could not all be loaded: <reason>

A1042E

Unrecognized APCS qualifier '<qualifier>'

There is an error in the argument given to the --apcs command line option. Check
the spelling of <qualifier>.
A1051E

Cannot open --depend file '<filename>': <reason>

A1055E

Cannot open --errors file '<filename>': <reason>

A1056E

Target cpu '<cpu>' not recognized

The name given in the --cpu command line option is not a recognized processor
name. Check the spelling of the argument.
Use --cpu=list to list the supported processors and architectures.
A1067E

Output file specified as '<filename1>', but it has already been specified


as '<filename2>'

More than one output file, -o filename, has been specified on the command line.
Misspelling a command line option can cause this.
A1071E

Cannot open listing file '<filename>': <reason>

The file given in the --list <filename> command line option could not be opened.
This could be because the given name is not valid, there is no space, a read-only
file with the same name already exists, or the file is in use by another process.
Check that the correct path for the file is specified.
A1072E
ARM DUI 0496C
ID080411

The specified listing file '<filename>' must not be a .s or .o file


Copyright 2010-2011 ARM. All rights reserved.
Non-Confidential

3-2

Assembler Errors and Warnings

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.
A1085E

Forced user-mode LDM/STM must not be followed by use of banked R8-R14

The ARM architecture does not permit you to access the banked registers on the
instruction following a USER registers LDM or STM. The ARM Architecture
Reference Manual says this form of LDM must not be followed by an instruction,
which accesses banked registers (a following NOP is a good way to ensure this).
Example:
stmib sp, {r0-r14}^ ; Return a pointer to the frame in a1.
mov r0, sp

change to:
stmib sp, {r0-r14}^ ; Return a pointer to the frame in a1.
nop
mov r0, sp

A1088W

Faking declaration of area AREA |$$$$$$$|

This is given when no AREA is given (see A1105E).


A1099E

Structure stack overflow max stack size <max>

A1100E

Structure stack underflow

A1105E

Area directive missing

This is given when no AREA is given (see also A1088W).


A1106E

Missing comma

A1107E

Bad symbol type, expect label

A1108E

Multiply defined symbol '<name>'

A1109E

Bad expression type

A1110E

Expected constant expression

A constant expression was expected after, for example, SETA.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-3

Assembler Errors and Warnings

See the following in Using the Assembler:

Numeric expressions on page 8-16.

A1111E

Expected constant or address expression

A1112E

Expected address expression

A1113E

Expected string expression

A string expression was expected after, for example, SETS.


See the following in Using the Assembler:

String expressions on page 8-14.

A1114E

Expected register relative expression

A1116E

String operands can only be specified for DCB

A1117E

Register symbol '<name>' already defined

A1118E

No current macro expansion

A1119E

MEND not allowed within conditionals


MEND means END of Macro (not the English word mend).

See the following in Using the Assembler:

Use of macros on page 5-30.

A1120E

Bad global name

A1121E

Global name '<name>' already exists

A1122E

Locals not allowed outside macros

A1123E

Bad local name

A1125E

Unknown or wrong type of global/local symbol '<name>'

A1126E

Bad alignment boundary, must be a multiple of 2

A1127E

Bad IMPORT/EXTERN name

A1128E

Common name '<sym>' already exists

A1129E

Imported name '<sym>' already exists

A1130E

Bad exported name

A1131E

Bad symbol type for exported symbol '<sym>'

A1132E

REQUIRE directive not supported for <entity> format output

A1133E

Bad required symbol name

A1134E

Bad required symbol type, expect (symbol is either external or label) and
(symbol is relocatable and absolute)

A1135E

Area name missing

AREA names starting with any non-alphabetic character must be enclosed in


bars, for example change:
AREA 1_DataArea, CODE, READONLY

to:
AREA |1_DataArea|, CODE, READONLY

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-4

Assembler Errors and Warnings

A1136E

Entry address already set

A1137E

Unexpected characters at end of line

This is given when extra characters that are not part of an instruction are found on
an instruction line.
For example:
ADD r0, r0, r1 comment

Can be changed to:


ADD r0, r0, r1 ; comment

A1138E

String "<string>" too short for operation, length must be > <oplength>

A1139E

String overflow, string exceeds <max> characters

A1140E

Bad operand type

A1141E

Relocated expressions may only be added or subtracted

A1142E

Subtractive relocations not supported for <entity> format output

This can occur when subtracting symbols that are in different areas, for example:
IMPORT sym1
IMPORT sym2
DCD (sym2 - sym1)

A1143E

COMMON directive not supported for %s format output

A1144E

DCDO directive not supported for %s format output

A1145E

Undefined exported symbol '<sym>'

A1146E

Unable to open output file <codeFileName>: <reason>

A1147E

Bad shift name

A1148E

Unknown shift name <name>, expected one of LSL, LSR, ASR, ROR, RRX

A1150E

Bad symbol, not defined or external

This typically occurs in the following cases:

when the current file requires an INCLUDE of another file to define some
symbols, for example:
"init.s", line 2: Error: A1150E: Bad symbol
2 00000000 DCD EBI_CSR_0

typically requires a definitions file to be included, 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||

typically requires the symbol to be imported, for example:


IMPORT ||Image$$RAM$$ZI$$Limit||

A1151E

Bad register name symbol

Example:
MCR p14, 3, R0, Cr1, Cr2

The coprocessor registers CR must be labelled as a lowercase c for the code to


build. The ARM register can be r or R:
MCR p14, 3, r0, c1, c2

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-5

Assembler Errors and Warnings

or
MCR p14, 3, R0, c1, c2

A1152E

Unexpected operator

A1153E

Undefined symbol

A1154E

Unexpected operand, operator expected

A1155E

Unexpected unary operator equal to or equivalent to <operator>

A1156E

Missing open bracket

A1157E

Syntax error following directive

A1158E

Illegal line start, should be blank

Some directives, for example, ENTRY, IMPORT, EXPORT, and GET must be on a line
without a label at the start of the line. This error is given if a label is present.
A1159E

Label missing from line start

Some directives, for example, FUNCTION or SETS, require a label at the start of the
line, for example:
my_func FUNCTION

or
label SETS

This error is given if the label is missing.


A1160E

Bad local label number

A local label is a number in the range 0-99, optionally followed by a name.


See the following in Using the Assembler:

Local labels on page 8-12.

A1161E

Syntax error following local label definition

A1162E

Incorrect routine name '<name>'

A1163E

Unknown opcode <name> , expecting opcode or Macro

The most common reasons for this are:

Forgetting to put some white space on the left hand side margin, before the
instruction, for example change:
MOV PC,LR

to
MOV PC,LR

Use of a hardware floating point instruction without using the --fpu switch,
for example:
FMXR FPEXC, r1 ;

must be assembled with armasm --fpu vfp

Mis-typing the opcode:


ADDD

instead of
ADD

A1164E

ARM DUI 0496C


ID080411

Opcode not supported on selected processor

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-6

Assembler Errors and Warnings

The processor selected on the armasm command line does not support this
instruction. See the ARM Architecture Reference Manuals,
http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/ind
ex.html#reference.

A1165E

Too many actual parameters, expecting <actual> parameters

A1166E

Syntax error following label

A1167E

Invalid line start

A1168E

Translate not allowed in pre-indexed form

A1169E

Missing close square bracket

A1170E

Immediate 0x<adr> out of range for this operation, must be below (0x<adr>)

This error is given when DCB, DCW or DCWU directives are used with immediates that
are too large.
See the following in the Assembler Reference:

DCB on page 6-20

DCW and DCWU on page 6-27.


A1171E

Missing close bracket

A1172E

Bad rotator <rotator>, must be even and between 0 and 30

A1173E

ADR/L cannot be used on external symbols

The ADR and ADRL pseudo-instructions can only be used with labels within the
same code area. To load an out-of-area address into a register, use LDR instead.
A1174E

Data transfer offset 0x<val> out of range. Permitted values are 0x<mini>
to 0x<maxi>

A1175E

Bad register range

A1176E

Branch offset 0x<val> out of range.


0x<maxi>

Permitted values are 0x<mini> to

Branches are PC relative, and have a limited range. If you are using "local labels",
you can use the ROUT directive to limit the scope of local labels, to help avoid
referring to a wrong label by accident.
See the following in Using the Assembler:

Local labels on page 8-12.

A1179E

Bad hexadecimal number

A1180E

Missing close quote

A1181E

Bad operator

A1182E

Bad based <base> number

A1183E

Numeric overflow

A1184E

Externals not valid in expressions

A1185E

Symbol missing

A1186E

Code generated in data area

An instruction has been assembled into a data area. This can happen if you have
omitted the CODE attribute on the AREA directive.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-7

Assembler Errors and Warnings

See the following in the Assembler Reference:

AREA on page 6-61.


A1187E

Error in macro parameters

A1188E

Register value <val> out of range.

A1189E

Missing '#'

A1190E

Unexpected '<entity>'

A1191E

Floating point register number out of range 0 to <maxi>

A1192E

Coprocessor register number out of range 0 to 15

A1193E

Coprocessor number out of range 0 to 15

A1194E

Bad floating-point number

A1195W

Small floating point value converted to 0.0

A1196E

Too late to ban floating point

A1198E

Unknown operand

Permitted values are <mini> to <maxi>

This can occur when an operand is accidentally miss-typed.


For example:
armasm init.s -g -PD "ROM_RAM_REMAP SETL {FALS}"

must be:
armasm init.s -g -PD "ROM_RAM_REMAP SETL {FALSE}"

See the following in Using the Assembler:

Assembly time substitution of variables on page 8-6.

A1199E

Coprocessor operation out of range 0 to <maxi>

A1200E

Structure mismatch expect While/Wend

A1201E

Substituted line too long, maximum length <max>

A1202E

No pre-declaration of substituted symbol '<name>'

See the following in Using the Assembler:

Assembly time substitution of variables on page 8-6.

A1203E

Illegal label parameter start in macro prototype

A1204E

Bad macro parameter default value

A1205E

Register <reg> occurs multiply in list

A1206E

Registers should be listed in increasing register number order

This warning is given if registers in, for example, LDM or STM instructions are not
specified in increasing order and the --checkreglist option is used.
A1207E

Bad or unknown attribute

This error is given when an invalid attribute is given in the AREA directive. For
example:
AREA test,CODE,READONLY,HALFWORD
HALFWORD is invalid, so remove it.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-8

Assembler Errors and Warnings

See the following in the Assembler Reference:

AREA on page 6-61.


A1209E

ADRL cannot be used with PC as destination

A1210E

Non-zero data within uninitialized area '<name>'

A1211E

Missing open square bracket

A1212E

Division by zero

A1213E

Attribute <entity> cannot be used with attribute <entity>

A1214E

Too late to define symbol '<sym>' as register list

A1215E

Bad register list symbol

A1216E

Bad string escape sequence

A1217E

Error writing to code file <codeFileName>: <reason>

A1219E

Bad APSR, CPSR or SPSR designator

For example:
MRS r0, PSR

It is necessary to specify which status register to use (CPSR or SPSR), such as,
for example:
MRS r0, CPSR

ARM DUI 0496C


ID080411

A1220E

BLX <address> must be unconditional

A1221E

Area attribute '<entity>' not supported for <entity> object file format

A1223E

Comdat Symbol '<name>' is not defined

A1224E

<entity> format does not allow PC-relative data transfers between areas

A1225E

ASSOC attribute is not allowed in non-comdat areas

A1226E

SELECTION attribute is not allowed in non-comdat areas

A1227E

Comdat Associated area '<name>' undefined at this point in the file

A1228E

Comdat Associated area '<name>' is not an area name

A1229E

Missing COMDAT symbol

A1230E

Missing '}' after COMDAT symbol

A1234E

Undefined or Unexported Weak Alias for symbol '<sym>'

A1237E

Invalid register or register combination for this operation

A1238E

Immediate value must be word aligned when used in this operation

A1240E

Immediate value cannot be used with this operation

A1241E

Must have immediate value with this operation

A1242E

Offset must be word aligned when used with this operation

A1243E

Offset must be halfword aligned with this operation

A1244E

Missing '!'

A1245E

B or BL from Thumb code to ARM code

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-9

Assembler Errors and Warnings

A1247E

BLX from ARM code to ARM code, use BL

This occurs when there is a BLX <label> branch from ARM code to ARM code
within this assembler file. This is not permitted because BLX <label> always
results in a state change. The usual solution is to use BL instead.
A1248E

BLX from Thumb code to Thumb code, use BL

This occurs when there is a BLX <label> branch from Thumb code to Thumb code
within this assembler file. This is not permitted because BLX <label> always
results in a state change. The usual solution is to use BL instead.
A1249E

Post indexed addressing mode not available

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>

A1254E

Halfword literal values not supported

Example:
LDRH R3, =constant

Change the LDRH into LDR, which is the standard way of loading constants into
registers.
A1256E

DATA directive can only be used in CODE areas

A1259E

Invalid PSR field specifier, syntax is <PSR>_ where <PSR> is either CPSR
or SPSR

A1260E

PSR field '<entity>' specified more than once

A1261E

MRS cannot select fields, use APSR, CPSR or SPSR directly

This is caused by an attempt to use fields for CPSR or SPSR with an MRS
instruction, such as:
MRS r0, CPSR_c

A1262U

Expression storage allocator failed

A1265U

Structure mismatch: IF or WHILE unmatched at end of INCLUDE file

A1267E

Bad GET or INCLUDE for file <filename>

A1268E

Unmatched conditional or macro

A1269U

unexpected GET on structure stack

A1270E

File "<entity>" not found

A1271E

Line too long, maximum line length is <MaxLineLength>

A1272E

End of input file

A1273E

'\\' should not be used to split strings

A1274W

'\\' at end of comment

A1283E

Literal pool too distant, use LTORG to assemble it within 1KB

For Thumb code, the literal pool must be within 1KB of the LDR instruction to
access it. See A1284E and A1471W.
A1284E
ARM DUI 0496C
ID080411

Literal pool too distant, use LTORG to assemble it within 4KB

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-10

Assembler Errors and Warnings

For ARM code, the literal pool must be within 4KB of the LDR instruction to
access it. To solve this, add an LTORG directive into your assembler source file at a
convenient place.
See the following in Using the Assembler:

Load addresses to a register using LDR Rd, =label on page 5-17.

See the following in the Assembler Reference:

LTORG on page 6-16.

A1285E

Bad macro name

A1286E

Macro already exists

A1287E

Illegal parameter start in macro prototype

A1288E

Illegal parameter in macro prototype

A1289E

Invalid parameter separator in macro prototype

A1290E

Macro definition too big, maximum length <max>

A1291E

Macro definitions cannot be nested

A1310W

Symbol attribute not recognized

A1311U

macro definition attempted within expansion

A1312E

Assertion failed

A1313W

Missing END directive at end of file

The assembler requires an END directive to know when the code in the file
terminates. You can add comments or other such information in free format after
this directive.
A1314W

Reserved instruction (using NV condition)

A1315E

NV condition not supported on targeted CPU

A1316E

Shifted register operand to MSR has undefined effect

A1319E

Undefined effect (using PC as Rs)

A1320E

Undefined effect (using PC as Rn or Rm in register specified shift)

A1321E

Undefined effect (using PC as offset register)

A1322E

Unaligned transfer of PC, destination address must be 4 byte aligned

A1323E

Reserved instruction (Rm = Rn with post-indexing)

A1324E

Undefined effect (PC + writeback)

A1327W

Non portable instruction (LDM with writeback and base in register list,
final value of base unpredictable)

LDM Operand restriction:

A1328W

ARM DUI 0496C


ID080411

If the base register <Rn> is specified in <registers>, and base register


writeback is specified, the final value of <Rn> is UNPREDICTABLE.

Non portable instruction (STM with writeback and base not first in
register list, stored value of base unpredictable)

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-11

Assembler Errors and Warnings

STM Operand restrictions if <Rn> is specified as <registers> and base register


writeback is specified:

A1329W

If <Rn> is the lowest-numbered register specified in <register_list>, the


original value of <Rn> is stored.

Otherwise, the stored value of <Rn> is UNPREDICTABLE.

Unpredictable instruction (forced user mode transfer with write-back to


base)

This is caused by an instruction such as PUSH {r0}^ where the ^ indicates access
to user registers. The ARM Architectural Reference Manual specifies that
writeback to the base register is not available with this instruction.
Instead, the base register must be updated separately. For example:
SUB sp, sp,#4
STMID sp, {r0}^

Another example is replacing STMFD R0!, {r13, r14}^ with:


SUB r0, r0,#8
STM r0, {r13, r14}^

See also A1085W


A1331W

Unpredictable instruction (PC as source or destination)

A1332W

Unpredictable effect (PC-relative SWP)

A1334E

Undefined effect (use of PC/PSR)

A1335W

Useless instruction (PC cannot be written back)

A1337W

Useless instruction (PC is destination)

A1338W

Dubious instruction (PC used as an operand)

A1339W

Unpredictable if RdLo and RdHi are the same register

A1341E

Branch to unaligned destination, expect destination to be <max> byte


aligned

A1342W

<name> of symbol in another AREA will cause link-time failure if symbol is


not close enough to this instruction

A1344I

host error: out of memory

A1355U

A Label was found which was in no AREA

Example:
This can occur where no white-space precedes an assembler directive.
Assembler directives must be indented with white-space, for example use:
IF :DEF: FOO
; code
ENDIF

instead of:
IF :DEF: FOO
; code
ENDIF

Symbols in the left-hand column are assumed to be labels.


A1356W

ARM DUI 0496C


ID080411

Instruction not supported on targeted CPU

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-12

Assembler Errors and Warnings

This occurs if you try to use an instruction that is not supported by the default
architecture or processor for armasm.
For example:
SMULBB r0,r0,r1 ;

can be assembled with:


armasm --cpu 5TE

The processor selected on the armasm command line does not support this
instruction. See the ARM Architecture Reference Manuals,
http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/ind
ex.html#reference.

A1406E

Bad decimal number

A1407E

Overlarge floating point value

A1408E

Overlarge (single precision) floating point value

A1409W

Small (single precision) floating value converted to 0.0

A1411E

Closing '>' missing from vector specifier

A1412E

Bad vector length, should be between <min> and <max>

A1413E

Bad vector stride, should be between <min> and <max>

A1414E

Vector wraps round over itself, length * stride should not be greater than
<max>

A1415E

VFPASSERT must be followed by 'VECTOR' or 'SCALAR'

A1416E

Vector length does not match current vector length <len>

A1417E

Vector stride does not match current vector stride

A1418E

Register has incorrect type '<type>' for instruction, expect floating


point/double register type

A1419E

Scalar operand not in a scalar bank

A1420E

Lengths of vector operands are different

A1421E

Strides of vector operands are different

A1422E

This combination of vector and scalar operands is not allowed

A1423E

This operation is not vectorizable

A1424E

Vector specifiers not allowed in operands to this instruction

A1425E

Destination vector must not be in a scalar bank

A1426E

Source vector must not be in a scalar bank

A1427E

Operands have a partial overlap

A1428E

Register list contains registers of varying types

A1429E

Expected register list

The assembler reports this when FRAME SAVE and FRAME RESTORE directives are not
given register lists.
See the following in the Assembler Reference:

FRAME RESTORE on page 6-42


ARM DUI 0496C
ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-13

Assembler Errors and Warnings

FRAME SAVE on page 6-44.

A1430E

Unknown frame directive

A1431E

Frame directives are not accepted outside of PROCs/FUNCTIONs

See the following in Using the Assembler:

Frame directives on page 5-37.

A1432E

Floating-point register type not consistent with selected floating-point


architecture

A1433E

Only the writeback form of this instruction exists

The addressing mode specified for the instruction did not include the writeback
specifier (that is, a '!' after the base register), but the instruction set only supports
the writeback form of the instruction. Either use the writeback form, or replace
with instructions that have the desired behavior.
A1435E

{PCSTOREOFFSET} is not defined when assembling for an architecture


{PCSTOREOFFSET} is only defined when assembling for a processor, not for an

architecture.
A1437E

{ARCHITECTURE} is undefined
{ARCHITECTURE} is only defined when assembling for an architecture, not for a

processor.
A1446E

Bad or unknown attribute '<attr>'. Use --apcs /interwork instead

Example:
AREA test1, CODE, READONLY
AREA test, CODE, READONLY, INTERWORK

This code might have originally been intended to work with SDT. The INTERWORK
area attribute is now obsolete. To eliminate the warning:

A1447W

remove the ", INTERWORK" from the AREA line.

assemble with 'armasm --apcs /interwork foo.s' instead

Missing END directive at end of file, but found a label named END

This is caused by the END directive not being indented.


A1448W

Deprecated form of PSR field specifier used (use _f)

A1449W

Deprecated form of PSR field specifier used (use _c)

A1450W

Deprecated form of PSR field specifier used (use _cxsf for future
compatibility)

The assembler, armasm, supports the full range of MRS and MSR instructions, in
the form:
MRS(cond)
MRS(cond)
MSR(cond)
MSR(cond)
MSR(cond)
MSR(cond)

Rd, CPSR
Rd, SPSR
CPSR_fields,
SPSR_fields,
CPSR_fields,
SPSR_fields,

Rm
Rm
#immediate
#immediate

where fields can be any combination of cxsf.


Earlier releases of the assembler permitted other forms of the MSR instruction to
modify the control field and flags field:

cpsr or cpsr_all, control and flags field

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-14

Assembler Errors and Warnings

cpsr_flg, flags field only


cpsr_ctl, control field only.

Similar control and flag settings apply for SPSR.


These forms are now deprecated and must not be used. If your legacy code
contains them, the assembler reports:
Deprecated form of PSR field specifier used (use _cxsf)

To avoid the warning, in most cases you can simply modify your code to use _c,
_f, _cf or _cxsf instead.
See also:

A1454E

Using the Assembler:


Conditional execution in ARM state on page 6-3
Conditional execution in Thumb state on page 6-4
General-purpose registers on page 3-11
Access to the inline barrel shifter on page 3-25.

the FAQ armasm: use of MRS and MSR instructions ('Deprecated form of
PSR field specifier'),
http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka3724.html.

FRAME STATE RESTORE directive without a corresponding FRAME STATE REMEMBER

See the following in Using the Assembler:

Frame directives on page 5-37.

See the following in the Assembler Reference:

FRAME STATE REMEMBER on page 6-45

FRAME STATE RESTORE on page 6-46.


A1456W

INTERWORK area directive is obsolete. Continuing as if --apcs /inter


selected

Example:
AREA test, CODE, READONLY, INTERWORK

This code might have originally been intended to work with SDT. The INTERWORK
area attribute is now obsolete. To eliminate the warning:

A1457E

1.

Remove the ", INTERWORK" from the AREA line.

2.

Assemble with armasm --apcs /interwork foo.s instead.

Cannot mix INTERWORK and NOINTERWORK code areas in same file


INTERWORK and (default) NOINTERWORK code areas cannot be mixed in the same file.
This code might have originally been intended to work with SDT. The INTERWORK

area attribute is obsolete in the ARM Compiler toolchain.


Example:
AREA test1, CODE, READONLY

AREA test2, CODE, READONLY, INTERWORK

To eliminate the error:

ARM DUI 0496C


ID080411

1.

move the two AREAs into separate assembler files such as, for example,
test1.s and test2.s

2.

remove the ", INTERWORK" from the AREA line in test2.s

3.

assemble test1.s with armasm --apcs /nointerwork

4.

assemble test2.s with armasm --apcs /interwor

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-15

Assembler Errors and Warnings

5.

at link time, the linker adds any necessary interworking veneers.

A1458E

DCFD or DCFDU not allowed when fpu is None

A1459E

Cannot B or BL to a register

This form of the instruction is not permitted. See the ARM Architecture Reference
Manual for the permitted forms.
A1461E

Specified processor or architecture does not support Thumb instructions

It is likely that you are specifying a specific architecture or cpu using the --cpu
option and then incorporating some Thumb code in the AREA that is generating
this error.
For example:
armasm --cpu 4 code.s

StrongARM is an architecture 4 (not 4T) processor and does not support Thumb
code.
A1462E

Specified memory attributes do not support this instruction

A1463E

SPACE directive too big to fit in area, area size limit 2^32

A1464W

ENDP/ENDFUNC without corresponding PROC/FUNC

A1466W

Operator precedence means that expression would evaluate differently in C


armasm has always evaluated certain expressions in a different order to C. This

warning might help C programmers from being caught out when writing in
assembler.
To avoid the warning, either:

modify the code to make the evaluation order explicit (that is, add more
brackets)

suppress the warning with --unsafe switch.

See the following in Using the Assembler:

Operator precedence on page 8-29.

A1467W

FRAME ADDRESS with negative offset <offset> is not recommended

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 Using the Assembler:

Frame directives on page 5-37.

See the following in the Assembler Reference:

FRAME STATE REMEMBER on page 6-45

FRAME STATE RESTORE on page 6-46.


A1471W

Directive <directive> may be in an executable position

This can occur with, for example, the LTORG directive (see A1283E & A1284E).
LTORG instructs the assembler to dump literal pool DCD data at this position.
To prevent this warning from occurring, 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.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-16

Assembler Errors and Warnings

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

A1475W

At least one register must be transferred, otherwise result is


UNPREDICTABLE

A1476W

BX r15 at non word-aligned address is UNPREDICTABLE

A1477W

This register combination results in UNPREDICTABLE behavior

A1479W

Requested alignment <alignreq> is greater than area alignment <align>,


which has been increased

This is warning about an ALIGN directive that has a coarser alignment boundary
than its containing AREA. This is not permitted. To compensate, the assembler
automatically increases the alignment of the containing AREA for you. A simple
test case that gives the warning is:
AREA test, CODE, ALIGN=3
ALIGN 16
mov pc, lr
END

In this example, the alignment of the AREA (ALIGN=3) is 2^3=8 byte boundary, but
the mov pc,lr instruction is on a 16-byte boundary, hence the error.
Note
The two alignment types are specified in different ways.
This warning can also occur when using AREA ... ALIGN=0 to align a code section
on a byte boundary. This is not possible. Code sections can only be aligned on:

a four-byte boundary for ARM code, so use "ALIGN=2"

a two-byte boundary for Thumb code, so use "ALIGN=1".


See the following in the Assembler Reference:

ALIGN on page 6-59

AREA on page 6-61.


A1480W

Macro cannot have same name as a directive or instruction

A1482E

Shift option out of range, allowable values are from <min> to <max>

A1484E

Obsolete shift name 'ASL', use LSL instead

The ARM architecture does not have an ASL shift operation. The ARM barrel
shifter only has the following shift types: ROR, ASR, LSR, and LSL.
An arithmetic (that is, signed) shift left is the same as a logical shift left, because
the sign bit always gets shifted out.
Earlier versions of the assembler silently converted ASL to LSL. Use the --unsafe
switch to downgrade this error to a warning.
See the following in the Assembler Reference:

A1485E

ARM DUI 0496C


ID080411

--unsafe on page 2-24

ASR, LSL, LSR, ROR, and RRX on page 3-71.

LDM/STM instruction exceeds maximum register count <max> allowed with


--split_ldm

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-17

Assembler Errors and Warnings

A1486E

ADR/ADRL of a symbol in another AREA is not supported in ELF

The ADR and ADRL pseudo-instructions can only be used with labels within the
same code section. To load an out-of-area address into a register, use LDR
instead.
A1487E

Obsolete instruction name 'ASL', use LSL instead

The Thumb instruction ASL is now faulted. See the corresponding ARM ASL
message A1484E.
A1488W

PROC/FUNC at line <lineno> in '<filename>' without matching ENDP/ENDFUNC

A1489E

<FPU> is undefined

A1490E

<CPU> is undefined

{CPU} is only defined by assembling for a processor and not an architecture.


A1491W

Internal error: Found relocation at offset <offset> with incorrect


alignment

This might indicate an assembler fault. Contact your supplier.


A1492E

Immediate 0x<val> out of range for this operation.


0x<mini> to 0x<maxi>

A1493E

REQUIRE must be in an AREA

A1495E

Target of branch is a data address

Permitted values are

armasm determines the type of a symbol and detects branches to data. Specify
--diag-suppress 1495 to suppress this warning.
A1496E

Absolute relocation of ROPI address with respect to symbol '<symbol>' at


offset <offset> may cause link failure

For example, when assembling with --apcs /ropi:


AREA code, CODE
codeaddr DCD codeaddr
END

because this generates an absolute relocation (R_ARM_ABS32) to a PI code symbol.


A1497E

Absolute relocation of RWPI address with respect to symbol '<symbol>' at


offset <offset> may cause link failure

For example, when assembling with --apcs /rwpi:


AREA data, DATA
dataaddr DCD dataaddr
END

because this generates an absolute relocation (R_ARM_ABS32) to a PI data symbol.


A1498E

Unexpected characters following Thumb instruction

For example:
ADD r0, r0, r1

is accepted as a valid instruction, for both ARM and Thumb, but:


ADD r0, r0, r1, ASR #1

is a valid instruction for ARM, but not for Thumb, so the unexpected characters
are ", ASR #1".

ARM DUI 0496C


ID080411

A1499E

Register pair is not a valid contiguous pair

A1500E

Unexpected characters when expecting '<eword>'

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-18

Assembler Errors and Warnings

A1501E

Shift option out of range, allowable values are 0, 8, 16 or 24

A1502W

Register <reg> is a caller-save register, not valid for this operation

A1505E

Bad expression type, expect logical expression

A1506E

Accumulator should be in form accx where x ranges from 0 to <max>

A1507E

Second parameter of register list must be greater than or equal to the


first

A1508E

Structure mismatch expect Conditional

A1509E

Bad symbol type, expect label, or weak external symbol

A1510E

Immediate 0x<imm> cannot be represented by 0-255 and a rotation

A1511E

Immediate cannot be represented by combination of two data processing


instructions

A1512E

Immediate 0x<val> out of range for this operation.


<mini> to <maxi>

A1513E

Symbol not found or incompatible Symbol type for '<name>'

A1514E

Bad global name '<name>'

A1515E

Bad local name '<name>'

A1516E

Bad symbol '<name>', not defined or external

A1517E

Unexpected operator equal to or equivalent to <operator>

A1539E

Link Order dependency '<name>' not an area

A1540E

Cannot have a link order dependency on self

A1541E

<code> is not a valid condition code

A1542E

Macro names <name1> and <name2>[parameter] conflict

A1543W

Empty macro parameter default value

A1544W

Invalid empty PSR field specifier, field must contain at least one of
c,x,s,f

A1545E

Too many sections for one <objfmt> file

A1546W

Stack pointer update potentially breaks 8 byte stack alignment

Permitted values are

Example:
PUSH {r0}

The stack must be eight-byte aligned on an external boundary so pushing an odd


number of registers causes this warning to be given. This warning is suppressed
by default. To enable this warning use --diag_warning 1546.
See the following in the Assembler Reference:

A1547W

--diag_warning=tag{, tag} on page 2-12.

PRESERVE8 directive has automatically been set

Example:
PUSH {r0,r1}

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-19

Assembler Errors and Warnings

This warning has been given because the PRESERVE8 directive has not been
explicitly set by the user, but the assembler has set this itself automatically. This
warning is suppressed by default. To enable this warning use --diag_warning
1547.
See the following in the Assembler Reference:

A1548W

--diag_warning=tag{, tag} on page 2-12

REQUIRE8 and PRESERVE8 on page 6-76.

Code contains LDRD/STRD indexed/offset from SP but REQUIRE8 is not set

Example:
PRESERVE8
STRD r0,[sp,#8]

This warning is given when the REQUIRE8 directive is not set when required.
See the following in the Assembler Reference:

A1549W

REQUIRE8 and PRESERVE8 on page 6-76.

Setting of REQUIRE8 but not PRESERVE8 is unusual

Example:
PRESERVE8 {FALSE}
REQUIRE8
STRD r0,[sp,#8]

A1550E

Input and output filenames are the same

A1551E

Cannot add Comdef area <name> to non-comdat group

A1560E

Non-constant byte literal values not supported

A1561E

MERGE and STRING sections must be data sections

A1562E

Entry size for Merge section must be greater than 0

A1563W

Instruction stalls CPU for <stalls> cycle(s)

The assembler can give information about possible interlocks in your code caused
by the pipeline of the processor chosen by the --cpu option. To do this assemble
with armasm --diag_warning 1563
Note
If the --cpu option specifies a multi-issue processor such as Cortex-A8, the
interlock warnings are unreliable.
See also warning A1746W.

ARM DUI 0496C


ID080411

A1572E

Operator SB_OFFSET_11_0 only allowed on LDR/STR instructions

A1573E

Operator SB_OFFSET_19_12 only allowed on Data Processing instructions

A1574E

Expected one or more flag characters from "<str>"

A1575E

BLX with bit[0] equal to 1 is architecturally UNDEFINED

A1576E

Bad coprocessor register name symbol

A1577E

Bad coprocessor name symbol

A1578E

Bad floating point register name symbol '<sym>'

A1581W

Added <no_padbytes> bytes of padding at address <address>

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-20

Assembler Errors and Warnings

The assembler warns by default when padding bytes are added to the generated
code. This occurs whenever an instruction/directive is used at an address that
requires a higher alignment, for example, to ensure ARM instructions start on a
four-byte boundary after some Thumb instructions, or where there is a DCB
followed by DCD.
For example:
AREA Test, CODE, READONLY
THUMB
ThumbCode
MOVS r0, #1
ADR r1, ARMProg
BX r1
; ALIGN ; <<< add to avoid the first warning
ARM
ARMProg
ADD r0,r0,#1
BX LR
DCB 0xFF
DCD 0x1234
END

Results in the warnings:


A1581W: Added 2 bytes of padding at address 0x6
8 00000008 ARM
A1581W: Added 3 bytes of padding at address 0x11
13 00000014 DCD 0x1234

The warning can also occur when using ADR in Thumb-only code. The ADR Thumb
pseudo-instruction can only load addresses that are word aligned, but a label
within Thumb code might not be word aligned. Use ALIGN to ensure four-byte
alignment of an address within Thumb code.
See the following in the Assembler Reference:

ADR (PC-relative) on page 3-24

ADR (register-relative) on page 3-26

DCB on page 6-20

DCD and DCDU on page 6-21

ALIGN on page 6-59.

ARM DUI 0496C


ID080411

A1582E

Link Order area '<name>' undefined

A1583E

Group symbol '<name>' undefined

A1584W

Mode <mode> not allowed for this instruction

A1585E

Bad operand type (<typ1>) for operator <op>

A1586E

Bad operand types (<typ1>, <typ2>) for operator <op>

A1587E

Too many registers <count> in register list, maximum of <max>

A1593E

Bad Alignment, must match transfer size UIMM * <dt>

A1595E

Bad Alignment, must match <st> * <dt>, or 64 when <st> is 4

A1596E

Invalid alignment <align> for dt st combination

A1598E

Bad Register list length

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-21

Assembler Errors and Warnings

A1599E

Out of range subscript, must be between 0 and <max_index>

A1600E

Section type must be within range SHT_LOOS and SHT_HIUSER

A1601E

Immediate cannot be represented

A1603W

This instruction inside IT block has UNPREDICTABLE results

A1604W

Thumb Branch to destination without alignment to <max> bytes

A1606E

Symbol attribute <attr1> cannot be used with attribute <attr2>

A1607E

Thumb-2 wide branch instruction used, but offset could fit in Thumb-1
narrow branch instruction

A1608W

MOV pc,<rn> instruction used, but BX <rn> is preferred

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 Thumb state. An attempt to create a return address in this
fashion fails as bit0 is not set. Attempting to BX to this instruction causes a state
change (to ARM).
To create a return address, you can use:
MOV r0, pc
ADDS r0, #1

This warning can then be safely suppressed with:


--diag-suppress 1609

A1611E

Register list increment of 2 not allowed for this instruction

A1612E

<type> addressing not allowed for <instr>

A1615E

Store of a single element or structure to all lanes is UNDEFINED

A1616E

Instruction, offset, immediate or register combination is not supported by


the current instruction set

This can be caused by attempting to use an invalid combination of operands. For


example, in Thumb:
MOV r0, #1 ; /* Not permitted */
MOVS r0, #1 ; /* Ok */

See the following in the Assembler Reference:

ARM DUI 0496C


ID080411

Chapter 3 ARM and Thumb Instructions.

A1617E

Specified width is not supported by the current instruction set

A1618E

Specified instruction is not supported by the current instruction set

A1619E

Specified condition is not consistent with previous IT

A1620E

Error writing to file '<filename>': <reason>

A1621E

CBZ or CBNZ from Thumb code to ARM code

A1622E

Negative register offsets are not supported by the current instruction set

A1623E

Offset not supported by the current instruction set

A1624E

Branch from Thumb code to ARM code

A1625E

Branch from ARM code to Thumb code

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-22

Assembler Errors and Warnings

A1626E

BL from Thumb code to ARM code

A1627E

BL from ARM code to Thumb code

This occurs when there is a branch from ARM code to Thumb code (or
vice-versa) within this file. The usual solution is to move the Thumb code into a
separate assembler file. Then, at link-time, the linker adds any necessary
interworking veneers.
A1630E

Specified processor or architecture does not support ARM instructions

Certain processors such as Cortex-M3 or Cortex-M1 implement only the Thumb


instruction set, not the ARM instruction set. It is likely that the assembly file
contains some ARM-specific instructions and is being built for one of these
processors.
A1631E

Only left shifts of 1, 2 and 3 are allowed on load/stores

A1632E

Else forbidden in IT AL blocks

A1633E

LDR rx,=

A1634E

LDRD/STRD has no register offset addressing mode in Thumb

A1635E

CBZ/CBNZ can not be made conditional

A1636E

Flag setting MLA is not supported in Thumb

A1637E

Error reading line: <reason>

A1638E

Writeback not allowed on register offset loads or stores in Thumb

A1639E

Conditional DCI only allowed in Thumb mode

A1640E

Offset must be a multiple of four

A1641E

Forced user-mode LDM/STM not supported in Thumb

A1642W

Relocated narrow branch is not recommended

A1643E

Cannot determine whether instruction is working on single or double


precision values.

A1644E

Cannot use single precision registers with FLDMX/LSTMX

A1645W

Substituted <old> with <new>

pseudo instruction only allowed in load word form

armasm can warn when it substitutes an instruction when assembling.

For example:

ADD negative_number is the same as SUB positive_number

MOV negative_number is the same as MVN positive_number

CMP negative_number is the same as CMN positive_number.


For Thumb-2, unpredictable single register LDMs are transformed into LDRs.
This warning is suppressed by default, but can be enabled with --diag_warning
1645

For example:
AREA foo, CODE
ADD r0, #-1
MOV r0, #-1
CMP r0, #-1

When assembled with:


armasm --diag_warning 1645
ARM DUI 0496C
ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-23

Assembler Errors and Warnings

the assembler reports:


Warning: A1645W: Substituted ADD with SUB
3 00000000 ADD r0, #-1
Warning: A1645W: Substituted MOV with MVN
4 00000004 MOV r0, #-1
Warning: A1645W: Substituted CMP with CMN
5 00000008 CMP r0, #-1

and the resulting code generated is:


foo
0x00000000: e2400001 ..@. SUB r0,r0,#1
0x00000004: e3e00000 .... MVN r0,#0
0x00000008: e3700001 ..p. CMN r0,#1

A1647E

Bad register name symbol, expected Integer register

An integer (core) register is expected at this point in the syntax.


A1648E

Bad register name symbol, expected Wireless MMX SIMD register

This message relates to Wireless MMX.


A1649E

Bad register name symbol, expected Wireless MMX Status/Control or General


Purpose register

This message relates to Wireless MMX.


A1650E

Bad register name symbol, expected any Wireless MMX register

This message relates to Wireless MMX.


A1651E

TANDC, TEXTRC and TORC instructions with destination register other than
R15 is undefined

This message relates to Wireless MMX.


A1652W

FLDMX/FSTMX instructions are deprecated in ARMv6. Please use FLDMD/FSTMD


instructions to save and restore unknown precision values.

A1653E

Shift instruction using a status or control register is undefined

A1654E

Cannot access external symbols when loading/storing bytes or halfwords

A1655W

Instruction is UNPREDICTABLE if halfword/word/doubleword is unaligned

A1656E

Target must be at least word-aligned when used with this instruction

A1657E

Cannot load a byte/halfword literal using WLDRB/WLDRH =constant

A1658W

Support for <opt> is deprecated

The option passed to armasm is now deprecated. Use armasm --help to view the
currently available options.
See the following in the Assembler Reference:

ARM DUI 0496C


ID080411

Chapter 3 ARM and Thumb Instructions.

A1659E

Cannot B/BL/BLX between ARM/Thumb and Thumb-2EE

A1660E

Cannot specify scalar index on this register type

A1661E

Cannot specify alignment on this register

A1662E

Cannot specify a data type on this register type

A1663E

A data type has already been specified on this register

A1664E

Data type specifier not recognized

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-24

Assembler Errors and Warnings

ARM DUI 0496C


ID080411

A1665E

Data type size must be one of 8, 16, 32 or 64

A1666E

Data type size for floating-point must be 32 or 64

A1667E

Data type size for polynomial must be 8 or 16

A1668E

Too many data types specified on instruction

A1669E

Data type specifier not allowed on this instruction

A1670E

Expected 64-bit doubleword register expression

A1671E

Expected 128-bit quadword register expression

A1672E

Expected either 64-bit or 128-bit register expression

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

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

A1678E

Destination must be untyped and same size as source

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>

A1689E

Source operand type should be <n>-bit floating point

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 2010-2011 ARM. All rights reserved.


Non-Confidential

3-25

Assembler Errors and Warnings

A1694E

Instruction cannot be conditional in the current instruction set

Conditional instructions are not permitted in the specified instruction set. The
instruction MOVEQ, for example, is only permitted in ARM and Thumb-2
assembler, but not Thumb-1.

ARM DUI 0496C


ID080411

A1695E

Scalar index not allowed on this instruction

A1696E

Expected either 32-bit, 64-bit or 128-bit register expression

A1697E

Expected either 32-bit or 64-bit VFP register expression

A1698E

Expected 32-bit VFP register expression

A1699E

64-bit data type cannot be used with these registers

A1700E

Source operand type should be integer with size between <min> and <max>

A1701E

16-bit polynomial type cannot be used for source operand

A1702E

Register Dm can not be scalar for this instruction

A1704E

Register Dm must be in the range D0-D<upper> for this data type

A1705E

Assembler converted Qm register to D<rnum>[<idx>]

A1706E

Register Dm must be scalar

A1708E

3rd operand to this instruction must be a constant expression

A1709E

Expected ARM or scalar register expression

A1710E

Difference between current and previous register should be <diff>

A1711E

Scalar registers cannot be used in register list for this instruction

A1712W

This combination of LSB and WIDTH results in UNPREDICTABLE behavior

A1713E

Invalid field specifiers for APSR: must be APSR_ followed by at least one
of n, z, c, v, q or g

A1714E

Invalid combination of field specifiers for APSR

A1715E

PSR not defined on target architecture

A1716E

Destination for VMOV instruction must be ARM integer, 32-bit


single-precision, 64-bit doubleword register or 64-bit doubleword scalar
register

A1717E

Source register must be an ARM integer, 32-bit single-precision 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

A1720E

Source register must be a 64-bit doubleword scalar register

A1721E

Destination register may not have all-lanes specifier

A1722E

Labels not allowed inside IT blocks

A1723E

__RELOC is deprecated, please use the new RELOC directive

A1724E

RELOC may only be used immediately after an instruction or data generating


directive

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-26

Assembler Errors and Warnings

A1725W

'armasm inputfile outputfile' form of command-line is deprecated

A1726E

Decreasing --max_cache below 8MB is not recommended

A1727W

Immediate could have been generated using the 16-bit Thumb MOVS
instruction

A1728E

Source register must be same type as destination register

A1729E

Register list may only contain 32-bit single-precision or 64-bit


doubleword registers

A1730E

Only IA or DB addressing modes may be used with these instructions

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>)

A1736E

Number of registers in list must equal number of elements

A1737E

PC or SP can not be used as the offset register

A1738E

Immediate too large for this operation

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

A1741E

Instruction cannot be conditional

A1742E

Expected LSL #Imm

A1744E

Alignment on register must be a multiple of 2 in the range 16 to 256

A1745W

This register combination is DEPRECATED

A1746W

Instruction stall diagnostics may be unreliable for this CPU

The assembler generates messages to help you optimize the code when building
with, for example:
--diag_warning 1563 --cpu=Cortex-A8

However, these messages are not reliable because the assembler make
sugggestions for modern processors such as the Cortex-A8 and Cortex-A9.
See also warning A1563W.

ARM DUI 0496C


ID080411

A1753E

Unrecognized memory barrier option

A1754E

Cannot change the type of a scalar register

A1755E

Scalar index has already been specified on this register

A1756E

Data type must be specified on all registers

A1757W

Symbol attributes must be within square brackets; Any other syntax is


deprecated

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-27

Assembler Errors and Warnings

A1758W

Exporting multiple symbols with this directive is deprecated

A1759E

Specified processor or architecture does not support Thumb-2EE


instructions

A1760W

Build Attribute <from> is '<attr>'

A1761W

Difference in build attribute from '<diff>' in <from>

A1762E

Branch offset 0x<val> out of range of 16-bit Thumb branch, but offset
encodable in 32-bit Thumb branch

This is caused when assembling for Thumb-2 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 assembler to generate a 32-bit branch.
A1763W

Inserted an IT block for this instruction

This indicates that the assembler has inserted a IT block to permit a number of
conditional instructions in Thumb-2. For example:
MOVEQ r0,r1

This warning is off by default. It can be enabled using --diag_warning A1763.


A1764W

<name> instructions are deprecated in architecture <arch> and above

A1765E

Size of padding value on ALIGN must be 1, 2 or 4 bytes

This is caused when the optional padsize attribute is used with an ALIGN directive,
but has an incorrect size. It does not refer to the parameter to align to. The
parameter can be any power of 2 from 2^0 to 2^31

ARM DUI 0496C


ID080411

A1766W

Size of padding value for code must be a minimum of <size> bytes; treating
as data

A1767E

Unexpected characters following attribute

A1768E

Missing '='

A1769E

Bad NEON or VFP system register name symbol

A1771E

Bad floating-point bitpattern when expecting <exp>-bit bitpattern

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

A1774E

Fixed-point conversion only possible for 16-bit or 32-bit signed or


unsigned types

A1775E

Conversion between these types is not possible

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>

A1779W

DCDO cannot be used on READONLY symbol '<key>'

A1780E

Unknown ATTR directive

A1781E

Tag #<id> cannot be set by using ATTR

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-28

Assembler Errors and Warnings

A1782E

Tag #<id> should be set with ATTR <cmd>

A1783E

Attribute scope must be a label or section name

A1784W

Reference to weak definition '<sym>' not relocated

A1785E

Macro '<macuse>' not found, but '<macdef>' exists

A1786W

This instruction using SP is deprecated in ARMv7

This is caused by statements like:


ADD sp, r0, #imm

This can be replaced with a sequence like:


ADD r1,r0,#imm
MOV sp, r1

For more information, see Diagnostic messages A1745W, A1477W and A1786W,
http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka4235.html.
A1787W

Use of VFP Vector Mode is deprecated in ARMv7

A1788W

Explicit use of PC in this instruction is deprecated

A1789W

Explicit use of PC in this instruction is deprecated, except as


destination register

A1790W

Writeback ignored in Thumb LDM loading the base register

This is caused by incorrectly adding an exclamation mark to indicate base register


writeback.
For example:
LDM r0!, {r0-r4}

is not a legal instruction because r0 is the base register and is also in the
destination register list. In this case, the assembler ignores the writeback and
generates:
LDM r0, {r0-r4}

ARM DUI 0496C


ID080411

A1791W

Previous value of tag #<id> will be overridden

A1792E

Undefined build attributes tag

A1793E

Conversion only possible between 16-bit and 32-bit floating point

A1794E

Conversion operations require two data types

A1795E

Source and destination vector must contain <n> elements

A1796E

Register type not consistent with data type

A1797E

Specified FPU is not compatible with CPU architecture

A1798W

Output is not WYSIWYG (<output>)

A1799W

Output has not been checked for WYSIWYG property

A1800W

No output for line

A1801W

Instruction is UNPREDICTABLE in current instruction set

A1803E

Bad system instruction name

A1804E

Bad CP14 or CP15 register name for instruction

A1805W

Register is Read-Only

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-29

Assembler Errors and Warnings

A1806W

Register is Write-Only

A1807W

Instruction executes as NOP on target CPU

A1808E

Generated object file may be corrupt (<reason>)

A1809W

Instruction aligns PC before using it; section ought to be at least 4 byte


aligned

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

A1812W

Instruction cannot be assembled in the opposite instruction set

A1813W

32-bit instruction used where 16-bit could have been used

A1814E

No output file

A1815E

SHT_ARM_EXIDX sections require a link order dependency to be set

A1816E

Unknown opcode '<name>' in CODE16, but exists in THUMB

A1817W

ATTR tag #<id> setting ignored in <scope>

A1818W

ATTR COMPAT flag <flag> and vendor '<vendor>' setting ignored in <scope>

A1819W

ATTR compatible with tag #<id> setting ignored in <scope>

A1820E

Register and processor mode not valid for instruction

A1846E

Invalid field specifiers for CPSR or SPSR: must be followed by at least


one of c, x, s or f

A1847E

Expression requiring more than one relocation not allowed

This can occur during the assembly of ARM instructions when trying to access
data in another area. For example, using:
LDR r0, [pc, #label - . - 8]

or its equivalent:
LDR r0, [pc, #label-{PC}-8]

where label is defined in a different AREA.


Change your code to use the simpler, equivalent syntax:
LDR r0, label

This works if label is either in the same area or in a different area.


A1848W

State change in IT block

A1875E

Register Rn must be from R0 to R7 in this instruction

Change the specified register to be in the range R0 to R7.


A1903E

Line not seen in first pass; cannot be assembled

This occurs if an instruction or directive does not appear in pass 1 but appears in
pass 2 of the assembler.
The following example shows when a line is not seen in pass 1:
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

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-30

Assembler Errors and Warnings

]
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, A1909E, or A1908E.
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

A1909E

Line not seen in second pass; cannot be assembled

This occurs if an instruction or directive appears in pass 1 but does not appear in
pass 2 of the assembler.
The following example shows when a line is not seen in pass 2:
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

ARM DUI 0496C


ID080411

A1916E

Unknown built-in variable '<name>'

A1993E

This operator requires a relocation that is not supported in <objfmt>

A1994E

This directive is not supported in <objfmt>

A1995E

Weak definitions are not supported in <objfmt>

A1996E

TYPE must only be used after WEAK on IMPORT

A1997E

Expected alias for weak extern symbol

A1998E

Comdat Associated area must have Comdat Associative selection type

A1999E

Comdat Associated area cannot be another Comdat Associated area

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

3-31

Chapter 4
Linker Errors and Warnings

The following topics describe the error and warning messages for the linker, armlink:

Suppressing armlink error and warning messages on page 4-2

List of the armlink error and warning messages on page 4-3.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-1

Linker Errors and Warnings

4.1

Suppressing armlink error and warning messages


All linker warnings are suppressible with --diag_suppress in the same way as for compiler
warnings. For example:
--diag_suppress 6306

Some errors such as L6220E, L6238E and L6784E can be downgraded to a warning by using:
--diag_warning

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-2

Linker Errors and Warnings

4.2

List of the armlink error and warning messages


The error and warning messages for armlink are:
L6000U

Out of memory.

This error is reported by RVCT v4.0 and earlier. For more details on why you
might see this error and possible solutions, see the description for error L6815U.
L6001U

Could not read from file <filename>.

L6002U

Could not open file <filename>: <reason>

This indicates that the linker was unable to open a file specified on the linker
command line. This can indicate a problem accessing the file or a fault with the
command line specified. Some common occurrences of this message are:

L6002U: Could not open file /armlib/{libname}: No such file or


directory

Either specify the library path with --libpath or set the ARMCC41LIB
environment variable to install_directory\RVCT\Data\...\lib.
See the following in the Linker Reference:
--libpath=pathlist on page 2-96.
See the following in Introducing the ARM Compiler toolchain:

Toolchain environment variables on page 2-14.

Error : armlink : L6002: Could not open file errors=ver.txt

Caused by the double-dash (--) missing from in front of errors=ver.txt. If


you do not prefix options with -- or - the linker treats them as input files
and fails the link step as it is unable to load all the specified files. The
correct switch is --errors=ver.txt
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 where there is whitespace in the list of library objects.
The example below fails:
armlink x.lib(foo.o, bar.o)
Fatal error: L6004U: Missing library member in member list for x.lib.

The example below succeeds:


armlink x.lib(foo.o,bar.o)

Another less common occurrence is caused by a corrupt library, or possibly a


library in an unsupported format.
L6005U

Extra characters on end of member list for <library>.

L6006U

Overalignment value not specified with OVERALIGN attribute for execution


region <regionname>.

See the following in the Linker Reference:

Syntax of an input section description on page 4-22


See the following in Using the Linker:

L6007U

ARM DUI 0496C


ID080411

Overalignment of execution regions and input sections on page 8-56.

Could not recognize the format of file <filename>.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-3

Linker Errors and Warnings

The linker can recognize object files in the ELF format, and library files in AR
formats. The specified file is either corrupt, or is in a file format that the linker
cannot recognize.
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.
L6009U

File <filename> : Endianness mismatch.

The endianness of the specified file or object did not match the endianness of the
other input files. The linker can handle input of either big endian or little endian
objects in a single link step, but not a mixed input of some big and some little
endian objects.
L6010U

Could not reopen stderr to file <filename>: <reason>

An file I/O error occurred while reading, opening, or writing to the specified file.
L6011U

Invalid integer constant : <number>.

Specifying an illegal integer constant causes this. An integer can be entered in


hexadecimal format by prefixing &, 0x, or 0X. A suffix of k or m can be used to
specify a multiple of 1024 or 1024*1024.
L6015U

Could not find any input files to link.

The linker must be provided with at least one object file to link.
For example, If you try to link with:
armlink lib.a -o foo.axf

you get the above error.


You must instead use, for example:
armlink foo_1.o foo_2.o lib.a -o foo.axf

L6016U

Symbol table missing/corrupt in object/library <object>.

This can occur when linking with libraries built with the GNU tools. This is
because GNU ar can generate incompatible information.
The workaround is to replace ar with armar and use the same command line
arguments. Alternatively, the error is recoverable by using armar -s to rebuild the
symbol table.
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.

L6019U

<filename> is not a valid 64 bit ELF file.

L6020U

<filename> is not a valid 32 bit ELF file.

L6022U

Object <objname> has multiple <table>.

The object file is faulty or corrupted. This might indicate a compiler fault. Contact
your supplier.
L6024U

Library <library> contains an invalid member name.

The file specified is not a valid library file, is faulty or corrupted. Try rebuilding it.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-4

Linker Errors and Warnings

L6025U

Cannot extract members from a non-library file <library>.

The file specified is not a valid library file, is faulty or corrupted. Try rebuilding it.
L6026U

ELF file <filename> has neither little or big endian encoding

The ELF file is invalid. Try rebuilding it.


L6027U

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) has


invalid/unknown type.

This might indicate a compiler fault. Contact your supplier.


L6028U

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) has invalid


offset.

This might indicate a compiler fault. Contact your supplier.


L6029U

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is wrt


invalid/missing symbol.

The relocation is with respect to a symbol that is either:

invalid or missing from the object symbol table

a symbol that is not suited to be used by a relocation.


This might indicate a compiler fault. Contact your supplier.
L6030U

Overalignment <overalignment> for region <regname> must be at least 4 and


a power of 2

See the following in the Linker Reference:

Execution region attributes on page 4-11

Syntax of an input section description on page 4-22


See the following in Using the Linker:

L6031U

Overalignment of execution regions and input sections on page 8-56.

Could not open scatter description file <filename>: <reason>

An I/O error occurred while trying to open the specified file. This could be due to
an invalid filename.
L6032U

Invalid <text> <value> (maximum <max_value>) found in <object>

L6033U

Symbol <symbolname> in <objname> is defined relative to an invalid


section.

L6034U

Symbol <symbolname> in <objname> has invalid value.

This is most often caused by a section-relative symbol having a value that exceeds
the section boundaries.
L6035U

Relocation #<rel_class>:<rel_number> in ZI Section <objname>(<secname>)


has invalid type.

ZI Sections cannot have relocations other than of type R_ARM_NONE.


L6036U

Could not close file <filename>: <reason>

An I/O error occurred while closing the specified file.


L6037U

'<arg>' is not a valid argument for option '<option>'.

The argument is not valid for this option. This could be due to a spelling error, or
due to the use of an unsupported abbreviation of an argument.
L6038U

ARM DUI 0496C


ID080411

Could not create a temporary file to write updated SYMDEFS.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-5

Linker Errors and Warnings

An I/O error occurred while creating the temporary file required for storing the
SYMDEFS output.
L6039W

Relocation from #<rel_class>:<rel_number> in <objname>(<secname>) with


respect to <symname>. Skipping creation of R-type relocation. No
corresponding R-type relocation exists for type <rel_type>.
--reloc is used with objects containing relocations that do not have a

corresponding R-type relocation.


L6041U

An internal error has occurred (<clue>).

Contact your supplier.


L6042U

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is wrt a


mapping symbol(#<idx>, Last Map Symbol = #<last>).

Relocations with respect to mapping symbols are not permitted. This might
indicate a compiler fault. Contact your supplier.
L6043U

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is with


respect to an out of range symbol(#<val>, Range = 1-<max>).

Relocations can only be made wrt symbols in the range (1-n), where n is the
number of symbols.
L6047U

The size of this image (<actual_size> bytes) exceeds the maximum allowed
for this version of the linker

L6048U

The linker is unable to continue the link step (<id>). This version of the
linker will not create this image.

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.

L6058E

Syntax error parsing linker script <script> at line <lineno> : <token>

The link ld script has a syntax error at the line number.


See the following in Using the Linker:

L6064E

Chapter 9 GNU ld script support in armlink.

ELF Executable file <filename> given as input on command line

This might be because you specified an object file as output from from the
compiler without specifying the -c compiler option. For example:
armcc file.c -o file.o
armlink file.o -o file.axf

See the following in the Compiler Reference:

L6065E

-c on page 3-31.

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.

ARM DUI 0496C


ID080411

L6175E

EMPTY region <regname> cannot have any section selectors.

L6176E

A negative max_size cannot be used for region <regname> without the EMPTY
attribute.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-6

Linker Errors and Warnings

Only regions with the EMPTY attribute are permitted to have a negative
max-size.
L6177E

A negative max_size cannot be used for region <regname> which uses the
+offset form of base address.

Regions using the +offset form of base address are not permitted to have a
negative max-size.
L6188E

Special section <sec1> multiply defined by <obj1> and <obj2>.

A special section is one that can only be used once, such as "Veneer$$Code".
L6195E

Cannot specify both '<attr1>' and '<attr2>' for region <regname>

See the following in the Linker Reference:

Load region attributes on page 4-7

Execution region attributes on page 4-11

Address attributes for load and execution regions on page 4-14

Inheritance rules for load region address attributes on page 4-18

Inheritance rules for execution region address attributes on page 4-19

Inheritance rules for the RELOC address attribute on page 4-20.


L6200E

Symbol <symbolname> multiply defined by <object1> and <object2>.

A common example where this occurs:


Symbol __stdout multiply defined (by retarget.o and stdio.o).

means that there are two conflicting definitions of __stdout present in retarget.o
and stdio.o. The one in retarget.o is your own definition. The one in stdio.o is
the default implementation, which was probably linked-in inadvertently.
stdio.o contains a number symbol definitions and implementations of file
functions like fopen, fclose, and fflush.
stdio.o is being linked-in because it satisfies some unresolved references.

To identify why stdio.o is being linked-in, you must use the verbose link option
switch. For example:
armlink [... your normal options...] --verbose --list err.txt

Then study err.txt to see exactly what the linker is linking in, from where, and
why.
You might have to either:

eliminate the calls like fopen, fclose, and fflush

re-implement the _sys_xxxx family of functions.


See the following in Using ARM C and C++ Libraries and Floating-Point
Support:

L6201E

Tailoring input/output functions in the C and C++ libraries on page 2-92.

Object <objname> contains multiple entry sections.

The input object specifies more than one entry point. Use the --entry
command-line option to select the entry point to use.
See the following in the Linker Reference:

L6202E

ARM DUI 0496C


ID080411

--entry=location on page 2-58.

<objname>(<secname>) cannot be assigned to non-root region '<regionname>'

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-7

Linker Errors and Warnings

A root region is a region that has an execution address the same as its load
address. The region does not therefore require moving or copying by the
scatter-load initialization code.
Certain sections must be placed in root region in the image. __main.o and the
linker-generated table (Region$$Table) must be in a root region. If not, the linker
reports, for example:
Region$$Table cannot be assigned to a non-root region.

Scatter-loading (__scatter*.o) and decompressor (__dc*.o) objects from the


library must be placed in a root region. These can all be placed together using
InRoot$$Sections:
ROM_LOAD 0x0000 0x4000
{
ROM_EXEC 0x0000 0x4000 ; root region
{
vectors.o (Vect, +FIRST) ; Vector table
* (InRoot$$Sections) ; All library sections
; that must be in a root region
; for example, __main.o, __scatter*.o,
; dc*.o and * Region$$Table
}
RAM 0x10000 0x8000
{
* (+RO, +RW, +ZI) ; all other sections
}
}

See also Placing root region library objects,


http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka3946.html.

L6203E

Entry point (<address>) lies within non-root region <regionname>.

The image entry point must correspond to a valid instruction in a root-region of


the image.
L6204E

Entry point (<address>) does not point to an instruction.

The image entry point you specified with the --entry command-line option must
correspond to a valid instruction in the root-region of the image.
See the following in the Linker Reference:

L6205E

--entry=location on page 2-58.

Entry point (<address>) must be word aligned for ARM instructions.

This message is displayed because the image entry point you specified with the
--entry command-line option is not word aligned. For example, you specified
--entry=0x8001 instead of --entry=0x8000.
See the following in the Linker Reference:

L6206E

--entry=location on page 2-58.

Entry point (<address>) lies outside the image.

The image entry point you specified with the --entry command-line option is
outside the image. For example, you might have specified an entry address of
0x80000 instead of 0x8000, as follows:
armlink --entry=0x80000 test.o -o test.axf

See the following in the Linker Reference:

L6208E
ARM DUI 0496C
ID080411

--entry=location on page 2-58.

Invalid argument for --entry command: '<arg>'

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-8

Linker Errors and Warnings

See the following in the Linker Reference:

L6209E

--entry=location on page 2-58.

Invalid offset constant specified for --entry (<arg>)

See the following in the Linker Reference:

L6210E

--entry=location on page 2-58.

Image cannot have multiple entry points. (<address1>,<address2>)

One or more input objects specifies more than one entry point for the image. Use
the --entry command-line option to select the entry point to use.
See the following in the Linker Reference:

L6211E

--entry=location on page 2-58.

Ambiguous section selection. Object <objname> contains more than one


section.

This can occur when using the linker option --keep on an assembler object that
contains more than one AREA. The linker must know which AREA you want to keep.
To solve this, use more than one --keep option to specify the names of the AREAs
to keep, such as:
--keep boot.o(vectors) --keep boot.o(resethandler)

Note
Using assembler files with more than one AREA might give other problems
elsewhere, so this is best avoided.
L6213E

Multiple First section <object2>(<section2>) not allowed.


<object1>(<section1>) already exists.

Only one FIRST section is permitted.


L6214E

Multiple Last section <object2>(<section2>) not allowed.


<object1>(<section1>) already exists.

Only one LAST section is permitted.


L6215E

Ambiguous symbol selection for --First/--Last. Symbol <symbol> has more


than one definition.

See the following in the Linker Reference:

--first=section_id on page 2-71

--last=section_id on page 2-93.


L6216E

Cannot use base/limit symbols for non-contiguous section <secname>

The exception-handling index tables generated by the compiler are given the
section name .ARM.exidx. For more information, see Exception Handling ABI for
the ARM Architecture,
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038-/index.html.
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

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-9

Linker Errors and Warnings

* (+RO)
}
ER2 0x01000000
{
file2.o (+RO) ; from a C++ source
}
ER3 +0
{
* (+RW, +ZI)
}
}

This might produce the following error if exception-handling index tables are in
both file1.o and file2.o, because the linker cannot place them in separate
regions:
Error: L6216E: Cannot use base/limit symbols for non-contiguous section
.ARM.exidx

Also, the .init_array sections must be placed contiguously within the same
region for their base and limit symbols to be accessible.
The corrected example is:
LOAD_ROM 0x00000000
{
ER1 0x00000000
{
file1.o (+RO) ; from a C++ source
* (.ARM.exidx) ; Section .ARM.exidx must be placed explicitly,
; otherwise it is shared between two regions, and
; the linker is unable to decide where to place it.
*(.init_array) ; Section .init_array must be placed explicitly,
; otherwise it is shared between two regions, and
; the linker is unable to decide where to place it.
* (+RO)
}
ER2 0x01000000
{
file2.o (+RO) ; from a C++ source
}
ER3 +0
{
* (+RW, +ZI)
}
}

In the corrected example, the base and limit symbols are contained in .init_array
in a single region.
For more information, see the following in Using ARM C and C++ Libraries
and Floating-Point Support:

How C and C++ programs use the library functions on page 2-54

C++ initialization, construction and destruction on page 2-56.

L6217E

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect


to <symbol>. R_ARM_SBREL32 relocation to imported symbol

L6218E

Undefined symbol <symbol> (referred from <objname>).

Some common examples where this can occur are:

ARM DUI 0496C


ID080411

User Error. Somebody has referenced a symbol and has either forgotten to
define it or has incorrectly defined it.

Undefined symbol __ARM_switch8 or __ARM_ll_<xxxx> functions

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-10

Linker Errors and Warnings

The helper functions are automatically generated into the object file by the
compiler.
Note
An undefined reference error can, however, still be generated if linking
objects from legacy projects where the helper functions are in the h_xxx
libraries (h indicates that these are compiler helper libraries, rather than
standard C library code).
Re-compile the object or ensure that these libraries can be found by the
linker.

When attempting to refer to a function/entity in C from a function/entity in


C++. This is caused by C++ name mangling, and can be avoided by
marking C functions extern "C".

Undefined symbol thunk{v:0,-44} to Foo_i::~Foo_i() (referred from


Bar_i.o)

The symbol thunk{v:0,-44} to Foo_i::~Foo_i() is a wrapper function


round the regular Foo_i::~Foo_i().
Foo_i is a derived class of some other base class, therefore:

it has a base-class vtable for when it is referred to by a pointer to that


base class

the base-class vtable has an entry for the thunk

the destructor thunk is output when the actual (derived class)


destructor is output.
Therefore, to avoid the error, ensure this destructor is defined.
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 can occur where a region has been given an (optional) maximum length in
the scatter file, but this size of the code/data being placed in that region has
exceeded the given limit. This error is suppressible with --diag_suppress 6220.
For example, this might occur when using .ANYnum 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 Using the Linker:

Placing unassigned sections with the .ANY module selector on page 8-25.

See the following in the Linker Reference:

--any_contingency on page 2-8

--diag_suppress=tag[,tag,...] on page 2-47.


L6221E

ARM DUI 0496C


ID080411

<type1> region <regionname1> with <addrtype1> range [<base1>,<limit1>)


overlaps with <type2> region <regionname2> with <addrtype2> range
[<base2>,<limit2>).

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-11

Linker Errors and Warnings

This represents an incorrect scatter file. A non-ZI section must have a unique load
address and in most cases must have a unique execution address. This error might
be because a load region LR2 with a relative base address immediately follows a
ZI execution region in a load region LR1. From RVCT v3.1 onwards, the linker
no longer assigns space to ZI execution regions.
See the following in the Linker Reference:

L6222E

Scatter files containing relative base address load regions and a ZI


execution region on page 4-36.

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.
Note
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 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 occurs if the linker can not match an input section to any of the selectors in
your scatter file. You must correct your scatter file by adding an appropriate
selector.
See the following in Using the Linker:

Section placement with the linker on page 4-19.

L6225E

Number <str...> is too long.

L6226E

Missing base address for region <regname>.

L6227E

Using --reloc with --rw-base without --split is not allowed.

See the following in the Linker Reference:

--reloc on page 2-132

--rw_base=address on page 2-139

--split on page 2-154.


L6228E

Expected '<str1>', found '<str2>'.

L6229E

Scatter description <file> is empty.

L6230E

Multiple execution regions (<region1>,<region2>) cannot select <secname>.

L6231E

Missing module selector.

L6232E

Missing section selector.

L6233E

Unknown section selector '+<selector>'.

L6234E

<ss> must follow a single selector.

For example, in a scatter file:

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-12

Linker Errors and Warnings

:
* (+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 Using the Linker:

Placing sections with FIRST and LAST attributes on page 4-21.


See the following in the Linker Reference:

Syntax of an input section description on page 4-22.


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:
ROM_LOAD 0x00000000 0x4000
{
ROM_EXEC 0x00000000
{
vectors.o (Vect, +First) << error here
* (+RO)
}
RAM_EXEC 0x40000000
{
* (+RW, +ZI)
}
}

Some possible solutions are:

ensure vectors.o is specified on the linker command-line

link with --keep vectors.o to force the linker not to remove this, or switch
off this optimization entirely, with --noremove [not recommended]

[Recommended] Add the ENTRY directive to vectors.s, to tell the linker


that it is a possible entry point of your application such as, for example:
AREA Vect, CODE
ENTRY ; define this as an entry point
Vector_table
...

Then link with --entry Vector_table to define the real start of your code.
See the following in Using the Linker:

Placing sections with FIRST and LAST attributes on page 4-21.


See the following in the Linker Reference:

--entry=location on page 2-58

--info=topic[,topic,...] on page 2-80

--keep=section_id on page 2-89

--remove, --no_remove on page 2-134

Syntax of an input section description on page 4-22.


See the following in the Assembler Reference:

L6237E
ARM DUI 0496C
ID080411

ENTRY on page 6-65.

<objname>(<secname>) contains relocation(s) to unaligned data.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-13

Linker Errors and Warnings

L6238E

<objname>(<secname>) contains invalid call from '<attr1>' function to


'<attr2>' function <sym>.

This linker error is given where a stack alignment conflict is detected in object
code. The ABI for the ARM Architecture suggests that code maintains eight-byte
stack alignment at its interfaces. This permits efficient use of LDRD and STRD
instructions (in ARM Architecture 5TE and later) to access eight-byte aligned
double and long long data types.
Symbols such as ~PRES8 and REQ8 are Build Attributes of the objects:

PRES8 means the object PREServes eight-byte alignment of the stack

~PRES8 means the object does NOT preserve eight-byte alignment of the

stack (~ meaning NOT)

REQ8 means the object REQuires eight-byte alignment of the stack.

This link error typically occurs in two cases:

Where assembler code (that does not preserve eight-byte stack alignment)
calls compiled C/C++ code (that requires eight-byte stack alignment).

Where attempting to link legacy objects that were compiled with older tools
with objects compiled with recent tools. Legacy objects that do not have
these attributes are treated as ~PRES8, even if they do actually happen to
preserve eight-byte alignment.

For example:
Error: L6238E: foo.o(.text) contains invalid call from '~PRES8' function
to 'REQ8' function foobar

This means that there is a function in the object foo.o (in the section named .text)
that does not preserve eight-byte stack alignment, but which is trying to call
function foobar that requires eight-byte stack alignment.
A similar warning that might be encountered is:
Warning: L6306W: '~PRES8' section foo.o(.text) should not use the address
of 'REQ8' function foobar

where the address of an external symbol is being referred to.


There are two possible solutions to work-around this issue:

Rebuild all your objects/libraries.


If you have any assembler files, you must check that all instructions
preserve eight-byte stack alignment, and if necessary, correct them.
For example, change:
STMFD sp!, {r0-r3, lr} ; push an odd number of registers

to
STMFD sp!, {r0-r3, r12, lr} ; push even number of registers

The assembler automatically marks the object with the PRES8 attribute if all
instructions preserve eight-byte stack alignment, so it is no longer
necessary to add the PRESERVE8 directive to the top of each assembler file.

ARM DUI 0496C


ID080411

If you have any legacy objects/libraries that cannot be rebuilt, either


because you do not have the source code, or because the old objects must
not be rebuilt (for example, for qualification/certification reasons), then
you must inspect the legacy objects to check whether they preserve
eight-byte alignment or not.
Use fromelf -c to disassemble the object code. C/C++ code compiled with
ADS 1.1 or later normally preserves eight-byte alignment, but assembled
code does not.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-14

Linker Errors and Warnings

If your objects do indeed preserve eight-byte alignment, then the linker


error L6238E can be suppressed with the use of --diag_suppress 6238 on
the linker command line.
By using this, you are effectively guaranteeing that these objects are PRES8.
The linker warning L6306W is suppressible with --diag_suppress 6306.
See also Linker Error: L6238E: foo.o(.text) contains invalid call from '~PRES8'
function to 'REQ8' function foobar,
http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka3556.html.
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 ARM code to call Thumb code (and Thumb to ARM) 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.
IW means interworking, and ~IW means non-interworking.

L6242E

Cannot link object <objname> as its attributes are incompatible with the
image attributes.

In most cases the error message you receive is similar to:


Error: L6242E: Cannot link object foo.o as its attributes are incompatible
with the image attributes.
require four-byte alignment of eight-byte datatypes clashes with require
eight-byte alignment of eight-byte data types.

This occurs when you try to link object files built for the ADS ABI (ADS objects
or compiled with --apcs=/adsabi).
To avoid this error message you must re-compile the offending object files that
use the ADS ABI.
L6243E

Selector only matches removed unused sections - no section to be


FIRST/LAST.

All sections matching this selector have been removed from the image because
they were unused. For more information, use --info unused.
L6244E

<type> region <regionname> address (<addr>) not aligned on a <align> byte


boundary.

L6245E

Failed to create requested ZI section '<name>'.

L6248E

<objname>(<secname>) in <attr1> region '<r1>' cannot have <rtype>


relocation to <symname> in <attr2> region '<r2>'.
Example: L6248E: foo.o(areaname) in ABSOLUTE region 'ER_RO' cannot have
address/offset type relocation to symbol in PI region 'ER_ZI'.

See compiler error number 1359.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-15

Linker Errors and Warnings

See also What does "Error: L6248E: cannot have address type relocation"
mean?, http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka3554.html.
L6249E

Entry point (<address>) lies within multiple sections.

L6250E

Object <objname> contains illegal definition of special symbol <symbol>.

L6251E

Object <objname> contains illegal reference to special symbol <symbol>.

L6252E

Invalid argument for --xreffrom/--xrefto command: '<arg>'

L6253E

Invalid SYMDEF address: <number>.

L6254E

Invalid SYMDEF type : <type>.

The content of the symdefs file is invalid.


See the following in Using the Linker:

Symdefs file format on page 7-21.


L6255E

Could not delete file <filename>: <reason>

An I/O error occurred while trying to delete the specified file. The file was either
read-only, or was not found.
L6257E

<object>(<secname>) cannot be assigned to overlaid Execution region


'<ername>'.

This message indicates a problem with the scatter file.


See the following in the Linker Reference:

Chapter 4 Formal syntax of the scatter file.


L6258E

Entry point (<address>) lies in an overlaid Execution region.

This message indicates a problem with the scatter file.


See the following in the Linker Reference:

Chapter 4 Formal syntax of the scatter file.


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 the following in the Linker Reference:

Chapter 4 Formal syntax of the scatter file.


L6261E

Multiple execution regions with the same name (<regionname>) are not
allowed.

This message indicates a problem with the scatter file.


See the following in the Linker Reference:

Chapter 4 Formal syntax of the scatter file.


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.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-16

Linker Errors and Warnings

L6265E

Non-PI Section <obj>(<sec>) cannot be assigned to PI Exec region <er>.

This might be caused by explicitly specifying the (wrong) ARM-supplied library


on the linker command-line. Remove the explicit specification of the ARM
library or 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.


L6273E

Section <objname>(<secname>) has mutually exclusive attributes (READONLY


and ZI)

This message indicates a problem with the object file.


L6275E

COMMON section <obj1>(<sec1>) does not define <sym> (defined in


<obj2>(<sec2>))

Given a set of COMMON sections with the same name, the linker selects one of them
to be added to the image and discards all others. The selected COMMON section must
define all the symbols defined by any rejected COMMON section, otherwise, a symbol
which was defined by the rejected section now becomes undefined again. The
linker generates an error if the selected copy does not define a symbol that a
rejected copy does. This error is normally be caused by a compiler fault. Contact
your supplier.
L6276E

Address <addr> marked both as <s1>(from <sp1>(<obj1>) via <src1>) and


<s2>(from <sp2>(<obj2>) via <src2>).

The image cannot contain contradictory mapping symbols for a given address,
because the contents of each word in the image are uniquely typed as ARM ($a)
or THUMB ($t) code, DATA ($d), or NUMBER. It is not possible for a word to
be both ARM code and DATA. This might indicate a compiler fault. Contact your
supplier.
L6277E

Unknown command '<cmd>'.

L6278E

Missing expected <str>.

L6279E

Ambiguous selectors found for <sym> ('<sel1>' and '<sel2>').

L6280E

Cannot rename <sym> using the given patterns.

See the following in the Linker Reference:

L6281E

RENAME on page 3-5.

Cannot rename both <sym1> and <sym2> to <newname>.

See the following in the Linker Reference:

L6282E

ARM DUI 0496C


ID080411

RENAME on page 3-5.

Cannot rename <sym> to <newname> as a global symbol of that name exists


(defined) in <obj>).

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-17

Linker Errors and Warnings

See the following in the Linker Reference:

L6283E

RENAME on page 3-5.

Object <objname> contains illegal local reference to symbol <symbolname>.

An object cannot contain a reference to a local symbol, since local symbols are
always defined within the object itself.
L6285E

Non-relocatable Load region <lr_name> contains R-Type dynamic relocations.


First R-Type dynamic relocation found in <object>(<secname>) at offset
0x<offset>.

This error occurs where there is a PI reference between two separate segments, if
the two segments can be moved apart at runtime. When the linker sees that the
two sections can be moved apart at runtime it generates a relocation (an R-Type
relocation) that can be resolved if the sections are moved from their statically
linked address. However the linker faults this relocation (giving error L6285E)
because PI regions must not have relocations with respect to other sections as this
invalidates the criteria for being position independent.
L6286E

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect


to {symname|%s}. Value(<val>) out of range(<range>) for (<rtype>)

This can typically occur in handwritten assembler code, where the limited
number of bits for a field within the instruction opcode is too small to refer to a
symbol so far away. For example, for an LDR or STR where the offset is too large
for the instruction (+/-4095 for ARM state LDR/STR instruction). In other cases,
please make sure you have the latest patch installed from:
http://www.arm.com/support/downloads.
For more information see Value out of range for relocation,
http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka3553.html.

L6287E

Illegal alignment constraint (<align>) specified for <objname>(<secname>).

An illegal alignment was specified for an ELF object.


L6291E

Cannot assign Fixed Execution Region <ername> Load Address:<addr>. Load


Address must be greater than or equal to next available Load
Address:<load_addr>.

See the following in the Linker Reference:

L6292E

Execution region attributes on page 4-11.

Ignoring unknown attribute '<attr>' specified for region <regname>.

This error message is specific to execution regions with the FIXED attribute. FIXED
means make the load address the same as the execution address. The linker can
only do this if the execution address is greater than or equal to the next available
load address within the load region.
See the following in Using the Linker:

Using the FIXED attribute to create root regions on page 8-17.

See the following in the Linker Reference:

L6294E

Execution region attributes on page 4-11.

<type> region <regionname> spans beyond 32 bit address space (base <base>,
size <size> bytes).

The above error message relates to a problem with the scatter file.
L6295E

ARM DUI 0496C


ID080411

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect


to <symname> SBREL relocation requires image to be RWPI

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-18

Linker Errors and Warnings

L6296E

Definition of special symbol <sym1> is illegal as symbol <sym2> is


absolute.

See L6188E.
L6300W

Common section <object1>(<section1>) is larger than its definition


<object2>(<section2>).

This might indicate a compiler fault. Contact your supplier.


L6301W

Could not find file <filename>: <reason>

The specified file was not found in the default directories.


L6302W

Ignoring multiple SHLNAME entry.

There can be only one SHLNAME entry in an edit file. Only the first such entry is
accepted by the linker. All subsequent SHLNAME entries are ignored.
L6304W

Duplicate input file <filename> ignored.

The specified filename occurred more than once in the list of input files.
L6305W

Image does not have an entry point. (Not specified or not set due to
multiple choices.)

The entry point for the ELF image was either not specified, or was not set because
there was more than one section with an entry point linked-in. You must use linker
option --entry to specify the single, unique entry, for example:
--entry 0x0

or
--entry <label>

The label form is typical for an embedded system.


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 is most often caused by a missing or invalid value of the environment


variable ARMCC41LIB or by incorrect arguments to --libpath.
Set the the correct path with either the --libpath linker option or the ARMCCnnLIB
environment variable. The default path for a Windows installation is:
install_directory\RVCT\Data\...\lib

Ensure this path does not include:

ARM DUI 0496C


ID080411

\armlib

\cpplib

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-19

Linker Errors and Warnings

any trailing slashes (\) at the end. These are added by the linker
automatically.

Use --verbose or --info libraries to display where the linker is attempting to


locate the libraries.
See the following in the Linker Reference:

--info=topic[,topic,...] on page 2-80

--libpath=pathlist on page 2-96

--verbose on page 2-184.


See the following in Introducing the ARM Compiler toolchain:

L6311W

Toolchain environment variables on page 2-14.

Undefined symbol <symbol> (referred from <objname>).

See L6218E.
L6312W

Empty <type> region description for region <region>

L6313W

Using <oldname> as an section selector is obsolete. Please use <newname>


instead.

For example, use of IWV$$Code within the scatter file is now obsolete and can be
replaced with Veneer$$Code.
L6314W

No section matches pattern <module>(<section>).

Example:
No section matches pattern foo.*o(ZI).

This can occur for two possible reasons:

L6315W

The file foo.o is mentioned in your scatter file, but it is not listed on the
linker command-line. To resolve this, add foo.o to the link-line.

You are trying to place the ZI data of foo.o using a scatter file, but foo.o
does not contain any ZI data. To resolve this, remove the +ZI attribute from
the foo.o line in your scatter file.

Ignoring multiple Build Attribute symbols in Object <objname>.

An object can contain at most one absolute BuildAttribute$$... symbol. Only the
first such symbol from the object symbol table is accepted by the linker. All
subsequent ones are ignored.
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.

L6318W

<objname>(<secname>) contains branch to a non-code symbol <sym>.

This warning means that in the (usually assembler) file, there is a branch to a
non-code symbol (in another AREA) in the same file. This is most likely a branch
to a label or address where there is data, not code.
For example:

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-20

Linker Errors and Warnings

AREA foo, CODE


B bar
AREA bar, DATA
DCD 0
END

results in the message:


init.o(foo) contains branch to a non-code symbol bar.

If the destination has no name:


BL 0x200 ; Branch with link to 0x200 bytes ahead of PC

the following message is displayed:


bootsys.o(BOOTSYS_IVT) contains branch to a non-code symbol <Anonymous
Symbol>.

This warning can also appear when linking objects generated by GCC. GCC uses
linker relocations for references internal to each object. The targets of these
relocations might not have appropriate mapping symbols that permit the linker to
determine whether the target is code or data, so a warning is generated. By
contrast, armcc resolves all such references at compile-time.
L6319W

Ignoring <cmd> command. Cannot find section <objname>(<secname>).

For example, when building a Linux application, you might have:


--keep *(.init_array)

on the linker command-line in your makefile, but this section might not be present
when building with no C++, in which case this warning is reported:
Ignoring --keep command. Cannot find section *(.init_array)

You can often ignore this warning, or suppress it with --diag_suppress 6319
L6320W

Ignoring <cmd> command. Cannot find argument '<argname>'.

L6323W

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect


to <sym>. Multiple variants exist. Using the <type> variant to resolve
ambiguity

L6324W

Ignoring <attr> attribute specified for Load region <regname>.

This attribute is applicable to execution regions only. If specified for a Load


region, the linker ignores it.
L6325W

Ignoring <attr> attribute for region <regname> which uses the +offset form
of base address.

This attribute is not applicable to regions using the +offset form of base address.
If specified for a region, which uses the +offset form, the linker ignores it.
A region that uses the +offset form of base address inherits the PI, RELOC, or
OVERLAY attributes from either:

the previous region in the description

the parent load region if it is the first execution region in the load region.
See the following in the Linker Reference:

Inheritance rules for load region address attributes on page 4-18

Inheritance rules for execution region address attributes on page 4-19

Inheritance rules for the RELOC address attribute on page 4-20.


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.
ARM DUI 0496C
ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-21

Linker Errors and Warnings

See the following in the Linker Reference:

L6329W

Execution region attributes on page 4-11.

Pattern <module>(<section>) only matches removed unused sections.

All sections matching this pattern have been removed from the image because
they were unused. For more information, use --info unused.
See the following in Using the Linker:

Elimination of unused sections on page 5-4.

See the following in the Linker Reference:

L6330W

--info=topic[,topic,...] on page 2-80.

Undefined symbol <symbol> (referred from <objname>). Unused section has


been removed.

This means that an unused section has had its base and limit symbols referenced.
For more information, use --info unused.
See the following in Using the Linker:

Elimination of unused sections on page 5-4.

See the following in the Linker Reference:

--info=topic[,topic,...] on page 2-80.

L6331W

No eligible global symbol matches pattern <pat>.

L6332W

Undefined symbol <sym1> (referred from <obj1>). Resolved to symbol <sym2>.

L6334W

Overalignment <overalignment> for region <regname> cannot be negative.

See the following in Using the Linker:

L6335W

Overalignment of execution regions and input sections on page 8-56.

ARM interworking code in <objname>(<secname>) may contain invalid


tailcalls to ARM non-interworking code.

The compiler is able to perform tailcall optimization for improved code size and
performance. However, there is a problematic sequence for Architecture 4T code
where a Thumb IW function calls (by a veneer) an ARM IW function, which
tailcalls an ARM not-IW function. The return from the ARM not-IW function can
pop the return address off the stack into the PC instead of using the correct BX
instruction. The linker can warn of this situation and report the above warning.
Thumb IW tailcalls to Thumb not-IW do not occur because Thumb tailcalls with
B are so short ranged that they can only be generated to functions in the same ELF
section which must also be Thumb.
The warning is pessimistic in that an object might contain invalid tailcalls, but the
linker cannot be sure because it only looks at the attributes of the objects, not at
the contents of their sections.
To avoid the warning, either recompile your entire code base, including any user
libraries, with --apcs /interwork, or manually inspect the ARM IW function to
check for tailcalls (that is, where function calls are made using an ordinary branch
B instruction), to check whether this is a real problem. This warning can be
suppressed with --diag_suppress L6335W.

ARM DUI 0496C


ID080411

L6337W

Common code sections <o1>(<s1>) and <o2>(<s2>) have incompatible


floating-point linkage

L6339W

Ignoring RELOC attribute for execution region <er_name>.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-22

Linker Errors and Warnings

Execution regions cannot explicitly be given RELOC attribute. They can only gain
this attribute by inheriting from the parent load region or the previous execution
region if using the +offset form of addressing.
See the following in the Linker Reference:

L6340W

Execution region attributes on page 4-11.

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>

L6368E

<symbol> defined in <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>

L6370E

cpu <cpu> is not compatible with fpu <fpu>

See the following in the Linker Reference:

--cpu=name on page 2-38

--fpu=name on page 2-76.


L6371E

Adding attributes from cpu and fpu: <attrs>

L6372E

Image needs at least one load region.

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)

L6385W

Addition overflow on line <line>

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 Linker Reference:

ScatterAssert function and load address related functions on page 4-38.


L6388E

ScatterAssert expression <expr> failed on line <line>

See the following in the Linker Reference:

ScatterAssert function and load address related functions on page 4-38.

ARM DUI 0496C


ID080411

L6389E

Load Region <name> on line <line> not yet complete, cannot use operations
that depend on length of region

L6390E

Conditional operator (expr) ? (expr) : (expr) on line <line> has no :


(expr).

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-23

Linker Errors and Warnings

See the following in the Linker Reference:

About Expression evaluation in scatter files on page 4-30

Expression rules in scatter files on page 4-32.


L6404W

FILL value preferred to combination of EMPTY, ZEROPAD and PADVALUE for


Execution Region <name>.

See the following in the Linker Reference:

Execution region attributes on page 4-11.


L6405W

No .ANY selector matches Section <name>(<objname>).

L6406W

No space in execution regions with .ANY selector matching Section


<name>(<objname>).

This occurs if there is not sufficient space in the scatter file regions containing
.ANY to place the section listed. You must modify your scatter file to ensure there
is sufficient space for the section.
See the following in Using the Linker:

Placing unassigned sections with the .ANY module selector on page 8-25.
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 the following in Using the Linker:

Placing unassigned sections with the .ANY module selector on page 8-25.
L6408W

Output is --fpic yet section <sec> from <obj> has no FPIC attribute.

L6409W

Output is --fpic yet object <obj> has no FPIC attribute.

L6410W

Symbol <sym> with non STV_DEFAULT visibility <vis> should be resolved


statically, cannot use definition in <lib>.

L6411W

No compatible library exists with a definition of startup symbol <name>.

L6412W

Disabling merging for section <sec> from object <obj>, non R_ARM_ABS32
relocation from section <srcsec> from object <srcobj>

L6413W

Disabling merging for section <sec> from object <obj>, Section contains
misaligned string(s).

L6414E

--ropi used without --rwpi or --rw-base.

See the following in the Linker Reference:

--ropi on page 2-136

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-24

Linker Errors and Warnings

L6415E

--rw_base=address on page 2-139


--rwpi on page 2-140.

Could not find a unique set of libraries compatible with this image.
Suggest using the --cpu option to select a specific library.

See the following in the Linker Reference:

--cpu=name on page 2-38.


L6416E

Relocation <type> at <relclass>:<idx> <objname>(<secname>) cannot be


veneered as it has an offset <offset> from its target.

L6417W

Relocation #<rel_class>:<rel_number> in <objname>(<secname>) is with


respect to a reserved tagging symbol(#<idx>).

L6418W

Tagging symbol <symname> defined in <objname>(<secname>) is not


recognized.

L6419W

Undefined symbol <symbol> (referred from <objname>) imported.

L6420E

Ignoring <oepname>(<secname>:<secnum>) as it is not of a recognized type.

L6422U

PLT generation requires an architecture with ARM instruction support.

For the linker to generate PLT, you must be using a target that supports the ARM
instruction set. For example, the linker cannot generate PLT for a Cortex-M3
target.
L6423E

Within the same collection, section <secname> cannot have different sort
attributes.

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.

ARM DUI 0496C


ID080411

L6431W

Ignoring incompatible enum size attribute on Symbol <symbol> defined in


<object>(<section>).

L6432W

Ignoring incompatible enum size attribute on Object <object>(<section>).

L6433W

Ignoring incompatible enum size attribute on object <object>.

L6434W

Ignoring incompatible wchar_t size attribute on Symbol <symbol> defined in


<object>(<section>).

L6435W

Ignoring incompatible wchar_t size attribute on Section


<object>(<section>).

L6436W

Ignoring incompatible wchar_t size attribute on object <object>.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-25

Linker Errors and Warnings

L6437W

Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to


<armsym>. Branch relocation to untyped symol in object <armobjname>,
target state unknown.

L6438E

__AT section <objname>(<secname>) address <address> must be at least 4


byte aligned.

L6439W

Multiply defined Global Symbol <sym> defined in <objname>(<secname>)


rejected in favour of Symbol defined in <selobj>(<selsec>).

L6440E

Unexpected failure in link-time code generation

L6441U

System call to get maximum number of open files failed <error>.

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>.

L6447E

SHT_PREINIT_ARRAY sections are not permitted in shared objects.

L6448W

While processing <filename>: <message>

L6449E

While processing <filename>: <message>

L6450U

Cannot find library <libname>.

L6451E

<object> built permitting Thumb is forbidden in an ARM-only link.

L6452E

<object>(<section>) built permitting Thumb is forbidden in an ARM-only


link.

L6453E

<symbol> defined in <object>(<section>) built permitting Thumb is


forbidden in an ARM-only link.

L6454E

<symbol> defined in <object>(ABSOLUTE) built permitting Thumb is forbidden


in an ARM-only link.

L6455E

Symbol <symbolname> has deprecated ARM/Thumb Synonym definitions (by


<object1> and <object2>).

L6459U

Could not create temporary file.

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 the following in the Linker Reference:

--cpu=name on page 2-38.


L6464E

ARM DUI 0496C


ID080411

Only one of --dynamic_debug, --emit-relocs and --emit-debug-overlay-relocs


can be selected.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-26

Linker Errors and Warnings

See the following in the Linker Reference:

--dynamic_debug on page 2-50

--emit_debug_overlay_relocs on page 2-54

--emit_relocs on page 2-57.


L6467W

Library reports remark: <msg>

L6468U

Only --pltgot=direct or --pltgot=none supported for --base_platform with


multiple Load Regions containing code.

See the following in the Linker Reference:

--base_platform on page 2-18

--pltgot=type on page 2-121.


L6469E

--base_platform does not support RELOC Load Regions containing non RELOC
Execution Regions. Please use +0 for the Base Address of Execution Region
<ername> in Load Region <lrname>.

See the following in the Linker Reference:

--base_platform on page 2-18

Inheritance rules for the RELOC address attribute on page 4-20.


L6470E

PLT section <secname> cannot be moved outside Load Region <lrname>.

L6471E

Branch Relocation <rel_class>:<idx> in section <secname> from object


<objname> refers to ARM Absolute <armsym> symbol from object <armobjname>,
Suppress error to treat as a Thumb address.
Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to
<armsym>. Branch refers to ARM Absolute Symbol defined in <armobjname>,
Suppress error to treat as a Thumb address.

L6475W

IMPORT/EXPORT commands ignored when --override_visibility is not specified

The symbol you are trying to export, either with an EXPORT command in a steering
file or with the --undefined_and_export command-line option, is not exported
becuase of low visibility.
See the following in the Linker Reference:

--override_visibility on page 2-115

--undefined_and_export=symbol on page 2-175

EXPORT on page 3-2.


L6616E

Cannot increase size of RegionTable <sec_name> from <obj_name>

L6617E

Cannot increase size of ZISectionTable <sec_name> from <obj_name>

L6629E

Unmatched parentheses expecting ) but found <character> at position <col>


on line <line>

This message indicates a parsing error in the scatter file.


L6630E

Invalid token start expected number or ( but found <character> at position


<col> on line <line>

This message indicates a parsing error in the scatter file.


L6631E

Division by zero on line <line>

This message indicates an expression evaluation error in the scatter file.


L6632W

Subtraction underflow on line <line>

This message indicates an expression evaluation error in the scatter file.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-27

Linker Errors and Warnings

L6634E

Pre-processor command in
<max_size>

'<filename>'too long, maximum length of

This message indicates a problem with pre-processing the scatter file.


L6635E

Could not open intermediate file '<filename>' produced by pre-processor:


<reason>

This message indicates a problem with pre-processing the scatter file.


L6636E

Pre-processor step failed for '<filename>'

This message indicates a problem with pre-processing the scatter file.


L6637W

No input objects specified. At least one input object or library(object)


must be specified.

At least one input object or library(object) must be specified.


L6638U

Object <objname> has a link order dependency cycle, check sections with
SHF_LINK_ORDER

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.
This message indicates that the scatter file does not permit placing the PDT Table
first in the data area of the image.
To avoid the message, adjust your scatter file so that the PDT Table 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

L6643E

The virtual function elimination information in section <sectionname>


refers to the wrong section.

This message might indicate a compiler fault. Contact your supplier.


L6644E

Unexpectedly reached the end of the buffer when reading the virtual
function elimination information in section <oepname>(<sectionname>).

This message might indicate a compiler fault. Contact your supplier.


L6645E

The virtual function elimination information in section


<oepname>(<sectionname>) is incorrect: there should be a relocation at
offset <offset>.

This message might indicate a compiler fault. Contact your supplier.


L6646W

The virtual function elimination information in section


<oepname>(<sectionname>) contains garbage from offset <offset> onwards.

This message might indicate a compiler fault. Contact your supplier.


L6647E

The virtual function elimination information for


<vcall_objectname>(<vcall_sectionname>) incorrectly indicates that section
<curr_sectionname>(object <curr_objectname>), offset <offset> is a
relocation (to a virtual function or RTTI), but there is no relocation at
that offset.

This message might indicate a compiler fault. Contact your supplier.


L6649E

ARM DUI 0496C


ID080411

EMPTY region <regname> must have a maximum size.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-28

Linker Errors and Warnings

See the following in the Linker Reference:

Execution region attributes on page 4-11.


L6650E

Object <objname> Group section <sectionidx> contains invalid symbol index


<symidx>.

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>).

L6665W

Neither Lib$$Request$$armlib Lib$$Request$$cpplib defined, not searching


ARM libraries.

This reproduces the warning:


AREA Block, CODE, READONLY
EXPORT func1
;IMPORT || Lib$$Request$$armlib||
IMPORT printf
func1
LDR r0,=string
BL printf
BX lr
AREA BlockData, DATA
string DCB "mystring"
END

The linker has not been told to look in the libraries and so cannot find the symbol
printf.
This also causes an error:
L6218E: Undefined symbol printf (referred from L6665W.o).

If you do not want the libraries, then ignore this message. Otherwise, to fix both
the error and the warning uncomment the line:
IMPORT || Lib$$Request$$armlib||

ARM DUI 0496C


ID080411

L6679W

Data in output ELF section #<sec> '<secname>' was not suitable for
compression (<data_size> bytes to <compressed_size> bytes).

L6682E

Merge Section <oepname>(<spname>) is a code section

L6683E

Merge Section <oepname>(<spname>) has an element size of zero

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

L6688U

Relocation #<rel_class>:<rel_idx> in <oepname>(<spname>) references a


negative element
Copyright 2010-2011 ARM. All rights reserved.
Non-Confidential

4-29

Linker Errors and Warnings

L6689U

Relocation #<rel_class>:<rel_idx> in <oepname>(<spname>). Destination is


in the middle of a multibyte character

L6690U

Merge Section <spname> from object <oepname> has no symbols

L6703W

Section <er> implicitly marked as non-compressible.

L6707E

Padding value not specified with PADVALUE attribute for execution region
<regionname>.

See the following in the Linker Reference:

Execution region attributes on page 4-11.


L6708E

Could not process debug frame from <secname> from object <oepname>.

L6709E

Could not associate fde from <secname> from object <oepname>.

L6713W

Function at offset <offset> in <oepname>(<secname>) has no symbol.

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 the following in the Linker Reference:

--exceptions, --no_exceptions on page 2-61.


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>.

L6730W

Relocation #<rel_class>:<index> in <objname>(<secname>) with respect to


<name>. Symbol has ABI type <type>, legacy type <legacy_type>.

A change in the linker behavior gives warnings about strict compliance with the
ABI.
Note
The following example produces a warning only if linking with a toolchain that
is compliant with an earlier version of the Application Binary Interface (ABI).
The ARM Compiler v4.1 toolchain does not give this warning.
Example:
AREA foo, CODE, READONLY
CODE32
ENTRY
KEEP
func proc
NOP
ENDP
DCD foo
END

The warning is related to how the assembler marks sections for interworking.
Previously, the section symbol foo would be marked as ARM or Thumb code in
the ELF file. The DCD foo above would therefore also be marked as subject to
interworking.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-30

Linker Errors and Warnings

However, the ABI specifies that only functions are be subject to interworking and
marked as ARM or Thumb. The linker therefore warns that it is expecting DCD
<number>, which does not match the symbol type (ARM, or Thumb if you use
CODE16) of the area section.
The simplest solution is to move the data into a separate data area in the assembly
source file.
Alternatively, you can use --diag_suppress 6730 to suppress this warning.
L6731W

Unused virtual function elimination might not work correctly, because the
section referred to from <secname> does not exist.

L6733W

<objname>(<secname>) contains offset relocation from <lr1name> to


<lr2name>, load regions must be rigidly relative.

L6738E

Relocation #<rel_class>:<relocnum> in <oepname>(<secname>) with respect to


<wrtsym> is a GOT-relative relocation, but _GLOBAL_OFFSET_TABLE_ is
undefined.

Some GNU produced images can refer to the symbol named


_GLOBAL_OFFSET_TABLE_. If there are no GOT Slot generating relocations and the
linker is unable to pick a suitable address for the GOT base the linker issues this
error message.
L6739E

Version '<vername>' has a dependency to undefined version '<depname>'.

L6740W

Symbol '<symname>' versioned '<vername>' defined in '<symverscr>' but not


found in any input object.

L6741E

Versioned symbol binding should be 'local:' or 'global:'.

L6742E

Symbol '<symname>' defined by '<oepname>'.


version symbol '<defversym>'

L6743E

Relocation #<rel_class>:<index> in <oepname>(<spname>) with respect to


<symname> that has an alternate def. Internal consistency check failed

L6744E

Relocation #<rel_class>:<index> <oepname>(<spname>) with respect to


undefined symbol <symname>. Internal consistency check:

L6745E

Target CPU <cpuname> does not Support ARM, <objname>(<secname>) contains


ARM code

L6747W

Raising target architecture from <oldversion> to <newversion>.

Cannot not match to default

If the linker detects objects that specify the obsolete ARMv3, it upgrades these to
ARMv4 to be usable with ARM libraries.

ARM DUI 0496C


ID080411

L6748U

Missing dynamic array, symbol table or string table in file <oepname>.

L6751E

No such sorting algorithm <str> available.

L6753E

CallTree sorting needs Entry Point to lie within a CallTree Sort ER.

L6761E

Removing symbol <symname>.

L6762E

Cannot build '<type>' PLT entries when building a <imgtype>.

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>

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-31

Linker Errors and Warnings

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 (ARM or Thumb) the code runs in. Because the
GNU C library startup code is ARM code, you can safely ignore this warning, or
suppress it with --diag_suppress 6765.
L6766W

PLT entries for architecture 4T do not support incremental linking.

L6769E

Relocation #<rel_class>:<relocnum> in <oepname>(<secname>) with respect to


<wrtsym>. No GOTSLOTexists for symbol.

L6770E

The size and content of the dynamic array changed too late to be fixed.

L6771W

<oepname>(<secname>) contains one or more address-type relocations in RO


data. Making section RW to be dynamically relocated at run-time.

L6772W

IMPORT <symname> command ignored when building --sysv.

See the following in the Linker Reference:

--sysv on page 2-170

IMPORT on page 3-4.


L6774W

<objname>(<secname>) has debug frame entries of a bad length.

L6775W

<objname>(<secname>) has FDEs which use CIEs which are not in this
section.

L6776W

The debug frame in <objname>(<secname>) does not describe an executable


section.

L6777W

The debug frame in <objname>(<secname>) has <actual> relocations (expected


<expected>)

L6778W

The debug frame in <objname>(<secname>) uses 64-bit DWARF.

L6780W

<origvis> visibility removed from symbol '<symname>' through <impexp>.

L6781E

Value(<val>) Cannot be represented by partition number <part> for


relocation #<rel_class>:<rel_number> (<rtype>, wrt symbol <symname>) in
<objname>(<secname>)
Relocation #<rel_class>:<rel_number> in <objname>(<secname>) with respect
to <symname>. Value(<val>) Cannot be represented by partition number
<part> for relocation type >rtype>

L6782W

Relocation #<rel_class>:<relnum> '<rtype>' in <oepname> may not access


data correctly alongside <pltgot_type> PLT entries

L6783E

Mapping symbol #<symnum> '<msym>' in <oepname>(<secnum>:<secname>) defined


at the end of, or beyond, the section size (symbol offset=0x<moffset>,
section size=0x<secsize>)

This indicates that the address for a section points to a location at the end of or
outside of the ELF section. This can be caused by an empty inlined data section
and indicates there might be a problem with the object file. You can use
--diag_warning 6783 to suppress this error.
L6784E

ARM DUI 0496C


ID080411

Symbol #<symnum> '<symname>' in <oepname>(<secnum>:<secname>) with value


<value> has size 0x<size> that extends to outside the section.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-32

Linker Errors and Warnings

The linker encountered a symbol with a size that extends outside of its containing
section. This message is only a warning by default in the RVCT 2.2 SP1 and later
toolchains. Use --diag_warning 6784 to suppress this error.
L6785U

Symbol '<symname>' marked for import from '<libname>' already defined by


'<oepname>'

L6786W

Mapping symbol #<symnum> '<msym>' in <oepname>(<secnum>:<secname>) defined


at unaligned offset=0x<moffset>

L6787U

Region table handler '<handlername>' needed by entry for <regionname> was


not found.

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 occurs when scatter-loading takes place and an execution region is put in a
position where is overwrites partially or wholly another execution region (which
can be itself or another region).
For example, this works:
LOAD_ROM 0x0000 0x4000
{
EXEC1 0x0000 0x4000
{
* (+RO)
}
EXEC2 0x4000 0x4000
{
* (+RW,+ZI)
}
}

This generates the error:


LOAD_ROM 0x0000 0x4000
{
EXEC1 0x4000 0x4000
{
* (+RW,+ZI)
}
EXEC2 0x0000 0x4000
{
* (+RO)
}

and reports:
Error: L6788E: Scatter-loading of execution region EXEC2 will cause the
contents of execution region EXEC2 to be corrupted at run-time.

See the following in Using the Linker:

ARM DUI 0496C


ID080411

Chapter 8 Using scatter files.

L6789U

Library <library> member <filename> : Endianness mismatch.

L6790E

Relocation #<rel_class>:<relnum> in <objname>(<secname>) with respect to


<symname>. May not IMPORT weak reference through GOT-generating relocation

L6791E

Unknown personality routine <pr> at 0x<offset> <oepname>(<secname>).

L6792E

Descriptor at offset 0x<offset> <oepname>(<secname>).

L6793E

Expecting Landing pad reference at offset 0x<offset> in cleanup descriptor


<oepname>(<secname>).

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-33

Linker Errors and Warnings

L6794E

Expecting Landing pad reference at offset 0x<offset> in catch descriptor


<oepname>(<secname>).

L6795E

Expecting RTTI reference at offset 0x<offset> in catch descriptor


<oepname>(<secname>).

L6796E

Descriptor at offset 0x<offset> <oepname>(<secname>) overruns end of


section.

L6797E

Data at Offset 0x<offset> in exception table <oepname>(<secname>) overruns


end of section

L6798E

Expecting RTTI reference at offset 0x<offset> in Function Specification


descriptor <oepname>(<secname>).

L6799E

Expecting Landing Pad reference at offset 0x<offset> in Function


Specification descriptor <oepname>(<secname>).

A landing pad is code that cleans up after an exception has been raised. If the
linker detects old-format exception tables, it automatically converts them to the
new format.
This message does not appear unless you are using a later version of the linker
with an earlier version of the compiler.
L6800W

Cannot convert generic model personality routine at 0x<offset>


<oepname>(<secname>).

A personality routine is used to unwind the exception handling stack. If the linker
detects old-format exception tables then it automatically converts them to the new
format. This message indicates a fault in the compiler. Contact your supplier.
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 just a warning
with --diag_warning 6801 and subsequently suppressed completely if required
with --diag_suppress 6801
Where code, for example, in a.c uses the address of a non-interworking function
in t.c:
armcc -c a.c
armcc --thumb -c t.c
armlink t.o a.o --strict

reports:
Error: L6801E: a.o(.text) containing ARM code cannot use the address of
'~IW' Thumb function foo.

ARM DUI 0496C


ID080411

L6802E

Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to


<armsym>. Thumb Branch to non-Thumb symbol in <armobjname>(<armsecname>).

L6803W

Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to


<armsym>. Thumb Branch is unlikely to reach target
in<armobjname>(<armsym>).

L6804W

Legacy use of symbol type STT_TFUNC detected

L6805E

Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to


<armsym>. Branch to untyped Absolute symbol in <armobjname>, target state
unknown

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-34

Linker Errors and Warnings

L6806W

Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to


<othersym>. Branch to untyped symbol in <otherobjname>(<othersecname>),
ABI requires external code symbols to be of type STT_FUNC.

L6807E

Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to


<othersym>. Branch to untyped symbol in same section. State change is
required.

L6809W

Relocation <rel_class>:<idx> in <objname>(<secname>) is of deprecated type


<rtype>, please see ARMELF for ABI compliant alternative

L6810E

Relocation <rel_class>:<idx> in <objname>(<secname>) is of obsolete type


<rtype>

Relocation errors and warnings are most likely to occur if you are linking object
files built with previous versions of the ARM tools.
To show relocation errors and warnings use the --strict_relocations switch.
This option enables you to ensure ABI compliance of objects. It is off by default,
and deprecated and obsolete relocations are handled silently by the linker.
See the following in the Linker Reference:

--strict_relocations, --no_strict_relocations on page 2-160.


L6812U

Unknown symbol action type, please contact your supplier.

L6813U

Could not find Symbol <symname> to rename to <newname>.

See the following in the Linker Reference:

RENAME on page 3-5.


L6815U

Out of memory. Allocation Size:<alloc_size> System Size:<system_size>.

This error is reported by ARM Compiler toolchain v4.1 and later. It provides
information about the amount of memory available and the amount of memory
required to perform the link step.
This error occurs because the linker does not have enough memory to link your
target object. This is not common, but might be triggered for a number of reasons,
such as:

linking very large objects or libraries together

generating a large amount of debug information

having very large regions defined in your scatter file.


In these cases, your workstation might run out of virtual memory.
This issue might also occur if you use the FIXED scatter-loading attribute. The
FIXED attribute forces an execution region to become a root region in ROM at a
fixed address. The linker might have to add padding bytes between the end of the
previous execution region and the FIXED region, to generate the ROM image. The
linker might run out of memory if large amounts of padding are added when the
address of the FIXED region is far away from the end of the execution region. The
link step might succeed if the gap is reduced.
See the following in the Linker Reference:

Execution region attributes on page 4-11.

See the following in the Using the Linker:

ARM DUI 0496C


ID080411

Using the FIXED attribute to create root regions on page 8-17.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-35

Linker Errors and Warnings

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 64-bit version of the linker.


If you are using a 64-bit operating system, it is possible to make use of a
64-bit version of armlink. See the following in the Introducing the ARM
Compiler toolchain:

3.

Changing to the 64-bit linker on page 2-7.

Use the --no_debug linker option.


This command tells the linker to create the object without including any
debug information. See the following in the Linker Reference:

--debug, --no_debug on page 2-41.

Note
It is not possible to perform source level debugging if you use this option.
4.

Reduce debug information.


If you do not want to use the --no_debug option, there are other methods you
can use to try and reduce debug information. See the following in Using the
Compiler:

Methods of reducing debug information in objects and libraries on


page 6-20.
You can also use the fromelf utility to strip debug information from objects
and libraries that you do not need to debug. See the following in Using the
fromelf Image Converter:

--strip=option[,option,...] on page 4-70.

5.

Use partial linking.


You can use partial linking to split the link stage over a few smaller
operations. Doing this also stops duplication of the object files in memory
in the final link.
See the following in the Linker Reference:

--partial on page 2-119.

6.

Increase memory support on Windows operating systems.


On some Windows operating systems it is possible to increase the virtual
address space from 2GB (the default) to 3GB. For more information, see
the following Microsoft article:

Memory Support and Windows Operating Systems,


http://msdn.microsoft.com/en-us/windows/hardware/gg487508.aspx

7.

ARM DUI 0496C


ID080411

Use the --no_eager_load_debug linker option.


This option is available in RVCT 4.0 build 697 and later. It causes the linker
to remove debug section data from memory after object loading. This
lowers the peak memory usage of the linker at the expense of some linker
performance, because much of the debug data has to be loaded again when
the final image is written.
See the following in the Linker Reference:

--eager_load_debug, --no_eager_load_debug on page 2-52.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-36

Linker Errors and Warnings

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 accomodate the branch. Error message L6828 is
issued only if armlink is unable to lower the pool limit.
See the following in the Linker Reference:

--veneer_inject_type=type on page 2-181.


L6898E

Relocation #<rel_class>:<idx> in <objname>(<secname>) with respect to


<armsym>. ARM branch to non-ARM/Thumb symbol in
<armobjname>(<armsecname>).

L6899E

Existing SYMDEFS file '<filename> 'is read-only.

L6900E

Expected parentheses to specify priority between AND and OR operators.

L6901E

Expected symbol name.

L6902E

Expected a string.

L6903E

Cannot execute '<text>' in '<clause>' clause of script.

L6904E

Destination symbol of rename operation clashes with another rename.

L6905E

Source symbol of rename operation clashes with another rename.

L6906E

(This is the rename operation which it clashes with.)

L6907E

Expected an expression.

L6910E

Expected a phase name.

L6912W

Symbol <symname> defined at index <idx> in <oepname>(<secname>), has ABI


symbol type <symtype> which is inconsistent with mapping symbol type
<maptype>.

L6913E

Expected execution region name.

L6914W

option <spurious> ignored when using --<memoption>.

L6915E

Library reports error: <msg>

The message is typically one of the following:

Error: L6915E: Library reports error: scatter-load file declares no


heap or stack regions and __user_initial_stackheap is not defined.

or
Error: L6915E: Library reports error: The semihosting
__user_initial_stackheap cannot reliably set up a usable heap region
if scatter loading is in use

It is most likely that you have not re-implemented


__user_setup_stackheap() or you have not defined ARM_LIB_STACK or
ARM_LIB_HEAP regions in the respective scatter file.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-37

Linker Errors and Warnings

Note
__user_setup_stackheap() supersedes the deprecated function
__user_initial_stackheap().

See the following in Developing Software for ARM Processors:


Placing the stack and heap on page 3-13.
See the following in C and C++ Libraries and Floating-Point Support
Reference:
__user_setup_stackheap() on page 2-60
Legacy function __user_initial_stackheap() on page 2-70.
See the following in Using the Linker:

Reserving an empty region on page 8-52.

Error: L6915E: Library reports error: __use_no_semihosting was


requested but <function> was referenced.

Where <function> represents __user_initial_stackheap, _sys_exit,


_sys_open, _sys_tmpnam, _ttywrch, system, remove, rename,
_sys_command_string, time, or clock
This error can appear when retargeting semihosting-using functions, in
order to avoid any SVC/BKPT instructions being linked-in from the C libraries.
Ensure that no semihosting-using functions are linked in from the C library
by using:
#pragma import(__use_no_semihosting)

See the following in Using C and C++ Libraries and Floating-Point


Support:
Using the libraries in a nonsemihosting environment on page 2-36.
If there are still semihosting-using functions being linked in, the linker
reports this error.
To resolve this, you must provide your own implementations of these C
library functions.
The emb_sw_dev directory contains examples of how to re-implement some
of the more common semihosting-using functions. See the file retarget.c.
See Using C and C++ Libraries and Floating-Point Support for more
information on using semihosting-using C library functions.
Note
The linker does not report any semihosting-using functions such as, for
example, __semihost(), in your own application code.
To identify which semihosting-using functions are still being linked-in
from the C libraries:

Link with armlink --verbose --list err.txt

Search err.txt for occurrences of __I_use_semihosting


For example:

Loading member sys_exit.o from c_4.l.


reference : __I_use_semihosting
definition: _sys_exit

This shows that the semihosting-using function _sys_exit is linked-in


from the C library. To prevent this, you must provide your own
implementation of this function.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-38

Linker Errors and Warnings

Error: L6915E: Library reports error:__use_no_heap was requested,


but <reason> was referenced

If <reason> represents malloc, free, __heapstats, or __heapvalid, the use of


__use_no_heap conflicts with these functions.

Error: L6915E: Library reports error:__use_no_heap_region was


requested, but <reason> was referenced

If <reason> represents malloc, free, __heapstats, __heapvalid, or


__argv_alloc, the use of __use_no_heap_region conflicts with these
functions.

ARM DUI 0496C


ID080411

L6916E

Relocation #<rel_class>:<idx> in <oepname>(<spname>). R_ARM_CALL for


conditional BL instruction).

L6917E

Relocation #<rel_class>:<idx> in <oepname>(<spname>). R_ARM_JUMP24 for BLX


instruction.

L6918W

Execution region <ername> placed at 0x<eraddr> needs padding to ensure


alignment <spalign> of <oepname>(<spname>).

L6922E

Section <objname>(<secname>) has mutually exclusive attributes (READONLY


and TLS)

L6923E

Relocation #<rel_class>:<idx> in <oepname>(<spname>) with respect to


<symname>. TLS relocation <type> to non-TLS symbol in
<symobjname>(<symsecname>).

L6924E

Relocation #<rel_class>:<idx> in <oepname>(<spname>) with respect to


<symname>. Non-TLS relocation <type> to STT_TLS symbol in
<symobjname>(<symsecname>).

L6925E

Ignoring <token> attribute for region <region>. MemAccess support has been
removed.

L6926E

Relocation #<rel_class>:<idx> in <oepname>(<spname>) has incorrect


relocation type <rtype> for instruction encoding 0x<bl>.

L6927E

Relocation #<rel_class>:<idx> in <oepname>(<spname>) has incorrect


relocation type <rtype> for instruction encoding 0x<bl1><bl2>.

L6932W

Library reports warning: <msg>

L6935E

Debug Group contents are not identical, <name> with signature sym <sig>
from objects (<new>) and (<old>)

L6936E

Multiple RESOLVE clauses in library script for symbol '<sym>'.

L6937E

Multiple definitions of library script function '<func>'.

L6939E

Missing alignment for region <regname>.

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>

L6942E

Execution Region <ername> contains multiple <type>, sections:

L6966E

Alignment <alignment> for region <regname> cannot be negative.

L6967E

Entry point (<address>) points to a THUMB instruction but is not a valid


THUMB code pointer.

L6968E

Could not parse Linux Kernel version \"<kernel>\".

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-39

Linker Errors and Warnings

L6969W

Changing AT Section <name> type from RW to RO in <ername>.

L6971E

<objname>(<secname>) type <type> incompatible with <prevobj>(<prevname>)


type <prevtype> in er <ername>.

You might see this message when placing __at sections with a scatter file. For
example, the following code in main.c and the related scatter file gives this error:
int variable __attribute__((at(0x200000)));
LR1 0x0000 0x20000
{
ER1 0x0 0x2000
{
*(+RO)
}
ER2 0x8000 0x2000
{
main.o
}
RAM 0x200000 (0x1FF00-0x2000)
{
*(+RW, +ZI)
}
}

The variable has the type ZI, and the linker attempts to place it at address
0x200000. However, this address is reserved for RW sections by the scatter file.
This produces the error:
Error: L6971E: stdio_streams.o(.data) type RW incompatible with
main.o(.ARM.__AT_0x00200000) type ZI in er RAM.

To fix this change the address in your source code, for example:
int variable __attribute__((at(0x210000)));

See the following in Using the Linker:

Placing functions and data at specific addresses on page 8-18

Using __at sections to place sections at a specific address on page 8-37.


L6972E

<objname>(<secname>) with required base 0x<required> has been assigned


base address 0x<actual>.

L6973E

Error placing AT section at address 0x<addr> in overlay ER <ername>.

See the following in Using the Linker:

Using __at sections to place sections at a specific address on page 8-37.


L6974E

AT section <name> does not have a base address.

See the following in Using the Linker:

Using __at sections to place sections at a specific address on page 8-37.

ARM DUI 0496C


ID080411

L6975E

<objname>(<secname>) cannot have a required base and SHF_MERGE.

L6976E

<objname>(<secname>) cannot have a required base and SHF_LINK_ORDER.

L6977E

<objname>(<secname>) cannot be part of a contiguous block of sections

L6978W

<objname>(<secname>) has a user defined section type and a required base


address.

L6979E

<objname>(<secname>) with required base address cannot be placed in


Position Independent ER <ername>.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-40

Linker Errors and Warnings

L6980W

FIRST and LAST ignored for <objname>(<secname>) with required base


address.

L6981E

__AT incompatible with BPABI and SystemV Image types

See the following in Using the Linker:

Restrictions on placing __at sections on page 8-38.


L6982E

AT section <objname>(<spname>) with base <base> limit <limit> overlaps


address range with AT section <obj2name>(<sp2name>) with base <base2>
limit <limit2>.

See the following in Using the Linker:

Using __at sections to place sections at a specific address on page 8-37.


L6983E

AT section <objname>(<spname>) with required base address <base> out of


range for ER <ername> with base <erbase> and limit <erlimit>.

See the following in Using the Linker:

Using __at sections to place sections at a specific address on page 8-37.


L6984E

AT section <objname>(<spname>) has required base address <base> which is


not aligned to section alignment <alignment>.

See the following in Using the Linker:

Using __at sections to place sections at a specific address on page 8-37.


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 Using the Linker:

Using __at sections to place sections at a specific address on page 8-37.


See the following in Linker Reference:

ARM DUI 0496C


ID080411

--autoat, --no_autoat on page 2-17.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

4-41

Chapter 5
ELF Image Converter Errors and Warnings

The following topic describes the error and warning messages for the ELF image converter,
fromelf:

ARM DUI 0496C


ID080411

List of the fromelf error and warning messages on page 5-2.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

5-1

ELF Image Converter Errors and Warnings

5.1

List of the fromelf error and warning messages


The error and warning messages for fromelf are:
Q0105E

Base and/or size too big for this format, max = 0x<maxval>.

Q0106E

Out of Memory.

Q0107E

Failed writing output file.

Q0108E

Could not create output file '<filename>': <reason>

Q0119E

No output file specified.

Q0120E

No input file specified.

Q0122E

Could not open file '<filename>': <reason>

If <reason> is Invalid argument, this might be because you have invalid characters
on the command-line. For example, on Windows you might have used the escape
character \ when specifying a filter with an archive file:
fromelf --elf --strip=all t.a\(test*.o\) -o filtered/

On Windows, use:
fromelf --elf --strip=all t.a(test*.o) -o filtered/

See the following in Using the fromelf Image Converter:

Q0128E

input_file on page 4-48.

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/.
See the following in Using the fromelf Image Converter:

--output=destination on page 4-57.

Q0129E

Not a 32 bit ELF file.

Q0130E

Not a 64 bit ELF file.

Q0131E

Invalid ELF identification number found.

This error is given if you attempt to use fromelf on a file which is not in ELF
format, or which is corrupted. Object (.o) files and executable (.axf) files are in
ELF format.
Q0132E

Invalid ELF section index found <idx>.

Q0133E

Invalid ELF segment index found <idx>.

Q0134E

Invalid ELF string table index found <idx>.

Q0135E

Invalid ELF section entry size found.

Q0136E

ELF Header contains invalid file type.

Q0137E

ELF Header contains invalid machine name.

Q0138E

ELF Header contains invalid version number.

See Q0131E.
Q0147E

ARM DUI 0496C


ID080411

Failed to create Directory <dir>: <reason>

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

5-2

ELF Image Converter Errors and Warnings

If <reason> is File exists, this might be because you have specified a directory that
has the same name as a file that already exists. For example, if a file called
filtered already exists, then the following command produces this error:
fromelf --elf --strip=all t.a(test*.o) -o filtered/

The path separator character / informs fromelf that filtered is a directory.


See the following in Using the fromelf Image Converter:

Q0171E

--output=destination on page 4-57.

Invalid st_name index into string table <idx>.

See Q0131E.
Q0172E

Invalid index into symbol table <idx>.

See Q0131E.
Q0186E

This option requires debugging information to be present

The --fieldoffsets option requires the image to be built with dwarf debug tables.
Q0425W

Incorrectly formed virtual function elimination header in file

This might indicate a compiler fault, please contact your supplier.


Q0426E

Error reading vtable information from file

This might indicate a compiler fault, please contact your supplier.


Q0427E

Error getting string for symbol in a vtable

This might indicate a compiler fault, please contact your supplier.


Q0433E

Diagnostic style <style> not recognised

Q0440E

No relocation sections for <secname>

Q0447W

Unknown Diagnostic number (<num>)

Q0448W

Read past the end of the compressed data while decompressing section
'<secname>' #<secnum> in <file>

This 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 might indicate an internal fault. Contact your supplier.

ARM DUI 0496C


ID080411

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>'.

Q0454E

The ELF file '<filename>' is corrupt

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

5-3

Chapter 6
Librarian Errors and Warnings

The following topic describes the error and warning messages for the ARM Librarian, armar:

ARM DUI 0496C


ID080411

List of the armar error and warning messages on page 6-2.

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

6-1

Librarian Errors and Warnings

6.1

List of the armar error and warning messages


The error and warning messages for armar are:
L6800U

Out of memory

L6825E

Reading archive '<archive>' : <reason>

L6826E

'<archive>' not in archive format

L6827E

'<archive>': malformed symbol table

L6828E

'<archive>': malformed string table

L6829E

'<archive>': malformed archive (at offset <offset>)

L6830E

Writing archive '<archive>' : <reason>

L6831E

'<member>' not present in archive '<archive>'

L6832E

Archive '<archive>' not found : <reason>

L6833E

File '<filename>' does not exist

L6835E

Reading file '<filename>' : <reason>

L6836E

'<filename>' already exists, so will not be extracted

L6838E

No archive specified

L6839E

One of the actions -[<actions>] must be specified

L6840E

Only one action option may be specified

L6841E

Position '<position>' not found

L6842E

Filename '<filename>' too long for file system

L6843E

Writing file '<filename>' : <reason>

L6874W

Minor variants of archive member '<member>' include no base variant

Minor variants of the same function exist within a library. Find the two equivalent
objects and remove one of them.
L6875W

ARM DUI 0496C


ID080411

Adding non-ELF object '<filename>' to archive '<name>'

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

6-2

Chapter 7
Other Errors and Warnings

The following topic describes other error and warning messages that might be displayed by the
tools:

List of other error and warning messages on page 7-2.

Note
These error messages can be produced by any of the tools.
When the message is displayed, the X prefixing the message number is replaced by the appropriate
letter relating to the application. For example, the code X3900U, is displayed as L3900U by the linker
when you have specified an unrecognized option.

ARM DUI 0496C


ID080411

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

7-1

Other Errors and Warnings

7.1

List of other error and warning messages


Other error and warning messages that might be displayed by the tools are:
X3900U

Unrecognized option '<dashes><option>'.


<option> is not recognized by the tool. This could be because of a spelling error
or the use of an unsupported abbreviation of an option.

X3901U

Missing argument for option '<option>'.

X3902U

Recursive via file inclusion depth of <limit> reached in file '<file>'.

X3903U

Argument '<argument>' not permitted for option '<option>'.

Possible reasons include malformed integers or unknown arguments.

ARM DUI 0496C


ID080411

X3904U

Could not open via file '<file>'.

X3905U

Error when reading from via file '<file>'.

X3906U

Malformed via file '<file>'.

X3907U

Via file '<file>' command too long for buffer.

X3908U

Overflow: '<string>' will not fit in an integer.

X3910W

Old syntax, please use '<hyphens><option><separator><parameter>'.

X3912W

Option '<option>' is deprecated.

X3913W

Could not close via file '<file>'.

X3915W

Argument '<argument>' to option '<option>' is deprecated

X3916U

Unexpected argument for option '<dashes><option>'

X3917U

Concatenated options cannot have arguments: -<option> <arg>

X9905E

cannot use --apcs=/hardfp without floating point hardware

X9906E

cannot use --apcs=/hardfp with fpu <fpu_option>

X9907E

unable to select no floating point support

X9908E

--fpmode=none overrides --fpu choice

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

7-2

Appendix A
Revisions for the Errors and Warnings Reference

The following technical changes have been made to the Errors and Warnings Reference:
Table A-1 between Issue C Update 3 and Issue C Update 4

ARM DUI 0496C


ID080411

Change

Topics affected

Changes to the compiler messages:

added more detail for error 1558.

List of the armcc error and warning messages on


page 2-4

Changes to the assembler messages:

removed messages A1588E, A1589E,


A1597E, A1613E, A1614E, and A1646W,
because they are not reachable.

List of the armasm error and warning messages on


page 3-2

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

A-1

Revisions for the Errors and Warnings Reference

Table A-2 Differences between Issue C Update 2 and Issue C Update 3


Change

Topics affected

Added cross references to various messages.

List of the old-style armcc error and warning


messages on page 2-64

Changes to the assembler messages:

added messages A1903E, A1907W, A1908E,


and A1909E

added cross references to A1450W.

List of the armasm error and warning messages on


page 3-2

Changes to the linker messages:

added L6064E

corrected examples for L6216E

added L6815U

updated the description of L6002U

updated the description of L6310W

added cross references to various messages.

List of the armlink error and warning messages on


page 4-3

Changes to the fromelf messages:

added cross references to various messages.

List of the fromelf error and warning messages on


page 5-2

Table A-3 Differences between Issue B and Issue C


Change

Topics affected

Added the linker error L6058E.

List of the armlink error and warning messages on


page 4-3

Added the linker error L6828E.

List of the armlink error and warning messages on


page 4-3
Table A-4 Differences between Issue A and Issue B

ARM DUI 0496C


ID080411

Change

Topics affected

Added more detail for compiler errors 631 and 634.

List of the armcc error and warning messages on


page 2-4

Removed the assembler error A1590E.

List of the armasm error and warning messages on


page 3-2

Added more detail for the assembler warning


A1746W.

List of the armasm error and warning messages on


page 3-2

Added the Linker error L6065E.

List of the armlink error and warning messages on


page 4-3

Added more detail for linker errors L6220E,


L6221E, L6384E, L6915E, and L6971E.

List of the armlink error and warning messages on


page 4-3

Added cross-references for linker errors L6224E


and L6469E.

List of the armlink error and warning messages on


page 4-3

Added more detail for fromelf errors Q0122E,


Q0128E, and Q0147E.

List of the fromelf error and warning messages on


page 5-2

Copyright 2010-2011 ARM. All rights reserved.


Non-Confidential

A-2

You might also like