Annotation of researchv9/jtools/src/pi/core.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.