The Ada front-end seems to think that clearing flag_zero_initialized_in_bss
means that global variables without an explicit initializer will be
considered to be uninitialized rather than zero initialized by the rest of
the compiler.
No, it doesn't, you misunderstood.
Rather than specifying whether the global will be zero initialized or not,
it specifies by what method it will be zero initialized: whether by placing
in the BSS section or by outputting an explicit block of zeros.
Yes, that's precisely why the flag needs to be cleared: uninitialized really
means uninitialized in Ada so the BSS section isn't guaranteed to be zero-ed
at startup for a pure Ada program.