manbetx手机版

RVCT 4.0 Web Patch #6 Build 771 Release Notes

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_bitfieldshas 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 formx.y.zand 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_]execstackto generate a.note.GNU-stacksection marking the stack as executable or non-executable. If this option is not used then the note section is not generated. The option--arm_linuximplies--no_execstack. [725814]

When--gnuis specified, the compiler will now use unsigned quantities for enums which contain no negative values. [728146]

The C libraries now provide theposix_memalign()function to allocate aligned storage. The storage can be freed withfree(). [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 optionalSIZEattribute is now supported onIMPORTandEXPORTdirectives to allow symbol sizes to be specified in assembly (e.g.EXPORT dataSymbol[DATA,SIZE=8]). [730839]

A new compiler option--import_all_vtblhas 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 messageL6491Wwhenever a dynamic relocation is generated in anOVERLAYregion and messageL6492Wwhen the target of the dynamic relocation is in anOVERLAYregion. [728049]

A new option--[no_]implicit_key_functionhas 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-Dis now produced when a key function is implicit. This remark can be seen with--remarksor with--diag_warning=2819. [732323]

For multithreading users, the library now supplies variant forms of the high-level stdio functions (fputs,fgets,printfetc) which lock the target stream once for the whole call instead of separately per character. This should improve performance, and also mean that calls toprintfreliably 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,<wchar.h>and<cwchar>no longer declare theFILEtype. Also, the macro__ARM_WCHAR_NO_IOcan now be defined to cause these headers not to declareFILEor 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 theincludedirectory from the temporary directory to replace your
existingincludedirectory. The existing directory can be located by theRVCT40INCenvironment variable, e.g:

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

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,0xa718eband0x4553df.

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 asdllimportin its declaration and asdllexportin 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 adllexportfunction (even one marked asinline). 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-O1or 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_localewas used. This is now fixed. [732406]

A code generation bug at-O3 -Otimewhich caused write past end of buffer when writing 3 bytes per iteration in a down-countingdo-whileloop 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 asdllimportwere 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_macrosoption without-Enow 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#defineand#undefdirectives 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 macrowhen the--multifileoption is used explicitly or implicitly. It is recommended that any source-level conditionalization currently detecting this feature by testing whether__OPTIMISE_LEVELis at least 3, should change to testing__MULTIFILE. [729445]

Internal fault0x04cb7bcould 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 unrollat-O3 -Otime. This is now fixed. [626066]

The combination of LTCG and the--dllimport_runtimeoption 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 classC. 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_sectionson 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-O1and above, it was possible for copy-constructors not to be synthesised properly. This could occur for a classAderiving from a classBwhich 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 forAmight 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)

Writing to system registersMVFR0andMVFR1withVMSRis diagnosed as unpredictable. [720647]

The assembler would previously allow you to use theEQUdirective with an expression of the form{ABSOLUTE} - {RELATIVE}to define a symbol, which could not be resolved correctly. The assembler now raises errorA1109Eif you attempt to do this. [647017]

An issue has been fixed that could cause aREQUIREdirective to be ignored ifRELOCis used soon after. [731252]

When generating code for 16-bit Thumb instruction sets withoutCMN, the assembler would substituteCMN Rn, #0withCMP Rn, #0, which has incorrect flag-setting behaviour. The instruction is now faulted. [728052]

An out of memory issue when theALIGNdirective is used with an offset that is not a multiple of 4 bytes has been fixed. [729860]

Assembler did not acceptNandLshaped instructions with only source operand data types specified (for exampleVADDHN.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-IndependentROsection can now be placed in the samePIExecution Region as aRWsection without causing a spuriousL6265Eerror. [730622]

A section with the name ofROcould be incorrectly matched by name by the scatter loading selector (+RO). Similar cases exist forRWandZI. These have now been fixed. [730269]

When using the armlink--symbolsoption 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--symbolsoption. [730197]

C/C++ Libraries

The C library now contains functions_srand_r(),_rand_r()and_setlocale_r(), which are like the standard C functionssrand(),rand()andsetlocale()except that they use user-provided buffers instead of static data inside the C library. [721560]

The version of__cxa_vec_cctorselected 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--remarksor otherwise) to report mismatches between aprintfformat string and its arguments, armcc would report a mismatch between theinttypes.hmacroPRIu8and the argument type it is specifically supposed to match (uint8_t). Likewise forPRIu16,PRIuLEAST8andPRIuLEAST16. Also, theinttypes.hmacrosSCNd8,SCNi8,SCNo8,SCNu8andSCNx8were 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_numberoption could sometimes attempt to obtain a license. This is now fixed. [730056]