22 #include <sys/prctl.h>
23 #include <sys/types.h>
43 #include "target_listener_moduleStub.h"
45 static pthread_mutex_t target_rpc_mutex = PTHREAD_MUTEX_INITIALIZER;
46 static int init_done = 0;
53 static int target_rpc_monitor_evloop_attach(
struct evloop *
evloop,
void *obj) {
62 static int target_rpc_monitor_evloop_detach(
struct evloop *evloop,
void *obj) {
63 struct target *target = (
struct target *)obj;
72 void *obj,
void *objstate,
73 int kill,
int kill_sig) {
74 struct target *target = (
struct target *)obj;
81 verror(
"could not close target (error %d)!\n",retval);
87 static int target_rpc_monitor_fini(
struct monitor *monitor,
88 void *obj,
void *objstate) {
89 struct target *target = (
struct target *)obj;
101 static int target_rpc_monitor_evloop_is_attached(
struct evloop *evloop,
void *obj) {
102 struct target *target = (
struct target *)obj;
116 static int target_rpc_monitor_fatal_error(
monitor_error_t error,
void *obj) {
123 static int target_rpc_monitor_child_recv_msg(
struct monitor *monitor,
125 struct target *target = (
struct target *)monitor->
obj;
133 static int target_rpc_monitor_recv_msg(
struct monitor *monitor,
135 struct target *target = (
struct target *)monitor->
obj;
143 static int target_rpc_monitor_event(
monitor_event_t event,
int data,
void *obj) {
156 int is_owner,
void *data) {
166 rc = soap_call_vmi1__TargetEventNotification(&l->
soap,l->
url,NULL,
169 if (l->
soap.error == SOAP_EOF && l->
soap.errnum == 0) {
170 vwarn(
"timeout notifying %s; removing!",l->
url);
173 verrorc(
"ActionEvent client call failure %s : ",
175 soap_print_fault(&l->
soap,stderr);
191 "notified authoritative listener %s (which returned %d)\n",
196 "notified non-authoritative listener %s (which returned %d)\n",
200 if (!l->
soap.keep_alive)
201 soap_closesock(&l->
soap);
206 soap_destroy(&l->
soap);
213 enum _vmi1__targetEventType
217 return _vmi1__targetEventType__exited;
219 return _vmi1__targetEventType__exiting;
221 return _vmi1__targetEventType__error;
224 return _vmi1__targetEventType__osThreadCreated;
226 return _vmi1__targetEventType__osThreadExited;
228 return _vmi1__targetEventType__osThreadExiting;
230 return _vmi1__targetEventType__osSpaceNew;
232 return _vmi1__targetEventType__osSpaceMod;
234 return _vmi1__targetEventType__osSpaceDel;
236 return _vmi1__targetEventType__osRegionNew;
238 return _vmi1__targetEventType__osRegionMod;
240 return _vmi1__targetEventType__osRegionDel;
242 return _vmi1__targetEventType__osRangeNew;
244 return _vmi1__targetEventType__osRangeMod;
246 return _vmi1__targetEventType__osRangeDel;
249 return _vmi1__targetEventType__osProcessThreadCreated;
251 return _vmi1__targetEventType__osProcessThreadExited;
253 return _vmi1__targetEventType__osProcessThreadExiting;
255 return _vmi1__targetEventType__osProcessSpaceNew;
257 return _vmi1__targetEventType__osProcessSpaceMod;
259 return _vmi1__targetEventType__osProcessSpaceDel;
261 return _vmi1__targetEventType__osProcessRegionNew;
263 return _vmi1__targetEventType__osProcessRegionMod;
265 return _vmi1__targetEventType__osProcessRegionDel;
267 return _vmi1__targetEventType__osProcessRangeNew;
269 return _vmi1__targetEventType__osProcessRangeMod;
271 return _vmi1__targetEventType__osProcessRangeDel;
274 return _vmi1__targetEventType__processThreadCreated;
276 return _vmi1__targetEventType__processThreadExited;
278 return _vmi1__targetEventType__processThreadExiting;
280 return _vmi1__targetEventType__processSpaceNew;
282 return _vmi1__targetEventType__processSpaceMod;
284 return _vmi1__targetEventType__processSpaceDel;
286 return _vmi1__targetEventType__processRegionNew;
288 return _vmi1__targetEventType__processRegionMod;
290 return _vmi1__targetEventType__processRegionDel;
292 return _vmi1__targetEventType__processRangeNew;
294 return _vmi1__targetEventType__processRangeMod;
296 return _vmi1__targetEventType__processRangeDel;
299 verror(
"BUG: bad target_event_t %d; returning UINT_MAX\n",
305 static int target_rpc_monitor_notify(
void *obj) {
306 struct target *target = (
struct target *)obj;
321 memset(<d,0,
sizeof(ltd));
328 pthread_mutex_lock(&target_rpc_mutex);
337 ltd.
reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
367 g_hash_table_destroy(ltd.
reftab);
368 soap_destroy(&encoder);
372 pthread_mutex_unlock(&target_rpc_mutex);
379 .evloop_detach = target_rpc_monitor_evloop_detach,
380 .close = target_rpc_monitor_close,
381 .fini = target_rpc_monitor_fini,
382 .evloop_is_attached = target_rpc_monitor_evloop_is_attached,
383 .child_recv_msg = target_rpc_monitor_child_recv_msg,
384 .recv_msg = target_rpc_monitor_recv_msg,
385 .error = target_rpc_monitor_error,
386 .fatal_error = target_rpc_monitor_fatal_error,
387 .notify = target_rpc_monitor_notify,
394 pthread_mutex_lock(&target_rpc_mutex);
397 pthread_mutex_unlock(&target_rpc_mutex);
409 &target_rpc_monitor_objtype_ops,&target_rpc_mutex);
413 pthread_mutex_unlock(&target_rpc_mutex);
420 struct target *
t = NULL;
421 struct monitor *m = NULL;
423 pthread_mutex_lock(&target_rpc_mutex);
426 pthread_mutex_unlock(&target_rpc_mutex);
430 pthread_mutex_unlock(&target_rpc_mutex);
444 (
int)(uintptr_t)objid);
456 pthread_mutex_unlock(&target_rpc_mutex);
472 #ifdef ENABLE_XENSUPPORT
482 #ifdef ENABLE_XENSUPPORT
492 struct target *target;
502 array_list_free(tlist);
507 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
512 g_hash_table_destroy(reftab);
513 array_list_free(tlist);
523 struct target *
t = NULL;
528 return soap_receiver_fault(soap,
"Nonexistent target!",
529 "Specified target does not exist!");
532 vwarn(
"load_available_threads failed; ignoring!\n");
534 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
536 g_hash_table_destroy(reftab);
544 vmi1__TargetIdT tid,
int maxSize,
546 struct target *
t = NULL;
547 struct monitor *m = NULL;
555 return soap_receiver_fault(soap,
"Nonexistent target!",
556 "Specified target does not exist!");
570 memset(&statbuf,0,
sizeof(statbuf));
572 verror(
"could not stat target stdout logfile %s: %s\n",
574 else if ((fd = open(t->
spec->
outfile,O_RDONLY)) < 0) {
575 verror(
"could not open target stdout logfile %s: %s\n",
580 if (statbuf.st_size > 0) {
581 sz = statbuf.st_size;
582 if (maxSize > 0 && maxSize < statbuf.st_size)
588 lseek(fd,statbuf.st_size - sz,SEEK_SET);
592 vwarn(
"only read %d of %d bytes for stdoutLog: %s\n",
593 rc,sz,strerror(errno));
596 vwarn(
"only read %d of %d bytes for stdoutLog (no error)\n",
606 memset(&statbuf,0,
sizeof(statbuf));
608 verror(
"could not stat target stderr logfile %s: %s\n",
610 else if ((fd = open(t->
spec->
errfile,O_RDONLY)) < 0) {
611 verror(
"could not open target stderr logfile %s: %s\n",
616 if (statbuf.st_size > 0) {
617 sz = statbuf.st_size;
618 if (maxSize > 0 && maxSize < statbuf.st_size)
624 lseek(fd,statbuf.st_size - sz,SEEK_SET);
627 if (rc != sz && errno) {
628 vwarn(
"only read %d of %d bytes for stderrLog: %s\n",
629 rc,sz,strerror(errno));
632 vwarn(
"only read %d of %d bytes for stderrLog (no error)\n",
734 struct vmi1__TargetSpecT *spec,
735 vmi1__ListenerT *ownerListener,
755 return soap_receiver_fault(soap,
756 "Request needed splitting but not split!",
757 "Request needed splitting but not split!");
761 if (ownerListener->url != NULL)
762 url = ownerListener->url;
763 else if (ownerListener->hostname != NULL
764 && ownerListener->port != NULL) {
765 len =
sizeof(
"http://") + strlen(ownerListener->hostname) \
766 +
sizeof(
":") + 11 +
sizeof(
":/vmi/1/targetListener") + 1;
767 url =
malloc(len *
sizeof(
char));
768 sprintf(url,
"http://%s:%d/vmi/1/targetListener",
769 ownerListener->hostname,*ownerListener->port);
772 return soap_receiver_fault(soap,
"Bad listener!",
"Bad listener!");
776 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
780 g_hash_table_destroy(reftab);
781 return soap_receiver_fault(soap,
"Bad target spec!",
797 if (!spec->dedicatedMonitor
798 || (spec->dedicatedMonitor
838 g_hash_table_destroy(reftab);
840 return soap_receiver_fault(soap,
"Could not create monitor!",
841 "Could not create monitor!");
850 +
sizeof(
".stdout.log") + 1;
851 tmpbuf =
malloc(tmpbuflen);
852 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.stdout.log",
860 +
sizeof(
".stderr.log") + 1;
861 tmpbuf =
malloc(tmpbuflen);
862 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.stderr.log",
872 g_hash_table_destroy(reftab);
874 return soap_receiver_fault(soap,
"Could not instantiate target!",
875 "Could not instantiate target!");
881 verror(
"could not open target!\n");
884 g_hash_table_destroy(reftab);
886 return soap_receiver_fault(soap,
"Could not open target!",
887 "Could not open target after"
888 " instantiating it successfully!");
896 vwarn(
"could not bind target %d to listener %s!?\n",
901 vwarn(
"load_available_threads failed; ignoring!\n");
912 g_hash_table_destroy(reftab);
914 return soap_receiver_fault(soap,
"Could not create argv from spec!",
915 "Could not create argv from spec!");
922 for (i = 0; i < largc; ++
i)
929 g_hash_table_destroy(reftab);
931 return soap_receiver_fault(soap,
"Could not create monitor!",
932 "Could not create monitor!");
950 if (spec->stdinBytes && spec->stdinBytes->__size > 0) {
953 tmpbuf =
malloc(spec->stdinBytes->__size);
954 memcpy(tmpbuf,spec->stdinBytes->__ptr,spec->stdinBytes->__size);
963 +
sizeof(
".stdout.log") + 1;
964 tmpbuf =
malloc(tmpbuflen);
965 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.stdout.log",
970 +
sizeof(
".dedicatedMonitor.stdout.log") + 1;
971 tmpbuf =
malloc(tmpbuflen);
972 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.dedicatedMonitor.stdout.log",
983 +
sizeof(
".stderr.log") + 1;
984 tmpbuf =
malloc(tmpbuflen);
985 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.stderr.log",
990 +
sizeof(
".dedicatedMonitor.stderr.log") + 1;
991 tmpbuf =
malloc(tmpbuflen);
992 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.dedicatedMonitor.stderr.log",
1004 verror(
"error spawning: %d (%s)\n",pid,strerror(errno));
1006 for (i = 0; i < largc; ++
i)
1013 g_hash_table_destroy(reftab);
1015 return soap_receiver_fault(soap,
"Could not spawn forked target!",
1016 "Could not spawn forked target!");
1029 vmi1__TargetIdT utid,
1030 vmi1__ThreadIdT thid,
1031 struct vmi1__TargetSpecT *spec,
1032 vmi1__ListenerT *ownerListener,
1041 char **largv = NULL;
1053 return soap_receiver_fault(soap,
1054 "Request needed splitting but not split!",
1055 "Request needed splitting but not split!");
1059 return soap_receiver_fault(soap,
1060 "Overlays do not support dedicated mode!",
1061 "Overlays do not support dedicated mode!");
1064 (
void **)&ut,&monitor)) {
1065 return soap_receiver_fault(soap,
"Nonexistent underlying target!",
1066 "Specified underlying target does not exist!");
1069 if (ownerListener) {
1070 if (ownerListener->url != NULL)
1071 url = ownerListener->url;
1072 else if (ownerListener->hostname != NULL
1073 && ownerListener->port != NULL) {
1074 len =
sizeof(
"http://") + strlen(ownerListener->hostname) \
1075 +
sizeof(
":") + 11 +
sizeof(
":/vmi/1/targetListener") + 1;
1076 url =
malloc(len *
sizeof(
char));
1077 sprintf(url,
"http://%s:%d/vmi/1/targetListener",
1078 ownerListener->hostname,*ownerListener->port);
1081 return soap_receiver_fault(soap,
"Bad listener!",
"Bad listener!");
1085 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1089 g_hash_table_destroy(reftab);
1090 return soap_receiver_fault(soap,
"Bad target spec!",
1091 "Bad target spec!");
1114 if (!spec->dedicatedMonitor
1115 || (spec->dedicatedMonitor
1123 +
sizeof(
".stdout.log") + 1;
1124 tmpbuf =
malloc(tmpbuflen);
1125 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.stdout.log",
1133 +
sizeof(
".stderr.log") + 1;
1134 tmpbuf =
malloc(tmpbuflen);
1135 snprintf(tmpbuf,tmpbuflen,
"%s/%d.%d.stderr.log",
1145 g_hash_table_destroy(reftab);
1147 return soap_receiver_fault(soap,
"Could not instantiate target!",
1148 "Could not instantiate target!");
1154 verror(
"could not open target!\n");
1157 g_hash_table_destroy(reftab);
1159 return soap_receiver_fault(soap,
"Could not open target!",
1160 "Could not open target after"
1161 " instantiating it successfully!");
1165 vwarn(
"load_available_threads failed; ignoring!\n");
1172 vwarn(
"could not bind target %d to listener %s!?\n",
1184 vmi1__TargetIdT tid,
1186 struct target *
t = NULL;
1189 (
void **)&t,NULL)) {
1190 return soap_receiver_fault(soap,
"Nonexistent target!",
1191 "Specified target does not exist!");
1198 return soap_receiver_fault(soap,
"Could not pause target!",
1199 "Could not pause target!");
1208 vmi1__TargetIdT tid,
1210 struct target *
t = NULL;
1213 (
void **)&t,NULL)) {
1214 return soap_receiver_fault(soap,
"Nonexistent target!",
1215 "Specified target does not exist!");
1222 return soap_receiver_fault(soap,
"Could not resume target!",
1223 "Could not resume target!");
1232 vmi1__TargetIdT tid,
1234 struct target *
t = NULL;
1238 (
void **)&t,&monitor)) {
1239 return soap_receiver_fault(soap,
"Nonexistent target!",
1240 "Specified target does not exist!");
1256 vmi1__TargetIdT tid,
int kill_sig,
1258 struct target *
t = NULL;
1262 (
void **)&t,&monitor)) {
1263 return soap_receiver_fault(soap,
"Nonexistent target!",
1264 "Specified target does not exist!");
1286 vmi1__TargetIdT tid,
1288 struct target *
t = NULL;
1289 struct monitor *monitor = NULL;
1292 (
void **)&t,&monitor)) {
1293 return soap_receiver_fault(soap,
"Nonexistent target!",
1294 "Specified target does not exist!");
1307 vmi1__TargetIdT tid,vmi1__ThreadIdT thid,
1309 struct target *
t = NULL;
1312 (
void **)&t,NULL)) {
1313 return soap_receiver_fault(soap,
"Nonexistent target!",
1314 "Specified target does not exist!");
1321 return soap_receiver_fault(soap,
"Could not pause target thread!",
1322 "Could not pause target thread!");
1331 vmi1__TargetIdT tid,
char *
name,
1332 struct vmi1__DebugFileOptsT *
opts,
1337 struct target *
t = NULL;
1340 (
void **)&t,NULL)) {
1341 return soap_receiver_fault(soap,
"Nonexistent target!",
1342 "Specified target does not exist!");
1350 if (opts->doMultiRef)
1351 soap_set_omode(soap,SOAP_XML_GRAPH);
1357 return soap_receiver_fault(soap,
"Could not find symbol!",
1358 "Could not find symbol!");
1361 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1365 opts,reftab,refstack,0);
1367 array_list_free(refstack);
1368 g_hash_table_destroy(reftab);
1378 vmi1__TargetIdT tid,
char *
name,
1379 struct vmi1__DebugFileOptsT *
opts,
1384 struct target *
t = NULL;
1387 (
void **)&t,NULL)) {
1388 return soap_receiver_fault(soap,
"Nonexistent target!",
1389 "Specified target does not exist!");
1397 if (opts->doMultiRef)
1398 soap_set_omode(soap,SOAP_XML_GRAPH);
1404 return soap_receiver_fault(soap,
"Could not find symbol!",
1405 "Could not find symbol!");
1408 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1412 opts,reftab,refstack,0);
1414 vwarn(
"%d %d %p\n",g_hash_table_size(reftab),
1418 vwarn(
"%d\n",g_hash_table_size(reftab));
1420 array_list_free(refstack);
1421 g_hash_table_destroy(reftab);
1431 vmi1__TargetIdT tid,vmi1__ADDR addr,
1432 struct vmi1__DebugFileOptsT *
opts,
1437 struct target *
t = NULL;
1440 (
void **)&t,NULL)) {
1441 return soap_receiver_fault(soap,
"Nonexistent target!",
1442 "Specified target does not exist!");
1450 if (opts->doMultiRef)
1451 soap_set_omode(soap,SOAP_XML_GRAPH);
1457 return soap_receiver_fault(soap,
"Could not find address!",
1458 "Could not find address!");
1461 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1465 opts,reftab,refstack,0);
1467 array_list_free(refstack);
1468 g_hash_table_destroy(reftab);
1478 vmi1__TargetIdT tid,vmi1__ADDR addr,
1479 struct vmi1__DebugFileOptsT *
opts,
1484 struct target *
t = NULL;
1487 (
void **)&t,NULL)) {
1488 return soap_receiver_fault(soap,
"Nonexistent target!",
1489 "Specified target does not exist!");
1497 if (opts->doMultiRef)
1498 soap_set_omode(soap,SOAP_XML_GRAPH);
1504 return soap_receiver_fault(soap,
"Could not find address!",
1505 "Could not find address!");
1508 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1512 opts,reftab,refstack,0);
1514 vwarn(
"%d %d %p\n",g_hash_table_size(reftab),
1518 vwarn(
"%d\n",g_hash_table_size(reftab));
1520 array_list_free(refstack);
1521 g_hash_table_destroy(reftab);
1531 vmi1__TargetIdT tid,
char *filename,
int line,
1532 struct vmi1__DebugFileOptsT *
opts,
1537 struct target *
t = NULL;
1540 (
void **)&t,NULL)) {
1541 return soap_receiver_fault(soap,
"Nonexistent target!",
1542 "Specified target does not exist!");
1550 if (opts->doMultiRef)
1551 soap_set_omode(soap,SOAP_XML_GRAPH);
1557 return soap_receiver_fault(soap,
"Could not find line!",
1558 "Could not find line!");
1561 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1565 opts,reftab,refstack,0);
1567 array_list_free(refstack);
1568 g_hash_table_destroy(reftab);
1579 vmi1__TargetIdT tid,
char *filename,
int line,
1580 struct vmi1__DebugFileOptsT *
opts,
1585 struct target *
t = NULL;
1588 (
void **)&t,NULL)) {
1589 return soap_receiver_fault(soap,
"Nonexistent target!",
1590 "Specified target does not exist!");
1598 if (opts->doMultiRef)
1599 soap_set_omode(soap,SOAP_XML_GRAPH);
1605 return soap_receiver_fault(soap,
"Could not find line!",
1606 "Could not find line!");
1609 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1613 opts,reftab,refstack,0);
1615 vwarn(
"%d %d %p\n",g_hash_table_size(reftab),
1619 vwarn(
"%d\n",g_hash_table_size(reftab));
1621 array_list_free(refstack);
1622 g_hash_table_destroy(reftab);
1632 struct vmi1__ActionSpecT *spec,
1633 struct target *target) {
1640 if (atype ==
ACTION_RETURN && spec->union_ActionSpecT.return_)
1641 action =
action_return(spec->union_ActionSpecT.return_->code);
1642 else if (atype ==
ACTION_REGMOD && spec->union_ActionSpecT.regmod
1643 && spec->union_ActionSpecT.regmod->registerValue
1644 && spec->union_ActionSpecT.regmod->registerValue->name) {
1646 spec->union_ActionSpecT.regmod->registerValue->
name,
1648 verror(
"bad register number in regmod action!\n");
1653 spec->union_ActionSpecT.regmod->registerValue->value);
1655 else if (atype ==
ACTION_MEMMOD && spec->union_ActionSpecT.memmod
1656 && spec->union_ActionSpecT.memmod->data.__ptr) {
1657 ddata =
calloc(1,spec->union_ActionSpecT.memmod->data.__size);
1658 memcpy(ddata,spec->union_ActionSpecT.memmod->data.__ptr,
1659 spec->union_ActionSpecT.memmod->data.__size);
1662 spec->union_ActionSpecT.memmod->data.__size);
1668 verror(
"bad action spec -- could not attempt action creation!!\n");
1673 verror(
"bad action spec -- failure in action creation!\n");
1680 struct vmi1__ActionEventT event;
1686 int is_owner,
void *data) {
1696 rc = soap_call_vmi1__ActionEventNotification(&l->
soap,l->
url,NULL,
1698 if (rc != SOAP_OK) {
1699 if (l->
soap.error == SOAP_EOF && l->
soap.errnum == 0) {
1700 vwarn(
"timeout notifying %s; removing!",l->
url);
1703 verrorc(
"ActionEvent client call failure %s : ",
1705 soap_print_fault(&l->
soap,stderr);
1727 "notified authoritative listener %s (which returned %d)\n",
1732 "notified non-authoritative listener %s (which returned %d)\n",
1736 if (!l->
soap.keep_alive)
1737 soap_closesock(&l->
soap);
1742 soap_destroy(&l->
soap);
1755 struct target *target = thread->
target;
1757 struct soap encoder;
1760 verror(
"probe not associated with target!\n");
1770 memset(&lad,0,
sizeof(lad));
1781 soap_init(&encoder);
1782 lad.
reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1788 _action_generic_rpc_listener_notifier,
1794 g_hash_table_destroy(lad.
reftab);
1795 soap_destroy(&encoder);
1797 soap_done(&encoder);
1808 struct vmi1__ProbeEventT event;
1814 int is_owner,
void *data) {
1823 rc = soap_call_vmi1__ProbeEventNotification(&l->
soap,l->
url,NULL,
1825 if (rc != SOAP_OK) {
1826 if (l->
soap.error == SOAP_EOF && l->
soap.errnum == 0) {
1827 vwarn(
"timeout notifying %s; removing!",l->
url);
1830 verrorc(
"ProbeEvent client call failure %s : ",l->
url);
1831 soap_print_fault(&l->
soap,stderr);
1842 "notified authoritative listener %s (which returned %d)\n",
1847 "notified non-authoritative listener %s (which returned %d)\n",
1851 if (!l->
soap.keep_alive)
1852 soap_closesock(&l->
soap);
1864 verror(
"bad ActionSpec in probe response!\n");
1871 verror(
"could not schedule action!\n");
1877 vwarn(
"non-authoritative listener %s tried to send %d actions!\n",
1881 soap_destroy(&l->
soap);
1890 struct probe *base) {
1891 struct target *target = probe->
target;
1893 struct soap encoder;
1896 verror(
"probe not associated with target!\n");
1906 memset(&lpd,0,
sizeof(lpd));
1917 soap_init(&encoder);
1919 lpd.
reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
1925 _probe_generic_rpc_listener_notifier,
1928 g_hash_table_destroy(lpd.
reftab);
1929 soap_destroy(&encoder);
1931 soap_done(&encoder);
1940 struct probe *trigger,
struct probe *base) {
1947 struct probe *trigger,
struct probe *base) {
1952 vmi1__TargetIdT tid,vmi1__ThreadIdT thid,
1953 char *probeName,
char *
symbol,
1955 struct target *
t = NULL;
1962 (
void **)&t,NULL)) {
1963 return soap_receiver_fault(soap,
"Nonexistent target!",
1964 "Specified target does not exist!");
1975 return soap_receiver_fault(soap,
"Could not pause target!",
1976 "Could not pause target before adding probe!");
1986 verror(
"could not add a probe on symbol '%s' in target %d thread %d\n",
1991 return soap_receiver_fault(soap,
"Could not add probe!",
1992 "Could not add probe!");
2000 return soap_receiver_fault(soap,
"Could not resume target, but probe added successfully!",
2001 "Could not resume target after adding probe!");
2005 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
2007 g_hash_table_destroy(reftab);
2015 vmi1__TargetIdT
tid,vmi1__ThreadIdT thid,
2016 char *probeName,
char *
symbol,
2017 vmi1__ProbepointStyleT *probepointStyle,
2018 vmi1__ProbepointWhenceT *probepointWhence,
2019 vmi1__ProbepointSizeT *probepointSize,
2021 struct target *
t = NULL;
2031 (
void **)&t,NULL)) {
2032 return soap_receiver_fault(soap,
"Nonexistent target!",
2033 "Specified target does not exist!");
2044 return soap_receiver_fault(soap,
"Could not pause target!",
2045 "Could not pause target before adding probe!");
2054 return soap_receiver_fault(soap,
"Could not find symbol!",
2055 "Could not find symbol!");
2062 return soap_receiver_fault(soap,
"Could not create probe!",
2063 "Could not create probe!");
2066 if (probepointStyle)
2068 if (probepointWhence)
2077 return soap_receiver_fault(soap,
"Could not register probe!",
2078 "Could not register probe!");
2086 return soap_receiver_fault(soap,
"Could not resume target!",
2087 "Could not resume target after adding probe!");
2091 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
2093 g_hash_table_destroy(reftab);
2101 vmi1__TargetIdT
tid,vmi1__ThreadIdT thid,
2102 char *probeName,vmi1__ADDR addr,
2103 vmi1__ProbepointTypeT *probepointType,
2104 vmi1__ProbepointStyleT *probepointStyle,
2105 vmi1__ProbepointWhenceT *probepointWhence,
2106 vmi1__ProbepointSizeT *probepointSize,
2108 struct target *
t = NULL;
2118 (
void **)&t,NULL)) {
2119 return soap_receiver_fault(soap,
"Nonexistent target!",
2120 "Specified target does not exist!");
2131 return soap_receiver_fault(soap,
"Could not pause target!",
2132 "Could not pause target before adding probe!");
2141 return soap_receiver_fault(soap,
"Could not create probe!",
2142 "Could not create probe!");
2147 if (probepointStyle)
2149 if (probepointWhence)
2157 return soap_receiver_fault(soap,
"Could not register probe!",
2158 "Could not register probe!");
2164 return soap_receiver_fault(soap,
"Could not resume target!",
2165 "Could not resume target after adding probe!");
2169 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
2171 g_hash_table_destroy(reftab);
2179 vmi1__TargetIdT
tid,vmi1__ThreadIdT thid,
2180 char *probeName,
char *filename,
int line,
2181 vmi1__ProbepointStyleT *probepointStyle,
2182 vmi1__ProbepointWhenceT *probepointWhence,
2183 vmi1__ProbepointSizeT *probepointSize,
2185 struct target *
t = NULL;
2194 (
void **)&t,NULL)) {
2195 return soap_receiver_fault(soap,
"Nonexistent target!",
2196 "Specified target does not exist!");
2207 return soap_receiver_fault(soap,
"Could not pause target!",
2208 "Could not pause target before adding probe!");
2217 return soap_receiver_fault(soap,
"Could not create probe!",
2218 "Could not create probe!");
2221 if (probepointStyle)
2223 if (probepointWhence)
2231 return soap_receiver_fault(soap,
"Could not register probe!",
2232 "Could not register probe!");
2238 return soap_receiver_fault(soap,
"Could not resume target!",
2239 "Could not resume target after adding probe!");
2243 reftab = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);
2245 g_hash_table_destroy(reftab);
2253 vmi1__TargetIdT
tid,vmi1__ProbeIdT pid,
2255 struct target *
t = NULL;
2260 (
void **)&t,NULL)) {
2261 return soap_receiver_fault(soap,
"Nonexistent target!",
2262 "Specified target does not exist!");
2270 return soap_receiver_fault(soap,
"Could not find probe!",
2271 "Could not find probe!");
2277 return soap_receiver_fault(soap,
"Could not pause target!",
2278 "Could not pause target before adding probe!");
2286 return soap_receiver_fault(soap,
"Could not find probe!",
2287 "Could not find probe!");
2292 return soap_receiver_fault(soap,
"Could not enable probe!",
2293 "Could not enable probe!");
2299 return soap_receiver_fault(soap,
"Could not resume target!",
2300 "Could not resume target after adding probe!");
2310 vmi1__TargetIdT
tid,vmi1__ProbeIdT pid,
2312 struct target *
t = NULL;
2317 (
void **)&t,NULL)) {
2318 return soap_receiver_fault(soap,
"Nonexistent target!",
2319 "Specified target does not exist!");
2327 return soap_receiver_fault(soap,
"Could not find probe!",
2328 "Could not find probe!");
2334 return soap_receiver_fault(soap,
"Could not pause target!",
2335 "Could not pause target before adding probe!");
2343 return soap_receiver_fault(soap,
"Could not find probe!",
2344 "Could not find probe!");
2349 return soap_receiver_fault(soap,
"Could not disable probe!",
2350 "Could not disable probe!");
2356 return soap_receiver_fault(soap,
"Could not resume target!",
2357 "Could not resume target after adding probe!");
2367 vmi1__TargetIdT
tid,vmi1__ProbeIdT pid,
2369 struct target *
t = NULL;
2374 (
void **)&t,NULL)) {
2375 return soap_receiver_fault(soap,
"Nonexistent target!",
2376 "Specified target does not exist!");
2384 return soap_receiver_fault(soap,
"Could not find probe!",
2385 "Could not find probe!");
2391 return soap_receiver_fault(soap,
"Could not pause target!",
2392 "Could not pause target before adding probe!");
2400 return soap_receiver_fault(soap,
"Could not find probe!",
2401 "Could not find probe!");
2406 return soap_receiver_fault(soap,
"Could not remove probe!",
2407 "Could not remove probe!");
2413 return soap_receiver_fault(soap,
"Could not resume target!",
2414 "Could not resume target after adding probe!");
2424 vmi1__TargetIdT
tid,vmi1__ListenerT *listener,
2428 struct target *
t = NULL;
2431 return soap_receiver_fault(soap,
"Bad listener!",
"Bad listener!");
2432 else if (listener->url != NULL)
2433 url = listener->url;
2434 else if (listener->hostname != NULL && listener->port != NULL) {
2435 len =
sizeof(
"http://") + strlen(listener->hostname) \
2436 +
sizeof(
":") + 11 +
sizeof(
":/vmi/1/targetListener") + 1;
2437 url =
malloc(len *
sizeof(
char));
2438 sprintf(url,
"http://%s:%d/vmi/1/targetListener",
2439 listener->hostname,*listener->port);
2442 return soap_receiver_fault(soap,
"Bad listener!",
"Bad listener!");
2446 (
void **)&t,NULL)) {
2449 return soap_receiver_fault(soap,
"Nonexistent target!",
2450 "Specified target does not exist!");
2458 return soap_receiver_fault(soap,
"Could not bind to target!",
2459 "Could not bind to target!");
2468 vmi1__TargetIdT tid,vmi1__ListenerT *listener,
2472 struct target *
t = NULL;
2475 return soap_receiver_fault(soap,
"Bad listener!",
"Bad listener!");
2476 else if (listener->url != NULL)
2477 url = listener->url;
2478 else if (listener->hostname != NULL && listener->port != NULL) {
2479 len =
sizeof(
"http://") + strlen(listener->hostname) \
2480 +
sizeof(
":") + 11 +
sizeof(
":/vmi/1/targetListener") + 1;
2481 url =
malloc(len *
sizeof(
char));
2482 sprintf(url,
"http://%s:%d/vmi/1/targetListener",
2483 listener->hostname,*listener->port);
2486 return soap_receiver_fault(soap,
"Bad listener!",
"Bad listener!");
2490 (
void **)&t,NULL)) {
2493 return soap_receiver_fault(soap,
"Nonexistent target!",
2494 "Specified target does not exist!");
2502 return soap_receiver_fault(soap,
"Could not unbind from target!",
2503 "Could not unbind from target!");
struct target * target_instantiate_overlay(struct target *target, tid_t tid, struct target_spec *spec)
struct vmi1__TargetEventT event
void target_rpc_fini(void)
struct vmi1__DebugFileOptsT defDebugFileOpts
int monitor_del_objid(struct monitor *monitor, int objid)
int proxyreq_recv_request(struct monitor *monitor, struct monitor_msg *msg)
struct action * action_return(REGVAL retval)
int vmi1__GetTarget(struct soap *soap, vmi1__TargetIdT tid, struct vmi1__TargetResponse *r)
struct bsymbol * target_lookup_sym_line(struct target *target, char *filename, int line, SMOFFSET *offset, ADDR *addr)
int monitor_add_primary_obj(struct monitor *monitor, int objid, int objtype, void *obj, void *objstate)
int vmi1__ProbeSymbol(struct soap *soap, vmi1__TargetIdT tid, vmi1__ThreadIdT thid, char *probeName, char *symbol, vmi1__ProbepointStyleT *probepointStyle, vmi1__ProbepointWhenceT *probepointWhence, vmi1__ProbepointSizeT *probepointSize, struct vmi1__ProbeResponse *r)
int monitor_lookup_objid_lock_objtype(int objid, int objtype, void **obj, struct monitor **monitor)
struct vmi1__TargetT * t_target_to_x_TargetT(struct soap *soap, struct target *target, GHashTable *reftab, struct vmi1__TargetT *out)
#define SOAP_CALLOC(soap, nmemb, size)
int monitor_register_objtype(int objtype, struct monitor_objtype_ops *ops, pthread_mutex_t *objtype_mutex)
int target_load_available_threads(struct target *target, int force)
int generic_rpc_unbind_dynlistener_objid(rpc_svctype_t svctype, char *listener_url, int objid)
int vmi1__ProbeSymbolSimple(struct soap *soap, vmi1__TargetIdT tid, vmi1__ThreadIdT thid, char *probeName, char *symbol, struct vmi1__ProbeResponse *r)
int monitor_get_unique_objid(void)
int target_rpc_handle_request(struct soap *soap)
static uint64_t unsigned int i
struct bsymbol * target_lookup_sym(struct target *target, const char *name, const char *delim, char *srcfile, symbol_type_flag_t ftype)
void generic_rpc_init(void)
REFCNT action_release(struct action *action)
int target_resume(struct target *target)
int monitor_add_obj(struct monitor *monitor, int objid, int objtype, void *obj, void *objstate)
int vmi1__PauseTarget(struct soap *soap, vmi1__TargetIdT tid, struct vmi1__NoneResponse *r)
int target_is_evloop_attached(struct target *target, struct evloop *evloop)
int vmi1__CloseTarget(struct soap *soap, vmi1__TargetIdT tid, struct vmi1__NoneResponse *r)
int vmi1__TargetBindListener(struct soap *soap, vmi1__TargetIdT tid, vmi1__ListenerT *listener, struct vmi1__NoneResponse *r)
int vmi1__LookupTargetAddrSimple(struct soap *soap, vmi1__TargetIdT tid, vmi1__ADDR addr, struct vmi1__DebugFileOptsT *opts, struct vmi1__SymbolResponse *r)
char * GENERIC_RPC_TMPDIR
int generic_rpc_unbind_all_listeners_objid(rpc_svctype_t svctype, int objid)
int monitor_setup_stderr(struct monitor *monitor, int maxbufsiz, char *stderr_logfile, monitor_stdio_callback_t stderr_callback, void *callback_state)
struct xsd__hexBinary * stderrLog
int target_pause(struct target *target)
int target_pause_thread(struct target *target, tid_t tid, int nowait)
result_t _target_rpc_probe_handler(int type, struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
int vmi1__LookupTargetSymbolSimple(struct soap *soap, vmi1__TargetIdT tid, char *name, struct vmi1__DebugFileOptsT *opts, struct vmi1__SymbolResponse *r)
struct vmi1__ActionEventT event
int target_close(struct target *target)
#define verror(format,...)
struct vmi1__ProbeT * probe
struct probe * probe_register_addr(struct probe *probe, ADDR addr, probepoint_type_t type, probepoint_style_t style, probepoint_whence_t whence, probepoint_watchsize_t watchsize, struct bsymbol *bsymbol)
#define verrorc(format,...)
int target_regno(struct target *target, char *name, REG *reg)
struct action * action_memmod(ADDR dest, char *data, uint32_t len)
enum vmi1__ResultT result
enum _vmi1__targetEventType t_target_event_t_to_x_targetEventType(target_event_t chtype)
void target_rpc_init(void)
int proxyreq_attach_new_objid(struct proxyreq *pr, int objid, struct monitor *monitor)
int vmi1__RemoveProbe(struct soap *soap, vmi1__TargetIdT tid, vmi1__ProbeIdT pid, struct vmi1__NoneResponse *r)
#define vwarn(format,...)
result_t x_ResultT_to_t_result_t(struct soap *soap, enum vmi1__ResultT in)
struct vmi1__TargetEventNotificationResponse ter
action_whence_t x_ActionWhenceT_to_t_action_whence_t(struct soap *soap, enum vmi1__ActionWhenceT in)
result_t _target_rpc_probe_prehandler(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
struct target_spec * x_TargetSpecT_to_t_target_spec(struct soap *soap, struct vmi1__TargetSpecT *spec, GHashTable *reftab, struct target_spec *out)
int vmi1__LookupTargetAddr(struct soap *soap, vmi1__TargetIdT tid, vmi1__ADDR addr, struct vmi1__DebugFileOptsT *opts, struct vmi1__NestedSymbolResponse *r)
struct vmi1__ActionSpecsT actionSpecs
struct vmi1__TargetT * target
int target_attach_evloop(struct target *target, struct evloop *evloop)
int vmi1__EnableProbe(struct soap *soap, vmi1__TargetIdT tid, vmi1__ProbeIdT pid, struct vmi1__NoneResponse *r)
int monitor_lock_objtype(int objtype)
#define array_list_foreach(alist, lpc, placeholder)
struct action * action_regmod(REG regnum, REGVAL regval)
REFCNT bsymbol_release(struct bsymbol *bsymbol)
struct vmi1__ProbeEventT * t_probe_to_x_ProbeEventT(struct soap *soap, struct probe *probe, tid_t tid, int type, struct probe *trigger, struct probe *base, GHashTable *reftab, struct vmi1__ProbeEventT *out)
struct probe * target_lookup_probe(struct target *target, int probe_id)
int probe_free(struct probe *probe, int force)
struct dt_argp_state opts
int vmi1__InstantiateOverlayTarget(struct soap *soap, vmi1__TargetIdT utid, vmi1__ThreadIdT thid, struct vmi1__TargetSpecT *spec, vmi1__ListenerT *ownerListener, struct vmi1__TargetResponse *r)
void target_free_spec(struct target_spec *spec)
int target_spec_to_argv(struct target_spec *spec, char *arg0, int *argc, char ***argv)
int monitor_close_obj(struct monitor *monitor, void *obj, int kill, int kill_sig)
struct vmi1__SymbolT * d_symbol_to_x_SymbolT(struct soap *soap, struct symbol *s, struct vmi1__DebugFileOptsT *opts, GHashTable *reftab, struct array_list *refstack, int depth)
int monitor_del_obj(struct monitor *monitor, void *obj)
struct xsd__hexBinary * stdoutLog
int monitor_unlock_objtype_unsafe(int objtype)
result_t _target_rpc_action_handler(struct action *action, struct target_thread *thread, struct probe *probe, struct probepoint *probepoint, handler_msg_t msg, int msg_detail, void *handler_data)
struct action * action_singlestep(int nsteps)
int vmi1__LookupTargetLine(struct soap *soap, vmi1__TargetIdT tid, char *filename, int line, struct vmi1__DebugFileOptsT *opts, struct vmi1__NestedSymbolResponse *r)
probepoint_whence_t x_ProbepointWhenceT_to_t_probepoint_whence_t(struct soap *soap, enum vmi1__ProbepointWhenceT in)
probepoint_watchsize_t x_ProbepointSizeT_to_t_probepoint_watchsize_t(struct soap *soap, enum vmi1__ProbepointSizeT in)
int probe_enable(struct probe *probe)
struct bsymbol * target_lookup_sym_addr(struct target *target, ADDR addr)
probepoint_style_t x_ProbepointStyleT_to_t_probepoint_style_t(struct soap *soap, enum vmi1__ProbepointStyleT in)
struct vmi1__ActionEventNotificationResponse aer
int vmi1__PauseThread(struct soap *soap, vmi1__TargetIdT tid, vmi1__ThreadIdT thid, struct vmi1__NoneResponse *r)
struct vmi1__ActionEventT * t_action_to_x_ActionEventT(struct soap *soap, struct action *action, struct target_thread *tthread, handler_msg_t msg, int msg_detail, GHashTable *reftab, struct vmi1__ActionEventT *out)
void debuginfo_rpc_fini(void)
void generic_rpc_register_svctype(rpc_svctype_t svctype)
int monitor_setup_stdin(struct monitor *monitor, char *stdin_buf, int stdin_buflen)
struct probe * probe_create(struct target *target, tid_t tid, struct probe_ops *pops, const char *name, probe_handler_t pre_handler, probe_handler_t post_handler, void *handler_data, int autofree, int tracked)
int generic_rpc_bind_dynlistener_objid(rpc_svctype_t svctype, char *listener_url, int objid, int owns)
int vmi1__TargetUnbindListener(struct soap *soap, vmi1__TargetIdT tid, vmi1__ListenerT *listener, struct vmi1__NoneResponse *r)
#define vdebug(devel, areas, flags, format,...)
struct vmi1__SymbolsT * nestedSymbol
struct action * x_ActionSpecT_to_t_action(struct soap *soap, struct vmi1__ActionSpecT *spec, struct target *target)
void debuginfo_rpc_init(void)
int vmi1__ProbeLine(struct soap *soap, vmi1__TargetIdT tid, vmi1__ThreadIdT thid, char *probeName, char *filename, int line, vmi1__ProbepointStyleT *probepointStyle, vmi1__ProbepointWhenceT *probepointWhence, vmi1__ProbepointSizeT *probepointSize, struct vmi1__ProbeResponse *r)
struct vmi1__ProbeEventNotificationResponse per
probepoint_type_t x_ProbepointTypeT_to_t_probepoint_type_t(struct soap *soap, enum vmi1__ProbepointTypeT in)
int vmi1__GetTargetLogs(struct soap *soap, vmi1__TargetIdT tid, int maxSize, struct vmi1__TargetLogsResponse *r)
int target_detach_evloop(struct target *target)
struct vmi1__TargetT ** target
struct vmi1__TargetT * t_target_id_to_x_TargetT(struct soap *soap, int target_id, struct target_spec *spec, GHashTable *reftab, struct vmi1__TargetT *out)
void * calloc(size_t nmemb, size_t size)
struct array_list * monitor_list_objids_by_objtype_lock_objtype(int objtype, int include_null)
int probe_disable(struct probe *probe)
struct array_list * monitor_list_objs_by_objtype_lock_objtype(int objtype, int include_null)
int monitor_setup_stdout(struct monitor *monitor, int maxbufsiz, char *stdout_logfile, monitor_stdio_callback_t stdout_callback, void *callback_state)
enum vmi1__ResultT result
int vmi1__DisableProbe(struct soap *soap, vmi1__TargetIdT tid, vmi1__ProbeIdT pid, struct vmi1__NoneResponse *r)
int vmi1__LookupTargetSymbol(struct soap *soap, vmi1__TargetIdT tid, char *name, struct vmi1__DebugFileOptsT *opts, struct vmi1__NestedSymbolResponse *r)
target_status_t target_status(struct target *target)
int vmi1__ListTargets(struct soap *soap, void *_, struct vmi1__TargetsResponse *r)
struct vmi1__SymbolT * symbol
void generic_rpc_fini(void)
struct vmi1__SymbolsT * d_symbol_array_list_to_x_SymbolsT(struct soap *soap, struct array_list *list, struct vmi1__DebugFileOptsT *opts, GHashTable *reftab, struct array_list *refstack, int depth)
enum vmi1__TargetTypeT * targetType
int target_finalize(struct target *target)
int proxyreq_handle_request(struct soap *soap, char *svc_name)
int vmi1__InstantiateTarget(struct soap *soap, struct vmi1__TargetSpecT *spec, vmi1__ListenerT *ownerListener, struct vmi1__TargetResponse *r)
int generic_rpc_listener_notify_all(rpc_svctype_t svctype, int objid, generic_rpc_listener_notifier_t *notifier, void *data)
int target_open(struct target *target)
int(* evloop_attach)(struct evloop *evloop, void *obj)
int vmi1__KillTarget(struct soap *soap, vmi1__TargetIdT tid, int kill_sig, struct vmi1__NoneResponse *r)
int monitor_lookup_objid(int objid, int *objtype, void **obj, struct monitor **monitor)
int proxyreq_recv_response(struct monitor *monitor, struct monitor_msg *msg)
#define __SAFE_IO(fn, fns, fd, buf, buflen, rc)
int vmi1__ProbeAddr(struct soap *soap, vmi1__TargetIdT tid, vmi1__ThreadIdT thid, char *probeName, vmi1__ADDR addr, vmi1__ProbepointTypeT *probepointType, vmi1__ProbepointStyleT *probepointStyle, vmi1__ProbepointWhenceT *probepointWhence, vmi1__ProbepointSizeT *probepointSize, struct vmi1__ProbeResponse *r)
#define DEF_REFSTACK_SIZE
int vmi1__FinalizeTarget(struct soap *soap, vmi1__TargetIdT tid, struct vmi1__NoneResponse *r)
result_t _target_rpc_probe_posthandler(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
struct target_spec * spec
struct target * target_instantiate(struct target_spec *spec, struct evloop *evloop)
struct probe * probe_register_line(struct probe *probe, char *filename, int line, probepoint_style_t style, probepoint_whence_t whence, probepoint_watchsize_t watchsize)
int vmi1__LookupTargetLineSimple(struct soap *soap, vmi1__TargetIdT tid, char *filename, int line, struct vmi1__DebugFileOptsT *opts, struct vmi1__SymbolResponse *r)
#define MONITORED_TARGET_LAUNCHER
action_type_t x_ActionTypeT_to_t_action_type_t(struct soap *soap, enum vmi1__ActionTypeT in)
void * malloc(size_t size)
void probe_rename(struct probe *probe, const char *name)
int vmi1__ListTargetTypes(struct soap *soap, void *_, struct vmi1__TargetTypesResponse *r)
struct array_list * chain
struct monitor_objtype_ops target_rpc_monitor_objtype_ops
void generic_rpc_unregister_svctype(rpc_svctype_t svctype)
#define PROXY_REQUEST_LOCKED(soap, mobjid, mutex)
int monitor_destroy(struct monitor *monitor)
enum vmi1__ResultT result
int generic_rpc_count_listeners(rpc_svctype_t svctype, int objid)
struct probe * probe_register_symbol(struct probe *probe, struct bsymbol *bsymbol, probepoint_style_t style, probepoint_whence_t whence, probepoint_watchsize_t watchsize)
int monitor_spawn(struct monitor *monitor, char *filename, char *const argv[], char *const envp[], char *dir)
int action_sched(struct probe *probe, struct action *action, action_whence_t whence, action_handler_t handler, void *handler_data)
struct vmi1__ProbeT * t_probe_to_x_ProbeT(struct soap *soap, struct probe *probe, GHashTable *reftab, struct vmi1__ProbeT *out)
int vmi1__ResumeTarget(struct soap *soap, vmi1__TargetIdT tid, struct vmi1__NoneResponse *r)
struct monitor * monitor_create(monitor_type_t type, monitor_flags_t flags, int objid, int objtype, void *obj, void *objstate)
#define MONITOR_OBJTYPE_TARGET
struct vmi1__ProbeEventT event
struct probe * probe_simple(struct target *target, tid_t tid, char *name, probe_handler_t pre_handler, probe_handler_t post_handler, void *handler_data)