]> Cypherpunks repositories - gostls13.git/commitdiff
stack allocation for the init function
authorKen Thompson <ken@golang.org>
Tue, 14 Oct 2008 03:14:09 +0000 (20:14 -0700)
committerKen Thompson <ken@golang.org>
Tue, 14 Oct 2008 03:14:09 +0000 (20:14 -0700)
R=r
OCL=17063
CL=17063

src/cmd/gc/dcl.c
src/cmd/gc/go.h
src/cmd/gc/go.y

index 5ba74084441ebe3baa601f198e525ed6252efe45..725bfd2ae0d54aeb1c1fa780e0a8f90f831ecb92 100644 (file)
@@ -987,7 +987,7 @@ fninit(Node *n)
        // (2)
 
        maxarg = 0;
-       stksize = 0;
+       stksize = initstksize;
 
        snprint(namebuf, sizeof(namebuf), "init_%s_function", filename);
 
index 5916b11ebf9ebcd166ea6d7909b517bc0e40451e..fec7ba7ddea7ebc92fe9e378c106f606df0815c6 100644 (file)
@@ -451,7 +451,8 @@ EXTERN      Node*   lastconst;
 EXTERN int32   vargen;
 EXTERN int32   exportgen;
 EXTERN int32   maxarg;
-EXTERN int32   stksize;
+EXTERN int32   stksize;                // stack size for current frame
+EXTERN int32   initstksize;            // stack size for init function
 EXTERN ushort  blockgen;               // max block number
 EXTERN ushort  block;                  // current block number
 
index d08fb515ca4ed16dbdf4b8893e7cfe270bd85025..b7eba4a47072e883385f45164d9bfcf2e926daad 100644 (file)
@@ -178,7 +178,11 @@ hidden_import_list:
  * declarations
  */
 xdcl:
-       common_dcl
+       { stksize = initstksize; } common_dcl
+       {
+               $$ = $2;
+               initstksize = stksize;
+       }
 |      xfndcl
        {
                $$ = N;
@@ -187,10 +191,11 @@ xdcl:
        {
                $$ = N;
        }
-|      LEXPORT { exportadj = 1; } common_dcl
+|      LEXPORT { exportadj = 1; stksize = initstksize; } common_dcl
        {
                $$ = $3;
                exportadj = 0;
+               initstksize = stksize;
        }
 |      LEXPORT '(' export_list_r ')'
        {