Why "use_newlib_reent true" require "a print" before start scheduler to show messages in the UART?

Hello
We use freertos based 10.4.3 (Zynq 7000 Soc).
After set “use_newlib_reent true” we have observed that no output is show in the UART (std::cout) from any thread.
While debugging the issue I have found that just by “printing” something before start scheduler the issue is fix, UART messages are shown normally from all thread.

I don’t understand why.
I appreciated if anyone can help to understand what it’s going on.

Below you can find the pseudocode of the:
CASE1-> no output in the UART when do any “std::cout <<“a messge”;”
CASE2-> everything works fine.

I want to remark that:
1.-Without enable reent we don’t observe this behaviour.
2.-The only difference from CASE1 and CASE2 is the line “std::cout << “Just print something” << std::endl;”

Thank you all.

Regards.

A.
CASE1: No output is shown in the UART when try to print in main thread and other threads in the code:
static Tools::SPDThread mainThread(&mainProcess, “Main”, 8192, NULL, tskIDLE_PRIORITY + 1);
Tools::SPDThread::StartScheduler();
CASE2: Everything worsks fine: I can use uart all over the main thread and other threads in the code:
std::cout << “Just print something” << std::endl;
static Tools::SPDThread mainThread(&mainProcess, “Main”, 8192, NULL, tskIDLE_PRIORITY + 1);
Tools::SPDThread::StartScheduler();

Assuming that use_newlib_reent true maps to configUSE_NEWLIB_REENTRANT, this support in FreeRTOS is there to support newlib reentrancy and it is hard to guess how it might be effecting your UART. Since you have both a working and non-working case, can you try to step through the code and see where the code flow differs?