| |
| Frequently Asked Questions (FAQ) for Marvell GCC Toolchain |
| |
| 1. What is the difference between Marvell GCC Toolchain and any other GCC Toolchain for ARM? |
| Does it cause any problem if I use other compiler? |
| |
| In general, all compilers generate code for ARM v5 ISA will work with Marvell Sheeva |
| based processors. We can support the compiler release by Marvell only. We can not |
| guarantee that any open source compiler is workable because: |
| a) Anyone can take any code to build any version of compiler with any modification, |
| which we do not know, thus we can not guarantee it. |
| b) This is free software; see the source for copying conditions. There is NO warranty; |
| not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| So, there is no any confirmation about the compiler that is not released by us. |
| |
| 2. How reliable is it? |
| |
| The Marvell toolchain is extensively tested and tortured before release. |
| We maintain at least the SAME level of quality, which means no new unknown errors, |
| when compared with the Codesourcery (CSL) release we base on. |
| |
| 3. What are the differences between soft, softfp, and hardfp? |
| |
| soft - Completely compile for integer code in the default GCC configuration and |
| the associated C libraries. All floating point is done using by emulation, implemented |
| in GCC runtime libraries. |
| |
| softfp - Compile for VFP floating point unit. This toolchain generates VFP instructions |
| for the hardware FPU, but uses the same procedure call ABI as the soft toolchain; |
| this means that FP values are passed in the same manner, using r0-r3 ARM registers. |
| |
| hard - Compile for VFP floating point unit, while using a different ABI that uses the |
| FPU registers when calling functions. This utilizes the s0-s15 VFP registers when |
| passing FP values in procedure calls. |
| |
| 4. Under what scenarios should I use the soft/softfp/hard toolchain? |
| |
| The soft toolchain is for completely FPU-less environments; all compiler generated code, |
| and all the C libraries, are integer only code. The math library in glibc is also compiled |
| using all integer code emulated FP library calls inside the GCC runtime. |
| |
| The softfp toolchain uses the VFP unit, but retains the same ABI as the soft toolchain. |
| Binaries compiled under a soft environment, should link and run under a softfp library |
| environment without any issues. If the program called any math library functions, |
| the softfp math library's use of VFP instructions inside should only provide a healthy |
| boost of performance. This toolchain should be used when your platform possesses a VFP unit, |
| while also wishing to retain compatibility with binaries compiled for using the soft ABI |
| interface. |
| |
| The hard FP toolchain, however, uses not only the VFP unit, but also different call |
| conventions for FP values; it uses the VFP FPU registers directly for passing values |
| between procedures. This means a higher level of FP performance compared to the other |
| toolchains, but at the cost of incompatiblity with code compiled using "soft" conventions. |
| This toolchain should be used when FP compatibility is no concern, such as when you are |
| ready to build a completely new Linux root filesystem. Another simple way of using hard FP |
| for individual programs, is to simply statically link those binaries requiring better FP |
| performance. |
| |
| 5. By how much faster is the FP performance of the hard toolchain, compared to softfp? |
| |
| It really depends. Remember the performance edge that hard has over softfp is when |
| passing arguments/returning values across functions. So for code with intensive |
| function calling, i.e. lots of calls in the inner loop, hard FP ABI may help boost |
| performance. |
| |
| To remind of a presumably common scenario, take note that in C/C++, arrays are |
| passed by reference. This means that arrays are NOT passed in registers even under |
| VFP hard float, for example: |
| void transform (float vec[4], /* other args */) |
| Here, vec[4] is passed in memory through a pointer in r0 under all toolchains. |
| So the hard toolchain will not help here. In this example, if you must pass vec[] |
| in registers, wrap it in a struct. :P |
| |
| 6. The hardfp toolchain refuses to compile programs when using -mthumb!? |
| |
| The VFP floating point unit is mostly unaccessible under Thumb-1 mode, |
| therefore the Thumb-1 + hardfp configuration is unsupported. |
| Such a case means that you are probably using a V5 or V6 CPU option. |
| |
| Under V6T2 or V7 CPU options, -mthumb means Thumb-2, which is capable of using |
| VFP instructions. The hardfp toolchain will work with -mthumb in that configuration. |
| |
| 7. Why doesn't the optimization options for non-Marvell processors work anymore? |
| |
| Marvell provides official support for our own processors only, other tuning options |
| are from the original CSL release. While unsupported by us, they can still be enabled |
| by simply adding this GCC flag: |
| -mmrvl-use-unsupported-cpu |
| This re-enables all existing tuning options for other non-Marvell ARM processors. |
| |
| 8. The 4.2.x CSL-release based toolchain is a little old, |
| when will Marvell-specific support be added to the current (newest) mainline sources? |
| |
| This is still being discussed. |
| |
| 9. What are the licenses of packages in the Marvell toolchain? |
| |
| All licenses of packages are as their original ones. |
| GCC 4.2.0: GPLv2. |
| Binutils: GPLv2. |
| GDB: GPLv3+. |
| Glibc: LGPLv2.1. |
| Newlib: http://sourceware.org/newlib/COPYING.NEWLIB. |
| |
| 10. Anything that Marvell added to the license? |
| |
| Copyright c Marvell International Ltd. and/or its affiliates |
| |
| This software file (the ``File'') is owned and distributed by Marvell International Ltd. |
| and/or its affiliates (``Marvell'') under the terms and conditions of the General |
| Public License Version 2, June 1991 (the ``GPL License''), a copy of which is available |
| along with the File in the license.txt file or by writing to the Free Software |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or on the |
| worldwide web at <http://www.gnu.org/licenses/gpl.txt>. |
| |
| THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED WARRANTIES |
| OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY DISCLAIMED. |
| The GPL License provides additional details about this warranty disclaimer. |