description
this realview compilation tools (rvct) 4.0 web patch #6 build 771 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, include files and c/c libraries.
enhancements since rvct 4.0 build 697
changes made to improve compatibility with other toolchains
- the aeabi specifies that volatile bitfields are accessed as the size of their container type. some versions of gcc will instead use the smallest access size that contains the entire bitfield. the compiler switch --narrow_volatile_bitfields has been added to emulate this non-aeabi compliant behavior. [731902]
- a compiler command-line option (--configure_gcc_version) has been added that takes a gcc version number of the form x.y.z and uses this as the gcc version to report. this option can also be used when configuring against a gcc installation to override the reported version, however it will warn if the user override is older than the version reported by the gcc queried. [729761]
- the compiler now has an option --[no_]execstack to generate a .note.gnu-stack section marking the stack as executable or non-executable. if this option is not used then the note section is not generated. the option --arm_linux implies --no_execstack. [725814]
- when --gnu is specified, the compiler will now use unsigned quantities for enums which contain no negative values. [728146]
- the c libraries now provide the posix_memalign() function to allocate aligned storage. the storage can be freed with free(). [731812]
general enhancements
- rvct now supports the vfpv4 floating point architecture (--fpu=vfpv4) [731258]
- the compiler is now able to reuse precompiled headers (pch) when the current directory and/or source file directory are different from when the pch file was created. [375431]
- an optional size attribute is now supported on import and export directives to allow symbol sizes to be specified in assembly (e.g. export datasymbol[data,size=8]). [730839]
- a new compiler option --import_all_vtbl has been added. this causes external references to class impedimenta variables (vtables, rtti, etc.) to be marked as having dynamic linkage. the option does not cause definitions of class impedimenta to have dynamic linkage. [727750]
- the linker will now produce warning message l6491w whenever a dynamic relocation is generated in an overlay region and message l6492w when the target of the dynamic relocation is in an overlay region. [728049]
- a new option --[no_]implicit_key_function has been added to control whether an implicitly instantiated template member function can be selected as a key function. (normally the key, or decider, function for a class is its first non-inline virtual function. however, in the case of an implicitly instantiated template function, the function would have vague linkage, i.e. might be multiply defined.) the default is unchanged, allowing the key function to be implicit. also, a new remark #2819-d is now produced when a key function is implicit. this remark can be seen with --remarks or with --diag_warning=2819. [732323]
- for multithreading users, the library now supplies variant forms of the high-level stdio functions (fputs, fgets, printf etc) which lock the target stream once for the whole call instead of separately per character. this should improve performance, and also mean that calls to printf reliably appear as a whole in the output (rather than potentially being interleaved character by character with output from other threads). [727119]
- the --library_interface switch now supports options to allow armcc to use version-specific optimized functions from earlier version of the rvct libraries. these options are rvct30, rvct30_c90, rvct31, rvct31_c90. the options rvct40, rvct40_c90 are also provided. [717109]
-
in strict c mode,
and no longer declare the file type. also, the macro __arm_wchar_no_io can now be defined to cause these headers not to declarefile or the wide i/o function prototypes. [733711]
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:
-
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.
-
extract all the files from the zip file into a temporary directory.
-
copy the include directory from the temporary directory to replace your existing include directory. the existing directory can be located by the rvct40incenvironment variable, e.g:
> echo $rvct40inc
~/arm/rvct/data/4.0/400/include/ -
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/ -
copy the linux-pentium directory from the temporary directory to replace your existing linux-pentium directory. the existing directory can be located by the rvct40binenvironment variable, e.g.:
> echo $rvct40bin
~/arm/rvct/programs/4.0/400/linux-pentium/ -
the updated tools should now have been installed. to confirm this, open a dos command prompt window and enter:
armcc --vsn
the version returned should be rvct 4.0 build 771.
armlink --vsn
armasm --vsn
fromelf --vsn
armar --vsn
-
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
corrections since rvct 4.0 build 697
compiler (armcc)
- some causes of the following internal faults have been fixed: 0x87ecef, 0x6bca8b, 0x6bca8b, 0x413ad2, 0xd9827b, 0xcc3958, 0x2732f5, 0xafc2db, 0xa05965, 0xf7584e, 0xb36758,0x2d4b56, 0xa718eb and 0x4553df.
- an access to, or test against, a volatile variable could incorrectly be lifted out of a loop at -o3 -otime. this no longer occurs. [733001, 729956]
- on windows, the compiler could fail to correctly process utf-8 source code that was introduced by a bom (byte order mark). this is now fixed. [732849]
- previously, when a class template member function was marked as dllimport in its declaration and as dllexport in an out-of-class inline definition, instantiating the class might not result in an out-of-line copy of the member function, contrary to the principle that an out-of-line copy is always generated for a dllexportfunction (even one marked as inline). this is now fixed. [732208]
- with optimization options -o3 -otime, when inlining a function that used a formal parameter more than once, if the corresponding actual argument contained an increment, this increment could occur more than once. this is now fixed. [732499]
- at optimization level -o1 or above, warnings #177-d (variable declared but never referenced) and #550-d (variable set but not used) could be produced for local variables of class type constructed using a default constructor with an empty body. these warnings are now suppressed, as they normally are when the constructor is not empty. [732465]
- the unnumbered messages about creation and reuse of precompiled header (pch) files were not being correctly localized when --message_locale was used. this is now fixed. [732406]
- a code generation bug at -o3 -otime which caused write past end of buffer when writing 3 bytes per iteration in a down-counting do-while loop has been fixed. [732346]
- there were various problems with applying 'new' and 'delete' to arrays of objects where the type had alignment greater than 8 bytes (i.e. as set by the 'aligned' attribute). this usage now works correctly. [731813]
- an exception table generation fault could result in a throw from a destructor invoked as part of a goto or return from a nested try block could be directed to the wrong catch handler. this has been fixed. [730117]
- when using --visibility_inlines_hidden, some inline functions of classes marked as dllimport were neither generated nor imported. these functions are now generated. [731207]
- the compiler could incorrectly optimize away accesses to volatile fields of structures where the structure itself was not volatile. this is now fixed. [727881]
- errors in embedded assembly source could result in an output object file being left in an incomplete state. this has been fixed [726941]
- in cases where all direct calls to a function pass an argument with the same constant value, this value can be substituted into the body of the routine. the compiler was incorrectly doing this in some cases where the function may be indirectly called. this is now fixed. [730281]
- a code generation fault that affected the xvid example supplied with rvds has been fixed. [727352]
- the --list_macros option without -e now correctly generates only a list of macro declarations as they are defined at the end of the preprocessed source. when given with -e (or similar option, e.g. -p) macro #define and #undef directives will be interleaved in the preprocessed source that is produced.
- static routines to which an alias was created (using the 'alias' attribute), were permanently retained in an image even if not used. this is now fixed. [729567]
- the compiler now only defines __stdc_iec_559__ if the fp model (as set by --fpmode) fully conforms to the ieee floating-point model requirements in annex f of the c standard. this does not depend upon the source language (c90, c99 or c ). [724114]
- the compiler now defines the __multifile macro when the --multifile option is used explicitly or implicitly. it is recommended that any source-level conditionalization currently detecting this feature by testing whether __optimise_level is at least 3, should change to testing __multifile. [729445]
- internal fault 0x04cb7b could occur when generating debug information for a virtual function of a multiply inherited class marked __forceinline. this is now fixed. [732688]
- the compiler could fail to notice cleared least significant bits of a loop counter and generate unnecessary loop cleanup code after unrolling in the presence of#pragma unroll at -o3 -otime. this is now fixed. [626066]
- the combination of ltcg and the --dllimport_runtime option could result in references to some exceptions runtime routines not being given dynamic linkage. this is now fixed. [733308]
- the compiler could in some cases attempt to parse filenames beginning with '-' as options, even when following a "--" option terminator argument. this is now fixed. [733245]
- where a catch clause used a reference to a class type, e.g. "catch (c &c)", the compiler could fail to generate the type information for the underlying class c. this is now fixed. [732867]
- in the compiler, some intrinsics including __ssat(), __smuad() and __smlad() were in some cases incorrectly not regarded as affecting the q flag, leading to some q-flag accesses being removed as redundant. this is now fixed. [729899]
- the compiler could run slowly when generating objects with a very large number of sections, e.g. when using --split_sections on large sources. this is now fixed. [733748]
- on windows, when invoked via a relative path from within perl, gnu make or similar programs, the compiler could sometimes fail to find the assembler and linker, e.g. when processing embedded assembler. this is now fixed. [733795]
- at -o1 and above, it was possible for copy-constructors not to be synthesised properly. this could occur for a class a deriving from a class b which derived from multiple (possibly polymorphic) base classes all of whose fields could be copy-constructed with a bitwise copy. in this case the copy constructor synthesized fora might only set the vtable pointer and not copy the base class contents. this is now fixed. [733659]
- at -o3 -otime, when an object expression with an incremented subscript has an inlined member function call, the subscript increment was duplicated. this is now fixed. [734246]
assember (armasm)
- the assembler now allows require8 or preserve8 to override earlier instances. [732197]
- writing to system registers mvfr0 and mvfr1 with vmsr is diagnosed as unpredictable. [720647]
- the assembler would previously allow you to use the equ directive with an expression of the form {absolute} - {relative} to define a symbol, which could not be resolved correctly. the assembler now raises error a1109e if you attempt to do this. [647017]
- an issue has been fixed that could cause a require directive to be ignored if reloc is used soon after. [731252]
- when generating code for 16-bit thumb instruction sets without cmn, the assembler would substitute cmn rn, #0 with cmp rn, #0, which has incorrect flag-setting behaviour. the instruction is now faulted. [728052]
- an out of memory issue when the align directive is used with an offset that is not a multiple of 4 bytes has been fixed. [729860]
- assembler did not accept n and l shaped instructions with only source operand data types specified (for example vaddhn.i16.i16 d0,q1,q2). this is now fixed. [719906]
linker (armlink)
- linker inlining could incorrectly inline only 2 instructions of a thumb function containing 3 halfword instructions. this has been fixed. [732427]
- a position-independent ro section can now be placed in the same pi execution region as a rw section without causing a spurious l6265e error. [730622]
- a section with the name of ro could be incorrectly matched by name by the scatter loading selector ( ro). similar cases exist for rw and zi. these have now been fixed. [730269]
- when using the armlink --symbols option on a large project containing many c mangled symbols, the linker could produce the message 'fatal error l6000u: out of memory' when trying to display the unmangled symbol names. this has now been fixed; armlink now uses much less memory when using the --symbols option. [730197]
- linking microlib against code compiled using --enum_is_int no longer causes link error l6242e. [729408]
c/c libraries
- the c library now contains functions _srand_r(), _rand_r() and _setlocale_r(), which are like the standard c functions srand(), rand() and setlocale() except that they use user-provided buffers instead of static data inside the c library. [721560]
- the version of __cxa_vec_cctor selected when using c exceptions did not correctly handle the case where the construction function pointer being passed is null. this is now fixed. [730012]
- if configured (via --remarks or otherwise) to report mismatches between a printf format string and its arguments, armcc would report a mismatch between theinttypes.h macro priu8 and the argument type it is specifically supposed to match (uint8_t). likewise for priu16, priuleast8 and priuleast16. also, the inttypes.h macrosscnd8, scni8, scno8, scnu8 and scnx8 were missing. [733080]
elf format converter (fromelf)
- "fromelf --fieldoffsets" used to crash in some situations when an object file's debug information described a structure type containing an anonymous substructure, or a c class which inherited from a base class with no name. [733770]
multiple tools
- using the --version_number option could sometimes attempt to obtain a license. this is now fixed. [730056]