From: Valters Jansons Date: Sun, 27 Apr 2025 21:56:00 +0000 (+0300) Subject: gh-132026: Ensure _MIPS_SIM has defined _ABI identifiers for comparison (GH-132027) X-Git-Tag: v3.14.0b1~254 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6985e2e6dea67630cf13fc02b7ca727af383207b;p=thirdparty%2FPython%2Fcpython.git gh-132026: Ensure _MIPS_SIM has defined _ABI identifiers for comparison (GH-132027) When built on a MIPS architecture, `_MIPS_SIM` is used to determine architecture specifics. The value is expected to match either `_ABIO32`, `_ABIN32` or `_ABI64`. In `gcc` config/mips/mips.h these values are defined as compiler `builtin_define` inside of a switch/case. That means, mips64el and mips64 architectures know about `_ABI64` but don't know about `_ABIO32` and `_ABIN32`. In turn, when CPython tries to use them in comparison, they may be undefined identifiers. In default compiler behavior, the undefined identifier will be evaluated as zero, and it will not match `_MIPS_SIM`. However, the issues pop up when `-Wundef` (or, even worse, `-Werror=undef`) compiler flag is enabled. Then suddenly it's visible as a warning or error. --- diff --git a/Misc/NEWS.d/next/Build/2025-04-02-21-08-36.gh-issue-132026.ptnR7T.rst b/Misc/NEWS.d/next/Build/2025-04-02-21-08-36.gh-issue-132026.ptnR7T.rst new file mode 100644 index 000000000000..5490b98f25b1 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2025-04-02-21-08-36.gh-issue-132026.ptnR7T.rst @@ -0,0 +1 @@ +Fix use of undefined identifiers in platform triplet detection on MIPS Linux platforms. diff --git a/Misc/platform_triplet.c b/Misc/platform_triplet.c index ec0857a4a998..f5cd73bdea83 100644 --- a/Misc/platform_triplet.c +++ b/Misc/platform_triplet.c @@ -57,21 +57,21 @@ PLATFORM_TRIPLET=arm-linux-androideabi # endif # if defined(_MIPS_SIM) # if defined(__mips_hard_float) -# if _MIPS_SIM == _ABIO32 +# if defined(_ABIO32) && _MIPS_SIM == _ABIO32 # define LIBC_MIPS gnu -# elif _MIPS_SIM == _ABIN32 +# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32 # define LIBC_MIPS gnuabin32 -# elif _MIPS_SIM == _ABI64 +# elif defined(_ABI64) && _MIPS_SIM == _ABI64 # define LIBC_MIPS gnuabi64 # else # error unknown mips sim value # endif # else -# if _MIPS_SIM == _ABIO32 +# if defined(_ABIO32) && _MIPS_SIM == _ABIO32 # define LIBC_MIPS gnusf -# elif _MIPS_SIM == _ABIN32 +# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32 # define LIBC_MIPS gnuabin32sf -# elif _MIPS_SIM == _ABI64 +# elif defined(_ABI64) && _MIPS_SIM == _ABI64 # define LIBC_MIPS gnuabi64sf # else # error unknown mips sim value @@ -107,21 +107,21 @@ PLATFORM_TRIPLET=arm-linux-androideabi # endif # if defined(_MIPS_SIM) # if defined(__mips_hard_float) -# if _MIPS_SIM == _ABIO32 +# if defined(_ABIO32) && _MIPS_SIM == _ABIO32 # define LIBC_MIPS musl -# elif _MIPS_SIM == _ABIN32 +# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32 # define LIBC_MIPS musln32 -# elif _MIPS_SIM == _ABI64 +# elif defined(_ABI64) && _MIPS_SIM == _ABI64 # define LIBC_MIPS musl # else # error unknown mips sim value # endif # else -# if _MIPS_SIM == _ABIO32 +# if defined(_ABIO32) && _MIPS_SIM == _ABIO32 # define LIBC_MIPS muslsf -# elif _MIPS_SIM == _ABIN32 +# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32 # define LIBC_MIPS musln32sf -# elif _MIPS_SIM == _ABI64 +# elif defined(_ABI64) && _MIPS_SIM == _ABI64 # define LIBC_MIPS muslsf # else # error unknown mips sim value