27 #include <sys/ptrace.h>
51 void sigu(siginfo_t *siginfo) {
56 if (siginfo->si_signo != SIGALRM)
67 fprintf(stdout,
"Cannot examine target %s; handling an exception!\n",
72 fprintf(stdout,
"Current threads in target %s:\n",target->
name);
87 #define DT_ARGP_INTERVAL 0x444443
88 #define DT_ARGP_DETAIL 0x444444
91 {
"loop-interval",
DT_ARGP_INTERVAL,
"INTERVAL",0,
"Loop infinitely using the given interval.",0 },
92 {
"dump-detail",
DT_ARGP_DETAIL,
"DETAIL",0,
"Thread detail level (default 0).",0 },
102 return ARGP_ERR_UNKNOWN;
109 case ARGP_KEY_NO_ARGS:
110 case ARGP_KEY_SUCCESS:
124 return ARGP_ERR_UNKNOWN;
134 int main(
int argc,
char **argv) {
136 GList *base_target_specs = NULL;
137 GList *overlay_target_specs = NULL;
150 sigemptyset(&ignored);
151 sigemptyset(&exitset);
152 sigemptyset(&interrupt);
154 sigaddset(&exitset,SIGHUP);
155 sigaddset(&exitset,SIGINT);
156 sigaddset(&exitset,SIGQUIT);
157 sigaddset(&exitset,SIGILL);
158 sigaddset(&exitset,SIGABRT);
159 sigaddset(&exitset,SIGFPE);
160 sigaddset(&exitset,SIGSEGV);
161 sigaddset(&exitset,SIGPIPE);
162 sigaddset(&exitset,SIGTERM);
163 sigaddset(&exitset,SIGBUS);
164 sigaddset(&exitset,SIGXCPU);
165 sigaddset(&exitset,SIGXFSZ);
167 sigaddset(&ignored,SIGUSR1);
168 sigaddset(&ignored,SIGUSR2);
170 sigaddset(&interrupt,SIGALRM);
178 &primary_target_spec,&base_target_specs,
179 &overlay_target_specs);
182 verror(
"could not parse target arguments!\n");
189 base_target_specs,overlay_target_specs,
192 verror(
"could not instantiate and open targets!\n");
197 fprintf(stdout,
"Threads in target %s:\n",target->
name);
221 fprintf(stdout,
"Starting thread watch loop!\n");
238 fprintf(stderr,
"error in target_monitor_evloop (%d): %s; aborting!\n",
253 "Error handling target '%s'; closing and finalizing!\n",
262 "Target '%s' finished; finalizing!\n",
270 fprintf(stderr,
"Target '%s' exiting...\n",tname);
273 fprintf(stderr,
"Target '%s' interrupted, resuming...\n",tname);
275 fprintf(stderr,
"Could not resume target %s tid %"PRIiTID"\n",
285 "Target '%s' tid %d received unexpected status '%s'"
286 " at 0x%"PRIxADDR"; attempting to continue!\n",
289 fprintf(stderr,
"Could not resume target %s tid %"PRIiTID"\n",
void * target_argp_driver_state(struct argp_state *state)
int target_load_available_threads(struct target *target, int force)
int target_monitor_evloop(struct evloop *evloop, struct timeval *timeout, struct target **target, target_status_t *status)
int target_resume(struct target *target)
#define v_g_list_foreach(glhead, glcur, elm)
int target_pause(struct target *target)
tid_t target_gettid(struct target *target)
void sigu(siginfo_t *siginfo)
int target_close(struct target *target)
#define verror(format,...)
int target_install_custom_sighandlers(sigset_t *ignored, sigset_t *interrupt, sigset_t *exit, void(*sighandler)(int signo, siginfo_t *siginfo, void *x))
REGVAL target_read_reg(struct target *target, tid_t tid, REG reg)
void target_default_cleanup()
int target_argp_driver_parse(struct argp *driver_parser, void *driver_state, int argc, char **argv, target_type_t target_types, int filter_quoted, struct target_spec **primary_target_spec, GList **base_target_specs, GList **overlay_target_specs)
struct argp_option dt_argp_opts[]
int target_monitor_was_interrupted(siginfo_t *last_siginfo)
struct dt_argp_state opts
char * target_name(struct target *target)
int main(int argc, char **argv)
int evloop_maxsize(struct evloop *evloop)
struct evloop * evloop_create(evloop_error_handler_t ehandler)
target_status_t target_status(struct target *target)
int target_finalize(struct target *target)
GList * target_instantiate_and_open(struct target_spec *primary_target_spec, GList *base_target_specs, GList *overlay_target_specs, struct evloop *evloop, GList **error_specs)
void target_dump_all_threads(struct target *target, FILE *stream, int detail)
int target_monitor_handling_exception(struct target *target)
error_t dt_argp_parse_opt(int key, char *arg, struct argp_state *state)
void target_driver_argp_init_children(struct argp_state *state)