Use an accessor function for general_symbol_info::language
[deliverable/binutils-gdb.git] / gdb / ax-gdb.c
index 52ca081a8280d66befa4195720062e0ba261dd5f..d25413ea1f2f15ac1d05353865a9425e4c088b7b 100644 (file)
@@ -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,
@@ -675,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;
 
@@ -705,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));
@@ -727,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;
     }
 }
@@ -1533,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
@@ -1629,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;
 }
@@ -1644,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,
@@ -1658,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;
 }
@@ -1784,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);
@@ -1911,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;
@@ -2008,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;
@@ -2020,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;
@@ -2036,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);
@@ -2231,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)
@@ -2241,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;
       }
@@ -2541,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));
@@ -2636,11 +2634,10 @@ agent_command_1 (const 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] == ',')
@@ -2680,12 +2677,8 @@ agent_eval_command (const char *exp, int from_tty)
 static void
 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 *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
@@ -2704,9 +2697,7 @@ maint_agent_printf_command (const char *cmdrest, 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;
 
@@ -2722,15 +2713,14 @@ maint_agent_printf_command (const char *cmdrest, int from_tty)
     cmdrest++;
   cmdrest = skip_spaces (cmdrest);
 
-  nargs = 0;
+  std::vector<struct expression *> 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;
@@ -2741,14 +2731,13 @@ maint_agent_printf_command (const char *cmdrest, 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 ();
 }
 
@@ -2760,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);
@@ -2768,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);
This page took 0.042325 seconds and 4 git commands to generate.