25 #include <sys/ptrace.h> 
   93 #define __TARGET_OVERLAY      0x200000 
   96     { 
"overlay",
__TARGET_OVERLAY,
"[<target_id>:]<thread_name_or_id>:<spec_opts>",0,
"Lookup name or id as an overlay target once the main target is instantiated, and try to open it.  All dumptarget options then apply to the overlay.",0 },
 
   97     { 
"at-symbol",
'A',
"SYMBOL",0,
"Wait for a probe on this symbol/address to be hit before inserting all the other probes.",0 },
 
   98     { 
"until-symbol",
'U',
"SYMBOL",0,
"Remove all probes once a probe on this symbol/address is hit.",0 },
 
   99     { 
"bts",
'B',0,0,
"Enable BTS (if XenTT) (starting at at-symbol if one was provided; otherwise, enable immediately).",0 },
 
  100     { 
"stop-at-until",
'S',0,0,
"Stop probing once the until symbol/address is reached.",0 },
 
  101     { 
"raw",
'v',0,0,
"Enable raw mode.",0 },
 
  102     { 
"post",
'P',0,0,
"Enable post handlers.",0 },
 
  103     { 
"quiet",
'q',0,0,
"Silent but deadly.",0 },
 
  121     g_hash_table_iter_init(&iter,
probes);
 
  122     while (g_hash_table_iter_next(&iter,
 
  127         g_hash_table_iter_remove(&iter);
 
  129     g_hash_table_destroy(
probes);
 
  135     static int cleaning = 0;
 
  145     for (j = 
ots_len - 1; j >= 0; --j) {
 
  161     array_list_deep_free(shadow_stack);
 
  183         "Ending trace (%d) (hits on probes not from root set: %d).\n",
 
  186     fprintf(stderr,
"Ended trace.\n");
 
  192 #ifdef ENABLE_DISTORM 
  194                struct probe *trigger,
struct probe *base);
 
  196               struct probe *trigger,
struct probe *base);
 
  204                       &funcstart,NULL,NULL,NULL,NULL)) {
 
  206         "Could not resolve base addr for function %s!\n",
 
  214     if (!g_hash_table_lookup(
disfuncs,(gpointer)funcstart)) {
 
  220     char *buf = 
malloc(bufsiz);
 
  223                         NULL,retaddr_save,NULL,0,1);
 
  226     struct probe *rprobe;
 
  265         g_hash_table_insert(
probes,(gpointer)cprobe,(gpointer)cprobe);
 
  267             "Registered %d call probes in function %s.\n",
 
  278         g_hash_table_insert(
probes,(gpointer)rprobe,(gpointer)rprobe);
 
  280             "Registered %d return probes in function %s.\n",
 
  285     g_hash_table_insert(
disfuncs,(gpointer)funcstart,(gpointer)1);
 
  292               struct probe *trigger,
struct probe *base) {
 
  305     fprintf(stderr,
"Could not read SP in retaddr_save!\n");
 
  310     retaddr = 
malloc(
sizeof(*retaddr));
 
  312               (
unsigned char *)retaddr)) {
 
  313     fprintf(stderr,
"Could not read top of stack in retaddr_save!\n");
 
  320     fprintf(stderr,
"Could not read IP in retaddr_save!\n");
 
  330         "(SAVE) call 0x%"PRIxADDR" (<UNKNOWN>)" 
  331         " (from within %s): retaddr = 0x%"PRIxADDR 
  332         " (skipping unknown function!)" 
  333         " (handler_data = %s) (stack depth = %d) (thread = %s)\n",
 
  335         (
char *)handler_data,array_list_len(shadow_stack),buf);
 
  342         "(SAVE) call 0x%"PRIxADDR
" (%s)" 
  343         " (from within %s): retaddr = 0x%"PRIxADDR
 
  344         " (handler_data = %s) (stack depth = %d) (thread = %s)\n",
 
  347         *retaddr,(
char *)handler_data,array_list_len(shadow_stack),buf);
 
  359     array_list_add(shadow_stack,retaddr);
 
  361     instrument_func(bsymbol,0);
 
  367 result_t retaddr_check(
struct probe *probe,
tid_t tid,
void *handler_data,
 
  368                struct probe *trigger,
struct probe *base) {
 
  371     ADDR *oldretaddr = NULL;
 
  380     if (array_list_len(shadow_stack) == 0) {
 
  388     fprintf(stderr,
"Could not read SP in retaddr_check!\n");
 
  392     oldretaddr = (
ADDR *)array_list_remove(shadow_stack);
 
  395               (
unsigned char *)&newretaddr)) {
 
  396     fprintf(stderr,
"Could not read top of stack in retaddr_check!\n");
 
  401     if (newretaddr != *oldretaddr) {
 
  404         "(CHECK) %s (0x%"PRIxADDR
"): newretaddr = 0x%"PRIxADDR
";" 
  405         " oldretaddr = 0x%"PRIxADDR
 
  406         " (handler_data = %s) (stack depth = %d) (thread = %s)" 
  407         " ---- STACK CORRUPTION!\n",
 
  409         newretaddr,*oldretaddr,
 
  410         (
char *)handler_data,array_list_len(shadow_stack),buf);
 
  415         "(CHECK) %s (0x%"PRIxADDR
"): newretaddr = 0x%"PRIxADDR
";" 
  416         " oldretaddr = 0x%"PRIxADDR
 
  417         " (handler_data = %s) (stack depth = %d) (thread = %s)\n",
 
  419         newretaddr,*oldretaddr,
 
  420         (
char *)handler_data,array_list_len(shadow_stack),buf);
 
  425                    (
unsigned char *)oldretaddr)) {
 
  426         fprintf(stderr,
"Could not reset top of stack in retaddr_check!\n");
 
  431         fprintf(stdout,
"Reset stack after corruption!\n");
 
  444             struct probe *trigger,
struct probe *base) {
 
  456         "%s (0x%"PRIxADDR
") (thread %"PRIiTID") (at_symbol hit)\n",
 
  466                struct probe *trigger,
struct probe *base) {
 
  478         "%s (0x%"PRIxADDR
") (thread %"PRIiTID") (until_symbol hit)\n",
 
  488                 struct probe *trigger,
struct probe *base) {
 
  509     fprintf(stdout,
"%s (0x%"PRIxADDR
") (thread %"PRIiTID") ",
 
  538             for (j = 0; j < value->
bufsiz; ++j) {
 
  539             printf(
"%02hhx",value->
buf[j]);
 
  554     fprintf(stdout,
" (handler_data = %s)\n",(
char *)handler_data);
 
  568                struct probe *trigger,
struct probe *base) {
 
  580     fprintf(stdout,
"%s (0x%"PRIxADDR
") post handler (thread %"PRIiTID")",
 
  583     fprintf(stdout,
"  (handler_data = %s)\n",(
char *)handler_data);
 
  593                struct probe *trigger,
struct probe *base) {
 
  597     fprintf(stdout,
"%s (0x%"PRIxADDR
") (pre)\n",
 
  607             struct probe *trigger,
struct probe *base) {
 
  611     fprintf(stdout,
"%s (0x%"PRIxADDR
") (post)\n",
 
  621               struct probe *trigger,
struct probe *base) {
 
  629     fprintf(stdout,
"%s (0x%"PRIxADDR
") (pre): watched raw value: 0x%x\n",
 
  639                struct probe *trigger,
struct probe *base) {
 
  647     fprintf(stdout,
"%s (0x%"PRIxADDR
") (post): watched raw value: 0x%x\n",
 
  657          struct probe *trigger,
struct probe *base) {
 
  660     struct bsymbol *bsymbol = probe->
bsymbol;
 
  673     fprintf(stdout,
"%s (0x%"PRIxADDR
") (pre) = ",
 
  679     for (j = 0; j < value->
bufsiz; ++j) {
 
  680         printf(
"%02hhx",value->
buf[j]);
 
  686     fprintf(stdout,
"%s (0x%"PRIxADDR
") (pre): could not read value: %s",
 
  689     fprintf(stdout,
"  (handler_data = %s)\n",(
char *)handler_data);
 
  700           struct probe *trigger,
struct probe *base) {
 
  703     struct bsymbol *bsymbol = probe->
bsymbol;
 
  716     fprintf(stdout,
"%s (0x%"PRIxADDR
") (post) = ",
 
  721     for (j = 0; j < value->
bufsiz; ++j) {
 
  722         printf(
"%02hhx",value->
buf[j]);
 
  728     fprintf(stdout,
"%s (0x%"PRIxADDR
") (post): could not read value: %s",
 
  731     fprintf(stdout,
"  (handler_data = %s)\n",(
char *)handler_data);
 
  747     ADDR func_phys_base = 0;
 
  754                       &func_phys_base,NULL,NULL,NULL,NULL);
 
  755     fprintf(stdout,
"Single step %d (thread %"PRIiTID") (msg %d) 0x%"PRIxADDR
" (%s:+%d)!\n",
 
  757         (
int)(ipval - func_phys_base));
 
  762     fprintf(stdout,
"Single step %d (thread %"PRIiTID") (msg %d) 0x%"PRIxADDR
"!\n",
 
  763         msg_detail,tid,msg,ipval);
 
  775     char *argptr,*argptr2;
 
  788     return ARGP_ERR_UNKNOWN;
 
  791     if (state->quoted > 0)
 
  792         opts->
argc = state->quoted - state->next;
 
  794         opts->
argc = state->argc - state->next;
 
  795     if (opts->
argc > 0) {
 
  797         memcpy(opts->
argv,&state->argv[state->next],opts->
argc*
sizeof(
char *));
 
  798         state->next += opts->
argc;
 
  805     case ARGP_KEY_NO_ARGS:
 
  806     case ARGP_KEY_SUCCESS:
 
  840     argptr = index(arg,
':');
 
  842         verror(
"bad overlay spec!\n");
 
  846     ospec = 
calloc(1,
sizeof(*ospec));
 
  852     argv_list = array_list_create(32);
 
  853     array_list_append(argv_list,
"dumptarget_overlay");
 
  859     argptr2 = index(argptr,
':');
 
  867     while (*argptr == 
' ')
 
  875     while (*argptr != 
'\0') {
 
  876         if (*argptr == 
'\\') {
 
  895         else if (inquote && *argptr == quotechar) {
 
  902         else if (*argptr == 
'\'' || *argptr == 
'"') {
 
  908         else if (!inquote && *argptr == 
' ') {
 
  909         *nargptr = *argptr = 
'\0';
 
  911             array_list_append(argv_list,vargptr);
 
  932         array_list_append(argv_list,vargptr);
 
  935     array_list_append(argv_list,NULL);
 
  938                            array_list_len(argv_list) - 1,
 
  939                            (
char **)argv_list->
list,
 
  943         array_list_free(argv_list);
 
  947     array_list_free(argv_list);
 
  951     return ARGP_ERR_UNKNOWN;
 
  957 int main(
int argc,
char **argv) {
 
  991     verror(
"could not parse target arguments!\n");
 
  997     signal(SIGQUIT,
sigh);
 
  998     signal(SIGABRT,
sigh);
 
  999     signal(SIGKILL,
sigh);
 
 1000     signal(SIGSEGV,
sigh);
 
 1001     signal(SIGPIPE,
sigh);
 
 1002     signal(SIGALRM,
sigh);
 
 1003     signal(SIGTERM,
sigh);
 
 1004     signal(SIGUSR1,
sigh);
 
 1005     signal(SIGUSR2,
sigh);
 
 1012     verror(
"could not instantiate target!\n");
 
 1017     fprintf(stderr,
"could not open target!\n");
 
 1027     targetstr = strdup(
"<UNNAMED_TARGET>");
 
 1029     targetstr = strdup(tmp);
 
 1062         verror(
"could not find overlay thread '%s' in base target '%s'," 
 1072         verror(
"could not instantiate overlay on base '%s' thread '%s'!\n",
 
 1079         fprintf(stderr,
"could not open overlay on base '%s' thread '%s'!\n",
 
 1096         symbols = (
struct bsymbol **)
malloc(
sizeof(
struct bsymbol *)*
opts.
argc);
 
 1097         memset(symbols,0,
sizeof(
struct bsymbol *)*
opts.
argc);
 
 1099         shadow_stack = array_list_create(64);
 
 1101         probes = g_hash_table_new(g_direct_hash,g_direct_equal);
 
 1102         disfuncs = g_hash_table_new(g_direct_hash,g_direct_equal);
 
 1112         addrs[
i] = strtoll(
opts.
argv[i],NULL,16);
 
 1116     struct array_list *addrlist = array_list_create(0);
 
 1117     struct array_list *symlist = array_list_create(0);
 
 1118     struct bsymbol *bsymbol = NULL;
 
 1122     memset(retcodes,0,
sizeof(
int)*
opts.
argc);
 
 1123     memset(retcode_strs,0,
sizeof(
char *)*
opts.
argc);
 
 1127     char *srcfile = NULL;
 
 1128     char *symname = NULL;
 
 1132         char *retcode_str = index(
opts.
argv[i],
':');
 
 1135         if (*(retcode_str+1) == 
'L') {
 
 1137             *retcode_str = 
'\0';
 
 1139             line = retcodes[
i] = atoi(retcode_str + 1);
 
 1140             retcode_strs[
i] = retcode_str;
 
 1142         else if (*(retcode_str+1) == 
's') {
 
 1143             *retcode_str = 
'\0';
 
 1145             retcodes[
i] = atoi(retcode_str + 1);
 
 1146             retcode_strs[
i] = retcode_str;
 
 1148         else if (*(retcode_str+1) == 
'r') { 
 
 1149             *retcode_str = 
'\0';
 
 1151             retcode_strs[
i] = retcode_str;
 
 1152             retcodes[
i] = (
REGVAL)atoi(retcode_str);
 
 1154         else if (*(retcode_str+1) == 
'o') {
 
 1155             *retcode_str = 
'\0';
 
 1157             retcode_strs[
i] = retcode_str;
 
 1159             retcodes[
i] = atoi(retcode_str);
 
 1164             *retcode_str = 
'\0';
 
 1166             symname = retcode_str;
 
 1172         if (strncmp(symname,
"0x",2) == 0) {
 
 1173         array_list_add(addrlist,
opts.
argv[i]);
 
 1174         array_list_add(symlist,NULL);
 
 1181             fprintf(stderr,
"Could not find symbol %s!\n",
opts.
argv[i]);
 
 1188             for (j = 
ots_len - 1; (j + 1) > 0; --j) {
 
 1200                 fprintf(stderr,
"Could not find symbol %s!\n",
 
 1208         array_list_add(symlist,bsymbol);
 
 1209         array_list_add(addrlist,NULL);
 
 1218             fprintf(stderr,
"Could not convert %s to address!\n",
at_symbol);
 
 1237             fprintf(stderr,
"Could not find symbol %s!\n",
opts.
argv[i]);
 
 1244             fprintf(stderr,
"pause at symbol %s is not a function!\n",
 
 1264         fprintf(stdout,
"Starting looking for at_symbol %s!\n",
 
 1280             printf(
"%s finished (did not find pause point!\n",
 
 1285             printf(
"%s monitoring failed (did not find pause" 
 1286                    " point)!\n",targetstr);
 
 1290             printf(
"%s monitoring failed with %d (did not find" 
 1291                    " pause point)!\n",targetstr,tstat);
 
 1299         printf(
"%s monitoring found at_symbol %s; removing " 
 1300            " pause probe and doing the real thing.\n",
 
 1310 #if defined(ENABLE_XEN) && defined(CONFIG_DETERMINISTIC_TIMETRAVEL) 
 1312         printf(
"Enabling BTS!\n");
 
 1315         verror(
"failed to enable BTS!\n");
 
 1326             fprintf(stderr,
"Could not convert %s to address!\n",
until_symbol);
 
 1345             fprintf(stderr,
"Could not find until_symbol %s!\n",
opts.
argv[i]);
 
 1352             fprintf(stderr,
"util_symbol %s is not a function!\n",
 
 1370         until_probe = probe;
 
 1372         fprintf(stdout,
"Starting looking for until_symbol %s!\n",
 
 1378     for (i = 0; i < array_list_len(symlist); ++
i) {
 
 1379         bsymbol = (
struct bsymbol *)array_list_item(symlist,i);
 
 1401         if (i < 
opts.
argc && retcode_strs[i] 
 
 1402             && *retcode_strs[i] == 
'w') {
 
 1411         && ((i < 
opts.
argc && retcode_strs[i] 
 
 1412              && (*retcode_strs[i] == 
'c' 
 1413              || *retcode_strs[i] == 
'C')))) {
 
 1414 #ifndef ENABLE_DISTORM 
 1416             "Could not instrument function %s;" 
 1417             " DISTORM not configured in!\n",
 
 1422         if ((funcstart = instrument_func(bsymbol,1)) == 0) {
 
 1424                 "Could not instrument function %s (0x%"PRIxADDR
")!\n",
 
 1432              && ((i < 
opts.
argc && retcode_strs[i] 
 
 1433               && (*retcode_strs[i] == 
'e' 
 1434                   || *retcode_strs[i] == 
'E')))) {
 
 1435 #ifndef ENABLE_DISTORM 
 1437             "Could not instrument function %s entry/returns;" 
 1438             " DISTORM not configured in!\n",
 
 1448         if (!probe_register_function_ee(probe,
PROBEPOINT_SW,bsymbol,0,1,1)) {
 
 1450                 "Could not instrument function %s entry/returns!\n",
 
 1455         g_hash_table_insert(
probes,(gpointer)probe,(gpointer)probe);
 
 1465         if (i < 
opts.
argc && retcode_strs[i] && *retcode_strs[i] == 
'L') {
 
 1489         g_hash_table_insert(
probes,(gpointer)probe,(gpointer)probe);
 
 1493                 "Registered probe %s at 0x%"PRIxADDR
".\n",
 
 1500             if (i < 
opts.
argc && retcode_strs[i]
 
 1501                 && *retcode_strs[i] == 
's') {
 
 1504                 fprintf(stderr,
"could not create action!\n");
 
 1509                 fprintf(stderr,
"could not schedule action!\n");
 
 1516             else if (i < 
opts.
argc && retcode_strs[i]) {
 
 1519                 fprintf(stderr,
"could not create action!\n");
 
 1524                 fprintf(stderr,
"could not schedule action!\n");
 
 1535                 "Failed to register probe on '%s'\n",
 
 1553         array_list_free(symlist);
 
 1554         array_list_free(addrlist);
 
 1562     for (i = 0; i < array_list_len(addrlist); ++
i) {
 
 1563         char *rawaddr = (
char *)array_list_item(addrlist,i);
 
 1569         char *endptr = NULL;
 
 1570         ADDR paddr = (
ADDR)strtoull(rawaddr,&endptr,16);
 
 1573         fprintf(stderr,
"Bad address %s!\n",rawaddr);
 
 1586         if (i < 
opts.
argc && retcode_strs[i] && *retcode_strs[i] == 
'w') {
 
 1594         else if (i < 
opts.
argc && retcode_strs[i] && *retcode_strs[i] == 
'r') {
 
 1602         else if (i < 
opts.
argc && retcode_strs[i] && *retcode_strs[i] == 
'o') {
 
 1605             verror(
"No target with ID %d for addr 0x%"PRIxADDR
";" 
 1606                " aborting!\n",retcodes[i],paddr);
 
 1636         g_hash_table_insert(
probes,(gpointer)probe,(gpointer)probe);
 
 1639             "Registered probe %s at 0x%"PRIxADDR
".\n",rawaddr,paddr);
 
 1650         array_list_free(symlist);
 
 1651         array_list_free(addrlist);
 
 1658     array_list_free(symlist);
 
 1659     array_list_free(addrlist);
 
 1669     fprintf(stdout,
"Starting main debugging loop!\n");
 
 1672     struct timeval poll_tv = { 0,0 };
 
 1679         poll_tv.tv_usec = 10000;
 
 1690         printf(
"%s monitoring found at_symbol %s; removing" 
 1703 #if defined(ENABLE_XEN) && defined(CONFIG_DETERMINISTIC_TIMETRAVEL) 
 1705             printf(
"Disabling BTS at until probe.\n");
 
 1708             verror(
"failed to disable BTS!\n");
 
 1712             printf(
"Stopping monitoring at until probe.\n");
 
 1718         else if (until_probe)
 
 1737                      (
unsigned char *)word) != NULL) {
 
 1738             printf(
"0x%" PRIxADDR 
" = ",addrs[i]);
 
 1740                 printf(
"%02hhx",word[j]);
 
 1745             printf(
"0x%" PRIxADDR 
": could not read value: %s\n",
 
 1746                    addrs[i],strerror(errno));
 
 1751         fprintf(stderr,
"could not resume target %s thread %"PRIiTID"\n",
 
 1760         printf(
"%s exiting, removing probes safely...\n",targetstr);
 
 1764         fprintf(stderr,
"could not resume target %s thread %"PRIiTID"\n",
 
 1778         printf(
"%s finished.\n",targetstr);
 
 1783         printf(
"%s monitoring failed!\n",targetstr);
 
 1788         printf(
"%s monitoring failed with %d!\n",targetstr,tstat);
 
struct bsymbol * bsymbol_create(struct lsymbol *lsymbol, struct memregion *region)
 
struct target * target_instantiate_overlay(struct target *target, tid_t tid, struct target_spec *spec)
 
int target_thread_snprintf(struct target *target, tid_t tid, char *buf, int bufsiz, int detail, char *sep, char *kvsep)
 
struct value * target_load_symbol(struct target *target, struct target_location_ctxt *tlctxt, struct bsymbol *bsymbol, load_flags_t flags)
 
tid_t target_lookup_overlay_thread_by_name(struct target *target, char *name)
 
struct action * action_return(REGVAL retval)
 
int probe_unregister(struct probe *probe, int force)
 
struct bsymbol * target_lookup_sym_line(struct target *target, char *filename, int line, SMOFFSET *offset, ADDR *addr)
 
struct bsymbol * until_bsymbol
 
void * target_argp_driver_state(struct argp_state *state)
 
REFCNT lsymbol_release(struct lsymbol *lsymbol)
 
void value_dump_simple(struct value *value, struct dump_info *ud)
 
tid_t target_lookup_overlay_thread_by_id(struct target *target, int id)
 
struct target_spec * tspec
 
struct lsymbol * lsymbol_create_from_symbol(struct symbol *symbol)
 
int target_lsymbol_resolve_bounds(struct target *target, struct target_location_ctxt *tlctxt, struct lsymbol *lsymbol, ADDR base_addr, ADDR *start, ADDR *end, int *is_noncontiguous, ADDR *alt_start, ADDR *alt_end)
 
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)
 
result_t ss_handler(struct action *action, struct target_thread *thread, struct probe *probe, struct probepoint *probepoint, handler_msg_t msg, int msg_detail, void *handler_data)
 
REFCNT action_release(struct action *action)
 
struct array_list * shadow_stack
 
#define v_g_slist_foreach(gslhead, gslcur, elm)
 
int target_resume(struct target *target)
 
struct target_location_ctxt * target_location_ctxt_create_from_bsymbol(struct target *target, tid_t tid, struct bsymbol *bsymbol)
 
int target_disable_feature(struct target *target, int feature)
 
result_t function_dump_args(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
int target_pause(struct target *target)
 
result_t var_post(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
tid_t target_gettid(struct target *target)
 
result_t addr_var_pre(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
char * bsymbol_get_name(struct bsymbol *bsymbol)
 
int target_close(struct target *target)
 
#define verror(format,...)
 
error_t dt_argp_parse_opt(int key, char *arg, struct argp_state *state)
 
unsigned char * target_read_addr(struct target *target, ADDR addr, unsigned long length, unsigned char *buf)
 
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)
 
result_t(* probe_handler_t)(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
int symbol_is_inlined(struct symbol *symbol)
 
int target_snprintf(struct target *target, char *buf, int bufsiz)
 
REGVAL target_read_reg(struct target *target, tid_t tid, REG reg)
 
ADDR probe_addr(struct probe *probe)
 
char * lsymbol_get_name(struct lsymbol *lsymbol)
 
struct overlay_spec ** ospecs
 
REFCNT bsymbol_release(struct bsymbol *bsymbol)
 
REFCNT bsymbol_free(struct bsymbol *bsymbol, int force)
 
int probe_free(struct probe *probe, int force)
 
struct dt_argp_state opts
 
void target_free_spec(struct target_spec *spec)
 
int symbol_type_flags_match(struct symbol *symbol, symbol_type_flag_t flags)
 
char * target_name(struct target *target)
 
struct action * action_singlestep(int nsteps)
 
struct argp_option dt_argp_opts[]
 
void value_free(struct value *value)
 
struct bsymbol * target_lookup_sym_addr(struct target *target, ADDR addr)
 
int probe_num_sources(struct probe *probe)
 
int target_enable_feature(struct target *target, int feature, void *arg)
 
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)
 
void * realloc(void *ptr, size_t size)
 
struct probe * probe_register_inlined_symbol(struct probe *probe, struct bsymbol *bsymbol, int do_primary, probepoint_style_t style, probepoint_whence_t whence, probepoint_watchsize_t watchsize)
 
result_t var_pre(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
void * calloc(size_t nmemb, size_t size)
 
result_t addr_var_post(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
int main(int argc, char **argv)
 
struct target * target_lookup_target_id(int id)
 
result_t function_post(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
#define REF_DEBUG_REPORT_FINISH()
 
int target_finalize(struct target *target)
 
struct symbol * bsymbol_get_symbol(struct bsymbol *bsymbol)
 
char * base_thread_name_or_id
 
target_status_t target_poll(struct target *target, struct timeval *tv, target_poll_outcome_t *outcome, int *pstatus)
 
GSList * symbol_get_members(struct symbol *symbol, symbol_type_flag_t flags)
 
int target_open(struct target *target)
 
target_status_t target_monitor(struct target *target)
 
void target_location_ctxt_free(struct target_location_ctxt *tlctxt)
 
struct target_spec * spec
 
int linux_userproc_at_syscall(struct target *target, tid_t tid)
 
struct target_spec * target_argp_driver_parse_one(struct argp *driver_parser, void *driver_state, int argc, char **argv, target_type_t target_types, int filter_quoted)
 
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)
 
struct bsymbol * at_bsymbol
 
void * malloc(size_t size)
 
struct target_thread * thread
 
target_type_t target_type(struct target *target)
 
unsigned long target_write_addr(struct target *target, ADDR addr, unsigned long length, unsigned char *buf)
 
result_t until_handler(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
char * probe_name(struct probe *probe)
 
struct probe * probe_register_symbol(struct probe *probe, struct bsymbol *bsymbol, probepoint_style_t style, probepoint_whence_t whence, probepoint_watchsize_t watchsize)
 
struct probe * until_probe
 
struct target_spec * spec
 
result_t addr_code_pre(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
result_t at_handler(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)
 
int action_sched(struct probe *probe, struct action *action, action_whence_t whence, action_handler_t handler, void *handler_data)
 
struct memregion * region
 
void target_driver_argp_init_children(struct argp_state *state)
 
struct bsymbol ** symbols
 
struct probepoint * probepoint
 
void bsymbol_dump(struct bsymbol *bsymbol, struct dump_info *ud)
 
result_t addr_code_post(struct probe *probe, tid_t tid, void *handler_data, struct probe *trigger, struct probe *base)