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-m to 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_veneershare which keeps the existing behaviour of allowing veneer sharing across execution regions. --no_crosser_veneershare prohibits veneer sharing across execution regions. [737516]
- armlink now supports the option --emit-non-debug-relocs. this functions like --emit-relocs but 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 --largeregions mode is on. when --veneer_inject_type=individual the 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=pool the 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=veneerpools option provides information about how the linker has placed veneer pools. [737514]
added a new linker option --tiebreaker= -
the linker now supports additional options for controlling placement of .any sections. there are two new command line options: --any_sort_order=
where is either descending_size (sort in descending size order) cmdline (sort by command line index) the default is descending_size. --any_placement= where can be first_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), or next_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 is worst_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 the include directory from the temporary directory to replace your existing include directory. the existing directory can be located by the rvct40incenvironment variable, e.g:
> echo $rvct40inc
~/arm/rvct/data/4.0/400/include/ -
copy the lib directory from the temporary directory to replace your existing lib directory. the existing directory can be located by the rvct40lib environment variable, e.g.:
> echo $rvct40lib
~/arm/rvct/data/4.0/400/lib/ -
copy the linux-pentium directory from the temporary directory to replace your existing linux-pentium directory. the existing directory can be located by the rvct40binenvironment variable, e.g.:
> echo $rvct40bin
~/arm/rvct/programs/4.0/400/linux-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
-
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
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_chars in 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_entities has been fixed. [738296]
- a cause of internal fault 0xfe1945 and 0x0d9189 at -o3 -otime has been fixed. [737716, 735852]
assember (armasm)
- the new option --branchpatch=cortex-a8_q109 has 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 .dynstr sctions, which could result in fromelf generating error q0454e. 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 message l6065e when failing to a write contiguous block larger than the maximum of 2gb. [728400]
- armlink now orders .fini_array sections correctly in --sysv images 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 functions towupper() and towlower(), if enabled with #pragma import __use_utf8_ctype and #pragma import __use_full_wctype, and if compiled using --wchar32, would return the wrong answers for the character pair u 1d79 and u a77d, which should be lower-case and upper-case versions of each other. [736950]
-
in strict c mode,
and no longer declare the file type. also, the macro __arm_wchar_no_io can now be defined to cause these headers not to declarefile or the wide i/o function prototypes. [733711]
elf format converter (fromelf)
- sometimes, fromelf --bin would 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 output cie and fde records 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.fp now sets the predefined macro __target_cpu_cortex_m4, not __target_cpu_cortex_m4_fp as previously. the presence of fp can be tested using the__target_fpu_vfp macro. [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]