This patch consists of 5 files, containing updated versions of the RVCT/RVDS 3.0 Service Pack 1 compiler, linker, assembler, fromelf, and armar. This patch is intended for use with RVCT 3.0 Service Pack 1 or later patches. This patch is NOT suitable for use with the original release of RVCT/RVDS 3.0. You should contact your supplier to obtain an upgrade CD for RVDS 3.0 Service Pack 1, install the Service Pack first, and then install this patch. Also, this patch is NOT compatible with the RVDS 3.0 Evaluation CD or RVDK products. To install the patch carry out the following steps: Ensure that you are currently using RVCT 3.0 Service Pack 1. To do this, type: armcc --vsn and ensure that this returns RVCT 3.0 build 586 or later. Extract the files from the ZIP file into your RVCT install directory. The default location is: C:\Program Files\ARM\RVCT\Programs\3.0\586\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 ZIP file sizes, only one compiler (armcc) is provided in this patch. However, the separate armcc, tcc, armcpp and tcpp executables are now identical in 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 build 688.
Build 688 RVCT 3.0 Service Pack 1 patch build 688 includes the following corrections and improvements since RVCT 3.0 Service Pack 1 patch build 651: Compiler: Some code generation issues have been corrected, including: The compiler could generate a Thumb branch to an incorrect destination, where this would be an unconditional branch to a conditional branch The compiler could incorrectly remove flag setting instructions The compiler could incorrectly transform variables into compile time constants for variables larger than one word.
Some other issues have been corrected, including: Internal fault 0x9a86b3 with --wchar32 and static initialisation of an unsigned array which exceeds the range of integer Internal fault 0x65dab4 when a variable's address is taken which is then passed out of its scope Internal fault 0xfad570 with C++ template destructors Internal fault 0x9be513 when compiling at -O2 -Otime with a volatile pointer to a local variable not marked as volatile
Linker: The R_ARM_THM_PC12 relocation has been updated to S-align(P)+A instead of S-P+A, corresponding to the latest revision of the AAELF specification The linker now reports the correct ZI sizes for partially linked objects with --info sizes or --info totals
Fromelf:
Build 651 RVCT 3.0 Service Pack 1 patch build 651 includes the following corrections and improvements since RVCT 3.0 Service Pack 1 patch build 617: Compiler: Some changes have been made to the compiler's front-end behaviour: ".cxx" is now accepted as a filename extension for C++ Dependency files created with --depend now contain the path for the target object The compiler was incorrectly reporting error #20 with __packed and C++ template instantiation The compiler could incorrectly report error #1151 with --fpu=none and C++ templates
Some code generation issues have been corrected, including: At -O3 -Otime some code generation issues were corrected, including: - incorrect simplification of some expressions
- incorrect transformation of some loops
- volatile objects being incorrectly optimized away in certain cases
The compiler might have corrupted the flags after calls to certain Thumb helper library functions The compiler could generate incorrect code after a 32-bit Thumb-2 MOV.W instruction with a shift The compiler could generate incorrect code where a value loaded from a volatile location was stored out to a structure member and then narrowed The signedness of an enum was incorrectly modified by the --signed_chars switch The compiler was incorrectly folding constants for double or long long types The compiler was not correctly generating code to test for a null pointer with the delete operator on an array
Some other issues have been corrected, including: Segmentation fault when using --preinclude and --sys_include options together Segmentation fault when using __mcall_offsetof_vbase in an embedded assembly function Segmentation fault when using array delete on a pointer to a const object Compiler generating error #1620, "Internal error detected -- please report (tretrv)" at -O3 -Otime Internal fault 0x1e1ec0 with an extern volatile const variable and compiling ‑‑apcs=/ropi Internal fault 0x2234aa with C++ exceptions and several nested try ... catch blocks Internal fault 0xf04372 in assignment expressions containing pointer casts to (double *), for example: *(double *)p = d; Internal fault 0x28aa97 with --thumb -O0 when calling a function in a derived class whose base class has an explicit destructor Internal fault 0xbd358d with inline assembly using an MSR follow by a store to a pointer that had been passed into the function Internal fault 0x3e0da2 with certain expressions using long long types Compiling multiple files on a command line with --apcs=/adsabi incorrectly reported a source line for the warning that the switch is deprecated A source file with "#pragma arm section code" followed by "#pragma thumb" could generate an incorrect section size in the object file symbol table, leading to a warning at link time
Linker: The linker could crash under certain circumstances when linking a BPABI DLL The linker could incorrectly remove certain debug-related symbols where a partially linked object is used with "HIDE *" in a steering file, leading to warnings when debugging The linker could incorrectly use absolute pointers to function rather than offsets in a BPABI image The linker could write build attribute sections with the incorrect endian format The linker's inline feature could generate unpredictable instruction encodings The linker was adding an incorrect amount of padding before a FIXED region in the presence of compressed RW data in adjacent regions The "--info totals" option now reports the correct "Total ROM Size" including linker-generated padding The "--info totals" could report incorrect RW and/or ZI sizes for partial linking
Assembler:
Build 617 RVCT 3.0 Service Pack 1 patch build 617 includes the following corrections and improvements since RVCT 3.0 Service Pack 1 build 586: Compiler: Some code generation issues have been corrected, including: The compiler could generate code that behaved incorrectly with respect to overflowing negation operations The compiler could generate incorrect results from expressions with multiple shifts The compiler could generate incorrect code for certain shift expressions with long long values The compiler could generate incorrect Thumb-2 instruction sequences for some expressions using NEON intrinsics The compiler could incorrectly move a MOV instruction before an LDM at -O2 and -O3 At -O2 and above the compiler could incorrectly reorder certain Thumb instruction sequences At -O2 and above the compiler could generate some incorrect Thumb-2 instruction sequences At -O2 and above the compiler could incorrectly invert some comparison expressions At -O3 -Otime some code generation issues were corrected, including incorrect simplification of some expressions and incorrect transformation of some loops.
Some other issues have been corrected, including: Segmentation fault with --exceptions and C++ templates with long names Internal faults or segmentation fault when compiling multiple C++ files without --multifile Internal fault 0x6098ba with -O3 -Otime --debug Internal fault 0x995e1d with Thumb at -O0 and large functions Internal fault 0x26ed41 with C++ and --remove_unneeded_entities Internal fault 0x4f04a9 at -O3 -Otime with local variable in an if-statement condition Internal fault 0x61e7f4 with certain switch blocks at -O2 and -O3 Internal faults 0x3f08c3, 0x07e885 or 0x5593a7 with particular expressions C++ typedef names could appear unmangled in the debug data.
Linker: The linker could produce invalid debug data sections from partially linked objects with certain steering file commands The linker could generate the incorrect type of interworking veneers when producing a BPABI (Base Platform ABI) DLL The linker could previously give errors when using mixed path separators ('/' and '\') under Windows The linker could previously give different --map output depending on the directory separator in the library search path The linker's debug compression was failing for C++ functions with different template types.
Assembler:
|