==================================================
description
-----------
this realview compilation tools (rvct) 4.0 patch #1 is intended for use with realview developer 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 previous (3.1 or earlier) 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.
the client licensing code for windows and linux executables is updated from flexnet 10.8.5.0 to flexnet 10.8.7.0.
this patch is now additionally validated for use on windows xp sp3.
os platforms supported
----------------------
this patch has been tested on the following supported platforms:
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
installation instructions
-------------------------
to install the patch carry out the following steps:
1) 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.
2) extract all the files from the zip file into a temporary directory.
3) copy the include directory from the temporary directory to replace your
existing include directory. the default location is:
c:\program files\arm\rvct\data\4.0\400\include\
4) copy the lib directory from the temporary directory to replace your
existing lib directory. the default location is:
c:\program files\arm\rvct\data\4.0\400\lib\
5) copy the win_32-pentium directory from the temporary directory to replace
your existing win_32-pentium directory. the default location is:
c:\program files\arm\rvct\programs\4.0\400\win_32-pentium\
if necessary change the unzip destination directory to match the location
where you have installed the tools.
6) the updated tools should now have been installed. to confirm this,
open a dos command prompt window and enter:
armcc --vsn
armlink --vsn
armasm --vsn
fromelf --vsn
armar --vsn
the version returned should be rvct 4.0 build 471.
changes from previous releases
------------------------------
rvct 4.0 patch build 471 includes the following corrections and improvements since rvct 4.0 build 400:
compiler (armcc):
--------
the compiler now works around cortex-m3 erratum 602117 involving ldrd when the base register is also the first loaded register. the c/c libraries have also been rebuilt to avoid these instructions.
some code size and performance improvements have been made to the profile guided optimization mechanisms.
some code-generation and optimization improvements have been made for neon compilation.
some compatibility improvements have been made when compiling for --gnu and --arm-linux, for example:
- the compiler now correctly translates the -mfpu=neon and -fno-inline options in gcc translation mode.
- better approximate translations for the gcc floating-point optimization options have been added.
- some aliases for gcc command-line options were not correctly translated
- the compiler now correctly recognises glibc setjmp variants with --library_interface=aeabi_glibc and generates correct code in the presence of these calls.
- the compiler did not correctly allow default symbol visibility to be overridden in arm linux modes.
- the gnu __builtin_va_... functions are now implemented
- when configuring the compiler for arm linux based on an existing gnu toolchain all paths are now checked for libraries that were specified by name only.
- the gnu builtins __builtin_powi, __builtin_powif and __builtin_powil are now translated correctly.
some corrections have been made to the dwarf debug information generated by the compiler.
some further ti c55x intrinsics have been added into c55x.h.
the compiler can now generate code that will catch a bad_typeid exception thrown from use of the typeid operator.
for embedded assembler (__asm) functions marked as __weak, the compiler no longer generates a weak reference from c code, to ensure the definition is not lost. a weak symbol is still generated in the assembler output.
in addition to recognizing files with extension .i as preprocessed c source (i.e. source for which preprocessing should be suppressed), the compiler now recognizes .ii as indicating preprocessed c source.
some code generation issues have been addressed.
the compiler is now able to recognise more opportunities to use pkhtb instructions with asr shift and pkhbt instructions with lsl shift.
the compiler now generates ldrd/strd for volatile accesses of 64 bit data types.
the use of __declspec on classes is no longer ignored.
some possible causes of the following internal faults have been fixed:
0x15f950, 0x298170, 0x3dd550, 0x44784c, 0x4ccb3b, 0x9c3725, 0x974f57, 0xafee20, 0xeeed90, 0xf28d9c.
c/c libraries:
---------------
the variant of float.h provided for use with arm linux in the $rvct40inc/arm_linux directory has been changed. by default, this defines flt_rounds to 1 meaning round-to-nearest, and this corresponds to gcc behaviour. however, this is not in strict accordance with iso c. to conform to the standard, the flt_rounds must expand to an expression whose value changes with the floating point environment. an alternative definition of flt_rounds is provided if you need this strict iso c behaviour. this is enabled by defining the macro __armcc_strict_flt_rounds when compiling your source code. this variant of the macro uses a call to fegetround(), so you must link with the glibc math library (libm.so or libm.a) if you use this variant.
the variant of float.h provided for use with arm linux incorrectly referred to __ieee_status().
arm_neon.h no longer defines __const as a macro, which prevented it from being used as a synonym for const in --gnu mode.
a wrapper for the glibc header file sys/cdefs.h has been added to $rvct40inc/arm_linux. this is to avoid use of the gcc 4.3 builtins __builtin_va_arg_pack and __builtin_va_arg_pack_len, which are not supported by armcc.
in the stl implementation supplied with rvct,
- and
_bool is no longer predefined in c mode, as this breaks c code that helpfully uses "typedef bool _bool;". it is still defined in c mode, as documented.
assembler (armasm):
---------
a new --cpu option for v7-a security extensions has been added ("--cpu=7-a.security") which allows the use of smc (formerly smi) instruction when assembling for the v7-a architecture.
a regression in the behaviour of armasm --diag_warning=1722 to downgrade the error for labels in it blocks when assembling for thumb-2 has been fixed.
conditional bkpt instructions are now faulted within thumb it blocks because bkpt is always unconditional only.
the assembler no longer incorrectly diagnoses some valid arm data-processing instructions as unpredictable or deprecated.
the assembler is now able to warn if an attr directive has not been applied.
a problem with the use of reloc with a symbol defined by equ has been fixed.
linker (armlink):
------
"linker feedback" was failing with main() being reported as unused because the call from the c library initialization code to main() was not being detected. this is now fixed.
the linker's callgraph output could show a called function as being "unused" when there were non-branch relocations in the section and more than one symbol at the same address as the destination symbol. this has been fixed.
the linker callgraph now correctly detects tail-calls that have been transformed into a nop by the linker. previously these calls could be missed which would cause the tail-called function to be marked as unused.
sections from object files containing a "." are now handled correctly in scatter-files, for example, "foo.bar.o" no longer matches with "foo.o".
the linker can now generate warning l6784e when data extends to outside the given section.
the linker is now able to report error l6221e for execution regions in scatterfiles which overlap with other regions (such as overlay regions) that do not have region table entries.
armlink internal fault 0xb4652d no longer occurs when the presence of arm or thumb code in the input objects does not match the architecture derived from the build attributes of the image.
when building linux applications, .note.abi-tag sht_note sections from objects are now processed in the same way as .note.abi-tag sections from shared objects.
a new command line option --gnu_linker_defined_syms has been added. this option is enabled when --arm_linux is in use, otherwise it is off by default.
when this option is on the linker will support the gnu equivalent of input section symbols:
__start_sectionname (rvct equivalent=sectionname$$base) - address of the start of the consolidated section called sectionname.
__stop_sectionname (rvct equivalent=sectionname$$limit) - address of the byte beyond the end of the consolidated section called sectionname
note that a reference to sectionname by a gnu input section symbol is sufficient for armlink to prevent the section from being removed as unused. a reference by a rvct input section symbol is not sufficient to prevent the section from being removed as unused.
a new command line option --[no_]add_shared_references has been added. this option is enabled when --arm_linux is in use, otherwise it is off by default.
this option affects the behaviour of the --sysv mode. if --add_shared_references is set then when linking an application the linker will add references from shared libraries. the linker will give an undefined symbol error message if these references are not defined by the application or by some other shared library. these references can be satisfied by static 'ar' format libraries.
note: a reference from a shared library can only be satisfied by a symbol definition with protected or default visibility, as these are the only symbols that can be exported into dynamic symbol tables. the linker will give an error message if the symbol reference is resolved by a symbol with hidden or internal visibility.
a default visibility symbol that is given a local symbol version by a symbol versioning script, is no longer exported to the dynamic symbol table unless it is required for relocation. in previous armlink versions, the symbol would be exported with a local version.
for each shared library that a program depends on the linker will add a dt_needed tag into the dynamic segment. a program loader such as ld.so will read these dependencies and automatically load these shared libraries. the order that the libraries is loaded in is sometimes significant so the linker will match the order of dt_needed tags with the order the libraries appear on the command line. in the release version of 4.0 this order can sometimes come out incorrect with the library intended for position 2 in the list coming in position 3. this should only be significant if the library in position 2 needs to preempt symbols in the library in position 3. this problem has now been fixed.
elf format convertor (fromelf):
--------------------
"fromelf --compare sections" no longer fails with internal fault 0x0ad3f4 when comparing two files whose zero-initialised data sections differed in length.
an issue in fromelf which resulted in a crash when processing libraries (containing multiple objects) has been resolved.
fromelf -ec on executable images now shows correct offsets in references from exception tables to code.