Iinital version of paradynd speaking dynRPC igend protocol.
[dyninst.git] / paradynd / src / main.C
1 /*
2  * Main loop for the default paradynd.
3  *
4  * $Log: main.C,v $
5  * Revision 1.1  1994/01/27 20:31:27  hollings
6  * Iinital version of paradynd speaking dynRPC igend protocol.
7  *
8  *
9  */
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <sys/types.h>
13 #include <sys/time.h>
14 #include <assert.h>
15
16 #include "util/h/list.h"
17 #include "rtinst/h/rtinst.h"
18
19 #include "symtab.h"
20 #include "process.h"
21 #include "inst.h"
22 #include "instP.h"
23 #include "ast.h"
24 #include "util.h"
25 #include "dyninstP.h"
26 #include "metric.h"
27
28
29 dynRPC *tp;
30 extern void controllerMainLoop();
31 extern void initLibraryFunctions();
32
33 main(int argc, char *argv[])
34 {
35
36     initLibraryFunctions();
37
38     if (argc != 1) {
39         printf("remote start not supported\n");
40         exit(-1);
41     }
42     tp = new dynRPC(0, NULL, NULL);
43
44     controllerMainLoop();
45 }
46
47 void dynRPC::coreProcess(int pid)
48 {
49     process *proc;
50
51     proc = processList.find((void *) pid);
52     dumpCore(proc);
53 }
54
55 String dynRPC::getStatus(int pid)
56 {
57     process *proc;
58     extern char *getProcessStatus(process *proc);
59
60     proc = processList.find((void *) pid);
61     return(getProcessStatus(proc));
62 }
63
64 //
65 // NOTE: This version of getAvailableMetrics assumes that new metrics are
66 //   NOT added during execution.
67 //
68 metricInfo_Array dynRPC::getAvailableMetrics(void)
69 {
70     int i;
71     static int inited;
72     static metricInfo_Array metInfo;
73
74     if (!inited) {
75         metricList stuff;
76
77         stuff = getMetricList();
78         metInfo.count = stuff->count;
79         metInfo.data = (metricInfo*) calloc(sizeof(metricInfo), metInfo.count);
80         for (i=0; i < metInfo.count; i++) {
81             metInfo.data[i] = stuff->elements[i].info;
82         }
83         inited = 1;
84     }
85     return(metInfo);
86 }
87
88 double dynRPC::getPredictedDataCost(String_Array focusString, String metric)
89 {
90     metric m;
91     double val;
92     resourceList l;
93
94     m = findMetric(metric);
95     l = findFocus(focusString.count, focusString.data);
96     assert(l);
97     val = guessCost(l, m);
98
99     return(val);
100 }
101
102 void dynRPC::disableDataCollection(int mid)
103 {
104     metricInstance mi;
105     extern void printResourceList(resourceList);
106
107     printf("disable of %s for RL =", getMetricName(mi->met));
108     printResourceList(mi->resList);
109     printf("\n");
110
111     mi = allMIs.find((void *) mid);
112     mi->disable();
113     allMIs.remove(mi);
114     delete(mi);
115 }
116
117 int dynRPC::enableDataCollection(String_Array foucsString,String metric)
118 {
119     int id;
120     metric m;
121     resourceList l;
122
123     m = findMetric(metric);
124     l = findFocus(foucsString.count, foucsString.data);
125     assert(l);
126     id = startCollecting(l, m);
127     return(id);
128 }
129
130 //
131 // not implemented yet.
132 //
133 void dynRPC::setSampleRate(double sampleInterval)
134 {
135     return;
136 }
137
138 Boolean dynRPC::detachProgram(int program,Boolean pause)
139 {
140     return(detachProcess(program, pause));
141 }
142
143 //
144 // Continue program.  We really should make this work on a single pid.
145 //
146 void dynRPC::continueProgram(int program)
147 {
148     continueApplication();
149 }
150 //
151 // We really should make this work on a single pid.
152 //
153 Boolean dynRPC::pauseProgram(int program)
154 {
155     return(pauseApplication());
156 }
157
158 Boolean dynRPC::startProgram(int program)
159 {
160     continueApplication();
161     return(False);
162 }
163
164 //
165 // This is not implemented yet.
166 //
167 Boolean dynRPC::attachProgram(int pid)
168 {
169     return(FALSE);
170 }
171
172 //
173 // start a new program for the tool.
174 //
175 int dynRPC::addExecutable(int argc,String_Array argv)
176 {
177     return(addProcess(argc, argv.data));
178 }