description
this realview compilation tools (rvct) 4.0 web patch #7 build 821 is intended for use with realview development 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, include files and c/c libraries.
enhancements since rvct 4.0 build 771
general enhancements
- the tools now support--cpu=7e-mto generate code for the 7-m architecture enhanced with dsp (saturating and 32-bit simd) instructions as featured in the cortex-m4 processor. [736675]
- armlink now supports a new sorting type:--sort=lexicalstate. this sorts all thumb code before arm code and then sorts lexically. [738147]
- armlink now supports a new switch--[no_]crosser_veneershare. the default is--crosser_veneersharewhich keeps the existing behaviour of allowing veneer sharing across execution regions.--no_crosser_veneershareprohibits veneer sharing across execution regions. [737516]
- armlink now supports the option--emit-non-debug-relocs. this functions like--emit-relocsbut outputs only relocations from non-debug sections. [737515]
-
added new linkeroption--veneer_inject_type=
where can be either or . the default is . the option controls the veneer layout when--largeregionsmode is on. when--veneer_inject_type=individualthe linker will place veneers so that they can be reached by the largest amount of sections that use the veneer. veneer reuse between execution regions is permitted. this type minimises the number of veneers that are required but disrupts the structure of the image the most. when--veneer_inject_type=poolthe linker will collect veneers from a contiguous range of the execution region and place all the veneers generated from that range into a pool placed at the end of the range. a large execution region may have more than one range and therefore more than one pool. this type has much less impact on the structure of image but has less opportunities for reuse as a range of code cannot reuse a veneer in another pool. the linker calculates the range based on the presence of branch instructions that the linker predicts may need veneers. a branch is predicted to need a veneer when a state change is required, or when the distance from source to target (plus a contingency) is greater than branch range. the size of the contingency can be set with the--veneer_pool_size= . by default it is set to 102400 bytes. the--info=veneerpoolsoption provides information about how the linker has placed veneer pools. [737514]added a new linker option--tiebreaker= where is eithercreationorcmdline. a tiebreaker is used when a sorting algorithm needs a total ordering of sections. the default tiebreaker iscreation, which is the order of creation of the section data structure within the linker. the alternative--tiebreaker=cmdlineis the order that the section appears on the command line. the command line order is defined as file.object.section where 'section' is the sh_idx of the section within the object. 'object' is the order that the object appears within the file. 'file' is the order the file appears on the command line. the order that the object appears within the file is only significant if the file is an ar archive. to alter the format of mapfile (generated by--map) to show command line order use the--section_index_display=cmdlineswitch. [737517] -
the linker now supports additional options for controlling placement of .any sections. there are two new command line options:--any_sort_order=
where is eitherdescending_size(sort in descending size order)cmdline(sort by command line index) the default isdescending_size.--any_placement= where can befirst_fit(place the section in first er with space),best_fit(place the section in er with least free space,worst_fit(place the section in er with most free space), ornext_fit(place the section in current er if there is sufficient space, or move to the next er in the scatter file if there is insufficient space. never back-track to previous er). the default isworst_fit. additionally a new info option has been added:--info any. this will output the sort order, assignment algorithm, and which sections are assigned to which execution region in the order that they are processed by the placement algorithm. [737513]
os platforms
this patch has been tested on the following supported platforms:
- windows 7
- 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
- solaris for sparc 10
in addition, the patch has been tested on the following non-supported platforms:
- windows 2000 sp4
- suse linux 9.2
- ubuntu linux 8.10
installation instructions
to install the patch carry out the following steps:
-
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.
-
extract all the files from the zip file into a temporary directory.
-
copy theincludedirectory from the temporary directory to replace your existingincludedirectory. the existing directory can be located by thervct40incenvironment variable, e.g:
c:\> set rvct40inc
rvct40inc=c:\program files\arm\rvct\data\4.0\400\include\ -
copy thelibdirectory from the temporary directory to replace your existinglibdirectory. the existing directory can be located by thervct40libenvironment variable, e.g.:
c:\> set rvct40lib
rvct40lib=c:\program files\arm\rvct\data\4.0\400\lib\ -
copy thewin_32-pentiumdirectory from the temporary directory to replace your existingwin_32-pentiumdirectory. the existing directory can be located by thervct40binenvironment variable, e.g.:
c:\> set rvct40bin
rvct40bin=c:\program files\arm\rvct\programs\4.0\400\win_32-pentium\ -
the updated tools should now have been installed. to confirm this, open a
dos command prompt window and enter:
armcc --vsn
the version returned should be rvct 4.0 build 821.
armlink --vsn
armasm --vsn
fromelf --vsn
armar --vsn
corrections since rvct 4.0 build 771
compiler (armcc)
- a code generation issue that generated a dereference to uninitialized pointer is now fixed. [734706]
- warnings and errors have always been suppressed in system header files. they are now also suppressed in the corresponding implicitly included template implementation files. [736105]
- when using--remarks, passing a wide string (l"abc") to a printf function could generate a remark #181 about incompatible printf argument even if the corresponding format string was "%ls". the remark now does not occur in this situation. [735496]
- when using--multibyte_charsin gnu modes, the compiler might detect a spurious line concatenation character when a line ended with a multibyte character (e.g. in a comment) followed by one or more whitespace characters. when using c -style trailing comments, this might cause incorrect interpretation of source code. [737748]
- in gnu c mode, use of compound literals (a c99/gnu extension) to initialize file-scope variables could result in runtime failures. this is now fixed. [736266]
- some small corrections have been made to gcc command line translation. [735554]
- a cause of internal fault 0xe70a0c with-g --remove_unneded_entitieshas been fixed. [738296]
- a cause of internal fault 0xfe1945 and 0x0d9189 at-o3 -otimehas been fixed. [737716, 735852]
assember (armasm)
- the new option--branchpatch=cortex-a8_q109has been added to work around a cortex-a8 bug by inserting nops to avoid a wide branch spanning a page boundary. [736360]
linker (armlink)
- armlink could assign an incorrect type to.dynstrsctions, which could result in fromelf generating errorq0454e. this has been fixed. [732898]
- armlink will now process old-style region tables correctly. previously under certain circumstances armlink would fail to link images which implemented their own scatterloading mechanism using old-style region tables, exiting with "arm linker: execution interrupted due to an illegal storage access". [734549]
- armlink will now report error messagel6065ewhen failing to a write contiguous block larger than the maximum of 2gb. [728400]
- armlink now orders.fini_array sectionscorrectly in--sysvimages to ensure destructor functions are executed in the correct order. [737347]
- armlink callgraphs give enhanced function pointer information and combine multiple calls to the same function pointer from the same section. [736849]
- the linker no longer tries to check out two licenses when linking with--ltcg. [737667]
- armlink will generate long branch veneers for branches from position independent code in a 'pi' execution region to targets in an 'absolute' execution region. by default armlink was not reusing these veneers leading to a large code-size increase. this has now been fixed and armlink will reuse these veneers when it is safe to do so. [738802]
c/c libraries
- the full unicode wide-character ctype functionstowupper()andtowlower(), if enabled with#pragma import __use_utf8_ctypeand#pragma import __use_full_wctype, and if compiled using--wchar32, would return the wrong answers for the character pairu 1d79andu a77d, which should be lower-case and upper-case versions of each other. [736950]
-
in strict c mode,
and no longer declare thefiletype. also, the macro__arm_wchar_no_iocan now be defined to cause these headers not to declarefileor the wide i/o function prototypes. [733711]
elf format converter (fromelf)
- sometimes,fromelf --binwould name an output file after an unrelated sht_nobits section which shared the same file offset as the segment contained in the file. [735346]
multiple tools
- when producing dwarf debug information, the assembler and compiler could outputcieandfderecords that had a length that was not a multiple of four, which can cause problems for third-party debug tools. this has now been fixed to produce padding in the appropriate places. [733101]
- --cpu=cortex-m4.fpnow sets the predefined macro__target_cpu_cortex_m4, not__target_cpu_cortex_m4_fpas previously. the presence of fp can be tested using the__target_fpu_vfpmacro. [736497]
- in japanese message locales, when using--diag_style=ide, the comma between file line and column is now an ascii comma rather than a kanji comma. [736125]