=============================================
description
-----------
this realview compilation tools (rvct) 4.0 web patch #5 build 697 is intended
for use with realview development suite (rvds) 4.0 products. it can be used to
update any rvds 4.0 standard, professional or evaluation installation, whether
previously patched or an original installation. it is not compatible with other
releases of rvct/rvds or keil mdk products.
this patch consists of updated rvct/rvds 4.0 compiler, linker, assembler,
fromelf, and armar program executables; updated include files and updated c/c
libraries.
new enhancements in this release - key features
-----------------------------------------------
[changes made to improve compatibility with other toolchains]
* modifications have been made to the gcc command line translation feature to
improve compatibility. in particular, when using gcc command line translation
the default optimization level is now set at -o0, and not the normal armcc
default of -o2. [727559]
* the compiler now defines the __builtin_bswap32 and __builtin_bswap64
intrinsics for compatibility with gcc. these reverse the bytes in a 32-bit and
64-bit word respectively. [714828]
* the compiler now warns with diagnostic #29-d if the expression in an #elif
directive is missing, even if the #elif would not normally be evaluated because
of a previous successful #if or #elif. this warning is not output when emulating
versions of gcc earlier than 4.4 (note that the default in gcc emulation mode is
to emulate gcc 4.2). [728705]
* when linking with --sysv (as implied by --arm_linux) the linker will set the
sh_link field of the .arm.exidx section to the index of the .text section. this
improves interoperability with objcopy. [723436]
* in gnu mode, a reference to c::c in an expression context, where c is a class
name, is now treated as a call to the constructor. this more closely reflects
gcc behaviour. [726327]
* the --gnu_defaults option now also sets --no_implicit_include by default.
[726255]
[improvements to math libraries]
* the handling of error cases in the maths library (mathlib) has historically
been implemented by rvct in a way that is inconsistent with annex f of the c99
standard. c99-compliant error handling is now supported as an alternative,
although the historical rvct behaviour is still used by default. the c99
behaviour can be enabled by importing the symbol __use_c99_matherr in your
program. specifically affected functions are atan2, atanh, hypot, lgamma, log,
log10, log2, log1p, pow, tgamma and their single-precision counterparts.
[720506]
[general enhancements]
* cortex-a5 is now listed as a compiler supported cpu. [726103]
* the linker can now remove unused sections when building dlls and shared
libraries. [720889]
* diagnostics for deprecated registers in instructions are only emitted by the
assembler when assembling for a cpu with 32-bit thumb instructions. to enable
these on other architectures use the option --diag_warning=1745,1786,1788,1789.
[728201]
* to track a change in the arm architecture reference manual, the assembler
allows the '#' character seen prior to immediate operands to be omitted. warning
a1865w is emitted when this syntax is used to allow detection of source code
that may not assemble with other (or older) assemblers. [365430]
* the new assembler option --[no_]execstack option can be used to build a
.note.gnu-stack section describing whether the code requires an executable
stack. [725813]
* the compiler now ignores a 3-byte byte order mark (bom) at the start of source
files. [725395]
* since rvct 3.0 the compiler has implemented the resolution to c core issue
#446 which requires use of a temporary to hold the result of a conditional
expression whose result is a class rvalue. because this can (in rare cases)
change the behaviour of programs, it is now possible to diagnose cases where
such a temporary is introduced, by use of a new remark #2816. this can be
enabled with --remarks or --diag_warning=2816. [726389]
* new compiler options have been added to specify the directory for output
files. --output_dir specifies the output directory generally, including for .o
files. the directory for assembler output can be specified with --asm_dir, for
dependency output with --depend_dir, and for --list output with --list_dir. if
these options are not used the corresponding output is put in the directory
specified by --output_dir, or if that is not specified, in the default location
(e.g. the current directory). [724352]
* it is now possible to produce makefile dependencies and preprocessed source
output in a single step, using the combination --md -e (or --md -p to suppress
line number generation). [606117]
* it is now possible to take source code from the standard input stream in
combination with other files, when performing a link step. for example, the
following are now permitted:
armcc -o output.axf - object.o mylibrary.a
armcc -o output.axf --c90 source.c -
the behaviour of "armcc -o test.axf -" is also changed to be consistent with the
above, such that this will compile the source provided on standard input and
link this into test.axf. combining standard input with other source files when
not linking is still not permitted, and this will still produce error c3078e.
[723225]
* the linker has a new option --[no_]import_unresolved. the default is
--import_unresolved. when linking a shared object with --sysv --shared,
unresolved symbols are normally imported rather than causing an error to be
generated. when --no_import_unresolved is specified, unresolved references from
object files explicitly listed on the linker command line will cause an
undefined symbol error rather than being imported. [727609]
* a new linker option --no_eager_load_debug has been added, which instructs the
linker not to retain debug section data in memory after object loading. this
lowers the peak memory usage of the linker. partial linking also benefits from
the lower memory usage. [722351]
* to support non-executable stacks, the linker now generates the appropriate
pt_gnu_stack program header when --sysv (as implied by --arm_linux) is selected.
the linker will derive the executable status of the stack from the presence of
the .note.gnu-stack section in input objects. the new, associated option is
--[no_]execstack. [725212]
* the c library wide-character ctype functions (isw*, towupper, towlower) are
now up to date with unicode 5.0. [726104]
* fromelf now correctly preserves dt_relcount. [727579]
deprecated functionality
------------------------
* use of the | operator as a synonym for :or: is deprecated by the assembler as
it causes problems in variable substitution in the source line. [727348]
os platforms
------------
this patch has been tested on the following supported platforms:
windows 7
windows xp sp2, 32-bit & 64-bit
windows xp sp3, 32-bit
windows vista business edition sp1, 32-bit & 64-bit
windows vista enterprise edition sp1, 32-bit & 64-bit
windows server 2003 32-bit & 64-bit
red hat linux enterprise 4 for x86, 32-bit & 64-bit
red hat linux enterprise 5 for x86, 32-bit & 64-bit
solaris for sparc 10
in addition, the patch has been tested on the following non-supported platforms:
windows 2000 sp4
suse linux 9.2
ubuntu linux 8.10
installation instructions
-------------------------
to install the patch carry out the following steps:
1) extract the contents of the archive into a temporary directory.
2) ensure that you are currently using rvct 4.0. to do this, type:
armcc --vsn
and ensure that this returns rvct 4.0 build 400 or later. then type:
which armcc
this will tell you the subdirectory that armcc is located in.
3) copy the include directory from the temporary directory to replace your
existing include directory. the existing directory can be located by the
rvct40inc environment variable, e.g.:
> echo $rvct40inc
~/arm/rvct/data/4.0/400/include/
4) copy the lib directory from the temporary directory to replace your existing
lib directory. the existing directory can be located by the rvct40lib
environment variable, e.g.:
> echo $rvct40lib
~/arm/rvct/data/4.0/400/lib/
5) copy the linux-pentium directory from the temporary directory to replace your
existing linux-pentium directory. the existing directory can be located by the
rvct40bin environment variable, e.g.:
> echo $rvct40bin
~/arm/rvct/programs/4.0/400/linux-pentium/
6) the updated tools should now have been installed. to confirm this, type:
armcc --vsn
armlink --vsn
armasm --vsn
fromelf --vsn
armar --vsn
the version returned should be rvct 4.0 build 697.
8) after unzipping the executables, you may find that they cannot be executed
because the unix permissions have been reset. the workaround is to set the
execute permissions for the user with, e.g.:
chmod u x armcc
-------------------------------------------------------------------------
this release includes the following corrections since rvct 4.0 build 650:
-------------------------------------------------------------------------
compiler (armcc):
-----------------
* when compiling with c exceptions enabled (--exceptions), function exception
specifications containing reference types e.g. void g(void) throw(int&) {...},
caused a compiler internal fault. this has been fixed. [727197]
* the documentation for --list incorrectly stated that when used with multiple
source files it would generate a listing for the first file. in fact it would
generate a listing for the last file, but generate the listing file name from
the first source file name. the compiler now generates listings for all source
files, writing each to a separate listing file whose name is generated from the
corresponding source file name. [728254]
* #pragma unroll(1) now has the correct effect on the degree of unrolling.
[727935]
* #pragma push/pop now correctly push and pop the current structure alignment as
set by #pragma pack. [727532]
* when using a custom declaration of va_list that was type-incompatible with the
standard declaration of the type in stdarg.h (as given by the arm procedure call
standard), the compiler would give error #256 to indicate that the type was
being redeclared incompatibly when used with the --gnu option. this is now
fixed. [727506]
* in certain situations calls to fmod with arguments that would set errno were
incorrectly removed. this is now fixed. [726236]
* functions and data marked with __attribute__((used)) are now tagged in the
object to avoid removal by linker unused section elimination. [724019]
* the compiler was optimising negated floating-point comparisons into the
opposite comparison (for example !(a < b) was being converted to (a >= b)) for
all floating point models (as set by --fpmode). this has been changed so the
optimisations are only applied when the fp model indicates that we are not
interested in nans (by default, --fpmode std, --fpmode fast). [725146]
* a silent code generation fault where in certain circumstances at -o3 -otime a
cast from unsigned to signed integer inside a loop test was discarded has been
fixed. [726234]
* where the compiler option --locale was used, production of a warning message
could sometimes reset the current locale, causing incorrect interpretation of
multibyte character sequences in source code. this is now fixed. [725074]
* when c/c source code was encoded using some multibyte encodings
(specifically, ones in which ordinary ascii characters can occur as subsequent
bytes of a multibyte character, so including shift-jis, but not utf-8), use of
the '#' stringization operator in macro expansions could produce unexpected
results. this is now fixed. [725874]
* out-of-line instances of inline functions which have been given an explicit
section attribute using __attribute__((section("name"))) could generate link
time errors. this is now fixed. [723920]
* link-time code generation could in some cases fail to emit a symbol for a "c2"
constructor or "d2" destructor. this is now fixed. [728099]
* use of makefile dependency generation options could unnecessarily prevent the
compiler reusing precompiled header (pch) files, with warning #629-d. the pch
files are now reused. [728897]
* where a friend definition in a template used a variable of the same name as a
variable in the function it was called from (i.e. first instantiated from) the
compiler could generate a spurious remark, if --remarks was used. this is now
fixed. [728548]
* formerly, the compiler could fail to give dynamic linkage to an imported
inline function of a dllimport class which also had a virtual function. this is
now fixed. [727752]
* some causes of the following internal faults have been fixed: 0x87ecef,
0xcc3958, 0x87ecef, 0xa05965, 0xbfdfa3, 0x9be513, 0xa85545, 0x56e87b, 0x63faa5,
0xafee20, 0xfe1945 [728236, 685024, 727558, 589466, 726944, 726750, 726300,
725422, 728252, 728260]
assember (armasm):
------------------
* a problem causing a1201e to be reported incorrectly is now fixed.
[722855]
linker (armlink):
-----------------
* the linker can miscalculate the base address of execution regions following 2
or more execution regions with the overlay attribute. the problem occurs when
the base address of the preceding overlay regions is not the same. this is now
fixed. [725446]
* the linker no longer reports l6967e when linking the test_mla cortex-m3
example. [725351]
* to better match the behaviour of the gnu tools, when --arm_linux mode is
selected the linker will now keep a section if a weak reference is made to the
section from a used section. [726778]
* when reading a symdefs file containing a thumb symbol. the linker can produce
a spurious warning: l6307w if thumb code branches to the symbol. this is now
fixed. [726869]
* the linker will give error message l62551 when an object contains an illegal
reference to a $sub$$symbol or error message l6250 when there is a definition of
$super$$symbol. if a relocation is made to either of these illegal symbols the
linker will produce an internal fault 0x3ae533. the internal fault is now fixed.
[726491]
* when an object file contains a definition of $sub$$symbol, another object file
contains a definition of symbol and a library contains a definition of symbol,
the linker will incorrectly search the library for symbol, load the member and
end up with a multiple symbol definition error. this is now fixed. [726487]
* when invoked with --arm_linux, armlink would always report diagnostic l6029e
(when a relocation in an input object file was with respect to an invalid or
missing symbol) as a warning and not permit its severity to be downgraded to a
remark or suppressed entirely. this is now fixed. [725951]
c/c libraries:
----------------
* the scanf family of functions used to report a parse failure when asked to
parse a c99 hexadecimal float literal representing zero (e.g. "0x0.0p0"). they
now parse it correctly. [726414]
* a change made in a previous rvct 4.0 patch release introduced a new issue
whereby the c library stdio cleanup function _terminateio() would deadlock
through trying to lock the same mutex twice. this is now fixed. [726232]
* in line with the resolution of c standard library issue #109, binder1st and
binder2nd in
non-const reference. [724709]
* an issue has been fixed concerning incorrect runtime behaviour in an uncommon
use case. when rethrowing an exception, if a destructor invoked during stack
unwinding rethrew again and caught the same exception object, the first rethrow
would then continue incorrectly (such as restoring registers incorrectly).
[728231]
librarian (armar):
------------------
* when armar -d is used to delete a non-existent member, the error message
l6831e is now a warning. [727938]
elf format convertor (fromelf):
-------------------------------
* the fromelf --elf copying option will incorrectly translate the version needed
entry for a symbol definition to the global version. this can affect arm linux
applications that access global data in shared libraries with version
definitions. this is now fixed. [727621]
* the fromelf option "--bincombined" used to incorrectly report an error when
the uninitialized part of one elf segment overlapped the initialised part of
another. this is now fixed. [725745]