*
*Home|Chinese|Japanese*About ARM|Forums|Events|News|Employment|Contact Us|Investors*
dotted rule
*ARM - the architecture for the digital worldARM - the architecture for the digital world
search
*
*
***
*MARKETS:PRODUCTS & SOLUTIONS:CONNECTED COMMUNITY:TECHNICAL SUPPORT:DOCUMENTATION*
*
technical support
*
*
****
*.Technical Support
*
*
*>>Home Page*
*
*.Obtaining Support*
*
*.FAQs*
*
*.Downloads*
*
**Development Tool Downloads*
**Development Tool Tutorials*
**Artisan Physical IP Downloads (Login Required)*
*
*.Documentation*
*
*.Training*
*
*.Where To Buy*
*
*.Keil MCU Tools*
*
*.What's New*
*
*.ARM Newsgroups*
*
*.Active Assist On-site Services*
*
*
*
RVCT 3.1: Build 700 patch for Linuxask ARM*
dotted rule

Technical Support Search
*     (Advanced Search)
  FAQs   Documentation   Downloads   Forums

*

This patch is the fourth RVCT 3.1 patch release and is intended for use with RVDS 3.1 and RVDS 3.1 Professional products.  It can be used to update any RVCT 3.1 or RVDS 3.1 Professional installation, whether previously patched or an original installation.  It is NOT suitable for use with previous releases of RVCT/RVDS (3.0 or earlier).  Also, this patch is NOT compatible with the RVDS 3.1 Evaluation CD or Keil MDK products.

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.hdspfns.hc55x.h, 6 Cortex-M1 C helper libraries (h_p*.b and h_p*.l), 10 Microlib C libraries (mc_*) and 30 Stdlib C libraries (c_*).

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

  3. Copy the 3 header files from the temporary directory into your RVCT include directory. The default include location is:

    ~/ARM/RVCT/Data/3.1/569/include/unix/

  4. Copy the 6 Cortex-M1 C helper libraries (h_p*.b and h_p*.l), 10 Microlib C libraries (mc_*) and 30 Stdlib C libraries (c_*) from the temporary directory into your RVCT library directory. The default library location is:

    ~/ARM/RVCT/Data/3.1/569/lib/armlib/

  5. Copy the 5 executables from the temporary directory into your RVCT install directory. The default location is:

    ~/ARM/RVCT/Programs/3.1/569/linux-pentium/

  6. *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

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

  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


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: 
    0x2732f50x2bb15d0x5db3ba0x92b6e90x995e1d0x9be5130xaaa2970xb7310e
    0xca7b8d0xcc39580xcc5a940xfe1945.

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:

  • The norm_s and norm_l functions in dspfns.h now return zero output for zero input, that is, the same behaviour as RVCT 3.0.

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, 0x995e1d0xa0269c, 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.bh_p.lh_pe.bh_pe.lh_pf.bh_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: 
    0x0da3360x2bb15d0x42983d0x63faa50x9005f20x87ecef0xca4d2f0xe35e83
    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: 
    0x3e840d0x2bb15d0xafee200xfe19450x87ecef0x2cc72c0xe35e83
    0xca7b8d0xca4d2f0x7b54d80xe46b320x28aa970x1e1ec00xa95fee
    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

*Download (Login Required) EULA included in archive



*
**
*4 dots*Other ARM Websites
*
shadow *LEGAL STATEMENTshadow