On 19/01/2026 19:21, Alexandre Oliva wrote:
>
> When default-overriding options go in TOOL_OPTIONS, rather than in
> site.exp's cflags or multilib_flags, we don't skip multilib.exp, but
> those options may still interfere with multilib selection.
>
> Add cpu and fpu resetting-to-default options before multilib options
> under test, and set -mfloat-abi to a setting compatible with all
> combinations of options under test that don't override it.
>
> Arrange for -mfpu=* and -mfloat-abi=* options to negate each other,
> like -march and -mcpu, so that the overridden options are eliminated
> early on in prune_options, and don't affect multilib selection with
> conflicting choices.
>
> Regstrapped on x86_64-linux-gnu. Also tested with aarch64-elf and
> arm-eabi with gcc-15. Ok to install?
>
>
> for gcc/ChangeLog
>
> * gcc/config/arm/arm.opt (mfloat-abi=, mfpu=): Set Negative.
>
> for gcc/testsuite/ChangeLog
>
> * gcc.target/arm/multilib.exp (check_multi_dir): Prepend
> default-resetting options.
My apologies for dropping the ball on this, I must have wanted to look more
deeply into how this was working and then it got burried under other stuff.
Anyway, this looks fine, except for ...
> ---
> gcc/config/arm/arm.opt | 4 ++--
> gcc/testsuite/gcc.target/arm/multilib.exp | 4 +++-
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt
> index e92a813125260..2a2239245d7b1 100644
> --- a/gcc/config/arm/arm.opt
> +++ b/gcc/config/arm/arm.opt
> @@ -115,7 +115,7 @@ Target Save RejectNegative Negative(mcpu=) ToLower Joined
> Var(arm_cpu_string)
> Specify the name of the target CPU.
>
> mfloat-abi=
> -Target RejectNegative Joined Enum(float_abi_type) Var(arm_float_abi)
> Init(TARGET_DEFAULT_FLOAT_ABI)
> +Target RejectNegative Negative(mfloat-abi=) Joined Enum(float_abi_type)
> Var(arm_float_abi) Init(TARGET_DEFAULT_FLOAT_ABI)
> Specify if floating point hardware should be used.
>
> mcmse
> @@ -157,7 +157,7 @@ EnumValue
> Enum(arm_fp16_format_type) String(alternative)
> Value(ARM_FP16_FORMAT_ALTERNATIVE)
>
> mfpu=
> -Target RejectNegative Joined Enum(arm_fpu) Var(arm_fpu_index)
> Init(TARGET_FPU_auto) Save
> +Target RejectNegative Negative(mfpu=) Joined Enum(arm_fpu)
> Var(arm_fpu_index) Init(TARGET_FPU_auto) Save
> Specify the name of the target floating point hardware/format.
>
> mhard-float
> diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp
> b/gcc/testsuite/gcc.target/arm/multilib.exp
> index b824173e79875..ea9baf4b01579 100644
> --- a/gcc/testsuite/gcc.target/arm/multilib.exp
> +++ b/gcc/testsuite/gcc.target/arm/multilib.exp
> @@ -42,7 +42,9 @@ proc multilib_config {profile} {
> proc check_multi_dir { gcc_opts multi_dir } {
> global tool
>
> - set options [list "additional_flags=[concat "--print-multi-directory"
> $gcc_opts]"]
> + # Restore CPU, FPU and ABI defaults so that even if TOOL_OPTIONS
> + # set them, that won't affect our testing.
> + set options [list "additional_flags=[concat "--print-multi-directory
> -mcpu=unset -mfpu=auto -mfloat-abi=soft" $gcc_opts]"]
... Don't you also want to have -march=unset in this list as well?
> set gcc_output [${tool}_target_compile "" "" "none" $options]
> if { [string match "$multi_dir\n" $gcc_output] } {
> pass "multilibdir $gcc_opts $multi_dir"
>
I'm happy either way, but it looks inconsistent to leave that out.
R.