This patch consists of 5 files, containing updated versions of the RVCT/RVDS 3.1 compiler, linker, assembler, fromelf, and armar. In addition to these normal RVCT executables, some extra files are included: ctype.h, dspfns.h, c55x.h and 6 Cortex-M1 C-library files (h_p*.b or h_p*.l), of which only dspfns.h has changed since the previous patch build 640. This patch is the third RVCT 3.1 patch release and is intended for use with RVDS 3.1 and RVDS 3.1 Professional products. It is NOT suitable for use with previous releases of RVCT/RVDS. Also, this patch is NOT compatible with the RVDS 3.1 Evaluation CD or Keil MDK products. To install the patch carry out the following steps: Ensure that you are currently using RVCT 3.1. To do this, type: armcc --vsn and ensure that this returns RVCT 3.1 build 569 or later. Extract all the files from the ZIP file into a temporary directory. Copy the 3 header files from the temporary directory into your RVCT include directory. The default include location is:
C:\Program Files\ARM\RVCT\Data\3.1\569\include\windows Copy the 6 C-library files from the temporary directory into your RVCT library directory. The default library location is:
C:\Program Files\ARM\RVCT\Data\3.1\569\lib\armlib Copy the 5 executables from the temporary directory into your RVCT install directory. The default location is:
C:\Program Files\ARM\RVCT\Programs\3.1\569\win_32-pentium
If necessary change the directory to unzip into to match the location where you have installed the tools. *IMPORTANT* To minimise the size of the archive, only one compiler (armcc) is provided in this patch. However, the separate armcc, tcc, armcpp and tcpp executables are now identical since RVCT 3.0, so you will need to copy the new armcc to tcc, armcpp and tcpp appropriately, with e.g.
copy armcc.exe tcc.exe copy armcc.exe tcpp.exe copy armcc.exe armcpp.exe The updated tools should now have been installed. To confirm this, open a DOS command prompt window and enter:
armcc --vsn armcpp --vsn tcc --vsn tcpp --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn The version returned should be RVCT 3.1 build 674.
Changes From Previous Releases
RVCT 3.1 patch build 674 includes the following corrections and improvements since RVCT 3.1 build 640: Header files: Compiler: - The compiler's inline assembler no longer incorrectly removes MSR or MOVS instructions from inline assembler sequences.
- The compiler erroneously reported Error #1560 in some cases. A (suppressible) Warning is now given instead.
- In functions that used 'setjmp', the values read from local variables marked 'volatile' were sometimes incorrect in the return-from-longjmp case.
- Use of __ldrex, __strex and similar intrinsics on a static variable no longer report invalid "Error: #1199: there is no type with the width specified".
- The compiler no longer faults attempts to non-standardly declare a function twice with two different enumeration types as a result or argument. This caused problems with some legacy code, so this is now a warning in non-strict modes.
- The 3.1 compiler no longer generates fewer tailcalls than 3.0 when compiling with C++ exceptions.
- Thunks for complete object destructors in classes with virtual bases are now emitted in some cases where they were missing.
- C++ guard variables for local static initializations are now non-weak, which is the same as in RVCT 3.0 and is in agreement with a recent AEABI clarification. New object files are still compatible with object files from earlier RVCT releases.
- Some cases of missing VTTs (virtual table tables) introduced by build 640 are fixed.
- When compiling C++ code with -O3 -Otime, the compiler could incorrectly report error #167 against __restrict.
- At -O3 it was possible for some memory accesses to be moved past scheduling barriers. This has now been fixed.
- The compiler no longer moves stores in Thumb across __enable_irq() or __breakpoint() intrinsics.
- A 'dllexport' function that gets inlined now has an out-of-line copy created and exported too, as required by the ABI.
- The compiler no longer generates .debug_line sections that contain no useful information and which would otherwise waste space in the image.
- The use of __declspec() (e.g. __declspec(notshared), __declspec(dllexport), etc) on class, struct and union types is no longer ignored, and now matches the behaviour of previous releases and the documentation.
- Build attributes section Tag_ABI_FP_number_model and Tag_ABI_FP_denormal were sometimes incorrect. Also all Tag_ABI_FP_* tags are now 0 for --fpu=none.
- Some code generation/optimization issues with -O3 -Otime have been corrected.
- A possible cause of "Error: #2401: Internal fault: table overflow." has been addressed.
- Some possible causes of the following internal faults have been addressed: 0x0d9189, 0x1173d7, 0x2bb15d, 0x382b30, 0x61e737, 0x87ecef, 0x995e1d, 0xa0269c, 0xac2086, 0xb2d4ef, 0xca4d2f, 0xd31364 with --interleave, 0xe82e38.
Assembler: - The assembler now accepts XPSR in MRS and MSR instructions on ARMv6-M and ARMv7-M.
- The assembler assembled some 64-bit VLDR.F64 literal pool loads incorrectly.
- The assembler incorrectly assembled NEON VQSHRN and VQRSHRUN instructions with immediate zero.
- The assembler sometimes incorrectly assembled NEON multiply by scalar instructions.
- Some legacy Arch v6 assembler mnemonics had been removed from the inline assembler. These have now been reinstated for the benefit of legacy code. New code should preferably use the new mnemonics. The mnemonics are (old name ⇒ new name):
[US]ADD8TO16 ⇒ [US]XTAB16 [US]ADD8TO32 ⇒ [US]XTAB [US]ADD16TO32 ⇒ [US]XTAH [US]UNPK8TO16 ⇒ [US]XTB16 [US]UNPK8TO32 ⇒ [US]XTB [US]UNPK16TO32 ⇒ [US]XTH
Linker: - The linker no longer crashes when using a symdefs file that contains symbols related to RW-data compression.
- The linker no longer reports a multiply defined symbol error L6200E when processing $Sub$$/$Super$$ symbols in a library file that overrides symbols from a SYMDEF file.
- The linker will now report an error for references to non STV_DEFAULT symbols when linking SysV images, instead of treating them as weak (STB_WEAK).
- The linker is now able to generate PI veneers directly within SysV shared objects compiled with "--apcs=/fpic" and linked with "--sysv --shared --fpic".
- The linker will now fault execution regions created by the linker when using --autoat if they are not 4 byte aligned.
- The linker no longer crashes when trying to allocate more than 2GB of memory in one chunk.
- The linker no longer crashes when --no_legacyalign is used with a zero-sized EMPTY execution region.
- Some causes of the linker error "Execution interrupted due to an illegal storage access" have been fixed.
Fromelf: - fromelf --elf --strip symbols,debug will now correctly remove the string and symbol tables (".strtab" and ".symtab") from images, instead of just removing local symbols.
Armar: [armar has no changes, but has been rebuilt for completeness.]
|