软件大小:33.0 MB 软件性质: 免费软件
更新时间:2013-10-15 09:47:29 应用平台:Win9X/Win2000/WinXP
下载次数:2996 下载来源:manbetx手机版
软件语言:英文 软件类别:ARM开发工具 > RVDS 开发工具
RVCT 4.0 Patch #2 Build 529 Release Notes


This RealView Compilation Tools (RVCT) 4.0 Patch #2 Build 529 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 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.

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) 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 default location is:


4) Copy the lib directory from the temporary directory to replace your existing lib directory.  
   The default location is:


5) Copy the linux-pentium directory from the temporary directory to replace your existing 
   linux-pentium directory.  The default location is:


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

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

Changes From Previous Releases

RVCT 4.0 patch build 529 includes the following corrections and improvements since RVCT 4.0 build 

Compiler (armcc):

* A new "--version_number" switch has been added.  In contrast to --vsn, --version_number just 
reports the simple 6-digit compiler version string only (e.g. 400529) and does not check-out a 
license.  This is intended for use by build systems which need to check the version of RVCT being

* A new "--visibility_inlines_hidden" switch has been added.  This stops inline member functions
acquiring dynamic linkage ('default' visibility) from class __declspec(dllexport), from a class
visibility attribute, from #pragma GCC visibility, or from --no_hide_all.  It does not affect
non-member functions.

* The "--export_all_vtbl" switch now causes construction vtable tables (_ZTT*) to be exported if 
and only if the corresponding vtables are exported.

* The compiler will no longer add the __hardfp_ prefix to math functions, e.g. sin(), defined in 
user code when user is not using the RVCT library interface.

* The macro __FILE__ can now be redefined on the command line.  For example, 
"-D__FILE__=__MODULE__" causes __FILE__ to give the file name but without path information.

* The compiler now sets Tag_ABI_FP_exceptions in full IEEE mode (--fpmode=ieee_full)

* In GNU C mode, the compiler now places uninitialized global const objects in writable storage, on
the assumption that they are being (dynamically) initialized by other means.  This applies to
definitions such as:
  int const n;
Note that in --relaxed_ref_def mode, which is the default in GCC command-line translation mode, 
such a definition would be common.

* Translation of a GCC command line containing -MD, without an explicit dependency file location 
given with the -MF switch, would always be incorrectly placed in the current working directory.  
The dependency file is now produced in the same directory as the output object file.

* The compiler now supports the GCC "__attribute__ ((destructor))".  This puts a reference to the
routine into a SHT_FINI_ARRAY section.  "__attribute__ ((constructor))" was already supported.

* The GCC 'weakref' attribute on variables and functions is now correctly implemented.

* Some improvements have been made for configuring armcc for GCC command line translation against 
an existing GNU toolchain, in particular to support configuring GCC for the Google Android based 

* __declspec(dllexport) on a class now causes the typeinfo name variable (_ZTS...) to be exported,
along with other RTTI information.

* The previous RVCT 4.0 patch build 471 caused a diagnostic to appear when a member of a class 
marked 'dllexport' was defined outside the class, without 'dllexport'.  As the 'dllexport' is
implicitly applied to the member function in this situation, the diagnostic was inappropriate and
is no longer produced.

* Absolute-address ZI variables (AT extension) are now correctly placed in ZI data sections rather
than in RW data sections.

* Some optimization improvements have been made, for example:
  - To improve performance on processors with long pipelines by replacing pointers 
    to functions with if/else conditional branches.
  - Generation of the USAT instruction has been improved at -O3 -Otime.

* The output of the __builtin_parity intrinsic has been corrected.  Previously the parity was in 
the least significant bit of the result.  The intrinsic now returns just the 0 or 1 parity bit.

* Some spurious occurrences of compiler warning #128-D "loop unreachable from preceding code", when
the loop body was entered via a goto or switch case, now no longer occurs.

* In certain rare cases the compiler could crash when an integer subexpression divided the minimum 
negative number (i.e. INT32_MIN) by -1, causing overflow.  This is now fixed.

* Inlining of a function that returned a volatile object where the return result was not used could
result in the load of the volatile object being removed.  This is now fixed.

* The compiler could generate a configuration file for ARM Linux that was missing a path to the C++ 
header files, when running on Windows.  This is now fixed.

* Use of zero-sized data items (a GCC extension) in GCC command line translation mode, or more 
generally with --bss_threshold=0, could result in an internal fault 0x6e3f3b.  This is now fixed.
These data items now reserve one byte of zero-initialized store (BSS).

* Some causes of the following internal faults have been fixed:
0x265580, 0x6e3f3b, 0x87ecef, 0xb36758, 0xc31b6d, 0xc18024, 0xd24575, 0xdb2e1f, 0xeea2c1

* On Windows, when the compiler invoked the linker as a subprogram, in certain cases where both the
path to armcc and the path to files passed to the linker contained spaces, the invocation would 
fail with a message such as "'C:\Program' is not recognized...".  This is now fixed.

C/C++ Libraries:

* To assist linking with some applications and libraries, the C library now defines __errno as an 
alias of __aeabi_errno_addr, providing a way to obtain the address of the errno variable.  The C
prototype is "int *__errno(void)".

* The stack pointer (SP) is now initialized by Microlib before use of the RW data decompressor.

* atan2f() has been corrected to return NaN when its input parameters are +0/-0.

* modf() has been corrected to return NaN when the first input parameter is NaN.

Assembler (armasm):

* Cases where use of the EXTERN directive could result in a corrupt object file has been fixed.

* Labels defined in an empty AREA will now always have their type derived from the type of the 

Linker (armlink)

* armlink is able to workaround Cortex-A8 Erratum 657417, which affects 32-bit Thumb-2 branch
instructions that span two 4K regions, where the target address is in the first 4K region.  The
workaround is activated if either:
1) The armlink command-line switch --branchpatch=cortex-a8_q109 is used, or
2) The armlink command-line switch --cpu=cortex-a8 is used and a full link is being performed.

This only needs to be used for Thumb-2 code intended to be run on Cortex-A8 revision r3p0 or most
earlier parts.  Please contact your silicon vendor for more information on this erratum.

When activated the linker will scan for instruction sequences that may trigger the erratum 
behaviour.  If such a sequence is found the linker will insert a patch to prevent the erratum
behaviour.  Use the "--info patches" switch to be informed of the Object, Section and the Offset
within the Section where the patch has been applied.

The trigger conditions that the linker looks for are:
1) A 4-byte direct Thumb-2 branch instruction spans a region boundary, i.e. 
   (address & 0xffe) == 0xffe.
2) The branch instruction is backwards and has a range of less than 4KB.
3) The instruction preceding the branch is a 4-byte non-branch instruction.

The linker patch converts the backwards branch to a forwards branch to a patch at the end of the
Section.  The patch consists of a backwards unconditional branch to the original target. The patch
is aligned such that the backwards branch can never span a region boundary.

The restrictions are:
1) When partial linking the linker does not always have the address information to know that an
address will never be placed on a region boundary.  This will mean that the linker may patch more
instructions in a Section than if the patch were applied in a full link.
2) A branch that requires patching must be able to reach the patch at the end of the Section.  If
the linker is unable to place the patch within range of the branch it will give a warning message.
The range of a Thumb-2 unconditional branch is 16MB and the range of a conditional branch is 512KB
so this is unlikely to happen in practice.
3) The linker will increase the alignment of any Program Segment containing a patch to 4KB.

* A new "--use_definition_visibility" switch has been added.

By default when the linker combines global symbols the visibility of the symbol will be set the
strictest visibility of the symbols being combined.  So a symbol reference with STV_HIDDEN
visibility combined with a definition with STV_DEFAULT visibility will result in a definition with
STV_HIDDEN visibility.  When --use_definition_visibility is set the linker will use the visibility
of the definition in preference to the visibility of a reference when combining symbols.  So a 
symbol reference with STV_HIDDEN visibility combined with a definition with STV_DEFAULT visibility 
will result in a definition with STV_DEFAULT visibility.  This can be useful when you want a 
reference to not match a Shared Library, but would like to export the definition.  Note that
--use_definition_visibility violates the ELF standard, hence it is off by default.

* A new "--remarks" switch has been added that enables some diagnostic messages, which are
suppressed by default.  These extra diagnostic messages will warn for:
  - Use of the helper library, which is no longer required for objects that are built entirely
    from the 4.0 version of armcc.
  - Use of --fpic when an object has not been compiled with --apcs=/fpic or --apcs=/ropi.
  - Some cases when RW compression has been turned off.
  - A mapping symbol ($a, $t, $d ...) that has an address outside the section.
  - When a symbol cannot be imported/exported into/from the dynamic symbol table via IMPORT or
    EXPORT commands in steering files.

* armlink when operating with --sysv has added in extra Sections in the output ELF file for:
  In previous versions these Sections were assigned to either the .text or .data Section.

* The linker now assigns unassigned sections to .ANY execution regions as documented, i.e. the
largest section is first assigned to the execution region with the most available space, and so on.

* The linker's behaviour with respect to weak-references and dynamic linking has changed.  The new 
behaviour is:
For --sysv : Unresolved weak-references can now be placed in the dynamic symbol table via an IMPORT
directive in a steering file.
For --bpabi: The linker will only allow weak-references in the dynamic symbol table if the symbol
is defined by a DLL supplied on the command line.  An unresolved weak-reference cannot be placed in
the dynamic symbol table via an IMPORT directive.

* A problem with ARM/Thumb synonym processing in the presence of anonymous global symbol
definitions has been fixed.

* A problem has been corrected which caused the 4.0 armlink --info=debug switch to report less
duplicate debug information than RVCT 3.1.

* Linker now correctly diagnoses an Execution Region containing exactly two Sections marked +FIRST.

* armlink --match=crossmangled no longer crashes when there are no symbols with a C++ mangled name 
in the image.

* Armlink now correctly handles R_ARM_V4BX relocations with no target symbol from sections in a
rejected comdat group.

ELF Format Convertor (fromelf)

* "fromelf --strip debug,symbols" now fully strips out the symbol table (.symtab) and string table 














新闻中心 | 联系我们 | 招聘信息 | 留言反馈 | 典型客户 | © 2019 Myir
深圳总部: 0755-25622735 | 北京办事处: 010-84675491 | 上海办事处: 021-60317628 粤ICP备12005064号-1