This RVCT 3.1 patch #5 is intended for use with RVDS 3.1 and RVDS 3.1 Professional products. It can be used to update any RVDS 3.1 or RVDS 3.1 Professional installation, whether previously patched or an original installation. It is NOT compatible for use with the RVDS 3.1 Evaluation CD or Keil MDK products or previous (3.0 or earlier) releases of RVCT/RVDS. This patch consists of updated RVCT/RVDS 3.1 compiler, linker, assembler, fromelf, and armar Program executables; updated Include files (only ctype.h, dspfns.h, c55x.h have changed since b569) and updated C/C++ libraries. Installation InstructionsTo install the patch carry out the following steps: Extract the contents of the archive into a temporary directory. - 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. Then type:
which armcc
This will tell you the subdirectory that armcc is located in. - Copy the include directory from the temporary directory to replace your existing include directory. The default location is:
~/ARM/RVCT/Data/3.1/569/include/ for RVDS 3.1, or ~/ARM/RVCT/Data/3.1/640/include/ for RVDS 3.1 Professional - Copy the lib directory from the temporary directory to replace your existing lib directory. The default location is:
~/ARM/RVCT/Data/3.1/569/lib/ for RVDS 3.1, or ~/ARM/RVCT/Data/3.1/640/lib/ for RVDS 3.1 Professional - Copy the linux-pentium directory from the temporary directory to replace your existing linux-pentium directory. The default location is:
~/ARM/RVCT/Programs/3.1/569/linux-pentium/ for RVDS 3.1, or ~/ARM/RVCT/Programs/3.1/640/linux-pentium/ for RVDS 3.1 Professional
- *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.,
cp armcc tcc cp armcc tcpp cp armcc armcpp
- The updated tools should now have been installed. To confirm this, type:
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 739.
- 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
Build 739 RVCT 3.1 patch build 739 includes the following corrections and improvements since RVCT 3.1 build 700: Compiler: - Some code generation/optimization issues have been corrected.
- Repeated MSR instructions in inline assembler that write the I, F or A flags in the CPSR are no longer optimised away.
- A destructor is now called correctly in C++ when a 'try' block is nested within a 'catch' body.
- The ability to use the short saturating maths instructions QADD16 & QSUB16, when compiling for v6 & later, has been added to some intrinsics defined in dspfns.h. To use these opcodes for the add() and sub() intrinsics you must set the __ARM_DSP_IGNORE_OVERFLOW macro to 1, as these instructions do not set the Q bit as required by ETSI.
- The TI support functions crshft_r() and L_crshft_r() have been added as a DSP intrinsic to C55x.h.
- __ldrexd(), __strexd() and __clrex() intrinsics are now available for ARM1176JZ(F)-S.
- The compiler can now emit a remark #2810 for file-scope arrays with no bounds in C source code, for example 'int a[];'. Use --remarks or --diag_warning=2810 to see them.
- Some small potential code size and performance improvements have been made in some areas, e.g. C++ exceptions.
- Some possible causes of these internal faults have been addressed: 0x0a7b83, 0x413ad2, 0x4ccb3b, 0x6b6fd3, 0x87ecef, 0xca4d2f, 0xa0269c, 0xaaa267, 0xac2086,
0xe35e83, #2409 (bad simd operation).
C/C++ Libraries - qsort() no longer calls the comparison function when the element count is zero and the data pointer is NULL.
- The C++ libraries are now built as Thumb where appropriate (as in previous versions of RVCT) for smaller code size.
- Re-implementing __default_signal_handler() no longer results in multiply defined symbol error L6200E.
- Some cases where dynamic_cast<> assumed the implementation of type_info::operator== have been replaced by calls to type_info::operator==.
- If _sys_read() returns an error (-1), fgetc() will no longer return an extra (zero) byte before EOF.
- Microlib's scatter-loading code can now be placed in a scatter-file using InRoot$$Sections .
Assembler - armasm now correctly faults invalid Thumb-2 instructions of the form 'LDR/STR pc, [pc, Rx]'.
- armasm no longer aborts with "malloc(): memory corruption" when given long path names (256 characters or more).
- Architectural constraint checking for Thumb-2 data processing instructions (e.g. MOV.W ) has been improved.
Linker - The linker can now again share veneers from a RELOC region to an ABSOLUTE region.
- The use of ALIGN on an EMPTY region in a scatter-file now works correctly - the linker no longer removes preceding ZI padding.
- --no_veneershare now works as documented.
- The linker no longer searches shared libraries for symbol references generated from its library selection scripts.
- --no_comment_section can now be used on images, as well as objects.
- The callgraph output no longer misses some function calls.
- The callgraph output no longer lists functions as being "Mutually Recursive" when they are not.
- The address of a FIXED region in a scatter-file with a non-zero relative base offset is now evaluated correctly.
- The correct size of any shared .conststring sections is now written into the symbol table by the linker, viewable with --symbols.
- The correct size of any linker-generated veneers is now written into the symbol table (instead of 0) by the linker, viewable with --symbols.
- The $Sub/$Super mechanism is intended for only static (not dynamic) linking. As $Super references are not allowed to be imported or exported into the dynamic symbol table, $Super references and definitions are now marked as hidden (STV_HIDDEN).
- Where ARM/Thumb synonyms are present, the linker no longer masks a local definition of a symbol with a global symbol of the same state, which could cause relocation failures. Note that ARM/Thumb synonyms are not ABI-compliant, so should be avoided where possible.
- The linker no longer splits inline veneers from their targets when "__at" sections are used.
- The linker no longer searches libraries for a symbol when it has already found a definition.
- The linker is now able to eliminate legacy SHF_COMDEF VFE sections from an image, which can help to reduce code size.
Multiple - The RVCT 3.1 Linux executables are now built with FLEXnet Licensing v10.8.5.0 (now the same as for the Windows executables).
- The RVCT 3.1 Linux executables now have improved reliability with the "hugemem" kernel on Linux platforms.
Build 700 RVCT 3.1 patch build 700 includes the following corrections and improvements since RVCT 3.1 build 674: Compiler: - The Windows executables are now 'signed', which should avoid some popups on Windows Vista.
- The compiler now supports the reuse of precompiled headers (PCH) on Windows Vista when Address Space Layout Randomization (ASLR) is active.
- #pragma O3 now works correctly with precompiled headers (--pch).
- The preprocessor no longer incorrectly performs a double line splice for a trailing double backslash \\ after a double forwardslash comment //.
- An issue with reading the "named register variable" APSR into a variable has been fixed.
- Addresses of strings are now calculated correctly when compiling for Cortex-M3 with -O3 -Otime.
- Inline assembler that contains a flag setting instruction followed by a conditional flag setting instruction now compiles correctly.
- An issue with __memory_changed() has been fixed.
- The 'weak' attribute is no longer lost on a member template function.
- A possible cause of "Error: #1620: Internal fault: translation failed. (becheck - block)" has been fixed.
- _Pragma("arm section") is no longer ignored.
- printf argument-list scanning now treats "pointer to array[N] of char" the same as "pointer to char".
- Use of C++ class rvalue "?" operators inside template prototype instantiation no longer causes a stack overflow.
- --dllimport_runtime now correctly imports alloca and scalbn related symbols.
- 32-bit Thumb instructions are now disassembled correctly in e.g. the compiler's --interleave output.
- The assembler and compiler now correctly determine the presence/absence of the mvfr0 and mvfr1 system registers, which are present in VFPv2 (VFP11) after r1p0.
- The compiler no longer incorrectly considers a directory name as a pattern match for #includes.
- A debug illusion issue when using #pragma arm and #pragma thumb functions within the same named section (e.g. using #pragma arm section) has been corrected.
- Functions with the same name as a named section (e.g using #pragma arm section) are no longer incorrectly omitted from the symbol table.
- Some code generation/optimization issues have been corrected.
- Some possible causes of the following internal faults have been addressed:
0x2732f5, 0x2bb15d, 0x5db3ba, 0x92b6e9, 0x995e1d, 0x9be513, 0xaaa297, 0xb7310e, 0xca7b8d, 0xcc3958, 0xcc5a94, 0xfe1945.
Assembler: - Some instructions were accepting program-relative expressions that could not be encoded.
- SUB Rd,PC,#imm was incorrectly diagnosed as deprecated in ARM.
- The assembler and compiler now correctly determine the presence/absence of the mvfr0 and mvfr1 system registers, which are present in VFPv2 (VFP11) after r1p0.
Linker: - ARM/Thumb synonyms (legacy) feature now behaves as documented.
- Use of RWPI/ROPI with linker-generated symbols like Load$$ER_RW$$Base now results in a diagnostic message rather than a linker crash.
- The linker no longer produces erroneous diagnostics when input section attributes are omitted from input section descriptions in a scatter-file.
- The linker can no longer use a ZEROPAD region as a temporary buffer when decompressing RW data.
- The scatter-load FIXED attribute no longer interferes with the linker's --autoat placement of sections.
- The linker now correctly generates a PLT entry for a call to a default visibility definition in the same DSO.
- A new linker switch "--info visibility" has been added, to help resolve missing references to symbols errors, as flagged by linker diagnostics such as L6410W. "--info visibility" can be used in combination with "--info inputs" and "--verbose" to give progressively more detailed output.
- A new linker switch "--max_visibility=<visibility>" has been added. This will restrict the maximum (most visible) visibility of all symbol definitions to <visibility> where <visibility> is either "protected" or "default".
The default maximum visibility is "default". Note: The visibility of data definitions is unaffected by this option. Use "protected" when you do not want the symbols in your shared object to be preempted at load time - the linker will not need to generate a PLT entry for a call to a protected visibility symbol from the same library. Use "default" when you want to allow the symbols in your shared object to be preempted at load time - the linker will then generate a PLT entry for a call to a default visibility symbol from the same library.
Fromelf: - fromelf no longer crashes with "--strip symbols" on SysV shared libraries containing an R_ARM_RELATIVE relocation.
- fromelf is now able to create output files in a nested directory, e.g. "fromelf --bin foo.axf -o bar/foo" now works as expected, assuming bar already exists.
Armar: - armar no longer generates malformed archive headers on Unix systems with >6 character user IDs.
Libraries: - Reimplementing __rt_raise now correctly prevents default_signal_handler from being linked from the libraries.
- strstr() in Microlib has been corrected to return the correct value.
- strpbrk() in Microlib no longer loops infinitely if the first character of the string does not match, e.g. strpbrk("abc","b").
Build 674 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.]
Build 640 RVCT 3.1 patch build 640 includes the following corrections and improvements since RVCT 3.1 build 616: Headers and Libraries: - The include file ctype.h has been modified so that the ABI portable ctype macros (e.g. "__aeabi_ctype_table_") are now properly qualified with the C++ namespace when compiled in C++ mode.
- The include files dspfns.h and c55x.h have been modified so that out-of-line copies of the DSP intrinsics are no longer generated when compiling with --gnu, to prevent "multiply defined symbol" errors at link time where two or more source files #include these in the same project.
- The Cortex-M1 helper libraries h_p*.* have been modified to correct a problem in __ARM_ll_mulss and __ARM_ll_mlass. C code which multiplies two signed 32-bit integers to give a signed 64-bit result, for example:
long long result; long x, y; result = (long long)x * y;
would sometimes give the wrong answer for Cortex-M1 targets only. The six affected files in the "armlib" directory are: h_p.b, h_p.l, h_pe.b, h_pe.l, h_pf.b, h_pf.l.
Compiler: - A code size regression between build 569 and build 616 has been fixed. This could occur in some cases where functions used multiple static variables.
- The debug information generated by the compiler has been tuned to improve commoning opportunities at link time. This helps to minimise final debug sizes, and to reduce overall link times.
- armcc can again now execute armasm and armlink (e.g. for embedded assembler) on Windows if their location is not listed in the path environment variable, providing they are in the same directory as armcc.
- The line number cross-referencing has been improved in the "--interleaved" output.
- Build attributes can no longer be incorrectly picked up from the last code section emitted instead of from the command line options.
- Prior to RVCT3.1 build 616, the vectorizing compiler could reassociate some saturating intrinsic functions, which would cause incorrect results. This was fixed in RVCT3.1 build 616 but this inhibits vectorization of some functions containing saturating intrinsics.
- A new "--reassociate-saturation" option has been added to allow the old behaviour to be restored.
- Some code generation issues have been corrected.
- Some possible causes of the following internal faults have been addressed:
0x0da336, 0x2bb15d, 0x42983d, 0x63faa5, 0x9005f2, 0x87ecef, 0xca4d2f, 0xe35e83, 0xf25893, #1620 (afterburner-unimplemented-2), #2409 (bad simd operation), #2409 (underflow).
Linker: - The linker could previously load another object from a library to resolve a reference it had already loaded. This could result in "L6200E multiply defined symbol" errors. The linker will now not search a library again if it already has a definition of a symbol.
- The linker now correctly faults the use of legacy ADS objects, and pre-RVCT3.1 objects built with --apcs /adsabi.
- Before moving a veneer to another execution region (to promote veneer sharing or to use a short branch veneer rather than a long branch veneer) the linker now checks whether the target execution region is allowed to contain code.
- The link step could be slow and/or run out of memory when processing DWARF2 debug information.
Fromelf: - fromelf no longer names output files incorrectly for input images containing multiple load regions.
- fromelf --fieldoffsets could hang or fail with "Fatal error: Q0106E: Out of Memory" where there are structures with the same name in different objects.
Build 616 RVCT 3.1 patch build 616 includes the following corrections and improvements since RVCT 3.1 build 569: Compiler: - The compiler was incorrectly generating a spurious subscript-out-of-range warning for huge arrays
- The compiler was incorrectly generating an error message when compiling inlined CLZ instruction on v5T
- The compiler now generates better code for local array initializers in C++ and C99 modes
- The dynamic import tag is now kept for certain library functions (such as memcpy), where the compiler has optimised them from different library functions (such as strcpy)
- The __smc intrinsic is now recognized as v6Z specific instruction
- Fixed a segmentation fault when combining pre-increment/decrement on volatile long long type and assignment into one C statement
- The compiler no longer emits unneeded template static data at -O0
- Improved optimization of range reduction loops (fewer calls to the __aeabi_idivmod library function) at -O3 -Otime
- Some DWARF debug info corrections have been made, including:
DW_AT_sibling in .debug_info now points to the correct place Debug info is now properly nested in namespaces - Some code generation issues have been corrected
- Some possible causes of these internal faults have been addressed, including:
0x3e840d, 0x2bb15d, 0xafee20, 0xfe1945, 0x87ecef, 0x2cc72c, 0xe35e83, 0xca7b8d, 0xca4d2f, 0x7b54d8, 0xe46b32, 0x28aa97, 0x1e1ec0, 0xa95fee, 0x870a6f, , #1620 (dw_propagate_up-op), #2409 (underflow), #2409 (bad simd operation)
Linker: - Debug section commoning/merging is now performed correctly
- The linker could give incorrect error messages when "--feedback_image noerrors" is used
- The linker could incorrectly display warning message "L6632W: Subtraction underflow" against addresses in scatter file
- The linker could incorrectly display warning message "L6385W: Addition overflow" against address addition in scatter file
- The linker could generate error L6286E when assigning a veneer to a padding region
- The linker could corrupt ARM instructions that do not use condition codes when --inline is used
- The linker's library selection mechanism could ignore symbols in dynamic libraries
- The "--info veneers,veneercallers" could cause veneercallers output to be discarded
- Minor improvement on comment section commoning
- Auto placement of __at sections now places in execution regions without limit
- The linker now generates diagnostics when trying to generate Thumb-2 or Thumb PLT sequence
Assembler: - Fixed some possible causes of internal faults 0x477a81 & 0x850686
- CPY instruction is now recognized as a valid instruction
Fromelf: - The "--nolinkview" or "--strip all" could incorrectly remove program segments
- fromelf could show spurious zeroes in load segment disassembly
- fromelf no longer outputs incorrectly named zero size binary
Armar: - armar was not creating symbol table when there are no external symbols
|