mirror of
https://github.com/golang/go
synced 2024-11-12 07:40:23 -07:00
defined external registers g and m
SVN=126521
This commit is contained in:
parent
1e9adf8228
commit
7b454bb1d9
@ -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
|
||||
|
@ -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=");
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user