From 7b454bb1d92fcc70f7cc60454e74e7c62547462c Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Wed, 9 Jul 2008 11:35:26 -0700 Subject: [PATCH] defined external registers g and m SVN=126521 --- src/runtime/rt2_amd64.c | 10 +++++----- src/runtime/runtime.c | 5 +++++ src/runtime/runtime.h | 19 ++++++++++--------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/runtime/rt2_amd64.c b/src/runtime/rt2_amd64.c index 632ca9f15f..3ffbb1f99b 100644 --- a/src/runtime/rt2_amd64.c +++ b/src/runtime/rt2_amd64.c @@ -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 diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index ea6925d100..8a94f402c0 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -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="); diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h index ff9a4e57b6..5fe1cb646d 100644 --- a/src/runtime/runtime.h +++ b/src/runtime/runtime.h @@ -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