Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a gcc flag to initialise local variable storage?

Tags:

c

gcc

local

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?

like image 881
Greg Hewgill Avatar asked May 10 '12 02:05

Greg Hewgill


People also ask

How are local variables initialized?

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".

Do local variable needs to be initialized?

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.


1 Answers

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...

like image 111
BRPocock Avatar answered Oct 01 '22 14:10

BRPocock