X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftracepoint.c;h=6e33841824fd712ec09e8886fecf231b873804e4;hb=184ad4855fc2a50df9af4ff22995c167ef98c842;hp=888f54de8762d1ad6ff7b5aa9684b925a85c8b49;hpb=3172dc307bfd4eca0675c7343aa94eae02eb40e2;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 888f54de87..6e33841824 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -1,5 +1,7 @@ /* Tracing functionality for remote targets in custom GDB protocol - Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software + Foundation, Inc. This file is part of GDB. @@ -33,6 +35,10 @@ #include "remote.h" #include "linespec.h" #include "regcache.h" +#include "completer.h" +#include "gdb-events.h" +#include "block.h" +#include "dictionary.h" #include "ax.h" #include "ax-gdb.h" @@ -59,7 +65,6 @@ #define MAX_AGENT_EXPR_LEN 184 -extern int info_verbose; extern void (*readline_begin_hook) (char *, ...); extern char *(*readline_hook) (char *); extern void (*readline_end_hook) (void); @@ -70,16 +75,6 @@ extern int addressprint; /* Print machine addresses? */ */ extern void output_command (char *, int); -extern void registers_info (char *, int); -extern void args_info (char *, int); -extern void locals_info (char *, int); - - -/* If this definition isn't overridden by the header files, assume - that isatty and fileno exist on this system. */ -#ifndef ISATTY -#define ISATTY(FP) (isatty (fileno (FP))) -#endif /* Tracepoint.c: @@ -187,7 +182,7 @@ trace_error (char *buf) if (*++buf == '0') /* general case: */ error ("tracepoint.c: error in outgoing packet."); else - error ("tracepoint.c: error in outgoing packet at field #%d.", + error ("tracepoint.c: error in outgoing packet at field #%ld.", strtol (buf, NULL, 16)); case '2': error ("trace API error 0x%s.", ++buf); @@ -253,7 +248,8 @@ set_traceframe_context (CORE_ADDR trace_pc) { static struct type *func_string, *file_string; static struct type *func_range, *file_range; - static value_ptr func_val, file_val; + struct value *func_val; + struct value *file_val; static struct type *charstar; int len; @@ -270,7 +266,7 @@ set_traceframe_context (CORE_ADDR trace_pc) set_internalvar (lookup_internalvar ("trace_file"), value_from_pointer (charstar, (LONGEST) 0)); set_internalvar (lookup_internalvar ("trace_line"), - value_from_pointer (builtin_type_int, (LONGEST) - 1)); + value_from_longest (builtin_type_int, (LONGEST) - 1)); return; } @@ -285,12 +281,12 @@ set_traceframe_context (CORE_ADDR trace_pc) /* save func name as "$trace_func", a debugger variable visible to users */ if (traceframe_fun == NULL || - SYMBOL_NAME (traceframe_fun) == NULL) + DEPRECATED_SYMBOL_NAME (traceframe_fun) == NULL) set_internalvar (lookup_internalvar ("trace_func"), value_from_pointer (charstar, (LONGEST) 0)); else { - len = strlen (SYMBOL_NAME (traceframe_fun)); + len = strlen (DEPRECATED_SYMBOL_NAME (traceframe_fun)); func_range = create_range_type (func_range, builtin_type_int, 0, len - 1); func_string = create_array_type (func_string, @@ -298,7 +294,7 @@ set_traceframe_context (CORE_ADDR trace_pc) func_val = allocate_value (func_string); VALUE_TYPE (func_val) = func_string; memcpy (VALUE_CONTENTS_RAW (func_val), - SYMBOL_NAME (traceframe_fun), + DEPRECATED_SYMBOL_NAME (traceframe_fun), len); func_val->modifiable = 0; set_internalvar (lookup_internalvar ("trace_func"), func_val); @@ -338,7 +334,7 @@ set_traceframe_context (CORE_ADDR trace_pc) static struct tracepoint * set_raw_tracepoint (struct symtab_and_line sal) { - register struct tracepoint *t, *tc; + struct tracepoint *t, *tc; struct cleanup *old_chain; t = (struct tracepoint *) xmalloc (sizeof (struct tracepoint)); @@ -355,7 +351,7 @@ set_raw_tracepoint (struct symtab_and_line sal) t->language = current_language->la_language; t->input_radix = input_radix; t->line_number = sal.line; - t->enabled = enabled; + t->enabled_p = 1; t->next = 0; t->step_count = 0; t->pass_count = 0; @@ -396,7 +392,7 @@ trace_command (char *arg, int from_tty) printf_filtered ("TRACE %s\n", arg); addr_start = arg; - sals = decode_line_1 (&arg, 1, (struct symtab *) NULL, 0, &canonical); + sals = decode_line_1 (&arg, 1, (struct symtab *) NULL, 0, &canonical, NULL); addr_end = arg; if (!sals.nelts) return; /* ??? Presumably decode_line_1 has already warned? */ @@ -422,10 +418,6 @@ trace_command (char *arg, int from_tty) t->addr_string = savestring (addr_start, addr_end - addr_start); trace_mention (t); - - /* Let the UI know of any additions */ - if (create_tracepoint_hook) - create_tracepoint_hook (t); } if (sals.nelts > 1) @@ -478,19 +470,38 @@ tracepoints_info (char *tpnum_exp, int from_tty) { printf_filtered ("Num Enb "); if (addressprint) - printf_filtered ("Address "); + { + if (TARGET_ADDR_BIT <= 32) + printf_filtered ("Address "); + else + printf_filtered ("Address "); + } printf_filtered ("PassC StepC What\n"); } strcpy (wrap_indent, " "); if (addressprint) - strcat (wrap_indent, " "); + { + if (TARGET_ADDR_BIT <= 32) + strcat (wrap_indent, " "); + else + strcat (wrap_indent, " "); + } printf_filtered ("%-3d %-3s ", t->number, - t->enabled == enabled ? "y" : "n"); + t->enabled_p ? "y" : "n"); if (addressprint) - printf_filtered ("%s ", - local_hex_string_custom ((unsigned long) t->address, - "08l")); + { + char *tmp; + + if (TARGET_ADDR_BIT <= 32) + tmp = local_hex_string_custom (t->address + & (CORE_ADDR) 0xffffffff, + "08l"); + else + tmp = local_hex_string_custom (t->address, "016l"); + + printf_filtered ("%s ", tmp); + } printf_filtered ("%-5d %-5ld ", t->pass_count, t->step_count); if (t->source_file) @@ -499,7 +510,7 @@ tracepoints_info (char *tpnum_exp, int from_tty) if (sym) { fputs_filtered ("in ", gdb_stdout); - fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout); + fputs_filtered (SYMBOL_PRINT_NAME (sym), gdb_stdout); wrap_here (wrap_indent); fputs_filtered (" at ", gdb_stdout); } @@ -552,14 +563,12 @@ tracepoint_operation (struct tracepoint *t, int from_tty, switch (opcode) { case enable_op: - t->enabled = enabled; - if (modify_tracepoint_hook) - modify_tracepoint_hook (t); + t->enabled_p = 1; + tracepoint_modify_event (t->number); break; case disable_op: - t->enabled = disabled; - if (modify_tracepoint_hook) - modify_tracepoint_hook (t); + t->enabled_p = 0; + tracepoint_modify_event (t->number); break; case delete_op: if (tracepoint_chain == t) @@ -568,14 +577,11 @@ tracepoint_operation (struct tracepoint *t, int from_tty, ALL_TRACEPOINTS (t2) if (t2->next == t) { + tracepoint_delete_event (t2->number); t2->next = t->next; break; } - /* Let the UI know of any deletions */ - if (delete_tracepoint_hook) - delete_tracepoint_hook (t); - if (t->addr_string) xfree (t->addr_string); if (t->source_file) @@ -721,8 +727,7 @@ trace_pass_command (char *args, int from_tty) if (t1 == (struct tracepoint *) -1 || t1 == t2) { t2->pass_count = count; - if (modify_tracepoint_hook) - modify_tracepoint_hook (t2); + tracepoint_modify_event (t2->number); if (from_tty) printf_filtered ("Setting tracepoint %d's passcount to %d\n", t2->number, count); @@ -814,6 +819,11 @@ read_actions (struct tracepoint *t) /* Control-C quits instantly if typed while in this loop since it should not wait until the user types a newline. */ immediate_quit++; + /* FIXME: kettenis/20010823: Something is wrong here. In this file + STOP_SIGNAL is never defined. So this code has been left out, at + least for quite a while now. Replacing STOP_SIGNAL with SIGTSTP + leads to compilation failures since the variable job_control + isn't declared. Leave this alone for now. */ #ifdef STOP_SIGNAL if (job_control) { @@ -836,7 +846,7 @@ read_actions (struct tracepoint *t) line = (*readline_hook) (prompt); else if (instream == stdin && ISATTY (instream)) { - line = readline (prompt); + line = gdb_readline_wrapper (prompt); if (line && *line) /* add it to command history */ add_history (line); } @@ -921,7 +931,7 @@ validate_actionline (char **line, struct tracepoint *t) return BADLINE; } - if (c->function.cfunc == collect_pseudocommand) + if (cmd_cfunc_eq (c, collect_pseudocommand)) { struct agent_expr *aexpr; struct agent_reqs areqs; @@ -951,14 +961,14 @@ validate_actionline (char **line, struct tracepoint *t) if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_CONST) { warning ("constant %s (value %ld) will not be collected.", - SYMBOL_NAME (exp->elts[2].symbol), + DEPRECATED_SYMBOL_NAME (exp->elts[2].symbol), SYMBOL_VALUE (exp->elts[2].symbol)); return BADLINE; } else if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_OPTIMIZED_OUT) { warning ("%s is optimized away and cannot be collected.", - SYMBOL_NAME (exp->elts[2].symbol)); + DEPRECATED_SYMBOL_NAME (exp->elts[2].symbol)); return BADLINE; } } @@ -988,7 +998,7 @@ validate_actionline (char **line, struct tracepoint *t) while (p && *p++ == ','); return GENERIC; } - else if (c->function.cfunc == while_stepping_pseudocommand) + else if (cmd_cfunc_eq (c, while_stepping_pseudocommand)) { char *steparg; /* in case warning is necessary */ @@ -1004,7 +1014,7 @@ validate_actionline (char **line, struct tracepoint *t) } return STEPPING; } - else if (c->function.cfunc == end_actions_pseudocommand) + else if (cmd_cfunc_eq (c, end_actions_pseudocommand)) return END; else { @@ -1106,7 +1116,7 @@ memrange_sortmerge (struct collection_list *memranges) { if (memranges->list[a].type == memranges->list[b].type && memranges->list[b].start - memranges->list[a].end <= - MAX_REGISTER_VIRTUAL_SIZE) + MAX_REGISTER_SIZE) { /* memrange b starts before memrange a ends; merge them. */ if (memranges->list[b].end > memranges->list[a].end) @@ -1178,11 +1188,11 @@ collect_symbol (struct collection_list *collect, struct symbol *sym, { default: printf_filtered ("%s: don't know symbol class %d\n", - SYMBOL_NAME (sym), SYMBOL_CLASS (sym)); + DEPRECATED_SYMBOL_NAME (sym), SYMBOL_CLASS (sym)); break; case LOC_CONST: printf_filtered ("constant %s (value %ld) will not be collected.\n", - SYMBOL_NAME (sym), SYMBOL_VALUE (sym)); + DEPRECATED_SYMBOL_NAME (sym), SYMBOL_VALUE (sym)); break; case LOC_STATIC: offset = SYMBOL_VALUE_ADDRESS (sym); @@ -1192,7 +1202,7 @@ collect_symbol (struct collection_list *collect, struct symbol *sym, sprintf_vma (tmp, offset); printf_filtered ("LOC_STATIC %s: collect %ld bytes at %s.\n", - SYMBOL_NAME (sym), len, tmp /* address */); + DEPRECATED_SYMBOL_NAME (sym), len, tmp /* address */); } add_memrange (collect, -1, offset, len); /* 0 == memory */ break; @@ -1200,18 +1210,18 @@ collect_symbol (struct collection_list *collect, struct symbol *sym, case LOC_REGPARM: reg = SYMBOL_VALUE (sym); if (info_verbose) - printf_filtered ("LOC_REG[parm] %s: ", SYMBOL_NAME (sym)); + printf_filtered ("LOC_REG[parm] %s: ", DEPRECATED_SYMBOL_NAME (sym)); add_register (collect, reg); /* check for doubles stored in two registers */ /* FIXME: how about larger types stored in 3 or more regs? */ if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FLT && - len > REGISTER_RAW_SIZE (reg)) + len > DEPRECATED_REGISTER_RAW_SIZE (reg)) add_register (collect, reg + 1); break; case LOC_REF_ARG: printf_filtered ("Sorry, don't know how to do LOC_REF_ARG yet.\n"); printf_filtered (" (will not collect %s)\n", - SYMBOL_NAME (sym)); + DEPRECATED_SYMBOL_NAME (sym)); break; case LOC_ARG: reg = frame_regno; @@ -1219,7 +1229,7 @@ collect_symbol (struct collection_list *collect, struct symbol *sym, if (info_verbose) { printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset ", - SYMBOL_NAME (sym), len); + DEPRECATED_SYMBOL_NAME (sym), len); printf_vma (offset); printf_filtered (" from frame ptr reg %d\n", reg); } @@ -1231,7 +1241,7 @@ collect_symbol (struct collection_list *collect, struct symbol *sym, if (info_verbose) { printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset ", - SYMBOL_NAME (sym), len); + DEPRECATED_SYMBOL_NAME (sym), len); printf_vma (offset); printf_filtered (" from reg %d\n", reg); } @@ -1244,7 +1254,7 @@ collect_symbol (struct collection_list *collect, struct symbol *sym, if (info_verbose) { printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset ", - SYMBOL_NAME (sym), len); + DEPRECATED_SYMBOL_NAME (sym), len); printf_vma (offset); printf_filtered (" from frame ptr reg %d\n", reg); } @@ -1257,18 +1267,18 @@ collect_symbol (struct collection_list *collect, struct symbol *sym, if (info_verbose) { printf_filtered ("LOC_BASEREG %s: collect %ld bytes at offset ", - SYMBOL_NAME (sym), len); + DEPRECATED_SYMBOL_NAME (sym), len); printf_vma (offset); printf_filtered (" from basereg %d\n", reg); } add_memrange (collect, reg, offset, len); break; case LOC_UNRESOLVED: - printf_filtered ("Don't know LOC_UNRESOLVED %s\n", SYMBOL_NAME (sym)); + printf_filtered ("Don't know LOC_UNRESOLVED %s\n", DEPRECATED_SYMBOL_NAME (sym)); break; case LOC_OPTIMIZED_OUT: printf_filtered ("%s has been optimized out of existence.\n", - SYMBOL_NAME (sym)); + DEPRECATED_SYMBOL_NAME (sym)); break; } } @@ -1280,21 +1290,20 @@ add_local_symbols (struct collection_list *collect, CORE_ADDR pc, { struct symbol *sym; struct block *block; - int i, nsyms, count = 0; + struct dict_iterator iter; + int count = 0; block = block_for_pc (pc); while (block != 0) { QUIT; /* allow user to bail out with ^C */ - nsyms = BLOCK_NSYMS (block); - for (i = 0; i < nsyms; i++) + ALL_BLOCK_SYMBOLS (block, iter, sym) { - sym = BLOCK_SYM (block, i); switch (SYMBOL_CLASS (sym)) { default: warning ("don't know how to trace local symbol %s", - SYMBOL_NAME (sym)); + DEPRECATED_SYMBOL_NAME (sym)); case LOC_LOCAL: case LOC_STATIC: case LOC_REGISTER: @@ -1473,11 +1482,12 @@ encode_actions (struct tracepoint *t, char ***tdp_actions, struct expression *exp = NULL; struct action_line *action; int i; - value_ptr tempval; + struct value *tempval; struct collection_list *collect; struct cmd_list_element *cmd; struct agent_expr *aexpr; - long frame_reg, frame_offset; + int frame_reg; + LONGEST frame_offset; clear_collection_list (&tracepoint_list); @@ -1503,7 +1513,7 @@ encode_actions (struct tracepoint *t, char ***tdp_actions, if (cmd == 0) error ("Bad action list item: %s", action_exp); - if (cmd->function.cfunc == collect_pseudocommand) + if (cmd_cfunc_eq (cmd, collect_pseudocommand)) { do { /* repeat over a comma-separated list */ @@ -1542,7 +1552,8 @@ encode_actions (struct tracepoint *t, char ***tdp_actions, struct cleanup *old_chain1 = NULL; struct agent_reqs areqs; - exp = parse_exp_1 (&action_exp, block_for_pc (t->address), 1); + exp = parse_exp_1 (&action_exp, + block_for_pc (t->address), 1); old_chain = make_cleanup (free_current_contents, &exp); switch (exp->elts[0].opcode) @@ -1612,11 +1623,11 @@ encode_actions (struct tracepoint *t, char ***tdp_actions, } while (action_exp && *action_exp++ == ','); } /* if */ - else if (cmd->function.cfunc == while_stepping_pseudocommand) + else if (cmd_cfunc_eq (cmd, while_stepping_pseudocommand)) { collect = &stepping_list; } - else if (cmd->function.cfunc == end_actions_pseudocommand) + else if (cmd_cfunc_eq (cmd, end_actions_pseudocommand)) { if (collect == &stepping_list) /* end stepping actions */ collect = &tracepoint_list; @@ -1723,7 +1734,7 @@ trace_start_command (char *args, int from_tty) sprintf_vma (tmp, t->address); sprintf (buf, "QTDP:%x:%s:%c:%lx:%x", t->number, tmp, /* address */ - t->enabled == enabled ? 'E' : 'D', + t->enabled_p ? 'E' : 'D', t->step_count, t->pass_count); if (t->actions) @@ -1848,7 +1859,7 @@ finish_tfind_command (char *msg, struct symbol *old_func; char *reply; - old_frame_addr = FRAME_FP (get_current_frame ()); + old_frame_addr = get_frame_base (get_current_frame ()); old_func = find_pc_function (read_pc ()); putpkt (msg); @@ -1910,7 +1921,7 @@ finish_tfind_command (char *msg, flush_cached_frames (); registers_changed (); - select_frame (get_current_frame (), 0); + select_frame (get_current_frame ()); set_traceframe_num (target_frameno); set_tracepoint_num (target_tracept); if (target_frameno == -1) @@ -1934,13 +1945,15 @@ finish_tfind_command (char *msg, if (old_func == find_pc_function (read_pc ()) && (old_frame_addr == 0 || - FRAME_FP (get_current_frame ()) == 0 || - old_frame_addr == FRAME_FP (get_current_frame ()))) + get_frame_base (get_current_frame ()) == 0 || + old_frame_addr == get_frame_base (get_current_frame ()))) source_only = -1; else source_only = 1; - print_stack_frame (selected_frame, selected_frame_level, source_only); + print_stack_frame (deprecated_selected_frame, + frame_relative_level (deprecated_selected_frame), + source_only); do_displays (); } } @@ -2052,10 +2065,12 @@ trace_find_tracepoint_command (char *args, int from_tty) if (target_is_remote ()) { if (args == 0 || *args == 0) - if (tracepoint_number == -1) - error ("No current tracepoint -- please supply an argument."); - else - tdp = tracepoint_number; /* default is current TDP */ + { + if (tracepoint_number == -1) + error ("No current tracepoint -- please supply an argument."); + else + tdp = tracepoint_number; /* default is current TDP */ + } else tdp = parse_and_eval_long (args); @@ -2087,7 +2102,7 @@ trace_find_line_command (char *args, int from_tty) { if (args == 0 || *args == 0) { - sal = find_pc_line ((get_current_frame ())->pc, 0); + sal = find_pc_line (get_frame_pc (get_current_frame ()), 0); sals.nelts = 1; sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line)); @@ -2247,7 +2262,7 @@ tracepoint_save_command (char *args, int from_tty) struct action_line *line; FILE *fp; char *i1 = " ", *i2 = " "; - char *indent, *actionline; + char *indent, *actionline, *pathname; char tmp[40]; if (args == 0 || *args == 0) @@ -2259,9 +2274,12 @@ tracepoint_save_command (char *args, int from_tty) return; } - if (!(fp = fopen (args, "w"))) - error ("Unable to open file '%s' for saving tracepoints"); - + pathname = tilde_expand (args); + if (!(fp = fopen (pathname, "w"))) + error ("Unable to open file '%s' for saving tracepoints (%s)", + args, safe_strerror (errno)); + xfree (pathname); + ALL_TRACEPOINTS (tp) { if (tp->addr_string) @@ -2294,9 +2312,9 @@ tracepoint_save_command (char *args, int from_tty) cmd = lookup_cmd (&actionline, cmdlist, "", -1, 1); if (cmd == 0) error ("Bad action list item: %s", actionline); - if (cmd->function.cfunc == while_stepping_pseudocommand) + if (cmd_cfunc_eq (cmd, while_stepping_pseudocommand)) indent = i2; - else if (cmd->function.cfunc == end_actions_pseudocommand) + else if (cmd_cfunc_eq (cmd, end_actions_pseudocommand)) indent = i1; } } @@ -2317,12 +2335,13 @@ scope_info (char *args, int from_tty) struct minimal_symbol *msym; struct block *block; char **canonical, *symname, *save_args = args; - int i, j, nsyms, count = 0; + struct dict_iterator iter; + int j, count = 0; if (args == 0 || *args == 0) error ("requires an argument (function, line or *addr) to define a scope"); - sals = decode_line_1 (&args, 1, NULL, 0, &canonical); + sals = decode_line_1 (&args, 1, NULL, 0, &canonical, NULL); if (sals.nelts == 0) return; /* presumably decode_line_1 has already warned */ @@ -2333,15 +2352,14 @@ scope_info (char *args, int from_tty) while (block != 0) { QUIT; /* allow user to bail out with ^C */ - nsyms = BLOCK_NSYMS (block); - for (i = 0; i < nsyms; i++) + ALL_BLOCK_SYMBOLS (block, iter, sym) { QUIT; /* allow user to bail out with ^C */ if (count == 0) printf_filtered ("Scope for %s:\n", save_args); count++; - sym = BLOCK_SYM (block, i); - symname = SYMBOL_NAME (sym); + + symname = DEPRECATED_SYMBOL_NAME (sym); if (symname == NULL || *symname == '\0') continue; /* probably botched, certainly useless */ @@ -2417,7 +2435,7 @@ scope_info (char *args, int from_tty) REGISTER_NAME (SYMBOL_BASEREG (sym))); break; case LOC_UNRESOLVED: - msym = lookup_minimal_symbol (SYMBOL_NAME (sym), NULL, NULL); + msym = lookup_minimal_symbol (DEPRECATED_SYMBOL_NAME (sym), NULL, NULL); if (msym == NULL) printf_filtered ("Unresolved Static"); else @@ -2493,7 +2511,7 @@ trace_dump_command (char *args, int from_tty) to the tracepoint PC. If not, then the current frame was collected during single-stepping. */ - stepping_frame = (t->address != read_pc ()); + stepping_frame = (t->address != (read_pc () - DECR_PC_AFTER_BREAK)); for (action = t->actions; action; action = action->next) { @@ -2514,11 +2532,11 @@ trace_dump_command (char *args, int from_tty) if (cmd == 0) error ("Bad action list item: %s", action_exp); - if (cmd->function.cfunc == while_stepping_pseudocommand) + if (cmd_cfunc_eq (cmd, while_stepping_pseudocommand)) stepping_actions = 1; - else if (cmd->function.cfunc == end_actions_pseudocommand) + else if (cmd_cfunc_eq (cmd, end_actions_pseudocommand)) stepping_actions = 0; - else if (cmd->function.cfunc == collect_pseudocommand) + else if (cmd_cfunc_eq (cmd, collect_pseudocommand)) { /* Display the collected data. For the trap frame, display only what was collected at the trap. @@ -2643,7 +2661,7 @@ _initialize_tracepoint (void) add_info ("scope", scope_info, "List the variables local to a scope"); - add_cmd ("tracepoints", class_trace, NO_FUNCTION, + add_cmd ("tracepoints", class_trace, NULL, "Tracing of program execution without stopping the program.", &cmdlist); @@ -2657,7 +2675,7 @@ last tracepoint set."); c = add_com ("save-tracepoints", class_trace, tracepoint_save_command, "Save current tracepoint definitions as a script.\n\ Use the 'source' command in another debug session to restore them."); - c->completer = filename_completer; + set_cmd_completer (c, filename_completer); add_com ("tdump", class_trace, trace_dump_command, "Print everything collected at the current tracepoint."); @@ -2774,12 +2792,13 @@ Arguments are tracepoint numbers, separated by spaces.\n\ No argument means enable all tracepoints.", &enablelist); - add_com ("trace", class_trace, trace_command, - "Set a tracepoint at a specified line or function or address.\n\ + c = add_com ("trace", class_trace, trace_command, + "Set a tracepoint at a specified line or function or address.\n\ Argument may be a line number, function name, or '*' plus an address.\n\ For a line number or function, trace at the start of its code.\n\ If an address is specified, trace at that exact address.\n\n\ Do \"help tracepoints\" for info on other tracepoint commands."); + set_cmd_completer (c, location_completer); add_com_alias ("tp", "trace", class_alias, 0); add_com_alias ("tr", "trace", class_alias, 1);