Problem is not in FreeRTOS. It is a generic problem of any RTOS which tries to separate tasks/processes based on their usage of VFP in combination with GCC9. It depends on the presence of VFP/FPU independently on the core (Cortex-A, R4F, R5F, M4F …)
GCC9 can by default use VFP/FPU registers anywhere to temporarily store general local variables instead of putting them on stack. This means, that user is not able to select which process needs VFP enabled.
We are not using FreeRTOS, but an in-house made RTOS (long story why). I tried to ask about this behaviour in gcc-help maillist and I have only one answer, where they have some doubts about sorting tasks to float-point and non-float-point. But I think that it is a common technique in embedded RTOSes because it improves task switching time and memory footprint seriously. Therefore I tried to check if FreeRTOS hase the same problem and found the same problem, and “nobody” knows about it! That was the motivation to create this topic.