From 3149d8c1150e24222c6c41e2c0fdde42f202d750 Mon Sep 17 00:00:00 2001 From: Stan Shebs Date: Tue, 6 Apr 2010 17:47:40 +0000 Subject: [PATCH] 2010-04-06 Stan Shebs * defs.h (char_ptr): Move typedef here from... * ada-lang.c (char_ptr): Remove. * charset.c (char_ptr): Remove. * tracepoint.h (struct uploaded_string): Remove. (struct uploaded_tp): Use vectors for string arrays. * tracepoint.c (trace_save): Use vectors of actions. (parse_tracepoint_definition): Ditto. (get_uploaded_tp): Clear vectors. * breakpoint.c (create_tracepoint_from_upload): Use vectors. (next_cmd): Change to an int. (read_next_cmd): Use vector of command strings. --- gdb/ChangeLog | 15 ++++++++++++++- gdb/ada-lang.c | 1 - gdb/breakpoint.c | 15 +++++++-------- gdb/charset.c | 1 - gdb/defs.h | 4 ++++ gdb/tracepoint.c | 39 +++++++++++++-------------------------- gdb/tracepoint.h | 18 ++++++++---------- 7 files changed, 46 insertions(+), 47 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3c6c3ac..2cc9f29 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2010-04-06 Stan Shebs + + * defs.h (char_ptr): Move typedef here from... + * ada-lang.c (char_ptr): Remove. + * charset.c (char_ptr): Remove. + * tracepoint.h (struct uploaded_string): Remove. + (struct uploaded_tp): Use vectors for string arrays. + * tracepoint.c (trace_save): Use vectors of actions. + (parse_tracepoint_definition): Ditto. + (get_uploaded_tp): Clear vectors. + * breakpoint.c (create_tracepoint_from_upload): Use vectors. + (next_cmd): Change to an int. + (read_next_cmd): Use vector of command strings. + 2010-04-06 Doug Evans * top.h (source_script, cd_command): Delete. @@ -118,7 +132,6 @@ * remote.c (remote_parse_stop_reply): Use hex_string instead of phex_nz for error. ->>>>>>> 1.11571 2010-04-01 Stan Shebs Nathan Sidwell diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index ea79500..df92993 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -5076,7 +5076,6 @@ symbol_completion_match (const char *sym_name, return sym_name; } -typedef char *char_ptr; DEF_VEC_P (char_ptr); /* A companion function to ada_make_symbol_completion_list(). diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 36a28f6..c1c8b97 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -10348,18 +10348,16 @@ ftrace_command (char *arg, int from_tty) list that was acquired during tracepoint uploading. */ static struct uploaded_tp *this_utp; -static struct uploaded_string *next_cmd; +static int next_cmd; static char * read_uploaded_action (void) { char *rslt; - if (!next_cmd) - return NULL; + VEC_iterate (char_ptr, this_utp->cmd_strings, next_cmd, rslt); - rslt = next_cmd->str; - next_cmd = next_cmd->next; + next_cmd++; return rslt; } @@ -10425,18 +10423,19 @@ create_tracepoint_from_upload (struct uploaded_tp *utp) special-purpose "reader" function and call the usual command line reader, then pass the result to the breakpoint command-setting function. */ - if (utp->cmd_strings) + if (!VEC_empty (char_ptr, utp->cmd_strings)) { struct command_line *cmd_list; this_utp = utp; - next_cmd = utp->cmd_strings; + next_cmd = 0; cmd_list = read_command_lines_1 (read_uploaded_action, 1, NULL, NULL); breakpoint_set_commands (tp, cmd_list); } - else if (utp->numactions > 0 || utp->num_step_actions > 0) + else if (!VEC_empty (char_ptr, utp->actions) + || !VEC_empty (char_ptr, utp->step_actions)) warning (_("Uploaded tracepoint %d actions have no source form, ignoring them"), utp->number); diff --git a/gdb/charset.c b/gdb/charset.c index b60c5fa..c422056 100644 --- a/gdb/charset.c +++ b/gdb/charset.c @@ -702,7 +702,6 @@ wchar_iterate (struct wchar_iterator *iter, extern initialize_file_ftype _initialize_charset; /* -Wmissing-prototype */ -typedef char *char_ptr; DEF_VEC_P (char_ptr); static VEC (char_ptr) *charsets; diff --git a/gdb/defs.h b/gdb/defs.h index b7fd97a..e8a1dd4 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -312,6 +312,10 @@ struct cleanup #define ENUM_BITFIELD(TYPE) unsigned int #endif +/* vec.h-style vectors of strings want a typedef for char * . */ + +typedef char * char_ptr; + /* Needed for various prototypes */ struct symtab; diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 331d46c..c25be70 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -2538,7 +2538,7 @@ trace_save (const char *filename, int target_does_save) struct uploaded_tp *uploaded_tps = NULL, *utp; struct uploaded_tsv *uploaded_tsvs = NULL, *utsv; int a; - struct uploaded_string *cmd; + char *act; LONGEST gotten = 0; ULONGEST offset = 0; #define MAX_TRACE_UPLOAD 2000 @@ -2646,14 +2646,12 @@ trace_save (const char *filename, int target_does_save) fprintf (fp, ":X%x,%s", (unsigned int) strlen (utp->cond) / 2, utp->cond); fprintf (fp, "\n"); - for (a = 0; a < utp->numactions; ++a) + for (a = 0; VEC_iterate (char_ptr, utp->actions, a, act); ++a) fprintf (fp, "tp A%x:%s:%s\n", - utp->number, phex_nz (utp->addr, sizeof (utp->addr)), - utp->actions[a]); - for (a = 0; a < utp->num_step_actions; ++a) + utp->number, phex_nz (utp->addr, sizeof (utp->addr)), act); + for (a = 0; VEC_iterate (char_ptr, utp->actions, a, act); ++a) fprintf (fp, "tp S%x:%s:%s\n", - utp->number, phex_nz (utp->addr, sizeof (utp->addr)), - utp->step_actions[a]); + utp->number, phex_nz (utp->addr, sizeof (utp->addr)), act); if (utp->at_string) { encode_source_string (utp->number, utp->addr, @@ -2666,9 +2664,9 @@ trace_save (const char *filename, int target_does_save) "cond", utp->cond_string, buf, MAX_TRACE_UPLOAD); fprintf (fp, "tp Z%s\n", buf); } - for (cmd = utp->cmd_strings; cmd; cmd = cmd->next) + for (a = 0; VEC_iterate (char_ptr, utp->cmd_strings, a, act); ++a) { - encode_source_string (utp->number, utp->addr, "cmd", cmd->str, + encode_source_string (utp->number, utp->addr, "cmd", act, buf, MAX_TRACE_UPLOAD); fprintf (fp, "tp Z%s\n", buf); } @@ -2870,6 +2868,9 @@ get_uploaded_tp (int num, ULONGEST addr, struct uploaded_tp **utpp) memset (utp, 0, sizeof (struct uploaded_tp)); utp->number = num; utp->addr = addr; + utp->actions = NULL; + utp->step_actions = NULL; + utp->cmd_strings = NULL; utp->next = *utpp; *utpp = utp; return utp; @@ -3424,12 +3425,12 @@ parse_tracepoint_definition (char *line, struct uploaded_tp **utpp) else if (piece == 'A') { utp = get_uploaded_tp (num, addr, utpp); - utp->actions[utp->numactions++] = xstrdup (p); + VEC_safe_push (char_ptr, utp->actions, xstrdup (p)); } else if (piece == 'S') { utp = get_uploaded_tp (num, addr, utpp); - utp->step_actions[utp->num_step_actions++] = xstrdup (p); + VEC_safe_push (char_ptr, utp->step_actions, xstrdup (p)); } else if (piece == 'Z') { @@ -3453,21 +3454,7 @@ parse_tracepoint_definition (char *line, struct uploaded_tp **utpp) else if (strncmp (srctype, "cond:", strlen ("cond:")) == 0) utp->cond_string = xstrdup (buf); else if (strncmp (srctype, "cmd:", strlen ("cmd:")) == 0) - { - /* FIXME consider using a vector? */ - struct uploaded_string *last, *newlast; - newlast = (struct uploaded_string *) xmalloc (sizeof (struct uploaded_string)); - newlast->str = xstrdup (buf); - newlast->next = NULL; - if (utp->cmd_strings) - { - for (last = utp->cmd_strings; last->next; last = last->next) - ; - last->next = newlast; - } - else - utp->cmd_strings = newlast; - } + VEC_safe_push (char_ptr, utp->cmd_strings, xstrdup (buf)); } else { diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h index dd16dcf..13e956f 100644 --- a/gdb/tracepoint.h +++ b/gdb/tracepoint.h @@ -114,11 +114,7 @@ extern char *default_collect; /* Struct to collect random info about tracepoints on the target. */ -struct uploaded_string -{ - char *str; - struct uploaded_string *next; -}; +DEF_VEC_P (char_ptr); struct uploaded_tp { @@ -129,11 +125,13 @@ struct uploaded_tp int step; int pass; int orig_size; + + /* String that is the encoded form of the tracepoint's condition. */ char *cond; - int numactions; - char *actions[100]; - int num_step_actions; - char *step_actions[100]; + + /* Vectors of strings that are the encoded forms of a tracepoint's actions. */ + VEC(char_ptr) *actions; + VEC(char_ptr) *step_actions; /* The original string defining the location of the tracepoint. */ char *at_string; @@ -142,7 +140,7 @@ struct uploaded_tp char *cond_string; /* List of original strings defining the tracepoint's actions. */ - struct uploaded_string *cmd_strings; + VEC(char_ptr) *cmd_strings; struct uploaded_tp *next; }; -- 2.7.4