GNAT can generate code to zero-out hardware registers before returning from a subprogram.
It can be enabled with the `-fzero-call-used-regs' command line
option, to affect all subprograms in a compilation, and with a
Machine_Attribute
pragma, to affect only specific subprograms.
procedure Foo; pragma Machine_Attribute (Foo, "zero_call_used_regs", "used"); -- Before returning, Foo scrubs only call-clobbered registers -- that it uses itself. function Bar return Integer; pragma Machine_Attribute (Bar, "zero_call_used_regs", "all"); -- Before returning, Bar scrubs all call-clobbered registers.
For usage and more details on the command line option, and on the
zero_call_used_regs
attribute, see Using the GNU Compiler Collection (GCC).