added pauseTime and wallTime.
[dyninst.git] / dyninstAPI / src / process.h
1 /*
2  *  Copyright 1993 Jeff Hollingsworth.  All rights reserved.
3  *
4  */
5
6 /*
7  * process.h - interface to manage a process in execution. A process is a kernel
8  *   visible unit with a seperate code and data space.  It might not be
9  *   the only unit running the code, but it is only one changed when
10  *   ptrace updates are applied to the text space.
11  *
12  * $Log: process.h,v $
13  * Revision 1.8  1994/07/22 19:20:40  hollings
14  * added pauseTime and wallTime.
15  *
16  * Revision 1.7  1994/07/20  23:23:40  hollings
17  * added insn generated metric.
18  *
19  * Revision 1.6  1994/07/14  23:30:32  hollings
20  * Hybrid cost model added.
21  *
22  * Revision 1.5  1994/07/12  19:43:18  jcargill
23  * Changed order of processState defn, so that initial (==0) state is neonatal.
24  * Otherwise there is a small time-window at startup when it looks like it's
25  * running, but hasn't been initialized.
26  *
27  * Revision 1.4  1994/05/18  00:52:32  hollings
28  * added ability to gather IO from application processes and forward it to
29  * the paradyn proces.
30  *
31  * Revision 1.3  1994/03/31  01:58:33  markc
32  * Extended arguments to createProcess.
33  *
34  * Revision 1.2  1994/03/20  01:53:11  markc
35  * Added a buffer to each process structure to allow for multiple writers on the
36  * traceStream.  Replaced old inst-pvm.C.  Changed addProcess to return type
37  * int.
38  *
39  * Revision 1.1  1994/01/27  20:31:39  hollings
40  * Iinital version of paradynd speaking dynRPC igend protocol.
41  *
42  * Revision 1.6  1993/08/11  01:46:24  hollings
43  * added defs for baseMap.
44  *
45  * Revision 1.5  1993/07/13  18:29:49  hollings
46  * new include file syntax.
47  *
48  * Revision 1.4  1993/06/25  22:23:28  hollings
49  * added parent field to process.h
50  *
51  * Revision 1.3  1993/06/22  19:00:01  hollings
52  * global inst state.
53  *
54  * Revision 1.2  1993/06/08  20:14:34  hollings
55  * state prior to bc net ptrace replacement.
56  *
57  * Revision 1.1  1993/03/19  22:51:05  hollings
58  * Initial revision
59  *
60  *
61  */
62
63 #ifndef PROCESS_H
64 #define PROCESS_H
65
66 #include "util/h/list.h"
67 #include "rtinst/h/rtinst.h"
68 #include "dyninst.h"
69
70 typedef struct processRec process;
71
72 typedef enum { neonatal, running, stopped, exited } processState;
73
74 typedef struct freeListRec freeListEntry;
75
76 typedef enum { HEAPfree, HEAPallocated } heapStatus;
77
78 struct freeListRec {
79     int addr;
80     int length;
81     heapStatus status;
82     freeListEntry *next;
83 }; 
84
85 #define HIST_LIMIT      6
86
87 struct costRec {
88     float hybrid;
89     int currentHist;
90     float lastObservedCost;
91     float past[HIST_LIMIT];
92     float totalPredictedCost;
93     float currentPredictedCost;
94     time64 timeLastTrampSample;
95     time64 wallTimeLastTrampSample;
96 };
97
98 struct processRec {
99     image *symbols;             /* information related to the process */
100     int traceLink;              /* pipe to transfer traces data over */
101     int ioLink;                 /* pipe to transfer stdout/stderr over */
102     processState status;        /* running, stopped, etc. */
103     int pid;                    /* id of this process */
104     int thread;                 /* thread id for thread */
105     Boolean aggregate;          /* is this process a pseudo process ??? */
106     freeListEntry *heap;        /* inferior heap */
107     freeListEntry *heapFreePtr; /* first free block heap */
108     resource rid;               /* handle to resource for this process */
109     process *parent;            /* parent of this proces */
110     List<void *> baseMap;       /* map and inst point to its base tramp */
111     char buffer[2048];
112     int bufStart;
113     int bufEnd;
114     struct costRec cost;
115     float pauseTime;            /* only used on the CM-5 version for now 
116                                    jkh 7/21/94 */
117 };
118
119 extern List<process*> processList;
120
121 process *createProcess(char *file, char *argv[], int nenv, char *envp[]);
122 process *allocateProcess(int pid, char *name);
123 process *findProcess(int pid);
124 void initInferiorHeap(process *proc, Boolean globalHeap);
125 void copyInferriorHeap(process *from, process *to);
126
127 int inferriorMalloc(process *proc, int size);
128 void inferriorFree(process *proc, int pointer);
129
130 #endif