17dd7cddfSDavid du Colombier typedef struct Data Data; 27dd7cddfSDavid du Colombier typedef struct Page Page; 37dd7cddfSDavid du Colombier typedef struct Proc Proc; 47dd7cddfSDavid du Colombier typedef struct Seg Seg; 57dd7cddfSDavid du Colombier 67dd7cddfSDavid du Colombier enum { 77dd7cddfSDavid du Colombier Psegment = 0, 87dd7cddfSDavid du Colombier Pfd, 97dd7cddfSDavid du Colombier Pfpregs, 107dd7cddfSDavid du Colombier Pkregs, 117dd7cddfSDavid du Colombier Pnoteid, 127dd7cddfSDavid du Colombier Pns, 137dd7cddfSDavid du Colombier Pproc, 147dd7cddfSDavid du Colombier Pregs, 157dd7cddfSDavid du Colombier Pstatus, 167dd7cddfSDavid du Colombier Npfile, 177dd7cddfSDavid du Colombier 187dd7cddfSDavid du Colombier Pagesize = 1024, /* need not relate to kernel */ 197dd7cddfSDavid du Colombier }; 207dd7cddfSDavid du Colombier 217dd7cddfSDavid du Colombier struct Data { 227dd7cddfSDavid du Colombier ulong len; 237dd7cddfSDavid du Colombier char data[1]; 247dd7cddfSDavid du Colombier }; 257dd7cddfSDavid du Colombier 267dd7cddfSDavid du Colombier struct Seg { 277dd7cddfSDavid du Colombier char* name; 28*50e5f38dSDavid du Colombier uvlong offset; 29*50e5f38dSDavid du Colombier uvlong len; 307dd7cddfSDavid du Colombier Page** pg; 317dd7cddfSDavid du Colombier int npg; 327dd7cddfSDavid du Colombier }; 337dd7cddfSDavid du Colombier 347dd7cddfSDavid du Colombier struct Page { 357dd7cddfSDavid du Colombier Page* link; 367dd7cddfSDavid du Colombier ulong len; 377dd7cddfSDavid du Colombier char* data; 387dd7cddfSDavid du Colombier 397dd7cddfSDavid du Colombier /* when page is written, these hold the ptr to it */ 407dd7cddfSDavid du Colombier int written; 417dd7cddfSDavid du Colombier int type; 427dd7cddfSDavid du Colombier ulong pid; 43*50e5f38dSDavid du Colombier uvlong offset; 447dd7cddfSDavid du Colombier }; 457dd7cddfSDavid du Colombier 467dd7cddfSDavid du Colombier struct Proc { 477dd7cddfSDavid du Colombier Proc *link; 487dd7cddfSDavid du Colombier long pid; 497dd7cddfSDavid du Colombier Data* d[Npfile]; 507dd7cddfSDavid du Colombier Seg** seg; /* memory segments */ 517dd7cddfSDavid du Colombier int nseg; 527dd7cddfSDavid du Colombier Seg* text; /* text file */ 537dd7cddfSDavid du Colombier }; 547dd7cddfSDavid du Colombier 557dd7cddfSDavid du Colombier extern char *pfile[Npfile]; 567dd7cddfSDavid du Colombier 577dd7cddfSDavid du Colombier Proc* snap(long pid, int usetext); 587dd7cddfSDavid du Colombier void* emalloc(ulong); 597dd7cddfSDavid du Colombier void* erealloc(void*, ulong); 607dd7cddfSDavid du Colombier char* estrdup(char*); 617dd7cddfSDavid du Colombier void writesnap(Biobuf*, Proc*); 627dd7cddfSDavid du Colombier Page* datapage(char *p, long len); 637dd7cddfSDavid du Colombier Proc* readsnap(Biobuf *b); 64*50e5f38dSDavid du Colombier Page* findpage(Proc *plist, long pid, int type, uvlong off); 659a747e4fSDavid du Colombier 669a747e4fSDavid du Colombier int debug; 67