X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fax-gdb.c;h=d25413ea1f2f15ac1d05353865a9425e4c088b7b;hb=c1b5c1ebc938b6dc0277363b8c47d75b0b5a621f;hp=227590b1a98bfcf0b1e88362911a0d85e65eb278;hpb=f1735a53a63040cc4b4a735bf18a3f20d308e519;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index 227590b1a9..d25413ea1f 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -1,6 +1,6 @@ /* GDB-specific functions for operating on agent expressions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. + Copyright (C) 1998-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -46,7 +46,7 @@ #include "valprint.h" #include "c-lang.h" -#include "format.h" +#include "gdbsupport/format.h" /* To make sense of this file, you should read doc/agentexpr.texi. Then look at the types and enums in ax-gdb.h. For the code itself, @@ -158,8 +158,6 @@ static void gen_expr_binop_rest (struct expression *exp, struct axs_value *value, struct axs_value *value1, struct axs_value *value2); - -static void agent_command (char *exp, int from_tty); /* Detecting constant expressions. */ @@ -677,11 +675,11 @@ gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var) case LOC_TYPEDEF: error (_("Cannot compute value of typedef `%s'."), - SYMBOL_PRINT_NAME (var)); + var->print_name ()); break; case LOC_BLOCK: - ax_const_l (ax, BLOCK_START (SYMBOL_BLOCK_VALUE (var))); + ax_const_l (ax, BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var))); value->kind = axs_rvalue; break; @@ -707,10 +705,10 @@ gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var) case LOC_UNRESOLVED: { struct bound_minimal_symbol msym - = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (var), NULL, NULL); + = lookup_minimal_symbol (var->linkage_name (), NULL, NULL); if (!msym.minsym) - error (_("Couldn't resolve symbol `%s'."), SYMBOL_PRINT_NAME (var)); + error (_("Couldn't resolve symbol `%s'."), var->print_name ()); /* Push the address of the variable. */ ax_const_l (ax, BMSYMBOL_VALUE_ADDRESS (msym)); @@ -729,7 +727,7 @@ gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var) default: error (_("Cannot find value of botched symbol `%s'."), - SYMBOL_PRINT_NAME (var)); + var->print_name ()); break; } } @@ -1535,7 +1533,7 @@ gen_struct_ref (struct agent_expr *ax, struct axs_value *value, if (!found) error (_("Couldn't find member named `%s' in struct/union/class `%s'"), - field, TYPE_TAG_NAME (type)); + field, TYPE_NAME (type)); } static int @@ -1631,7 +1629,7 @@ gen_namespace_elt (struct agent_expr *ax, struct axs_value *value, if (!found) error (_("No symbol \"%s\" in namespace \"%s\"."), - name, TYPE_TAG_NAME (curtype)); + name, TYPE_NAME (curtype)); return found; } @@ -1646,7 +1644,7 @@ static int gen_maybe_namespace_elt (struct agent_expr *ax, struct axs_value *value, const struct type *curtype, char *name) { - const char *namespace_name = TYPE_TAG_NAME (curtype); + const char *namespace_name = TYPE_NAME (curtype); struct block_symbol sym; sym = cp_lookup_symbol_namespace (namespace_name, name, @@ -1660,7 +1658,7 @@ gen_maybe_namespace_elt (struct agent_expr *ax, struct axs_value *value, if (value->optimized_out) error (_("`%s' has been optimized out, cannot use"), - SYMBOL_PRINT_NAME (sym.symbol)); + sym.symbol->print_name ()); return 1; } @@ -1786,7 +1784,7 @@ gen_expr_for_cast (struct expression *exp, union exp_element **pc, if (value->optimized_out) error (_("`%s' has been optimized out, cannot use"), - SYMBOL_PRINT_NAME ((*pc)[2].symbol)); + (*pc)[2].symbol->print_name ()); } else gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile); @@ -1913,7 +1911,7 @@ gen_expr (struct expression *exp, union exp_element **pc, gen_expr (exp, pc, ax, &value3); gen_usual_unary (ax, &value3); ax_label (ax, end, ax->len); - /* This is arbitary - what if B and C are incompatible types? */ + /* This is arbitrary - what if B and C are incompatible types? */ value->type = value2.type; value->kind = value2.kind; break; @@ -2010,10 +2008,10 @@ gen_expr (struct expression *exp, union exp_element **pc, if (value->optimized_out) error (_("`%s' has been optimized out, cannot use"), - SYMBOL_PRINT_NAME ((*pc)[2].symbol)); + (*pc)[2].symbol->print_name ()); if (TYPE_CODE (value->type) == TYPE_CODE_ERROR) - error_unknown_type (SYMBOL_PRINT_NAME ((*pc)[2].symbol)); + error_unknown_type ((*pc)[2].symbol->print_name ()); (*pc) += 4; break; @@ -2022,7 +2020,7 @@ gen_expr (struct expression *exp, union exp_element **pc, gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile); if (TYPE_CODE (value->type) == TYPE_CODE_ERROR) - error_unknown_type (MSYMBOL_PRINT_NAME ((*pc)[2].msymbol)); + error_unknown_type ((*pc)[2].msymbol->linkage_name ()); (*pc) += 4; break; @@ -2038,8 +2036,7 @@ gen_expr (struct expression *exp, union exp_element **pc, internal_error (__FILE__, __LINE__, _("Register $%s not available"), name); /* No support for tracing user registers yet. */ - if (reg >= gdbarch_num_regs (ax->gdbarch) - + gdbarch_num_pseudo_regs (ax->gdbarch)) + if (reg >= gdbarch_num_cooked_regs (ax->gdbarch)) error (_("'%s' is a user-register; " "GDB cannot yet trace user-register contents."), name); @@ -2233,7 +2230,7 @@ gen_expr (struct expression *exp, union exp_element **pc, b = block_for_pc (ax->scope); func = block_linkage_function (b); - lang = language_def (SYMBOL_LANGUAGE (func)); + lang = language_def (func->language ()); sym = lookup_language_this (lang, b).symbol; if (!sym) @@ -2243,7 +2240,7 @@ gen_expr (struct expression *exp, union exp_element **pc, if (value->optimized_out) error (_("`%s' has been optimized out, cannot use"), - SYMBOL_PRINT_NAME (sym)); + sym->print_name ()); (*pc) += 2; } @@ -2543,7 +2540,6 @@ agent_expr_up gen_printf (CORE_ADDR scope, struct gdbarch *gdbarch, CORE_ADDR function, LONGEST channel, const char *format, int fmtlen, - struct format_piece *frags, int nargs, struct expression **exprs) { agent_expr_up ax (new agent_expr (gdbarch, scope)); @@ -2622,7 +2618,7 @@ agent_eval_command_one (const char *exp, int eval, CORE_ADDR pc) } static void -agent_command_1 (char *exp, int eval) +agent_command_1 (const char *exp, int eval) { /* We don't deal with overlay debugging at the moment. We need to think more carefully about this. If you copy this code into @@ -2638,11 +2634,10 @@ agent_command_1 (char *exp, int eval) { struct linespec_result canonical; - exp = skip_spaces (exp); - - event_location_up location = new_linespec_location (&exp); + event_location_up location + = new_linespec_location (&exp, symbol_name_match_type::WILD); decode_line_full (location.get (), DECODE_LINE_FUNFIRSTLINE, NULL, - (struct symtab *) NULL, 0, &canonical, + NULL, 0, &canonical, NULL, NULL); exp = skip_spaces (exp); if (exp[0] == ',') @@ -2661,7 +2656,7 @@ agent_command_1 (char *exp, int eval) } static void -agent_command (char *exp, int from_tty) +agent_command (const char *exp, int from_tty) { agent_command_1 (exp, 0); } @@ -2671,7 +2666,7 @@ agent_command (char *exp, int from_tty) expression. */ static void -agent_eval_command (char *exp, int from_tty) +agent_eval_command (const char *exp, int from_tty) { agent_command_1 (exp, 1); } @@ -2680,15 +2675,10 @@ agent_eval_command (char *exp, int from_tty) that does a printf, and display the resulting expression. */ static void -maint_agent_printf_command (char *exp, int from_tty) +maint_agent_printf_command (const char *cmdrest, int from_tty) { - struct cleanup *old_chain = 0; - struct expression *argvec[100]; struct frame_info *fi = get_current_frame (); /* need current scope */ - const char *cmdrest; const char *format_start, *format_end; - struct format_piece *fpieces; - int nargs; /* We don't deal with overlay debugging at the moment. We need to think more carefully about this. If you copy this code into @@ -2697,11 +2687,9 @@ maint_agent_printf_command (char *exp, int from_tty) if (overlay_debugging) error (_("GDB can't do agent expression translation with overlays.")); - if (exp == 0) + if (cmdrest == 0) error_no_arg (_("expression to translate")); - cmdrest = exp; - cmdrest = skip_spaces (cmdrest); if (*cmdrest++ != '"') @@ -2709,9 +2697,7 @@ maint_agent_printf_command (char *exp, int from_tty) format_start = cmdrest; - fpieces = parse_format_string (&cmdrest); - - old_chain = make_cleanup (free_format_pieces_cleanup, &fpieces); + format_pieces fpieces (&cmdrest); format_end = cmdrest; @@ -2727,15 +2713,14 @@ maint_agent_printf_command (char *exp, int from_tty) cmdrest++; cmdrest = skip_spaces (cmdrest); - nargs = 0; + std::vector argvec; while (*cmdrest != '\0') { const char *cmd1; cmd1 = cmdrest; expression_up expr = parse_exp_1 (&cmd1, 0, (struct block *) 0, 1); - argvec[nargs] = expr.release (); - ++nargs; + argvec.push_back (expr.release ()); cmdrest = cmd1; if (*cmdrest == ',') ++cmdrest; @@ -2746,14 +2731,13 @@ maint_agent_printf_command (char *exp, int from_tty) agent_expr_up agent = gen_printf (get_frame_pc (fi), get_current_arch (), 0, 0, format_start, format_end - format_start, - fpieces, nargs, argvec); + argvec.size (), argvec.data ()); ax_reqs (agent.get ()); ax_print (gdb_stdout, agent.get ()); /* It would be nice to call ax_reqs here to gather some general info about the expression, and then print out the result. */ - do_cleanups (old_chain); dont_repeat (); } @@ -2765,7 +2749,7 @@ _initialize_ax_gdb (void) add_cmd ("agent", class_maintenance, agent_command, _("\ Translate an expression into remote agent bytecode for tracing.\n\ -Usage: maint agent [-at location,] EXPRESSION\n\ +Usage: maint agent [-at LOCATION,] EXPRESSION\n\ If -at is given, generate remote agent bytecode for this location.\n\ If not, generate remote agent bytecode for current frame pc address."), &maintenancelist); @@ -2773,7 +2757,7 @@ If not, generate remote agent bytecode for current frame pc address."), add_cmd ("agent-eval", class_maintenance, agent_eval_command, _("\ Translate an expression into remote agent bytecode for evaluation.\n\ -Usage: maint agent-eval [-at location,] EXPRESSION\n\ +Usage: maint agent-eval [-at LOCATION,] EXPRESSION\n\ If -at is given, generate remote agent bytecode for this location.\n\ If not, generate remote agent bytecode for current frame pc address."), &maintenancelist);