Package: release.debian.org Background: 1. About FPXX:[1] The o32 ABI has been modified and extended. The o32 64-bit floating-point register support is now obsolete and has been removed. It has been replaced by three ABI extensions FPXX, FP64A, and FP64. The meaning of the -mfp64 command-line option has changed. It is now used to enable the FP64A and FP64 ABI extensions. The FPXX extension requires that code generated to access double-precision values use even-numbered registers. Code that adheres to this extension is link-compatible with all other o32 double-precision ABI variants and will execute correctly in all hardware FPU modes. The command-line options -mabi=32 -mfpxx can be used to enable this extension. MIPS II is the minimum processor required. The o32 FP64A extension requires that floating-point registers be 64-bit and odd-numbered single-precision registers are not allowed. Code that adheres to the o32 FP64A variant is link-compatible with all other o32 double-precision ABI variants. The command-line options -mabi=32 -mfp64 -mno-odd-spreg can be used to enable this extension. MIPS32R2 is the minimum processor required. The o32 FP64 extension also requires that floating-point registers be 64-bit, but permits the use of single-precision registers. Code that adheres to the o32 FP64 variant is link-compatible with o32 FPXX and o32 FP64A variants only, i.e. it is not compatible with the original o32 double-precision ABI. The command-line options -mabi=32 -mfp64 -modd-spreg can be used to enable this extension. MIPS32R2 is the minimum processor required. The new ABI variants can be enabled by default using the configure time options --with-fp-32=[32|xx|64] and --with(out)-odd-sp-reg-32. It is strongly recommended that all vendors begin to set o32 FPXX as the default ABI. This will be required to run the generated code on MIPSR5 cores in conjunction with future MIPS SIMD (MSA) code and MIPSR6 cores. 2. How to detect whether FPXX is enabled: readelf -A all object files/shared libraries/static libraries and grep 'FP ABI: Hard float (32-bit CPU, Any FPU)' This only works for o32 objects aka (mips/mipsel) 3. The inherit of object type If all object in a binary/shared-library is compiled with fpxx and it is linked with static libraries have non-fpxx objects, it will show type as non-fpxx if a fpxx-enabled shared-library linked with a non-fpxx enabled shared library, it will still show as fpxx-enabled. Howto: Since background 3, we will need make sure all of the static libraries have type as fpxx-enabled, and then rebuild all other packages non-fpxx-enabled yet. Scripts: detect.sh: usage: sh detect.sh mips > mips.txt buildable.sh: usage: sh buildable.sh mips > mips.buildable [1]. https://gcc.gnu.org/gcc-5/changes.html -- YunQiang Su
Attachment:
buildable.sh
Description: Bourne shell script
Attachment:
detect.sh
Description: Bourne shell script