[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#825342: mips/mipsel: make sure all packages built with fpxx enabled



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


Reply to: