|
|
1.1 root 1: #include "process.pub"
2: #include "frame.pri"
3: #include "symtab.pri"
4: #include "symbol.h"
5: #include "core.pri"
6: #include "master.pub"
7: SRCFILE("core.c")
8:
9: void Cslfd::init(long l, double d) { flterr=0; flt=dbl=d; chr=sht=lng=l; }
10: Cslfd::Cslfd(long l) { init(l, 0.0); }
11: Cslfd::Cslfd(double d) { init(0, d); }
12: Cslfd::Cslfd(int i) { init(i, 0.0); }
13: Cslfd::Cslfd() { init(0, 0.0); }
14: char *Cslfd::floaterror() { return flterr; }
15:
16: Core::Core(Process *p, Master *m)
17: {
18: _process = p;
19: _symtab = (m && m->core) ? m->core->_symtab : 0;
20: corefd = stabfd = -1;
21: _online = 0;
22: behavs_problem = "?";
23: }
24:
25: char *Core::docall(long,int) { return "docall"; }
26: long Core::apforcall(int) { return 0; }
27: long Core::returnregloc() { return 0; }
28: int Core::corefstat() { return fstat(corefd,&corestat); }
29: int Core::stabfstat() { return fstat(stabfd,&stabstat); }
30: Asm *Core::newAsm() { return 0; }
31: Behavs Core::behavs() { return 0; }
32: Cslfd *Core::peekcode(long l) { return peek(l); }
33: CallStk *Core::callstack() { return 0; }
34: Frame Core::frameabove(long) { Frame f; return f; }
35: Process *Core::process() { return _process; }
36: SymTab *Core::symtab() { return _symtab; }
37: char *Core::special(char*,long) { return "special"; }
38: char *Core::destroy() { return "destroy"; }
39: char *Core::eventname() { return "eventname"; }
40: char *Core::laybpt(Trap*) { return "laybpt"; }
41: char *Core::liftbpt(Trap*) { return "liftbpt"; }
42: char *Core::open() { return "open"; }
43: char *Core::peekstring(long,char*) { return "peekstring"; }
44: char *Core::poke(long,long,int) { return "poke long"; }
45: char *Core::pokedbl(long,double,int) { return "poke double"; }
46: char *Core::procpath() { return _process->procpath; }
47: char *Core::read(long,char*,int) { return "read"; }
48: char *Core::readcontrol() { return "readcontrol"; }
49: char *Core::regname(int) { return "regname"; }
50: char *Core::regpoke(int r,long l) { return poke(regloc(r), l, 4); }
51: char *Core::reopen(char*,char*) { return "reopen"; }
52: char *Core::resources() { return "resources"; }
53: char *Core::run() { return "run"; }
54: char *Core::stabpath() { return _process->stabpath; }
55: char *Core::popcallstack() { return "popcallstack"; }
56: char *Core::step(long,long) { return "step"; }
57: char *Core::stepprolog() { return 0; }
58: char *Core::stop() { return "stop"; }
59: char *Core::write(long,char*,int) { return "write"; }
60: int Core::REG_AP() { return 0; }
61: int Core::REG_FP() { return 0; }
62: int Core::REG_PC() { return 0; }
63: int Core::REG_SP() { return 0; }
64: char *Core::specialop(char*) { return 0; }
65: int Core::event() { return 0; }
66: int Core::online() { return _online; }
67: long Core::ap() { return regpeek(REG_AP()); }
68: long Core::fp() { return regpeek(REG_FP()); }
69: long Core::pc() { return regpeek(REG_PC()); }
70: long Core::regloc(int,int) { return 0; }
71: long Core::regpeek(int r) { return peek(regloc(r))->lng; }
72: long Core::saved(Frame*,int,int) { return 0; }
73: long Core::sp() { return regpeek(REG_SP()); }
74: int Core::nregs() { return 0; }
75:
76: char *Core::problem()
77: {
78: return sf("unanticipated problem: %s; mail tac", behavs_problem);
79: }
80:
81: Cslfd *Core::peek(long loc, Cslfd *fail)
82: {
83: static Cslfd *c;
84: trace( "%d.peek(%d,%d)", this, loc, fail );
85: if( fail != PEEKFAIL ) return fail;
86: return c ? c : (c = new Cslfd);
87: }
88:
89: char *BehavsName(Behavs b)
90: {
91: switch(b){
92: case BREAKED: return "BREAKPOINT:";
93: case ERRORED: return "ERROR STATE:";
94: case HALTED: return "STOPPED:";
95: case ACTIVE: return "RUNNING:";
96: case PENDING: return "EVENT PENDING:";
97: case INST_STEPPED: return "INSTR STEPPED:";
98: case STMT_STEPPED: return "STMT STEPPED:";
99: }
100: return Name( "Behavs=%d", b);
101: }
102:
103: void Core::close()
104: {
105: trace( "%d.close()", this ); VOK;
106: if( corefd>=0 ) ::close(corefd);
107: if( stabfd>=0 ) ::close(stabfd);
108: if( _symtab ) delete _symtab;
109: }
110:
111: char *Core::blockmove(long s, long d, long ct)
112: {
113: trace( "%d.blockmove(0x%X,0x%X,%d)", this, s, d, ct); OK("Core::blockmove");
114: char *buf = new char[ct];
115: char *error = read(s, buf, ct);
116: if( !error ) error = write(d, buf, ct);
117: delete buf;
118: return error;
119: }
120:
121: void Context::restore()
122: {
123: trace( "%d.restore()", this ); VOK;
124: error = "context restore error";
125: }
126:
127: Context *Core::newContext()
128: {
129: return new Context;
130: }
131:
132: void Core::slavedriver(Core *sd)
133: {
134: trace("%d.slavedriver()"); VOK;
135: sd->_symtab->inherit = _symtab;
136: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.