]> Cypherpunks repositories - gostls13.git/commitdiff
defined external registers g and m
authorKen Thompson <ken@golang.org>
Wed, 9 Jul 2008 18:35:26 +0000 (11:35 -0700)
committerKen Thompson <ken@golang.org>
Wed, 9 Jul 2008 18:35:26 +0000 (11:35 -0700)
SVN=126521

src/runtime/rt2_amd64.c
src/runtime/runtime.c
src/runtime/runtime.h

index 632ca9f15fbe1d6a4990fdc590a0acc857312c1a..3ffbb1f99b3dd9b7e97ee523d2ed965e430981ec 100644 (file)
@@ -36,11 +36,11 @@ traceback(uint8 *pc, uint8 *sp, void* r15)
        int32 counter;
        int32 i;
        int8* name;
-       U u;
+       G g;
        Stktop *stktop;
 
        // store local copy of per-process data block that we can write as we unwind
-       mcpy((byte*)&u, (byte*)r15, sizeof(U));
+       mcpy((byte*)&g, (byte*)r15, sizeof(G));
 
        counter = 0;
        name = "panic";
@@ -48,9 +48,9 @@ traceback(uint8 *pc, uint8 *sp, void* r15)
                callpc = pc;
                if((uint8*)_morestack < pc && pc < (uint8*)_endmorestack) {
                        // call site in _morestack(); pop to earlier stack block to get true caller
-                       stktop = (Stktop*)u.stackbase;
-                       u.stackbase = stktop->oldbase;
-                       u.stackguard = stktop->oldguard;
+                       stktop = (Stktop*)g.stackbase;
+                       g.stackbase = stktop->oldbase;
+                       g.stackguard = stktop->oldguard;
                        sp = stktop->oldsp;
                        pc = ((uint8**)sp)[1];
                        sp += 16;  // two irrelevant calls on stack - morestack, plus the call morestack made
index ea6925d10051221f73c15cd42b2ade3c1a0f7c41..8a94f402c02057cadfc2166ef5a097ae0ef58e59 100644 (file)
@@ -571,9 +571,14 @@ check(void)
        initsig();
 }
 
+extern register        u;
+uint32 a;
+
 void
 _newproc(byte* fn, int32 siz, byte* args)
 {
+       a = u;
+
        prints("_newproc fn=");
        sys·printpointer(fn);
        prints("; siz=");
index ff9a4e57b66d2dab863375b8aa542a7faf2dbeed..5fe1cb646de1a6500d5c611658254ace1abadeb8 100644 (file)
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-
 /*
  * basic types
  */
@@ -61,15 +60,15 @@ struct      Map
        int32   unused;
        void    (*fun[])(void);
 };
-typedef        struct  U               U;
-struct U
+typedef        struct  G               G;
+struct G
 {
        byte*   stackguard;     // must not move
        byte*   stackbase;      // must not move
-       U*      ufor;           // dbl ll of all u
-       U*      ubak;
-       U*      runqfor;        // dbl ll of runnable
-       U*      runqbak;
+       G*      ufor;           // dbl ll of all u
+       G*      ubak;
+       G*      runqfor;        // dbl ll of runnable
+       G*      runqbak;
 };
 typedef        struct  M               M;
 struct M
@@ -77,13 +76,15 @@ struct      M
        byte*   istackguard;    // must not move
        byte*   istackbase;     // must not move
 };
+extern register        G*      g;      // R15
+extern register        M*      m;      // R14
 
 /*
  * global variables
  */
-U*     allu;
 M*     allm;
-U*     runq;
+G*     allu;
+G*     runq;
 
 /*
  * defined constants