The IBM AIX xlc
compiler offers a flag that generates code to initialise local variable storage:
initauto=<hh>
Initialialize automatic storage to <hh>. <hh> is a
hexadecimal value. This generates extra code and
should only be used for error determination.
I think the MSVC compiler does something similar for debug builds, but my memory may be hazy on this point.
Is there an equivalent option for GCC?
Local Variables Declarations specify the type followed by the name, and optionally the initialization. Initialization sets the variable to a new instance. It must be to a type that is compatible with the declaration type. In the above code, the variable a is declared as a string and is initialized to "Hello World".
Local variables must be initialized before use, as they don't have a default value and the compiler won't let us use an uninitialized value.
OK, Best answer I can offer.
http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html says "no," by omission. There's no documentation of anything to inject stack-wiping code into the output.
As near as I could guess, the only way this could work, is to inject some memset
-like code (perhaps as simple as a few mov
operations, but nonetheless) into the beginning of each embedded lexical frame in which an automatic variable is created. As near as I can tell -- and I am far from an expert on the internals of GCC, but -- there seems to be nothing documented that would do so.
In further following this, the PDF gccint.pdf of GCC Internals (http://gcc.gnu.org/onlinedocs/gccint.pdf) on page 361 defines that the GCC name for the frame pointer adjustment call step on entry to a function is prologue
. (I don't really know/understand whether this applies to other lexical scopes within a function, however.) Since that should occur in a Machine Definition (md) file, any such option would seem to have to be defined for a CPU architecture. I poked at their online ViewCVS at http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/ and found (at least one) copy of prologue
around line 11,893 of i386.md, which after playing search-for-the-function-expansion a few hops, doesn't seem to have anything to emit conditional code like that.
But this under-GCC's-hood stuff is kinda neat...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With