X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Flinespec.c;h=50951bdd80c9839a1976381737e9231c1c14b58c;hb=8465445732dc04c3fb6cf954274e12d06b274f08;hp=ff8ae05206209d42dcd32dc333defc1b96ad6069;hpb=87f0e7204722a986f79f245eee716f0870832d47;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/linespec.c b/gdb/linespec.c index ff8ae05206..50951bdd80 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1,6 +1,6 @@ /* Parser for linespec for the GNU debugger, GDB. - Copyright (C) 1986-2015 Free Software Foundation, Inc. + Copyright (C) 1986-2016 Free Software Foundation, Inc. This file is part of GDB. @@ -72,7 +72,7 @@ DEF_VEC_O (bound_minimal_symbol_d); struct linespec { /* An explicit location describing the SaLs. */ - struct explicit_location explicit; + struct explicit_location explicit_loc; /* The list of symtabs to search to which to limit the search. May not be NULL. If explicit.SOURCE_FILENAME is NULL (no user-specified @@ -256,7 +256,7 @@ typedef struct ls_parser linespec_parser; /* A convenience macro for accessing the explicit location result of the parser. */ -#define PARSER_EXPLICIT(PPTR) (&PARSER_RESULT ((PPTR))->explicit) +#define PARSER_EXPLICIT(PPTR) (&PARSER_RESULT ((PPTR))->explicit_loc) /* Prototypes for local functions. */ @@ -669,7 +669,7 @@ linespec_lexer_lex_string (linespec_parser *parser) && (PARSER_STREAM (parser) - start) > 8 /* strlen ("operator") */) { - char *p = strstr (start, "operator"); + const char *p = strstr (start, "operator"); if (p != NULL && is_operator_name (p)) { @@ -810,7 +810,7 @@ add_sal_to_sals_basic (struct symtabs_and_lines *sals, struct symtab_and_line *sal) { ++sals->nelts; - sals->sals = xrealloc (sals->sals, sals->nelts * sizeof (sals->sals[0])); + sals->sals = XRESIZEVEC (struct symtab_and_line, sals->sals, sals->nelts); sals->sals[sals->nelts - 1] = *sal; } @@ -833,9 +833,8 @@ add_sal_to_sals (struct linespec_state *self, { struct linespec_canonical_name *canonical; - self->canonical_names = xrealloc (self->canonical_names, - (sals->nelts - * sizeof (*self->canonical_names))); + self->canonical_names = XRESIZEVEC (struct linespec_canonical_name, + self->canonical_names, sals->nelts); canonical = &self->canonical_names[sals->nelts - 1]; if (!literal_canonical && sal->symtab) { @@ -869,7 +868,7 @@ add_sal_to_sals (struct linespec_state *self, static hashval_t hash_address_entry (const void *p) { - const struct address_entry *aep = p; + const struct address_entry *aep = (const struct address_entry *) p; hashval_t hash; hash = iterative_hash_object (aep->pspace, 0); @@ -881,8 +880,8 @@ hash_address_entry (const void *p) static int eq_address_entry (const void *a, const void *b) { - const struct address_entry *aea = a; - const struct address_entry *aeb = b; + const struct address_entry *aea = (const struct address_entry *) a; + const struct address_entry *aeb = (const struct address_entry *) b; return aea->pspace == aeb->pspace && aea->addr == aeb->addr; } @@ -930,7 +929,8 @@ iterate_inline_only (struct symbol *sym, void *d) { if (SYMBOL_INLINED (sym)) { - struct symbol_and_data_callback *cad = d; + struct symbol_and_data_callback *cad + = (struct symbol_and_data_callback *) d; return cad->callback (sym, cad->data); } @@ -954,7 +954,8 @@ struct symbol_matcher_data static int iterate_name_matcher (const char *name, void *d) { - const struct symbol_matcher_data *data = d; + const struct symbol_matcher_data *data + = (const struct symbol_matcher_data *) d; if (data->symbol_name_cmp (name, data->lookup_name) == 0) return 1; /* Expand this symbol's symbol table. */ @@ -1295,8 +1296,8 @@ struct decode_line_2_item static int decode_line_2_compare_items (const void *ap, const void *bp) { - const struct decode_line_2_item *a = ap; - const struct decode_line_2_item *b = bp; + const struct decode_line_2_item *a = (const struct decode_line_2_item *) ap; + const struct decode_line_2_item *b = (const struct decode_line_2_item *) bp; int retval; retval = strcmp (a->displayform, b->displayform); @@ -1332,7 +1333,7 @@ decode_line_2 (struct linespec_state *self, /* Prepare ITEMS array. */ items_count = result->nelts; - items = xmalloc (sizeof (*items) * items_count); + items = XNEWVEC (struct decode_line_2_item, items_count); make_cleanup (xfree, items); for (i = 0; i < items_count; ++i) { @@ -1769,21 +1770,22 @@ static void canonicalize_linespec (struct linespec_state *state, const linespec_p ls) { struct event_location *canon; - struct explicit_location *explicit; + struct explicit_location *explicit_loc; /* If canonicalization was not requested, no need to do anything. */ if (!state->canonical) return; /* Save everything as an explicit location. */ - canon = state->canonical->location = new_explicit_location (&ls->explicit); - explicit = get_explicit_location (canon); + canon = state->canonical->location + = new_explicit_location (&ls->explicit_loc); + explicit_loc = get_explicit_location (canon); - if (explicit->label_name != NULL) + if (explicit_loc->label_name != NULL) { state->canonical->special_display = 1; - if (explicit->function_name == NULL) + if (explicit_loc->function_name == NULL) { struct symbol *s; @@ -1792,7 +1794,7 @@ canonicalize_linespec (struct linespec_state *state, const linespec_p ls) && (VEC_length (symbolp, ls->labels.function_symbols) == 1)); s = VEC_index (symbolp, ls->labels.function_symbols, 0); - explicit->function_name = xstrdup (SYMBOL_NATURAL_NAME (s)); + explicit_loc->function_name = xstrdup (SYMBOL_NATURAL_NAME (s)); } } @@ -1800,7 +1802,7 @@ canonicalize_linespec (struct linespec_state *state, const linespec_p ls) representation of it for display and saving to file. */ if (state->is_linespec) { - char *linespec = explicit_location_to_linespec (explicit); + char *linespec = explicit_location_to_linespec (explicit_loc); set_event_location_string (canon, linespec); xfree (linespec); @@ -1844,18 +1846,18 @@ create_sals_line_offset (struct linespec_state *self, use_default = 1; } - val.line = ls->explicit.line_offset.offset; - switch (ls->explicit.line_offset.sign) + val.line = ls->explicit_loc.line_offset.offset; + switch (ls->explicit_loc.line_offset.sign) { case LINE_OFFSET_PLUS: - if (ls->explicit.line_offset.offset == 0) + if (ls->explicit_loc.line_offset.offset == 0) val.line = 5; if (use_default) val.line = self->default_line + val.line; break; case LINE_OFFSET_MINUS: - if (ls->explicit.line_offset.offset == 0) + if (ls->explicit_loc.line_offset.offset == 0) val.line = 15; if (use_default) val.line = self->default_line - val.line; @@ -1947,9 +1949,9 @@ create_sals_line_offset (struct linespec_state *self, if (values.nelts == 0) { - if (ls->explicit.source_filename) + if (ls->explicit_loc.source_filename) throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."), - val.line, ls->explicit.source_filename); + val.line, ls->explicit_loc.source_filename); else throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."), val.line); @@ -2046,13 +2048,13 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls) } } } - else if (ls->explicit.line_offset.sign != LINE_OFFSET_UNKNOWN) + else if (ls->explicit_loc.line_offset.sign != LINE_OFFSET_UNKNOWN) { /* Only an offset was specified. */ sals = create_sals_line_offset (state, ls); /* Make sure we have a filename for canonicalization. */ - if (ls->explicit.source_filename == NULL) + if (ls->explicit_loc.source_filename == NULL) { const char *fullname = symtab_to_fullname (state->default_symtab); @@ -2060,7 +2062,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls) form so that displaying SOURCE_FILENAME can follow the current FILENAME_DISPLAY_STRING setting. But as it is used only rarely it has been kept for code simplicity only in absolute form. */ - ls->explicit.source_filename = xstrdup (fullname); + ls->explicit_loc.source_filename = xstrdup (fullname); } } else @@ -2077,29 +2079,30 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls) return sals; } -/* Convert the explicit location EXPLICIT into SaLs. */ +/* Convert the explicit location EXPLICIT_LOC into SaLs. */ static struct symtabs_and_lines convert_explicit_location_to_sals (struct linespec_state *self, linespec_p result, - const struct explicit_location *explicit) + const struct explicit_location *explicit_loc) { VEC (symbolp) *symbols, *labels; VEC (bound_minimal_symbol_d) *minimal_symbols; - if (explicit->source_filename != NULL) + if (explicit_loc->source_filename != NULL) { TRY { result->file_symtabs - = symtabs_from_filename (explicit->source_filename); + = symtabs_from_filename (explicit_loc->source_filename); } CATCH (except, RETURN_MASK_ERROR) { - source_file_not_found_error (explicit->source_filename); + source_file_not_found_error (explicit_loc->source_filename); } END_CATCH - result->explicit.source_filename = xstrdup (explicit->source_filename); + result->explicit_loc.source_filename + = xstrdup (explicit_loc->source_filename); } else { @@ -2107,38 +2110,39 @@ convert_explicit_location_to_sals (struct linespec_state *self, VEC_safe_push (symtab_ptr, result->file_symtabs, NULL); } - if (explicit->function_name != NULL) + if (explicit_loc->function_name != NULL) { find_linespec_symbols (self, result->file_symtabs, - explicit->function_name, &symbols, + explicit_loc->function_name, &symbols, &minimal_symbols); if (symbols == NULL && minimal_symbols == NULL) - symbol_not_found_error (explicit->function_name, - result->explicit.source_filename); + symbol_not_found_error (explicit_loc->function_name, + result->explicit_loc.source_filename); - result->explicit.function_name = xstrdup (explicit->function_name); + result->explicit_loc.function_name + = xstrdup (explicit_loc->function_name); result->function_symbols = symbols; result->minimal_symbols = minimal_symbols; } - if (explicit->label_name != NULL) + if (explicit_loc->label_name != NULL) { symbols = NULL; labels = find_label_symbols (self, result->function_symbols, - &symbols, explicit->label_name); + &symbols, explicit_loc->label_name); if (labels == NULL) - undefined_label_error (result->explicit.function_name, - explicit->label_name); + undefined_label_error (result->explicit_loc.function_name, + explicit_loc->label_name); - result->explicit.label_name = xstrdup (explicit->label_name); + result->explicit_loc.label_name = xstrdup (explicit_loc->label_name); result->labels.label_symbols = labels; result->labels.function_symbols = symbols; } - if (explicit->line_offset.sign != LINE_OFFSET_UNKNOWN) - result->explicit.line_offset = explicit->line_offset; + if (explicit_loc->line_offset.sign != LINE_OFFSET_UNKNOWN) + result->explicit_loc.line_offset = explicit_loc->line_offset; return convert_linespec_to_sals (self, result); } @@ -2501,12 +2505,12 @@ event_location_to_sals (linespec_parser *parser, case EXPLICIT_LOCATION: { - const struct explicit_location *explicit; + const struct explicit_location *explicit_loc; - explicit = get_explicit_location_const (location); + explicit_loc = get_explicit_location_const (location); result = convert_explicit_location_to_sals (PARSER_STATE (parser), PARSER_RESULT (parser), - explicit); + explicit_loc); } break; @@ -2755,11 +2759,11 @@ decode_objc (struct linespec_state *self, linespec_p ls, const char *arg) { char *saved_arg; - saved_arg = alloca (new_argptr - arg + 1); + saved_arg = (char *) alloca (new_argptr - arg + 1); memcpy (saved_arg, arg, new_argptr - arg); saved_arg[new_argptr - arg] = '\0'; - ls->explicit.function_name = xstrdup (saved_arg); + ls->explicit_loc.function_name = xstrdup (saved_arg); ls->function_symbols = info.result.symbols; ls->minimal_symbols = info.result.minimal_symbols; values = convert_linespec_to_sals (self, ls); @@ -2770,10 +2774,10 @@ decode_objc (struct linespec_state *self, linespec_p ls, const char *arg) self->canonical->pre_expanded = 1; - if (ls->explicit.source_filename) + if (ls->explicit_loc.source_filename) { str = xstrprintf ("%s:%s", - ls->explicit.source_filename, saved_arg); + ls->explicit_loc.source_filename, saved_arg); } else str = xstrdup (saved_arg); @@ -2807,7 +2811,8 @@ struct decode_compound_collector static int collect_one_symbol (struct symbol *sym, void *d) { - struct decode_compound_collector *collector = d; + struct decode_compound_collector *collector + = (struct decode_compound_collector *) d; void **slot; struct type *t; @@ -2887,8 +2892,8 @@ lookup_prefix_sym (struct linespec_state *state, VEC (symtab_ptr) *file_symtabs, static int compare_symbols (const void *a, const void *b) { - struct symbol * const *sa = a; - struct symbol * const *sb = b; + struct symbol * const *sa = (struct symbol * const*) a; + struct symbol * const *sb = (struct symbol * const*) b; uintptr_t uia, uib; uia = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (*sa)); @@ -2915,8 +2920,10 @@ compare_symbols (const void *a, const void *b) static int compare_msymbols (const void *a, const void *b) { - const struct bound_minimal_symbol *sa = a; - const struct bound_minimal_symbol *sb = b; + const struct bound_minimal_symbol *sa + = (const struct bound_minimal_symbol *) a; + const struct bound_minimal_symbol *sb + = (const struct bound_minimal_symbol *) b; uintptr_t uia, uib; uia = (uintptr_t) sa->objfile->pspace; @@ -3097,7 +3104,7 @@ struct symtab_collector static int add_symtabs_to_list (struct symtab *symtab, void *d) { - struct symtab_collector *data = d; + struct symtab_collector *data = (struct symtab_collector *) d; void **slot; slot = htab_find_slot (data->symtab_table, symtab, INSERT); @@ -3287,14 +3294,14 @@ find_linespec_symbols (struct linespec_state *state, /* LOOKUP_NAME points to the class name. LAST points to the method name. */ - klass = xmalloc ((last - lookup_name + 1) * sizeof (char)); + klass = XNEWVEC (char, last - lookup_name + 1); make_cleanup (xfree, klass); strncpy (klass, lookup_name, last - lookup_name); klass[last - lookup_name] = '\0'; /* Skip past the scope operator. */ last += strlen (scope_op); - method = xmalloc ((strlen (last) + 1) * sizeof (char)); + method = XNEWVEC (char, strlen (last) + 1); make_cleanup (xfree, method); strcpy (method, last); @@ -3520,7 +3527,7 @@ linespec_parse_variable (struct linespec_state *self, const char *variable) static int collect_symbols (struct symbol *sym, void *data) { - struct collect_info *info = data; + struct collect_info *info = (struct collect_info *) data; /* In list mode, add all matching symbols, regardless of class. This allows the user to type "list a_global_variable". */ @@ -3567,6 +3574,8 @@ minsym_found (struct linespec_state *self, struct objfile *objfile, sal.pc = MSYMBOL_VALUE_ADDRESS (objfile, msymbol); sal.pc = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc, ¤t_target); + if (gdbarch_skip_entrypoint_p (gdbarch)) + sal.pc = gdbarch_skip_entrypoint (gdbarch, sal.pc); } else skip_prologue_sal (&sal); @@ -3626,8 +3635,8 @@ classify_mtype (enum minimal_symbol_type t) static int compare_msyms (const void *a, const void *b) { - const bound_minimal_symbol_d *moa = a; - const bound_minimal_symbol_d *mob = b; + const bound_minimal_symbol_d *moa = (const bound_minimal_symbol_d *) a; + const bound_minimal_symbol_d *mob = (const bound_minimal_symbol_d *) b; enum minimal_symbol_type ta = MSYMBOL_TYPE (moa->minsym); enum minimal_symbol_type tb = MSYMBOL_TYPE (mob->minsym); @@ -3640,7 +3649,7 @@ compare_msyms (const void *a, const void *b) static void add_minsym (struct minimal_symbol *minsym, void *d) { - struct collect_minsyms *info = d; + struct collect_minsyms *info = (struct collect_minsyms *) d; bound_minimal_symbol_d mo; mo.minsym = minsym; @@ -3894,7 +3903,7 @@ destroy_linespec_result (struct linespec_result *ls) static void cleanup_linespec_result (void *a) { - destroy_linespec_result (a); + destroy_linespec_result ((struct linespec_result *) a); } /* See the comment in linespec.h. */