=============================================
description
-----------
this realview compilation tools (rvct) 4.0 web patch #4 build 650 is intended for use with realview
developer 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; updated include files and updated c/c libraries.
new enhancements in this release
--------------------------------
[new core support]
* support for arm's new cortex a5 processor
[changes made to improve compatibility with other toolchains]
* with link time code generation (--ltcg), if constant data in one translation unit was imported into another translation unit by an external reference not qualified as 'const', the data might have been put in a writable section. the data now always goes into a read-only section. note that such a program does not strictly conform to c, which requires a symbol with external linkage to have consistent types everywhere it is declared. [721646]
* the compiler's handling of filename extensions now better matches existing conventions. the extensions .ac, .tc and similar are no longer treated as c source when the --gnu_defaults option is used; instead they are passed through to the linker. additionally .sx (and .s on unix hosts) now indicates assembler source that needs pre-processing. [720541, 644030]
* the compiler now supports #pragma weak. this is a deprecated language extension to mark symbols as weak or to define weak aliases of symbols, as an alternative to using the existing __weak keyword or the gcc 'weak' and 'alias' attributes. [720667]
* the compiler now supports integer priority indications on the gnu c 'constructor' and 'destructor' attributes. constructors with a lower priority are called before constructors with a higher priority. [722671]
* the compiler now supports the new gcc 'pcs' attribute to specify the calling convention on targets with hardware floating-point, as an alternative to the existing __softfp keyword. __attribute__((pcs("aapcs-vfp"))) uses floating-point registers; __attribute__((pcs("aapcs"))) uses integer registers, as for __softfp. [721049]
* in gnu mode the compiler now implements "#pragma gcc system_header". this causes subsequent declarations in the current file to be marked as occurring in a system header. this can have an effect on the severity of some diagnostics. [723702]
* in gnu c mode, the compiler now allows the 'template' keyword to be omitted in certain situations where the c standard requires it. [722869]
* in gnu mode, a pointer to a function is now considered to be compatible with a reference to a function for partial ordering purposes in function overload processing. some sources that would be diagnosed as ambiguous in standard mode now compile in gnu mode. [715526]
* selecting --gnu_defaults mode (as implied by --arm_linux) enables --allow_null_this, giving well-defined behavior when a non-virtual member function is called on a null object pointer. [723911]
* the compiler command line option "--gnu_defaults" option no longer implies --enum_is_int, to be consistent with typical defaults for gcc. this switch still enables --gnu, --no_debug_macros, --signed_bitfields, --wchar32, and --no_hide_all. [719559]
* some gcc command line translations for rare and legacy gcc options have been added. [722785]
* when generating dependency lines for a makefile (e.g. with --md or -m) and the source is taken from standard input, the compiler will no longer generate a line in the output that gives a dependency on '
* when using multifile compilation and including the glibc math.h header, conflicts could be reported with the __fabs or __fabsf functions. this has been fixed, and no conflicts will be reported when --gnu (or another option that implies --gnu) is used. [722614]
* the arm_linux subdirectory in the rvct header files has now been split into arm_linux and arm_linux_compat subdirectories. the arm_linux_compat subdirectory now contains those header files required for compatibility with the glibc header files that were previously in the arm_linux subdirectory. in the arm linux-targeting modes --arm_linux, --arm_linux_paths and with gcc command-line translation, the compiler will prepend the arm_linux_compat subdirectory to the system include search path, and it will now append the arm_linux subdirectory to the search path. this improves compatibility with certain applications that depend on the exact include order of these files, when they are included from the glibc headers. [723765]
* armlink now follows gnu toolchain behaviour when handling constructor/destructor sections with priorities. prioritised constructors are now ordered in the same way as gnu in relation to un-prioritised ones and are kept by the --arm_linux switch. [722673]
* error l6654e is now suppressed when linking with --arm_linux, to prevent errors when linking with some gcc-compiled code. [723142]
* the gnu linker ld has a control script that tells the linker to define symbols at various points of the elf image. armlink used to define only the symbols needed by the arm linux start-up code. it now defines all the symbols present in the default control script if they are referenced. the supported symbols are: __executable_start (executables only), etext, _etext, __etext, __data_start, edata, _edata, __bss_start, __bss_start__, __bss_end__, end, _end, __end, _bss_end__. in addition the linker will always define the symbol _dynamic when there is .dynamic section. [720112]
* a new "--undefined=
* a new "--undefined_and_export=
[changes to improve tolerance to errors in input files]
* the default for the linker's --[no_]muldefweak option has been changed to --muldefweak. when multiple definitions of a weak symbol exist, this causes armlink to select the first of these rather than produce an error. [720148]
* it is now possible to downgrade linker errors 6682 and 6683 caused by faulty string merge sections. downgrading these will disable string merging. [719900]
* faulty relocations in linker input files will now produce downgradable errors rather than fatal errors.
downgrading the following errors will cause the relocation to be skipped: l6217e, l6286e, l6738e, l6769e, l6781e, l6923e, l6924e.
downgrading the following errors will cause the relocation to be processed despite the error condition: l6237e, l6241e, l6802e, l6898e
* the linker's file write (l6002u) errors can now be downgraded to warnings for non-critical outputs. non-critical outputs are the files specified by the --feedback, --symdef, --callgraph and --list options. [719898]
* the linker error message "l6242e: cannot link object
[improvements to floating point support]
* hardware floating-point linkage is now supported for arm linux. however, software floating-point linkage will be used by default, including cases where a --cpu option is specified that implicitly support hardware floating-point. in order to use hardware floating point linkage when targeting arm linux, you must explicitly specify this with an appropriate --fpu option (e.g. --fpu=vfpv3) or --apcs=/hardfp. note that hardware floating-point linkage is not supported by the arm linux abi supplement (http://www.codesourcery.com/sgpp/lite/arm/arm_gnu_linux_abi.pdf), and the compiler will issue a warning to indicate this. [720519]
* the following options have been added to the --library_interface command line switch:
aeabi_glibc_hardfp
aeabi_clib_hardfp
aeabi_clib90_hardfp
aeabi_clib99_hardfp
these options cause calls to the c library (including math libraries) to use the hardware floating-point calling convention. it is an error to use these library interfaces when compiling with --fpu=softvfp. [721565]
* the performance of some floating-point routines in microlib has been significantly improved. [678021]
[general enhancements]
* support for windows 7
* intrinsics have been added to the compiler for __smladx, __smlaldx, __smlsdx, __smlsldx, __smuadx and __smusdx, with the same signatures as the existing intrinsics such as __smlad. these generate the 'x' variants of the instructions, with the half-words swapped in the relevant operand. [721831]
* vectorisation has been improved, enabling some loops to be vectorised that previously could not be. [670517]
* the compiler now passes the option --[no_]hide_all through to the assembler when invoking it on assembler sources or embedded assembler. this sets the default visibility for symbol when using dynamic linkage. [512423]
* it is now possible to declare an embedded assembler function as static. previously, declaring an __asm function as static would cause error #1122, or internal error 0xafc2db when 'static' occurred on a separate prototype. [720153]
* a new compiler option --[no_]rtti_data has been added, to control the generation of c rtti data. the option --no_rtti only disables source-level rtti features such as dynamic_cast, while --no_rtti_data disables both source-level features and the generation of rtti data. when using gcc translation, -fno-rtti implies --no_rtti_data. [721182]
* the compiler has a new option -p. this performs preprocessing of the input without compilation, as with -e, however this option does not generate line markers in the preprocessed output. this might be used when preprocessed output is to be parsed by another script or utility. [719509]
* the compiler now accepts input from character devices such as /dev/null. formerly these would be faulted as invalid. note that the --compile_all_input option will normally be required to have such names treated as source. [723224]
* a new linker switch "--export-dynamic" is now available, which exports non-hidden symbols only if there is a dynamic segment already in the image. this is in addition to the switch "--export-all" which cannot be used to produce a statically linked image because it will always export non-hidden symbols, forcing the creation of a dynamic segment. [720121]
* the linker will now warn when import or export commands in a steering file can not be applied because the --override_visibility switch has not been specified on the command line. [677320]
* when creating a shared library, the --symbolic option is used to prevent the dynamic loader from overriding global definitions within the shared library. armlink now takes advantage of this knowledge and does not create a plt entry for references coming from the same library. [721954]
* armlink now accepts c-style multi-line comments in its symver scripts and scatter files. [720472]
os platforms
------------
this patch has been tested on the following supported platforms:
windows 7 (new)
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:
1) extract the contents of the archive into a temporary directory.
2) 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. then type:
which armcc
this will tell you the subdirectory that armcc is located in.
3) copy the include directory from the temporary directory to replace your existing include
directory. the existing directory can be located by the rvct40inc environment variable, eg:
> echo $rvct40inc
~/arm/rvct/data/4.0/400/include/
4) 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, eg:
> echo $rvct40lib
~/arm/rvct/data/4.0/400/lib/
5) copy the linux-pentium directory from the temporary directory to replace your existing
linux-pentium directory. the existing directory can be located by the rvct40bin environment variable, eg:
> echo $rvct40bin
~/arm/rvct/programs/4.0/400/linux-pentium/
6) the updated tools should now have been installed. to confirm this, type:
armcc --vsn
armlink --vsn
armasm --vsn
fromelf --vsn
armar --vsn
the version returned should be rvct 4.0 build 650.
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
--------------------------------------------------------------------------------------
rvct 4.0 patch build 650 includes the following corrections since rvct 4.0 build 591:
--------------------------------------------------------------------------------------
compiler:
* the compiler now has an option --[no_]type_traits_helpers to enable support for type traits helpers like __is_union and __has_virtual_destructor. the helpers were enabled in non-gnu c mode by default, and were also enabled when emulating g 4.3 or later. the only change is to provide this option to allow the default to be overridden. [721045]
* a problem has been fixed with code generated for switch statements when using profile-guided optimization. [720056]
* in some situations the compiler would incorrectly re-use the base register of a load, causing the offset of a subsequent load to overflow, which has now been fixed. [720891]
* in gnu c mode, static tables of relative label offsets of the form "&&a - &&b" could contain incorrect data. this is now fixed. [721194]
* fusing nested loops can result in an upper bound that exceeds the datatype limit. in some circumstances, the compiler failed to avoid this situation, which has been fixed. [722205]
* passing a char array as the format string argument of a printf function whose return value is used would incorrectly cause the symbol _scanf_wstring to be referenced. this has been fixed. [723780]
* printf will no longer be linked in if all sections containing a call to it have been removed by unused section elimination. [667818]
* previously, attempting to use the symbol rename keyword __asm("name") on the prototype of an embedded assembler function did not work, because the embedded assembler would use the original c name. this is now fixed: the supplied assembler name is used. [721806]
* c exceptions generation could provoke a crash in a situation where a switch statement occurred in the lifetime of a local variable of class type with an empty destructor body. this is now fixed. [721019]
* c class methods declared inline (either implicitly or explicitly) and that were placed in named elf section, could produce linker failures when compiling with dwarf2 debug information (--debug --dwarf2). this has been fixed. [723369]
* some causes of the following internal faults have been fixed: 0xe664d6, 0xfc68b8, 0x87ecef, 0xafee20, 0x9f28b9 & 0x0d9491 [720108, 722435, 722511, 722766, 723231 & 723245]
assembler:
* improved the accuracy of detection of a1546w for mov and mvn instructions with sp as destination register. [720034]
* srs with an invalid mode number is now an error. you can use --diag_warning=1584 to get previous behaviour. [720203]
* assembler no longer accepts and produces invalid code for neon vshl and vqshl instructions with immediate shift equal to the size of the data type. [719812]
* yield, wfe, wfi and sev are now diagnosed as behaving as nop (diagnostic 1807) on arm1136-rev1 and arm1176. [719465]
* improved architectural diagnosis of unpredictable instructions in disassembly. [720255]
* assembling a pc-relative ldrd on a not word-aligned offset in armv7-m is now diagnosed unpredictable. [720720]
linker:
* fixed a problem with steering files that contain both import * and export *. armlink will no longer give the error message error: l6279e: ambiguous selectors found for
* the rename symbol command in linker steering files will no longer rename a lib$$request symbol entry, as this would break library searching. [719736]
* armlink no longer erroneously produces "error: l6236e: no section matches selector - no section to be first/last." for scatter files when --no_veneershare is selected. [720539]
* armlink --show_cmdline now shows input object files and libraries as in earlier releases. [720197]
* the linker could lose zi sections when using __at sections that are assigned to execution regions that contain both rw and zi sections. this has now been fixed. [720096}
* partial linking object files could lose the shf_strings flag of a section that is also part of a group. if the partial object is used in a subsequent link and the group containing the section is selected then the linker would issue error l6883e. this is now fixed. [720254]
* in some cases an elf object produced by gcc can have a relocation to the symbol at index 0. this is usually an error by the object producer so armlink displays error message l6029 unless the relocation is of type r_arm_v4bx. when partial linking with this error downgraded (or using objects with r_arm_v4bx relocations) an internal error can occur. this has now been fixed. [721112]
* the linker now supports the option --[no_]merge_partial_comdat that controls whether shf_comdat groups are merged when partial linking. [720884]
* if the linker could not place a veneer close enough to the call site due to large elf section, the linker could loop infinitely trying to generate veneers for the section. this is now fixed. [720424]
* the linker could crash if an input object contains an invalid vfe section. this has been fixed, and the error messages for invalid vfe information (l6643, l6644, l6645, l6656) can now be suppressed. if the linker encounters an error and the message has been suppressed it will switch the vfe optimisation off, which is the equivalent of using the --vfemode=off switch on the command line. [720128 & 719899]
* the linker could underestimate the size of the got section when linking with --sysv (as implied by --arm_linux) when a tls relocation r_arm_tls_ldm32 is present in the image. this may cause problems when the relocation is resolved, either by the dynamic linker, or by armlink when statically linking. this has now been fixed. [723207]
* a problem could occur when linking an application against a shared library that contains a weak-alias for a global data symbol, and both the library and the application refer to the weak-alias. for the application the linker must import the non-weak symbol at the same address as the weak alias, and must re-define and export the weak-alias as a definition. this will allow both the application and the library to use the same copy of the data item. previously, the weak-alias was not exported from the application so the library and the application use different copies of the data. this has now been fixed and armlink will export the weak-alias. [720795]
* l6260e could be generated when automatically placing .arm.__at sections whose base address size is greater than 0xffffffff. this is now fixed [721272]
* when using microlib under certain conditions, the linker could incorrectly generate the error "fatal error: l6787u: region table handler '__scatterload_null' needed by entry for er_decompress was not found". this has now been fixed. [723439]
* link time code generation (--ltcg) could sometimes fail on windows hosts when a large number of inputs were used, due to limits on subprocess command line length. this is now fixed.
* the linker can now merge strings section where the address has been generated by a movt and movw instruction sequence. previously the linker would generate warning l6412w, and disable string merging for the section containing the unsupported relocation. [720759]
libraries:
* the program exit code passed to exit() or returned from main() did not reliably find its way to the underlying _sys_exit() function. this has been fixed. [722485]
* when using the real-time heap in a multithreaded program, malloc() was not releasing the heap mutex in the case where it returned failure. this has been fixed. [722557]
* the c runtime library function __aeabi_vec_ctor_cookie_nodtor was implemented incorrectly, and has been corrected. [713271]
fromelf:
* "fromelf --elf" incorretly removed any file offsets inserted by the linker. it now maintains file offsets specified by the p_align elf field [720261]