Home | History | Annotate | Line # | Download | only in gdb
ax-gdb.c revision 1.9
      1  1.1  christos /* GDB-specific functions for operating on agent expressions.
      2  1.1  christos 
      3  1.9  christos    Copyright (C) 1998-2020 Free Software Foundation, Inc.
      4  1.1  christos 
      5  1.1  christos    This file is part of GDB.
      6  1.1  christos 
      7  1.1  christos    This program is free software; you can redistribute it and/or modify
      8  1.1  christos    it under the terms of the GNU General Public License as published by
      9  1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10  1.1  christos    (at your option) any later version.
     11  1.1  christos 
     12  1.1  christos    This program is distributed in the hope that it will be useful,
     13  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15  1.1  christos    GNU General Public License for more details.
     16  1.1  christos 
     17  1.1  christos    You should have received a copy of the GNU General Public License
     18  1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19  1.1  christos 
     20  1.1  christos #include "defs.h"
     21  1.1  christos #include "symtab.h"
     22  1.1  christos #include "symfile.h"
     23  1.1  christos #include "gdbtypes.h"
     24  1.1  christos #include "language.h"
     25  1.1  christos #include "value.h"
     26  1.1  christos #include "expression.h"
     27  1.1  christos #include "command.h"
     28  1.1  christos #include "gdbcmd.h"
     29  1.1  christos #include "frame.h"
     30  1.1  christos #include "target.h"
     31  1.1  christos #include "ax.h"
     32  1.1  christos #include "ax-gdb.h"
     33  1.1  christos #include "block.h"
     34  1.1  christos #include "regcache.h"
     35  1.1  christos #include "user-regs.h"
     36  1.1  christos #include "dictionary.h"
     37  1.1  christos #include "breakpoint.h"
     38  1.1  christos #include "tracepoint.h"
     39  1.1  christos #include "cp-support.h"
     40  1.1  christos #include "arch-utils.h"
     41  1.1  christos #include "cli/cli-utils.h"
     42  1.1  christos #include "linespec.h"
     43  1.6  christos #include "location.h"
     44  1.3  christos #include "objfiles.h"
     45  1.8  christos #include "typeprint.h"
     46  1.1  christos #include "valprint.h"
     47  1.1  christos #include "c-lang.h"
     48  1.1  christos 
     49  1.9  christos #include "gdbsupport/format.h"
     50  1.1  christos 
     51  1.1  christos /* To make sense of this file, you should read doc/agentexpr.texi.
     52  1.1  christos    Then look at the types and enums in ax-gdb.h.  For the code itself,
     53  1.1  christos    look at gen_expr, towards the bottom; that's the main function that
     54  1.1  christos    looks at the GDB expressions and calls everything else to generate
     55  1.1  christos    code.
     56  1.1  christos 
     57  1.1  christos    I'm beginning to wonder whether it wouldn't be nicer to internally
     58  1.1  christos    generate trees, with types, and then spit out the bytecode in
     59  1.1  christos    linear form afterwards; we could generate fewer `swap', `ext', and
     60  1.1  christos    `zero_ext' bytecodes that way; it would make good constant folding
     61  1.1  christos    easier, too.  But at the moment, I think we should be willing to
     62  1.1  christos    pay for the simplicity of this code with less-than-optimal bytecode
     63  1.1  christos    strings.
     64  1.1  christos 
     65  1.1  christos    Remember, "GBD" stands for "Great Britain, Dammit!"  So be careful.  */
     66  1.1  christos 
     67  1.1  christos 
     69  1.1  christos 
     70  1.1  christos /* Prototypes for local functions.  */
     71  1.1  christos 
     72  1.1  christos /* There's a standard order to the arguments of these functions:
     73  1.1  christos    union exp_element ** --- pointer into expression
     74  1.1  christos    struct agent_expr * --- agent expression buffer to generate code into
     75  1.1  christos    struct axs_value * --- describes value left on top of stack  */
     76  1.1  christos 
     77  1.1  christos static struct value *const_var_ref (struct symbol *var);
     78  1.1  christos static struct value *const_expr (union exp_element **pc);
     79  1.1  christos static struct value *maybe_const_expr (union exp_element **pc);
     80  1.8  christos 
     81  1.1  christos static void gen_traced_pop (struct agent_expr *, struct axs_value *);
     82  1.1  christos 
     83  1.1  christos static void gen_sign_extend (struct agent_expr *, struct type *);
     84  1.1  christos static void gen_extend (struct agent_expr *, struct type *);
     85  1.1  christos static void gen_fetch (struct agent_expr *, struct type *);
     86  1.1  christos static void gen_left_shift (struct agent_expr *, int);
     87  1.1  christos 
     88  1.8  christos 
     89  1.8  christos static void gen_frame_args_address (struct agent_expr *);
     90  1.1  christos static void gen_frame_locals_address (struct agent_expr *);
     91  1.1  christos static void gen_offset (struct agent_expr *ax, int offset);
     92  1.8  christos static void gen_sym_offset (struct agent_expr *, struct symbol *);
     93  1.8  christos static void gen_var_ref (struct agent_expr *ax, struct axs_value *value,
     94  1.1  christos 			 struct symbol *var);
     95  1.1  christos 
     96  1.1  christos 
     97  1.1  christos static void gen_int_literal (struct agent_expr *ax,
     98  1.1  christos 			     struct axs_value *value,
     99  1.1  christos 			     LONGEST k, struct type *type);
    100  1.8  christos 
    101  1.1  christos static void gen_usual_unary (struct agent_expr *ax, struct axs_value *value);
    102  1.1  christos static int type_wider_than (struct type *type1, struct type *type2);
    103  1.1  christos static struct type *max_type (struct type *type1, struct type *type2);
    104  1.1  christos static void gen_conversion (struct agent_expr *ax,
    105  1.1  christos 			    struct type *from, struct type *to);
    106  1.8  christos static int is_nontrivial_conversion (struct type *from, struct type *to);
    107  1.1  christos static void gen_usual_arithmetic (struct agent_expr *ax,
    108  1.1  christos 				  struct axs_value *value1,
    109  1.8  christos 				  struct axs_value *value2);
    110  1.1  christos static void gen_integral_promotions (struct agent_expr *ax,
    111  1.1  christos 				     struct axs_value *value);
    112  1.1  christos static void gen_cast (struct agent_expr *ax,
    113  1.1  christos 		      struct axs_value *value, struct type *type);
    114  1.1  christos static void gen_scale (struct agent_expr *ax,
    115  1.1  christos 		       enum agent_op op, struct type *type);
    116  1.1  christos static void gen_ptradd (struct agent_expr *ax, struct axs_value *value,
    117  1.1  christos 			struct axs_value *value1, struct axs_value *value2);
    118  1.1  christos static void gen_ptrsub (struct agent_expr *ax, struct axs_value *value,
    119  1.1  christos 			struct axs_value *value1, struct axs_value *value2);
    120  1.1  christos static void gen_ptrdiff (struct agent_expr *ax, struct axs_value *value,
    121  1.1  christos 			 struct axs_value *value1, struct axs_value *value2,
    122  1.1  christos 			 struct type *result_type);
    123  1.1  christos static void gen_binop (struct agent_expr *ax,
    124  1.1  christos 		       struct axs_value *value,
    125  1.1  christos 		       struct axs_value *value1,
    126  1.1  christos 		       struct axs_value *value2,
    127  1.7  christos 		       enum agent_op op,
    128  1.7  christos 		       enum agent_op op_unsigned, int may_carry,
    129  1.1  christos 		       const char *name);
    130  1.1  christos static void gen_logical_not (struct agent_expr *ax, struct axs_value *value,
    131  1.1  christos 			     struct type *result_type);
    132  1.8  christos static void gen_complement (struct agent_expr *ax, struct axs_value *value);
    133  1.8  christos static void gen_deref (struct axs_value *);
    134  1.8  christos static void gen_address_of (struct axs_value *);
    135  1.1  christos static void gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
    136  1.8  christos 			      struct type *type, int start, int end);
    137  1.1  christos static void gen_primitive_field (struct agent_expr *ax,
    138  1.1  christos 				 struct axs_value *value,
    139  1.8  christos 				 int offset, int fieldno, struct type *type);
    140  1.1  christos static int gen_struct_ref_recursive (struct agent_expr *ax,
    141  1.7  christos 				     struct axs_value *value,
    142  1.1  christos 				     const char *field, int offset,
    143  1.8  christos 				     struct type *type);
    144  1.1  christos static void gen_struct_ref (struct agent_expr *ax,
    145  1.7  christos 			    struct axs_value *value,
    146  1.7  christos 			    const char *field,
    147  1.7  christos 			    const char *operator_name,
    148  1.8  christos 			    const char *operand_name);
    149  1.1  christos static void gen_static_field (struct agent_expr *ax, struct axs_value *value,
    150  1.1  christos 			      struct type *type, int fieldno);
    151  1.1  christos static void gen_repeat (struct expression *exp, union exp_element **pc,
    152  1.1  christos 			struct agent_expr *ax, struct axs_value *value);
    153  1.1  christos static void gen_sizeof (struct expression *exp, union exp_element **pc,
    154  1.1  christos 			struct agent_expr *ax, struct axs_value *value,
    155  1.1  christos 			struct type *size_type);
    156  1.1  christos static void gen_expr_binop_rest (struct expression *exp,
    157  1.1  christos 				 enum exp_opcode op, union exp_element **pc,
    158  1.1  christos 				 struct agent_expr *ax,
    159  1.1  christos 				 struct axs_value *value,
    160  1.1  christos 				 struct axs_value *value1,
    161  1.1  christos 				 struct axs_value *value2);
    162  1.1  christos 
    163  1.1  christos 
    165  1.1  christos /* Detecting constant expressions.  */
    166  1.1  christos 
    167  1.1  christos /* If the variable reference at *PC is a constant, return its value.
    168  1.1  christos    Otherwise, return zero.
    169  1.1  christos 
    170  1.1  christos    Hey, Wally!  How can a variable reference be a constant?
    171  1.1  christos 
    172  1.1  christos    Well, Beav, this function really handles the OP_VAR_VALUE operator,
    173  1.1  christos    not specifically variable references.  GDB uses OP_VAR_VALUE to
    174  1.1  christos    refer to any kind of symbolic reference: function names, enum
    175  1.1  christos    elements, and goto labels are all handled through the OP_VAR_VALUE
    176  1.1  christos    operator, even though they're constants.  It makes sense given the
    177  1.1  christos    situation.
    178  1.1  christos 
    179  1.1  christos    Gee, Wally, don'cha wonder sometimes if data representations that
    180  1.1  christos    subvert commonly accepted definitions of terms in favor of heavily
    181  1.1  christos    context-specific interpretations are really just a tool of the
    182  1.1  christos    programming hegemony to preserve their power and exclude the
    183  1.1  christos    proletariat?  */
    184  1.1  christos 
    185  1.1  christos static struct value *
    186  1.1  christos const_var_ref (struct symbol *var)
    187  1.1  christos {
    188  1.1  christos   struct type *type = SYMBOL_TYPE (var);
    189  1.1  christos 
    190  1.1  christos   switch (SYMBOL_CLASS (var))
    191  1.1  christos     {
    192  1.1  christos     case LOC_CONST:
    193  1.1  christos       return value_from_longest (type, (LONGEST) SYMBOL_VALUE (var));
    194  1.1  christos 
    195  1.1  christos     case LOC_LABEL:
    196  1.1  christos       return value_from_pointer (type, (CORE_ADDR) SYMBOL_VALUE_ADDRESS (var));
    197  1.1  christos 
    198  1.1  christos     default:
    199  1.1  christos       return 0;
    200  1.1  christos     }
    201  1.1  christos }
    202  1.1  christos 
    203  1.1  christos 
    204  1.1  christos /* If the expression starting at *PC has a constant value, return it.
    205  1.1  christos    Otherwise, return zero.  If we return a value, then *PC will be
    206  1.1  christos    advanced to the end of it.  If we return zero, *PC could be
    207  1.1  christos    anywhere.  */
    208  1.1  christos static struct value *
    209  1.1  christos const_expr (union exp_element **pc)
    210  1.1  christos {
    211  1.1  christos   enum exp_opcode op = (*pc)->opcode;
    212  1.1  christos   struct value *v1;
    213  1.1  christos 
    214  1.1  christos   switch (op)
    215  1.1  christos     {
    216  1.1  christos     case OP_LONG:
    217  1.1  christos       {
    218  1.1  christos 	struct type *type = (*pc)[1].type;
    219  1.1  christos 	LONGEST k = (*pc)[2].longconst;
    220  1.1  christos 
    221  1.1  christos 	(*pc) += 4;
    222  1.1  christos 	return value_from_longest (type, k);
    223  1.1  christos       }
    224  1.1  christos 
    225  1.1  christos     case OP_VAR_VALUE:
    226  1.1  christos       {
    227  1.1  christos 	struct value *v = const_var_ref ((*pc)[2].symbol);
    228  1.1  christos 
    229  1.1  christos 	(*pc) += 4;
    230  1.1  christos 	return v;
    231  1.1  christos       }
    232  1.1  christos 
    233  1.1  christos       /* We could add more operators in here.  */
    234  1.1  christos 
    235  1.1  christos     case UNOP_NEG:
    236  1.1  christos       (*pc)++;
    237  1.1  christos       v1 = const_expr (pc);
    238  1.1  christos       if (v1)
    239  1.1  christos 	return value_neg (v1);
    240  1.1  christos       else
    241  1.1  christos 	return 0;
    242  1.1  christos 
    243  1.1  christos     default:
    244  1.1  christos       return 0;
    245  1.1  christos     }
    246  1.1  christos }
    247  1.1  christos 
    248  1.1  christos 
    249  1.1  christos /* Like const_expr, but guarantee also that *PC is undisturbed if the
    250  1.1  christos    expression is not constant.  */
    251  1.1  christos static struct value *
    252  1.1  christos maybe_const_expr (union exp_element **pc)
    253  1.1  christos {
    254  1.1  christos   union exp_element *tentative_pc = *pc;
    255  1.1  christos   struct value *v = const_expr (&tentative_pc);
    256  1.1  christos 
    257  1.1  christos   /* If we got a value, then update the real PC.  */
    258  1.1  christos   if (v)
    259  1.1  christos     *pc = tentative_pc;
    260  1.1  christos 
    261  1.1  christos   return v;
    262  1.1  christos }
    263  1.1  christos 
    264  1.1  christos 
    266  1.1  christos /* Generating bytecode from GDB expressions: general assumptions */
    267  1.1  christos 
    268  1.1  christos /* Here are a few general assumptions made throughout the code; if you
    269  1.1  christos    want to make a change that contradicts one of these, then you'd
    270  1.1  christos    better scan things pretty thoroughly.
    271  1.1  christos 
    272  1.1  christos    - We assume that all values occupy one stack element.  For example,
    273  1.1  christos    sometimes we'll swap to get at the left argument to a binary
    274  1.1  christos    operator.  If we decide that void values should occupy no stack
    275  1.1  christos    elements, or that synthetic arrays (whose size is determined at
    276  1.1  christos    run time, created by the `@' operator) should occupy two stack
    277  1.1  christos    elements (address and length), then this will cause trouble.
    278  1.1  christos 
    279  1.1  christos    - We assume the stack elements are infinitely wide, and that we
    280  1.1  christos    don't have to worry what happens if the user requests an
    281  1.1  christos    operation that is wider than the actual interpreter's stack.
    282  1.1  christos    That is, it's up to the interpreter to handle directly all the
    283  1.1  christos    integer widths the user has access to.  (Woe betide the language
    284  1.1  christos    with bignums!)
    285  1.1  christos 
    286  1.1  christos    - We don't support side effects.  Thus, we don't have to worry about
    287  1.1  christos    GCC's generalized lvalues, function calls, etc.
    288  1.1  christos 
    289  1.1  christos    - We don't support floating point.  Many places where we switch on
    290  1.1  christos    some type don't bother to include cases for floating point; there
    291  1.1  christos    may be even more subtle ways this assumption exists.  For
    292  1.1  christos    example, the arguments to % must be integers.
    293  1.1  christos 
    294  1.1  christos    - We assume all subexpressions have a static, unchanging type.  If
    295  1.1  christos    we tried to support convenience variables, this would be a
    296  1.1  christos    problem.
    297  1.1  christos 
    298  1.1  christos    - All values on the stack should always be fully zero- or
    299  1.1  christos    sign-extended.
    300  1.1  christos 
    301  1.1  christos    (I wasn't sure whether to choose this or its opposite --- that
    302  1.1  christos    only addresses are assumed extended --- but it turns out that
    303  1.1  christos    neither convention completely eliminates spurious extend
    304  1.1  christos    operations (if everything is always extended, then you have to
    305  1.1  christos    extend after add, because it could overflow; if nothing is
    306  1.1  christos    extended, then you end up producing extends whenever you change
    307  1.1  christos    sizes), and this is simpler.)  */
    308  1.1  christos 
    309  1.1  christos 
    311  1.8  christos /* Scan for all static fields in the given class, including any base
    312  1.1  christos    classes, and generate tracing bytecodes for each.  */
    313  1.1  christos 
    314  1.1  christos static void
    315  1.1  christos gen_trace_static_fields (struct agent_expr *ax,
    316  1.1  christos 			 struct type *type)
    317  1.6  christos {
    318  1.1  christos   int i, nbases = TYPE_N_BASECLASSES (type);
    319  1.9  christos   struct axs_value value;
    320  1.1  christos 
    321  1.9  christos   type = check_typedef (type);
    322  1.1  christos 
    323  1.8  christos   for (i = type->num_fields () - 1; i >= nbases; i--)
    324  1.1  christos     {
    325  1.1  christos       if (field_is_static (&type->field (i)))
    326  1.1  christos 	{
    327  1.1  christos 	  gen_static_field (ax, &value, type, i);
    328  1.1  christos 	  if (value.optimized_out)
    329  1.1  christos 	    continue;
    330  1.1  christos 	  switch (value.kind)
    331  1.1  christos 	    {
    332  1.1  christos 	    case axs_lvalue_memory:
    333  1.1  christos 	      {
    334  1.1  christos 	        /* Initialize the TYPE_LENGTH if it is a typedef.  */
    335  1.1  christos 	        check_typedef (value.type);
    336  1.1  christos 		ax_const_l (ax, TYPE_LENGTH (value.type));
    337  1.1  christos 		ax_simple (ax, aop_trace);
    338  1.1  christos 	      }
    339  1.1  christos 	      break;
    340  1.1  christos 
    341  1.1  christos 	    case axs_lvalue_register:
    342  1.1  christos 	      /* We don't actually need the register's value to be pushed,
    343  1.1  christos 		 just note that we need it to be collected.  */
    344  1.1  christos 	      ax_reg_mask (ax, value.u.reg);
    345  1.1  christos 
    346  1.1  christos 	    default:
    347  1.1  christos 	      break;
    348  1.1  christos 	    }
    349  1.1  christos 	}
    350  1.1  christos     }
    351  1.1  christos 
    352  1.1  christos   /* Now scan through base classes recursively.  */
    353  1.8  christos   for (i = 0; i < nbases; i++)
    354  1.1  christos     {
    355  1.1  christos       struct type *basetype = check_typedef (TYPE_BASECLASS (type, i));
    356  1.1  christos 
    357  1.1  christos       gen_trace_static_fields (ax, basetype);
    358  1.1  christos     }
    359  1.1  christos }
    360  1.1  christos 
    361  1.8  christos /* Trace the lvalue on the stack, if it needs it.  In either case, pop
    362  1.1  christos    the value.  Useful on the left side of a comma, and at the end of
    363  1.1  christos    an expression being used for tracing.  */
    364  1.1  christos static void
    365  1.9  christos gen_traced_pop (struct agent_expr *ax, struct axs_value *value)
    366  1.1  christos {
    367  1.1  christos   int string_trace = 0;
    368  1.1  christos   if (ax->trace_string
    369  1.1  christos       && value->type->code () == TYPE_CODE_PTR
    370  1.1  christos       && c_textual_element_type (check_typedef (TYPE_TARGET_TYPE (value->type)),
    371  1.1  christos 				 's'))
    372  1.1  christos     string_trace = 1;
    373  1.1  christos 
    374  1.1  christos   if (ax->tracing)
    375  1.1  christos     switch (value->kind)
    376  1.1  christos       {
    377  1.1  christos       case axs_rvalue:
    378  1.1  christos 	if (string_trace)
    379  1.1  christos 	  {
    380  1.1  christos 	    ax_const_l (ax, ax->trace_string);
    381  1.1  christos 	    ax_simple (ax, aop_tracenz);
    382  1.1  christos 	  }
    383  1.1  christos 	else
    384  1.1  christos 	  /* We don't trace rvalues, just the lvalues necessary to
    385  1.1  christos 	     produce them.  So just dispose of this value.  */
    386  1.1  christos 	  ax_simple (ax, aop_pop);
    387  1.1  christos 	break;
    388  1.1  christos 
    389  1.1  christos       case axs_lvalue_memory:
    390  1.1  christos 	{
    391  1.1  christos 	  /* Initialize the TYPE_LENGTH if it is a typedef.  */
    392  1.6  christos 	  check_typedef (value->type);
    393  1.1  christos 
    394  1.1  christos 	  if (string_trace)
    395  1.1  christos 	    {
    396  1.6  christos 	      gen_fetch (ax, value->type);
    397  1.6  christos 	      ax_const_l (ax, ax->trace_string);
    398  1.6  christos 	      ax_simple (ax, aop_tracenz);
    399  1.6  christos 	    }
    400  1.6  christos 	  else
    401  1.6  christos 	    {
    402  1.6  christos 	      /* There's no point in trying to use a trace_quick bytecode
    403  1.6  christos 	         here, since "trace_quick SIZE pop" is three bytes, whereas
    404  1.6  christos 	         "const8 SIZE trace" is also three bytes, does the same
    405  1.6  christos 	         thing, and the simplest code which generates that will also
    406  1.1  christos 	         work correctly for objects with large sizes.  */
    407  1.1  christos 	      ax_const_l (ax, TYPE_LENGTH (value->type));
    408  1.1  christos 	      ax_simple (ax, aop_trace);
    409  1.1  christos 	    }
    410  1.1  christos 	}
    411  1.1  christos 	break;
    412  1.1  christos 
    413  1.1  christos       case axs_lvalue_register:
    414  1.1  christos 	/* We don't actually need the register's value to be on the
    415  1.1  christos 	   stack, and the target will get heartburn if the register is
    416  1.1  christos 	   larger than will fit in a stack, so just mark it for
    417  1.1  christos 	   collection and be done with it.  */
    418  1.1  christos 	ax_reg_mask (ax, value->u.reg);
    419  1.1  christos 
    420  1.1  christos 	/* But if the register points to a string, assume the value
    421  1.1  christos 	   will fit on the stack and push it anyway.  */
    422  1.1  christos 	if (string_trace)
    423  1.1  christos 	  {
    424  1.1  christos 	    ax_reg (ax, value->u.reg);
    425  1.1  christos 	    ax_const_l (ax, ax->trace_string);
    426  1.1  christos 	    ax_simple (ax, aop_tracenz);
    427  1.1  christos 	  }
    428  1.1  christos 	break;
    429  1.1  christos       }
    430  1.1  christos   else
    431  1.1  christos     /* If we're not tracing, just pop the value.  */
    432  1.9  christos     ax_simple (ax, aop_pop);
    433  1.9  christos 
    434  1.8  christos   /* To trace C++ classes with static fields stored elsewhere.  */
    435  1.1  christos   if (ax->tracing
    436  1.1  christos       && (value->type->code () == TYPE_CODE_STRUCT
    437  1.1  christos 	  || value->type->code () == TYPE_CODE_UNION))
    438  1.1  christos     gen_trace_static_fields (ax, value->type);
    439  1.1  christos }
    440  1.1  christos 
    441  1.1  christos 
    443  1.1  christos 
    444  1.1  christos /* Generating bytecode from GDB expressions: helper functions */
    445  1.1  christos 
    446  1.1  christos /* Assume that the lower bits of the top of the stack is a value of
    447  1.1  christos    type TYPE, and the upper bits are zero.  Sign-extend if necessary.  */
    448  1.1  christos static void
    449  1.1  christos gen_sign_extend (struct agent_expr *ax, struct type *type)
    450  1.1  christos {
    451  1.1  christos   /* Do we need to sign-extend this?  */
    452  1.1  christos   if (!TYPE_UNSIGNED (type))
    453  1.1  christos     ax_ext (ax, TYPE_LENGTH (type) * TARGET_CHAR_BIT);
    454  1.1  christos }
    455  1.1  christos 
    456  1.1  christos 
    457  1.1  christos /* Assume the lower bits of the top of the stack hold a value of type
    458  1.1  christos    TYPE, and the upper bits are garbage.  Sign-extend or truncate as
    459  1.1  christos    needed.  */
    460  1.1  christos static void
    461  1.1  christos gen_extend (struct agent_expr *ax, struct type *type)
    462  1.1  christos {
    463  1.1  christos   int bits = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
    464  1.1  christos 
    465  1.1  christos   /* I just had to.  */
    466  1.1  christos   ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, bits));
    467  1.1  christos }
    468  1.1  christos 
    469  1.1  christos 
    470  1.1  christos /* Assume that the top of the stack contains a value of type "pointer
    471  1.1  christos    to TYPE"; generate code to fetch its value.  Note that TYPE is the
    472  1.1  christos    target type, not the pointer type.  */
    473  1.1  christos static void
    474  1.1  christos gen_fetch (struct agent_expr *ax, struct type *type)
    475  1.1  christos {
    476  1.1  christos   if (ax->tracing)
    477  1.9  christos     {
    478  1.1  christos       /* Record the area of memory we're about to fetch.  */
    479  1.1  christos       ax_trace_quick (ax, TYPE_LENGTH (type));
    480  1.9  christos     }
    481  1.1  christos 
    482  1.1  christos   if (type->code () == TYPE_CODE_RANGE)
    483  1.1  christos     type = TYPE_TARGET_TYPE (type);
    484  1.7  christos 
    485  1.1  christos   switch (type->code ())
    486  1.1  christos     {
    487  1.1  christos     case TYPE_CODE_PTR:
    488  1.1  christos     case TYPE_CODE_REF:
    489  1.1  christos     case TYPE_CODE_RVALUE_REF:
    490  1.1  christos     case TYPE_CODE_ENUM:
    491  1.1  christos     case TYPE_CODE_INT:
    492  1.1  christos     case TYPE_CODE_CHAR:
    493  1.1  christos     case TYPE_CODE_BOOL:
    494  1.1  christos       /* It's a scalar value, so we know how to dereference it.  How
    495  1.1  christos          many bytes long is it?  */
    496  1.1  christos       switch (TYPE_LENGTH (type))
    497  1.1  christos 	{
    498  1.1  christos 	case 8 / TARGET_CHAR_BIT:
    499  1.1  christos 	  ax_simple (ax, aop_ref8);
    500  1.1  christos 	  break;
    501  1.1  christos 	case 16 / TARGET_CHAR_BIT:
    502  1.1  christos 	  ax_simple (ax, aop_ref16);
    503  1.1  christos 	  break;
    504  1.1  christos 	case 32 / TARGET_CHAR_BIT:
    505  1.1  christos 	  ax_simple (ax, aop_ref32);
    506  1.1  christos 	  break;
    507  1.1  christos 	case 64 / TARGET_CHAR_BIT:
    508  1.1  christos 	  ax_simple (ax, aop_ref64);
    509  1.1  christos 	  break;
    510  1.1  christos 
    511  1.1  christos 	  /* Either our caller shouldn't have asked us to dereference
    512  1.1  christos 	     that pointer (other code's fault), or we're not
    513  1.1  christos 	     implementing something we should be (this code's fault).
    514  1.1  christos 	     In any case, it's a bug the user shouldn't see.  */
    515  1.1  christos 	default:
    516  1.1  christos 	  internal_error (__FILE__, __LINE__,
    517  1.1  christos 			  _("gen_fetch: strange size"));
    518  1.1  christos 	}
    519  1.1  christos 
    520  1.1  christos       gen_sign_extend (ax, type);
    521  1.1  christos       break;
    522  1.1  christos 
    523  1.9  christos     default:
    524  1.1  christos       /* Our caller requested us to dereference a pointer from an unsupported
    525  1.1  christos 	 type.  Error out and give callers a chance to handle the failure
    526  1.1  christos 	 gracefully.  */
    527  1.1  christos       error (_("gen_fetch: Unsupported type code `%s'."),
    528  1.1  christos 	     type->name ());
    529  1.1  christos     }
    530  1.1  christos }
    531  1.1  christos 
    532  1.1  christos 
    533  1.1  christos /* Generate code to left shift the top of the stack by DISTANCE bits, or
    534  1.1  christos    right shift it by -DISTANCE bits if DISTANCE < 0.  This generates
    535  1.1  christos    unsigned (logical) right shifts.  */
    536  1.1  christos static void
    537  1.1  christos gen_left_shift (struct agent_expr *ax, int distance)
    538  1.1  christos {
    539  1.1  christos   if (distance > 0)
    540  1.1  christos     {
    541  1.1  christos       ax_const_l (ax, distance);
    542  1.1  christos       ax_simple (ax, aop_lsh);
    543  1.1  christos     }
    544  1.1  christos   else if (distance < 0)
    545  1.1  christos     {
    546  1.1  christos       ax_const_l (ax, -distance);
    547  1.1  christos       ax_simple (ax, aop_rsh_unsigned);
    548  1.1  christos     }
    549  1.1  christos }
    550  1.1  christos 
    551  1.1  christos 
    553  1.8  christos 
    554  1.1  christos /* Generating bytecode from GDB expressions: symbol references */
    555  1.1  christos 
    556  1.1  christos /* Generate code to push the base address of the argument portion of
    557  1.1  christos    the top stack frame.  */
    558  1.8  christos static void
    559  1.1  christos gen_frame_args_address (struct agent_expr *ax)
    560  1.1  christos {
    561  1.1  christos   int frame_reg;
    562  1.1  christos   LONGEST frame_offset;
    563  1.1  christos 
    564  1.1  christos   gdbarch_virtual_frame_pointer (ax->gdbarch,
    565  1.1  christos 				 ax->scope, &frame_reg, &frame_offset);
    566  1.1  christos   ax_reg (ax, frame_reg);
    567  1.1  christos   gen_offset (ax, frame_offset);
    568  1.8  christos }
    569  1.1  christos 
    570  1.1  christos 
    571  1.1  christos /* Generate code to push the base address of the locals portion of the
    572  1.1  christos    top stack frame.  */
    573  1.8  christos static void
    574  1.1  christos gen_frame_locals_address (struct agent_expr *ax)
    575  1.1  christos {
    576  1.1  christos   int frame_reg;
    577  1.1  christos   LONGEST frame_offset;
    578  1.1  christos 
    579  1.1  christos   gdbarch_virtual_frame_pointer (ax->gdbarch,
    580  1.1  christos 				 ax->scope, &frame_reg, &frame_offset);
    581  1.1  christos   ax_reg (ax, frame_reg);
    582  1.1  christos   gen_offset (ax, frame_offset);
    583  1.1  christos }
    584  1.1  christos 
    585  1.1  christos 
    586  1.1  christos /* Generate code to add OFFSET to the top of the stack.  Try to
    587  1.1  christos    generate short and readable code.  We use this for getting to
    588  1.1  christos    variables on the stack, and structure members.  If we were
    589  1.1  christos    programming in ML, it would be clearer why these are the same
    590  1.1  christos    thing.  */
    591  1.1  christos static void
    592  1.1  christos gen_offset (struct agent_expr *ax, int offset)
    593  1.1  christos {
    594  1.1  christos   /* It would suffice to simply push the offset and add it, but this
    595  1.1  christos      makes it easier to read positive and negative offsets in the
    596  1.1  christos      bytecode.  */
    597  1.1  christos   if (offset > 0)
    598  1.1  christos     {
    599  1.1  christos       ax_const_l (ax, offset);
    600  1.1  christos       ax_simple (ax, aop_add);
    601  1.1  christos     }
    602  1.1  christos   else if (offset < 0)
    603  1.1  christos     {
    604  1.1  christos       ax_const_l (ax, -offset);
    605  1.1  christos       ax_simple (ax, aop_sub);
    606  1.1  christos     }
    607  1.1  christos }
    608  1.1  christos 
    609  1.1  christos 
    610  1.1  christos /* In many cases, a symbol's value is the offset from some other
    611  1.1  christos    address (stack frame, base register, etc.)  Generate code to add
    612  1.1  christos    VAR's value to the top of the stack.  */
    613  1.1  christos static void
    614  1.1  christos gen_sym_offset (struct agent_expr *ax, struct symbol *var)
    615  1.1  christos {
    616  1.1  christos   gen_offset (ax, SYMBOL_VALUE (var));
    617  1.1  christos }
    618  1.8  christos 
    619  1.1  christos 
    620  1.1  christos /* Generate code for a variable reference to AX.  The variable is the
    621  1.1  christos    symbol VAR.  Set VALUE to describe the result.  */
    622  1.1  christos 
    623  1.1  christos static void
    624  1.1  christos gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
    625  1.1  christos {
    626  1.8  christos   /* Dereference any typedefs.  */
    627  1.1  christos   value->type = check_typedef (SYMBOL_TYPE (var));
    628  1.1  christos   value->optimized_out = 0;
    629  1.1  christos 
    630  1.1  christos   if (SYMBOL_COMPUTED_OPS (var) != NULL)
    631  1.1  christos     {
    632  1.1  christos       SYMBOL_COMPUTED_OPS (var)->tracepoint_var_ref (var, ax, value);
    633  1.1  christos       return;
    634  1.1  christos     }
    635  1.1  christos 
    636  1.1  christos   /* I'm imitating the code in read_var_value.  */
    637  1.1  christos   switch (SYMBOL_CLASS (var))
    638  1.1  christos     {
    639  1.1  christos     case LOC_CONST:		/* A constant, like an enum value.  */
    640  1.1  christos       ax_const_l (ax, (LONGEST) SYMBOL_VALUE (var));
    641  1.1  christos       value->kind = axs_rvalue;
    642  1.1  christos       break;
    643  1.1  christos 
    644  1.1  christos     case LOC_LABEL:		/* A goto label, being used as a value.  */
    645  1.1  christos       ax_const_l (ax, (LONGEST) SYMBOL_VALUE_ADDRESS (var));
    646  1.1  christos       value->kind = axs_rvalue;
    647  1.1  christos       break;
    648  1.1  christos 
    649  1.1  christos     case LOC_CONST_BYTES:
    650  1.1  christos       internal_error (__FILE__, __LINE__,
    651  1.1  christos 		      _("gen_var_ref: LOC_CONST_BYTES "
    652  1.1  christos 			"symbols are not supported"));
    653  1.1  christos 
    654  1.1  christos       /* Variable at a fixed location in memory.  Easy.  */
    655  1.1  christos     case LOC_STATIC:
    656  1.8  christos       /* Push the address of the variable.  */
    657  1.1  christos       ax_const_l (ax, SYMBOL_VALUE_ADDRESS (var));
    658  1.1  christos       value->kind = axs_lvalue_memory;
    659  1.1  christos       break;
    660  1.1  christos 
    661  1.1  christos     case LOC_ARG:		/* var lives in argument area of frame */
    662  1.1  christos       gen_frame_args_address (ax);
    663  1.8  christos       gen_sym_offset (ax, var);
    664  1.1  christos       value->kind = axs_lvalue_memory;
    665  1.1  christos       break;
    666  1.8  christos 
    667  1.1  christos     case LOC_REF_ARG:		/* As above, but the frame slot really
    668  1.1  christos 				   holds the address of the variable.  */
    669  1.1  christos       gen_frame_args_address (ax);
    670  1.1  christos       gen_sym_offset (ax, var);
    671  1.8  christos       /* Don't assume any particular pointer size.  */
    672  1.1  christos       gen_fetch (ax, builtin_type (ax->gdbarch)->builtin_data_ptr);
    673  1.1  christos       value->kind = axs_lvalue_memory;
    674  1.1  christos       break;
    675  1.1  christos 
    676  1.1  christos     case LOC_LOCAL:		/* var lives in locals area of frame */
    677  1.1  christos       gen_frame_locals_address (ax);
    678  1.9  christos       gen_sym_offset (ax, var);
    679  1.1  christos       value->kind = axs_lvalue_memory;
    680  1.1  christos       break;
    681  1.1  christos 
    682  1.8  christos     case LOC_TYPEDEF:
    683  1.1  christos       error (_("Cannot compute value of typedef `%s'."),
    684  1.1  christos 	     var->print_name ());
    685  1.1  christos       break;
    686  1.1  christos 
    687  1.1  christos     case LOC_BLOCK:
    688  1.1  christos       ax_const_l (ax, BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var)));
    689  1.1  christos       value->kind = axs_rvalue;
    690  1.1  christos       break;
    691  1.8  christos 
    692  1.8  christos     case LOC_REGISTER:
    693  1.1  christos       /* Don't generate any code at all; in the process of treating
    694  1.1  christos          this as an lvalue or rvalue, the caller will generate the
    695  1.1  christos          right code.  */
    696  1.1  christos       value->kind = axs_lvalue_register;
    697  1.1  christos       value->u.reg
    698  1.1  christos 	= SYMBOL_REGISTER_OPS (var)->register_number (var, ax->gdbarch);
    699  1.1  christos       break;
    700  1.8  christos 
    701  1.8  christos       /* A lot like LOC_REF_ARG, but the pointer lives directly in a
    702  1.1  christos          register, not on the stack.  Simpler than LOC_REGISTER
    703  1.1  christos          because it's just like any other case where the thing
    704  1.1  christos 	 has a real address.  */
    705  1.1  christos     case LOC_REGPARM_ADDR:
    706  1.1  christos       ax_reg (ax,
    707  1.3  christos 	      SYMBOL_REGISTER_OPS (var)->register_number (var, ax->gdbarch));
    708  1.9  christos       value->kind = axs_lvalue_memory;
    709  1.1  christos       break;
    710  1.3  christos 
    711  1.9  christos     case LOC_UNRESOLVED:
    712  1.1  christos       {
    713  1.1  christos 	struct bound_minimal_symbol msym
    714  1.3  christos 	  = lookup_minimal_symbol (var->linkage_name (), NULL, NULL);
    715  1.1  christos 
    716  1.1  christos 	if (!msym.minsym)
    717  1.1  christos 	  error (_("Couldn't resolve symbol `%s'."), var->print_name ());
    718  1.1  christos 
    719  1.1  christos 	/* Push the address of the variable.  */
    720  1.1  christos 	ax_const_l (ax, BMSYMBOL_VALUE_ADDRESS (msym));
    721  1.1  christos 	value->kind = axs_lvalue_memory;
    722  1.1  christos       }
    723  1.1  christos       break;
    724  1.1  christos 
    725  1.1  christos     case LOC_COMPUTED:
    726  1.1  christos       gdb_assert_not_reached (_("LOC_COMPUTED variable missing a method"));
    727  1.1  christos 
    728  1.1  christos     case LOC_OPTIMIZED_OUT:
    729  1.1  christos       /* Flag this, but don't say anything; leave it up to callers to
    730  1.9  christos 	 warn the user.  */
    731  1.1  christos       value->optimized_out = 1;
    732  1.1  christos       break;
    733  1.1  christos 
    734  1.8  christos     default:
    735  1.8  christos       error (_("Cannot find value of botched symbol `%s'."),
    736  1.8  christos 	     var->print_name ());
    737  1.8  christos       break;
    738  1.8  christos     }
    739  1.8  christos }
    740  1.8  christos 
    741  1.8  christos /* Generate code for a minimal symbol variable reference to AX.  The
    742  1.8  christos    variable is the symbol MINSYM, of OBJFILE.  Set VALUE to describe
    743  1.8  christos    the result.  */
    744  1.8  christos 
    745  1.8  christos static void
    746  1.8  christos gen_msym_var_ref (agent_expr *ax, axs_value *value,
    747  1.8  christos 		  minimal_symbol *msymbol, objfile *objf)
    748  1.8  christos {
    749  1.8  christos   CORE_ADDR address;
    750  1.8  christos   type *t = find_minsym_type_and_address (msymbol, objf, &address);
    751  1.1  christos   value->type = t;
    752  1.1  christos   value->optimized_out = false;
    753  1.1  christos   ax_const_l (ax, address);
    754  1.1  christos   value->kind = axs_lvalue_memory;
    755  1.1  christos }
    756  1.1  christos 
    757  1.1  christos 
    758  1.1  christos 
    760  1.1  christos 
    761  1.1  christos /* Generating bytecode from GDB expressions: literals */
    762  1.1  christos 
    763  1.1  christos static void
    764  1.1  christos gen_int_literal (struct agent_expr *ax, struct axs_value *value, LONGEST k,
    765  1.1  christos 		 struct type *type)
    766  1.1  christos {
    767  1.1  christos   ax_const_l (ax, k);
    768  1.1  christos   value->kind = axs_rvalue;
    769  1.1  christos   value->type = check_typedef (type);
    770  1.1  christos }
    771  1.1  christos 
    772  1.1  christos 
    774  1.1  christos 
    775  1.1  christos /* Generating bytecode from GDB expressions: unary conversions, casts */
    776  1.1  christos 
    777  1.1  christos /* Take what's on the top of the stack (as described by VALUE), and
    778  1.9  christos    try to make an rvalue out of it.  Signal an error if we can't do
    779  1.9  christos    that.  */
    780  1.9  christos void
    781  1.9  christos require_rvalue (struct agent_expr *ax, struct axs_value *value)
    782  1.1  christos {
    783  1.1  christos   /* Only deal with scalars, structs and such may be too large
    784  1.1  christos      to fit in a stack entry.  */
    785  1.1  christos   value->type = check_typedef (value->type);
    786  1.1  christos   if (value->type->code () == TYPE_CODE_ARRAY
    787  1.1  christos       || value->type->code () == TYPE_CODE_STRUCT
    788  1.1  christos       || value->type->code () == TYPE_CODE_UNION
    789  1.1  christos       || value->type->code () == TYPE_CODE_FUNC)
    790  1.1  christos     error (_("Value not scalar: cannot be an rvalue."));
    791  1.1  christos 
    792  1.1  christos   switch (value->kind)
    793  1.1  christos     {
    794  1.1  christos     case axs_rvalue:
    795  1.1  christos       /* It's already an rvalue.  */
    796  1.1  christos       break;
    797  1.1  christos 
    798  1.1  christos     case axs_lvalue_memory:
    799  1.1  christos       /* The top of stack is the address of the object.  Dereference.  */
    800  1.1  christos       gen_fetch (ax, value->type);
    801  1.1  christos       break;
    802  1.1  christos 
    803  1.1  christos     case axs_lvalue_register:
    804  1.1  christos       /* There's nothing on the stack, but value->u.reg is the
    805  1.1  christos          register number containing the value.
    806  1.1  christos 
    807  1.1  christos          When we add floating-point support, this is going to have to
    808  1.1  christos          change.  What about SPARC register pairs, for example?  */
    809  1.1  christos       ax_reg (ax, value->u.reg);
    810  1.1  christos       gen_extend (ax, value->type);
    811  1.1  christos       break;
    812  1.1  christos     }
    813  1.1  christos 
    814  1.1  christos   value->kind = axs_rvalue;
    815  1.1  christos }
    816  1.1  christos 
    817  1.1  christos 
    818  1.1  christos /* Assume the top of the stack is described by VALUE, and perform the
    819  1.1  christos    usual unary conversions.  This is motivated by ANSI 6.2.2, but of
    820  1.1  christos    course GDB expressions are not ANSI; they're the mishmash union of
    821  1.1  christos    a bunch of languages.  Rah.
    822  1.1  christos 
    823  1.1  christos    NOTE!  This function promises to produce an rvalue only when the
    824  1.1  christos    incoming value is of an appropriate type.  In other words, the
    825  1.1  christos    consumer of the value this function produces may assume the value
    826  1.1  christos    is an rvalue only after checking its type.
    827  1.8  christos 
    828  1.1  christos    The immediate issue is that if the user tries to use a structure or
    829  1.1  christos    union as an operand of, say, the `+' operator, we don't want to try
    830  1.1  christos    to convert that structure to an rvalue; require_rvalue will bomb on
    831  1.1  christos    structs and unions.  Rather, we want to simply pass the struct
    832  1.1  christos    lvalue through unchanged, and let `+' raise an error.  */
    833  1.1  christos 
    834  1.9  christos static void
    835  1.1  christos gen_usual_unary (struct agent_expr *ax, struct axs_value *value)
    836  1.1  christos {
    837  1.1  christos   /* We don't have to generate any code for the usual integral
    838  1.1  christos      conversions, since values are always represented as full-width on
    839  1.1  christos      the stack.  Should we tweak the type?  */
    840  1.1  christos 
    841  1.1  christos   /* Some types require special handling.  */
    842  1.1  christos   switch (value->type->code ())
    843  1.1  christos     {
    844  1.1  christos       /* Functions get converted to a pointer to the function.  */
    845  1.1  christos     case TYPE_CODE_FUNC:
    846  1.1  christos       value->type = lookup_pointer_type (value->type);
    847  1.1  christos       value->kind = axs_rvalue;	/* Should always be true, but just in case.  */
    848  1.1  christos       break;
    849  1.1  christos 
    850  1.1  christos       /* Arrays get converted to a pointer to their first element, and
    851  1.1  christos          are no longer an lvalue.  */
    852  1.1  christos     case TYPE_CODE_ARRAY:
    853  1.1  christos       {
    854  1.1  christos 	struct type *elements = TYPE_TARGET_TYPE (value->type);
    855  1.1  christos 
    856  1.1  christos 	value->type = lookup_pointer_type (elements);
    857  1.1  christos 	value->kind = axs_rvalue;
    858  1.1  christos 	/* We don't need to generate any code; the address of the array
    859  1.1  christos 	   is also the address of its first element.  */
    860  1.1  christos       }
    861  1.1  christos       break;
    862  1.1  christos 
    863  1.1  christos       /* Don't try to convert structures and unions to rvalues.  Let the
    864  1.1  christos          consumer signal an error.  */
    865  1.1  christos     case TYPE_CODE_STRUCT:
    866  1.1  christos     case TYPE_CODE_UNION:
    867  1.1  christos       return;
    868  1.1  christos     }
    869  1.1  christos 
    870  1.1  christos   /* If the value is an lvalue, dereference it.  */
    871  1.1  christos   require_rvalue (ax, value);
    872  1.1  christos }
    873  1.1  christos 
    874  1.1  christos 
    875  1.1  christos /* Return non-zero iff the type TYPE1 is considered "wider" than the
    876  1.1  christos    type TYPE2, according to the rules described in gen_usual_arithmetic.  */
    877  1.1  christos static int
    878  1.1  christos type_wider_than (struct type *type1, struct type *type2)
    879  1.1  christos {
    880  1.1  christos   return (TYPE_LENGTH (type1) > TYPE_LENGTH (type2)
    881  1.1  christos 	  || (TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
    882  1.1  christos 	      && TYPE_UNSIGNED (type1)
    883  1.1  christos 	      && !TYPE_UNSIGNED (type2)));
    884  1.1  christos }
    885  1.1  christos 
    886  1.1  christos 
    887  1.1  christos /* Return the "wider" of the two types TYPE1 and TYPE2.  */
    888  1.1  christos static struct type *
    889  1.1  christos max_type (struct type *type1, struct type *type2)
    890  1.1  christos {
    891  1.1  christos   return type_wider_than (type1, type2) ? type1 : type2;
    892  1.1  christos }
    893  1.1  christos 
    894  1.1  christos 
    895  1.1  christos /* Generate code to convert a scalar value of type FROM to type TO.  */
    896  1.5  christos static void
    897  1.1  christos gen_conversion (struct agent_expr *ax, struct type *from, struct type *to)
    898  1.1  christos {
    899  1.1  christos   /* Perhaps there is a more graceful way to state these rules.  */
    900  1.1  christos 
    901  1.1  christos   /* If we're converting to a narrower type, then we need to clear out
    902  1.1  christos      the upper bits.  */
    903  1.1  christos   if (TYPE_LENGTH (to) < TYPE_LENGTH (from))
    904  1.1  christos     gen_extend (ax, to);
    905  1.1  christos 
    906  1.1  christos   /* If the two values have equal width, but different signednesses,
    907  1.1  christos      then we need to extend.  */
    908  1.1  christos   else if (TYPE_LENGTH (to) == TYPE_LENGTH (from))
    909  1.1  christos     {
    910  1.1  christos       if (TYPE_UNSIGNED (from) != TYPE_UNSIGNED (to))
    911  1.1  christos 	gen_extend (ax, to);
    912  1.1  christos     }
    913  1.1  christos 
    914  1.1  christos   /* If we're converting to a wider type, and becoming unsigned, then
    915  1.1  christos      we need to zero out any possible sign bits.  */
    916  1.1  christos   else if (TYPE_LENGTH (to) > TYPE_LENGTH (from))
    917  1.1  christos     {
    918  1.1  christos       if (TYPE_UNSIGNED (to))
    919  1.1  christos 	gen_extend (ax, to);
    920  1.1  christos     }
    921  1.7  christos }
    922  1.1  christos 
    923  1.1  christos 
    924  1.1  christos /* Return non-zero iff the type FROM will require any bytecodes to be
    925  1.1  christos    emitted to be converted to the type TO.  */
    926  1.1  christos static int
    927  1.1  christos is_nontrivial_conversion (struct type *from, struct type *to)
    928  1.1  christos {
    929  1.1  christos   agent_expr_up ax (new agent_expr (NULL, 0));
    930  1.7  christos   int nontrivial;
    931  1.1  christos 
    932  1.1  christos   /* Actually generate the code, and see if anything came out.  At the
    933  1.1  christos      moment, it would be trivial to replicate the code in
    934  1.1  christos      gen_conversion here, but in the future, when we're supporting
    935  1.1  christos      floating point and the like, it may not be.  Doing things this
    936  1.1  christos      way allows this function to be independent of the logic in
    937  1.1  christos      gen_conversion.  */
    938  1.1  christos   gen_conversion (ax.get (), from, to);
    939  1.1  christos   nontrivial = ax->len > 0;
    940  1.1  christos   return nontrivial;
    941  1.1  christos }
    942  1.8  christos 
    943  1.8  christos 
    944  1.1  christos /* Generate code to perform the "usual arithmetic conversions" (ANSI C
    945  1.1  christos    6.2.1.5) for the two operands of an arithmetic operator.  This
    946  1.9  christos    effectively finds a "least upper bound" type for the two arguments,
    947  1.9  christos    and promotes each argument to that type.  *VALUE1 and *VALUE2
    948  1.1  christos    describe the values as they are passed in, and as they are left.  */
    949  1.1  christos static void
    950  1.1  christos gen_usual_arithmetic (struct agent_expr *ax, struct axs_value *value1,
    951  1.1  christos 		      struct axs_value *value2)
    952  1.1  christos {
    953  1.1  christos   /* Do the usual binary conversions.  */
    954  1.8  christos   if (value1->type->code () == TYPE_CODE_INT
    955  1.1  christos       && value2->type->code () == TYPE_CODE_INT)
    956  1.1  christos     {
    957  1.1  christos       /* The ANSI integral promotions seem to work this way: Order the
    958  1.1  christos          integer types by size, and then by signedness: an n-bit
    959  1.1  christos          unsigned type is considered "wider" than an n-bit signed
    960  1.1  christos          type.  Promote to the "wider" of the two types, and always
    961  1.1  christos          promote at least to int.  */
    962  1.1  christos       struct type *target = max_type (builtin_type (ax->gdbarch)->builtin_int,
    963  1.1  christos 				      max_type (value1->type, value2->type));
    964  1.1  christos 
    965  1.1  christos       /* Deal with value2, on the top of the stack.  */
    966  1.1  christos       gen_conversion (ax, value2->type, target);
    967  1.1  christos 
    968  1.1  christos       /* Deal with value1, not on the top of the stack.  Don't
    969  1.1  christos          generate the `swap' instructions if we're not actually going
    970  1.1  christos          to do anything.  */
    971  1.1  christos       if (is_nontrivial_conversion (value1->type, target))
    972  1.1  christos 	{
    973  1.1  christos 	  ax_simple (ax, aop_swap);
    974  1.1  christos 	  gen_conversion (ax, value1->type, target);
    975  1.1  christos 	  ax_simple (ax, aop_swap);
    976  1.1  christos 	}
    977  1.1  christos 
    978  1.1  christos       value1->type = value2->type = check_typedef (target);
    979  1.8  christos     }
    980  1.1  christos }
    981  1.8  christos 
    982  1.1  christos 
    983  1.1  christos /* Generate code to perform the integral promotions (ANSI 6.2.1.1) on
    984  1.1  christos    the value on the top of the stack, as described by VALUE.  Assume
    985  1.1  christos    the value has integral type.  */
    986  1.1  christos static void
    987  1.1  christos gen_integral_promotions (struct agent_expr *ax, struct axs_value *value)
    988  1.1  christos {
    989  1.1  christos   const struct builtin_type *builtin = builtin_type (ax->gdbarch);
    990  1.1  christos 
    991  1.1  christos   if (!type_wider_than (value->type, builtin->builtin_int))
    992  1.1  christos     {
    993  1.1  christos       gen_conversion (ax, value->type, builtin->builtin_int);
    994  1.1  christos       value->type = builtin->builtin_int;
    995  1.1  christos     }
    996  1.1  christos   else if (!type_wider_than (value->type, builtin->builtin_unsigned_int))
    997  1.1  christos     {
    998  1.1  christos       gen_conversion (ax, value->type, builtin->builtin_unsigned_int);
    999  1.1  christos       value->type = builtin->builtin_unsigned_int;
   1000  1.1  christos     }
   1001  1.1  christos }
   1002  1.1  christos 
   1003  1.1  christos 
   1004  1.1  christos /* Generate code for a cast to TYPE.  */
   1005  1.1  christos static void
   1006  1.9  christos gen_cast (struct agent_expr *ax, struct axs_value *value, struct type *type)
   1007  1.1  christos {
   1008  1.1  christos   /* GCC does allow casts to yield lvalues, so this should be fixed
   1009  1.1  christos      before merging these changes into the trunk.  */
   1010  1.7  christos   require_rvalue (ax, value);
   1011  1.1  christos   /* Dereference typedefs.  */
   1012  1.1  christos   type = check_typedef (type);
   1013  1.1  christos 
   1014  1.1  christos   switch (type->code ())
   1015  1.1  christos     {
   1016  1.1  christos     case TYPE_CODE_PTR:
   1017  1.1  christos     case TYPE_CODE_REF:
   1018  1.1  christos     case TYPE_CODE_RVALUE_REF:
   1019  1.1  christos       /* It's implementation-defined, and I'll bet this is what GCC
   1020  1.1  christos          does.  */
   1021  1.1  christos       break;
   1022  1.1  christos 
   1023  1.1  christos     case TYPE_CODE_ARRAY:
   1024  1.1  christos     case TYPE_CODE_STRUCT:
   1025  1.1  christos     case TYPE_CODE_UNION:
   1026  1.1  christos     case TYPE_CODE_FUNC:
   1027  1.1  christos       error (_("Invalid type cast: intended type must be scalar."));
   1028  1.1  christos 
   1029  1.1  christos     case TYPE_CODE_ENUM:
   1030  1.1  christos     case TYPE_CODE_BOOL:
   1031  1.1  christos       /* We don't have to worry about the size of the value, because
   1032  1.1  christos          all our integral values are fully sign-extended, and when
   1033  1.1  christos          casting pointers we can do anything we like.  Is there any
   1034  1.1  christos          way for us to know what GCC actually does with a cast like
   1035  1.1  christos          this?  */
   1036  1.1  christos       break;
   1037  1.1  christos 
   1038  1.1  christos     case TYPE_CODE_INT:
   1039  1.1  christos       gen_conversion (ax, value->type, type);
   1040  1.1  christos       break;
   1041  1.1  christos 
   1042  1.1  christos     case TYPE_CODE_VOID:
   1043  1.1  christos       /* We could pop the value, and rely on everyone else to check
   1044  1.1  christos          the type and notice that this value doesn't occupy a stack
   1045  1.1  christos          slot.  But for now, leave the value on the stack, and
   1046  1.1  christos          preserve the "value == stack element" assumption.  */
   1047  1.1  christos       break;
   1048  1.1  christos 
   1049  1.1  christos     default:
   1050  1.1  christos       error (_("Casts to requested type are not yet implemented."));
   1051  1.1  christos     }
   1052  1.1  christos 
   1053  1.1  christos   value->type = type;
   1054  1.1  christos }
   1055  1.1  christos 
   1056  1.1  christos 
   1058  1.1  christos 
   1059  1.1  christos /* Generating bytecode from GDB expressions: arithmetic */
   1060  1.1  christos 
   1061  1.1  christos /* Scale the integer on the top of the stack by the size of the target
   1062  1.1  christos    of the pointer type TYPE.  */
   1063  1.1  christos static void
   1064  1.1  christos gen_scale (struct agent_expr *ax, enum agent_op op, struct type *type)
   1065  1.1  christos {
   1066  1.1  christos   struct type *element = TYPE_TARGET_TYPE (type);
   1067  1.1  christos 
   1068  1.1  christos   if (TYPE_LENGTH (element) != 1)
   1069  1.1  christos     {
   1070  1.1  christos       ax_const_l (ax, TYPE_LENGTH (element));
   1071  1.1  christos       ax_simple (ax, op);
   1072  1.1  christos     }
   1073  1.9  christos }
   1074  1.1  christos 
   1075  1.1  christos 
   1076  1.1  christos /* Generate code for pointer arithmetic PTR + INT.  */
   1077  1.1  christos static void
   1078  1.1  christos gen_ptradd (struct agent_expr *ax, struct axs_value *value,
   1079  1.1  christos 	    struct axs_value *value1, struct axs_value *value2)
   1080  1.1  christos {
   1081  1.1  christos   gdb_assert (pointer_type (value1->type));
   1082  1.1  christos   gdb_assert (value2->type->code () == TYPE_CODE_INT);
   1083  1.1  christos 
   1084  1.1  christos   gen_scale (ax, aop_mul, value1->type);
   1085  1.1  christos   ax_simple (ax, aop_add);
   1086  1.1  christos   gen_extend (ax, value1->type);	/* Catch overflow.  */
   1087  1.1  christos   value->type = value1->type;
   1088  1.1  christos   value->kind = axs_rvalue;
   1089  1.9  christos }
   1090  1.1  christos 
   1091  1.1  christos 
   1092  1.1  christos /* Generate code for pointer arithmetic PTR - INT.  */
   1093  1.1  christos static void
   1094  1.1  christos gen_ptrsub (struct agent_expr *ax, struct axs_value *value,
   1095  1.1  christos 	    struct axs_value *value1, struct axs_value *value2)
   1096  1.1  christos {
   1097  1.1  christos   gdb_assert (pointer_type (value1->type));
   1098  1.1  christos   gdb_assert (value2->type->code () == TYPE_CODE_INT);
   1099  1.1  christos 
   1100  1.1  christos   gen_scale (ax, aop_mul, value1->type);
   1101  1.1  christos   ax_simple (ax, aop_sub);
   1102  1.1  christos   gen_extend (ax, value1->type);	/* Catch overflow.  */
   1103  1.1  christos   value->type = value1->type;
   1104  1.1  christos   value->kind = axs_rvalue;
   1105  1.1  christos }
   1106  1.1  christos 
   1107  1.1  christos 
   1108  1.1  christos /* Generate code for pointer arithmetic PTR - PTR.  */
   1109  1.1  christos static void
   1110  1.1  christos gen_ptrdiff (struct agent_expr *ax, struct axs_value *value,
   1111  1.1  christos 	     struct axs_value *value1, struct axs_value *value2,
   1112  1.1  christos 	     struct type *result_type)
   1113  1.1  christos {
   1114  1.1  christos   gdb_assert (pointer_type (value1->type));
   1115  1.1  christos   gdb_assert (pointer_type (value2->type));
   1116  1.1  christos 
   1117  1.1  christos   if (TYPE_LENGTH (TYPE_TARGET_TYPE (value1->type))
   1118  1.1  christos       != TYPE_LENGTH (TYPE_TARGET_TYPE (value2->type)))
   1119  1.1  christos     error (_("\
   1120  1.1  christos First argument of `-' is a pointer, but second argument is neither\n\
   1121  1.1  christos an integer nor a pointer of the same type."));
   1122  1.1  christos 
   1123  1.1  christos   ax_simple (ax, aop_sub);
   1124  1.1  christos   gen_scale (ax, aop_div_unsigned, value1->type);
   1125  1.1  christos   value->type = result_type;
   1126  1.1  christos   value->kind = axs_rvalue;
   1127  1.1  christos }
   1128  1.1  christos 
   1129  1.1  christos static void
   1130  1.1  christos gen_equal (struct agent_expr *ax, struct axs_value *value,
   1131  1.1  christos 	   struct axs_value *value1, struct axs_value *value2,
   1132  1.1  christos 	   struct type *result_type)
   1133  1.1  christos {
   1134  1.1  christos   if (pointer_type (value1->type) || pointer_type (value2->type))
   1135  1.1  christos     ax_simple (ax, aop_equal);
   1136  1.1  christos   else
   1137  1.1  christos     gen_binop (ax, value, value1, value2,
   1138  1.1  christos 	       aop_equal, aop_equal, 0, "equal");
   1139  1.1  christos   value->type = result_type;
   1140  1.1  christos   value->kind = axs_rvalue;
   1141  1.1  christos }
   1142  1.1  christos 
   1143  1.1  christos static void
   1144  1.1  christos gen_less (struct agent_expr *ax, struct axs_value *value,
   1145  1.1  christos 	  struct axs_value *value1, struct axs_value *value2,
   1146  1.1  christos 	  struct type *result_type)
   1147  1.1  christos {
   1148  1.1  christos   if (pointer_type (value1->type) || pointer_type (value2->type))
   1149  1.1  christos     ax_simple (ax, aop_less_unsigned);
   1150  1.1  christos   else
   1151  1.1  christos     gen_binop (ax, value, value1, value2,
   1152  1.1  christos 	       aop_less_signed, aop_less_unsigned, 0, "less than");
   1153  1.1  christos   value->type = result_type;
   1154  1.1  christos   value->kind = axs_rvalue;
   1155  1.1  christos }
   1156  1.1  christos 
   1157  1.1  christos /* Generate code for a binary operator that doesn't do pointer magic.
   1158  1.7  christos    We set VALUE to describe the result value; we assume VALUE1 and
   1159  1.1  christos    VALUE2 describe the two operands, and that they've undergone the
   1160  1.1  christos    usual binary conversions.  MAY_CARRY should be non-zero iff the
   1161  1.9  christos    result needs to be extended.  NAME is the English name of the
   1162  1.9  christos    operator, used in error messages */
   1163  1.1  christos static void
   1164  1.1  christos gen_binop (struct agent_expr *ax, struct axs_value *value,
   1165  1.1  christos 	   struct axs_value *value1, struct axs_value *value2,
   1166  1.1  christos 	   enum agent_op op, enum agent_op op_unsigned,
   1167  1.1  christos 	   int may_carry, const char *name)
   1168  1.1  christos {
   1169  1.1  christos   /* We only handle INT op INT.  */
   1170  1.1  christos   if ((value1->type->code () != TYPE_CODE_INT)
   1171  1.1  christos       || (value2->type->code () != TYPE_CODE_INT))
   1172  1.1  christos     error (_("Invalid combination of types in %s."), name);
   1173  1.1  christos 
   1174  1.1  christos   ax_simple (ax,
   1175  1.1  christos 	     TYPE_UNSIGNED (value1->type) ? op_unsigned : op);
   1176  1.1  christos   if (may_carry)
   1177  1.1  christos     gen_extend (ax, value1->type);	/* catch overflow */
   1178  1.9  christos   value->type = value1->type;
   1179  1.9  christos   value->kind = axs_rvalue;
   1180  1.1  christos }
   1181  1.1  christos 
   1182  1.1  christos 
   1183  1.1  christos static void
   1184  1.1  christos gen_logical_not (struct agent_expr *ax, struct axs_value *value,
   1185  1.1  christos 		 struct type *result_type)
   1186  1.1  christos {
   1187  1.1  christos   if (value->type->code () != TYPE_CODE_INT
   1188  1.1  christos       && value->type->code () != TYPE_CODE_PTR)
   1189  1.1  christos     error (_("Invalid type of operand to `!'."));
   1190  1.9  christos 
   1191  1.1  christos   ax_simple (ax, aop_log_not);
   1192  1.1  christos   value->type = result_type;
   1193  1.1  christos }
   1194  1.1  christos 
   1195  1.1  christos 
   1196  1.1  christos static void
   1197  1.1  christos gen_complement (struct agent_expr *ax, struct axs_value *value)
   1198  1.1  christos {
   1199  1.1  christos   if (value->type->code () != TYPE_CODE_INT)
   1200  1.1  christos     error (_("Invalid type of operand to `~'."));
   1201  1.1  christos 
   1202  1.1  christos   ax_simple (ax, aop_bit_not);
   1203  1.8  christos   gen_extend (ax, value->type);
   1204  1.1  christos }
   1205  1.1  christos 
   1206  1.1  christos 
   1208  1.1  christos 
   1209  1.1  christos /* Generating bytecode from GDB expressions: * & . -> @ sizeof */
   1210  1.1  christos 
   1211  1.1  christos /* Dereference the value on the top of the stack.  */
   1212  1.1  christos static void
   1213  1.1  christos gen_deref (struct axs_value *value)
   1214  1.1  christos {
   1215  1.1  christos   /* The caller should check the type, because several operators use
   1216  1.1  christos      this, and we don't know what error message to generate.  */
   1217  1.9  christos   if (!pointer_type (value->type))
   1218  1.1  christos     internal_error (__FILE__, __LINE__,
   1219  1.9  christos 		    _("gen_deref: expected a pointer"));
   1220  1.1  christos 
   1221  1.1  christos   /* We've got an rvalue now, which is a pointer.  We want to yield an
   1222  1.1  christos      lvalue, whose address is exactly that pointer.  So we don't
   1223  1.1  christos      actually emit any code; we just change the type from "Pointer to
   1224  1.1  christos      T" to "T", and mark the value as an lvalue in memory.  Leave it
   1225  1.1  christos      to the consumer to actually dereference it.  */
   1226  1.8  christos   value->type = check_typedef (TYPE_TARGET_TYPE (value->type));
   1227  1.1  christos   if (value->type->code () == TYPE_CODE_VOID)
   1228  1.1  christos     error (_("Attempt to dereference a generic pointer."));
   1229  1.1  christos   value->kind = ((value->type->code () == TYPE_CODE_FUNC)
   1230  1.1  christos 		 ? axs_rvalue : axs_lvalue_memory);
   1231  1.9  christos }
   1232  1.1  christos 
   1233  1.1  christos 
   1234  1.1  christos /* Produce the address of the lvalue on the top of the stack.  */
   1235  1.1  christos static void
   1236  1.1  christos gen_address_of (struct axs_value *value)
   1237  1.1  christos {
   1238  1.1  christos   /* Special case for taking the address of a function.  The ANSI
   1239  1.1  christos      standard describes this as a special case, too, so this
   1240  1.1  christos      arrangement is not without motivation.  */
   1241  1.1  christos   if (value->type->code () == TYPE_CODE_FUNC)
   1242  1.1  christos     /* The value's already an rvalue on the stack, so we just need to
   1243  1.1  christos        change the type.  */
   1244  1.1  christos     value->type = lookup_pointer_type (value->type);
   1245  1.1  christos   else
   1246  1.1  christos     switch (value->kind)
   1247  1.1  christos       {
   1248  1.1  christos       case axs_rvalue:
   1249  1.1  christos 	error (_("Operand of `&' is an rvalue, which has no address."));
   1250  1.1  christos 
   1251  1.1  christos       case axs_lvalue_register:
   1252  1.1  christos 	error (_("Operand of `&' is in a register, and has no address."));
   1253  1.1  christos 
   1254  1.1  christos       case axs_lvalue_memory:
   1255  1.1  christos 	value->kind = axs_rvalue;
   1256  1.8  christos 	value->type = lookup_pointer_type (value->type);
   1257  1.8  christos 	break;
   1258  1.1  christos       }
   1259  1.1  christos }
   1260  1.1  christos 
   1261  1.1  christos /* Generate code to push the value of a bitfield of a structure whose
   1262  1.1  christos    address is on the top of the stack.  START and END give the
   1263  1.1  christos    starting and one-past-ending *bit* numbers of the field within the
   1264  1.1  christos    structure.  */
   1265  1.1  christos static void
   1266  1.1  christos gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
   1267  1.1  christos 		  struct type *type, int start, int end)
   1268  1.1  christos {
   1269  1.1  christos   /* Note that ops[i] fetches 8 << i bits.  */
   1270  1.1  christos   static enum agent_op ops[]
   1271  1.1  christos     = {aop_ref8, aop_ref16, aop_ref32, aop_ref64};
   1272  1.1  christos   static int num_ops = (sizeof (ops) / sizeof (ops[0]));
   1273  1.1  christos 
   1274  1.1  christos   /* We don't want to touch any byte that the bitfield doesn't
   1275  1.1  christos      actually occupy; we shouldn't make any accesses we're not
   1276  1.1  christos      explicitly permitted to.  We rely here on the fact that the
   1277  1.1  christos      bytecode `ref' operators work on unaligned addresses.
   1278  1.1  christos 
   1279  1.1  christos      It takes some fancy footwork to get the stack to work the way
   1280  1.1  christos      we'd like.  Say we're retrieving a bitfield that requires three
   1281  1.1  christos      fetches.  Initially, the stack just contains the address:
   1282  1.1  christos      addr
   1283  1.1  christos      For the first fetch, we duplicate the address
   1284  1.1  christos      addr addr
   1285  1.1  christos      then add the byte offset, do the fetch, and shift and mask as
   1286  1.1  christos      needed, yielding a fragment of the value, properly aligned for
   1287  1.1  christos      the final bitwise or:
   1288  1.1  christos      addr frag1
   1289  1.1  christos      then we swap, and repeat the process:
   1290  1.1  christos      frag1 addr                    --- address on top
   1291  1.1  christos      frag1 addr addr               --- duplicate it
   1292  1.1  christos      frag1 addr frag2              --- get second fragment
   1293  1.1  christos      frag1 frag2 addr              --- swap again
   1294  1.1  christos      frag1 frag2 frag3             --- get third fragment
   1295  1.1  christos      Notice that, since the third fragment is the last one, we don't
   1296  1.1  christos      bother duplicating the address this time.  Now we have all the
   1297  1.1  christos      fragments on the stack, and we can simply `or' them together,
   1298  1.1  christos      yielding the final value of the bitfield.  */
   1299  1.1  christos 
   1300  1.1  christos   /* The first and one-after-last bits in the field, but rounded down
   1301  1.1  christos      and up to byte boundaries.  */
   1302  1.1  christos   int bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT;
   1303  1.1  christos   int bound_end = (((end + TARGET_CHAR_BIT - 1)
   1304  1.1  christos 		    / TARGET_CHAR_BIT)
   1305  1.1  christos 		   * TARGET_CHAR_BIT);
   1306  1.1  christos 
   1307  1.1  christos   /* current bit offset within the structure */
   1308  1.1  christos   int offset;
   1309  1.1  christos 
   1310  1.1  christos   /* The index in ops of the opcode we're considering.  */
   1311  1.1  christos   int op;
   1312  1.1  christos 
   1313  1.1  christos   /* The number of fragments we generated in the process.  Probably
   1314  1.1  christos      equal to the number of `one' bits in bytesize, but who cares?  */
   1315  1.1  christos   int fragment_count;
   1316  1.1  christos 
   1317  1.1  christos   /* Dereference any typedefs.  */
   1318  1.1  christos   type = check_typedef (type);
   1319  1.1  christos 
   1320  1.1  christos   /* Can we fetch the number of bits requested at all?  */
   1321  1.1  christos   if ((end - start) > ((1 << num_ops) * 8))
   1322  1.1  christos     internal_error (__FILE__, __LINE__,
   1323  1.1  christos 		    _("gen_bitfield_ref: bitfield too wide"));
   1324  1.1  christos 
   1325  1.1  christos   /* Note that we know here that we only need to try each opcode once.
   1326  1.1  christos      That may not be true on machines with weird byte sizes.  */
   1327  1.1  christos   offset = bound_start;
   1328  1.1  christos   fragment_count = 0;
   1329  1.1  christos   for (op = num_ops - 1; op >= 0; op--)
   1330  1.1  christos     {
   1331  1.1  christos       /* number of bits that ops[op] would fetch */
   1332  1.1  christos       int op_size = 8 << op;
   1333  1.1  christos 
   1334  1.1  christos       /* The stack at this point, from bottom to top, contains zero or
   1335  1.1  christos          more fragments, then the address.  */
   1336  1.1  christos 
   1337  1.1  christos       /* Does this fetch fit within the bitfield?  */
   1338  1.1  christos       if (offset + op_size <= bound_end)
   1339  1.1  christos 	{
   1340  1.1  christos 	  /* Is this the last fragment?  */
   1341  1.1  christos 	  int last_frag = (offset + op_size == bound_end);
   1342  1.1  christos 
   1343  1.1  christos 	  if (!last_frag)
   1344  1.1  christos 	    ax_simple (ax, aop_dup);	/* keep a copy of the address */
   1345  1.1  christos 
   1346  1.1  christos 	  /* Add the offset.  */
   1347  1.1  christos 	  gen_offset (ax, offset / TARGET_CHAR_BIT);
   1348  1.1  christos 
   1349  1.1  christos 	  if (ax->tracing)
   1350  1.1  christos 	    {
   1351  1.1  christos 	      /* Record the area of memory we're about to fetch.  */
   1352  1.1  christos 	      ax_trace_quick (ax, op_size / TARGET_CHAR_BIT);
   1353  1.1  christos 	    }
   1354  1.1  christos 
   1355  1.1  christos 	  /* Perform the fetch.  */
   1356  1.1  christos 	  ax_simple (ax, ops[op]);
   1357  1.1  christos 
   1358  1.1  christos 	  /* Shift the bits we have to their proper position.
   1359  1.1  christos 	     gen_left_shift will generate right shifts when the operand
   1360  1.1  christos 	     is negative.
   1361  1.1  christos 
   1362  1.1  christos 	     A big-endian field diagram to ponder:
   1363  1.1  christos 	     byte 0  byte 1  byte 2  byte 3  byte 4  byte 5  byte 6  byte 7
   1364  1.1  christos 	     +------++------++------++------++------++------++------++------+
   1365  1.1  christos 	     xxxxAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCxxxxxxxxxxx
   1366  1.1  christos 	     ^               ^               ^    ^
   1367  1.1  christos 	     bit number      16              32              48   53
   1368  1.1  christos 	     These are bit numbers as supplied by GDB.  Note that the
   1369  1.1  christos 	     bit numbers run from right to left once you've fetched the
   1370  1.1  christos 	     value!
   1371  1.1  christos 
   1372  1.1  christos 	     A little-endian field diagram to ponder:
   1373  1.1  christos 	     byte 7  byte 6  byte 5  byte 4  byte 3  byte 2  byte 1  byte 0
   1374  1.1  christos 	     +------++------++------++------++------++------++------++------+
   1375  1.1  christos 	     xxxxxxxxxxxAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCxxxx
   1376  1.1  christos 	     ^               ^               ^           ^   ^
   1377  1.1  christos 	     bit number     48              32              16          4   0
   1378  1.1  christos 
   1379  1.1  christos 	     In both cases, the most significant end is on the left
   1380  1.1  christos 	     (i.e. normal numeric writing order), which means that you
   1381  1.1  christos 	     don't go crazy thinking about `left' and `right' shifts.
   1382  1.8  christos 
   1383  1.1  christos 	     We don't have to worry about masking yet:
   1384  1.1  christos 	     - If they contain garbage off the least significant end, then we
   1385  1.1  christos 	     must be looking at the low end of the field, and the right
   1386  1.1  christos 	     shift will wipe them out.
   1387  1.1  christos 	     - If they contain garbage off the most significant end, then we
   1388  1.1  christos 	     must be looking at the most significant end of the word, and
   1389  1.1  christos 	     the sign/zero extension will wipe them out.
   1390  1.1  christos 	     - If we're in the interior of the word, then there is no garbage
   1391  1.1  christos 	     on either end, because the ref operators zero-extend.  */
   1392  1.1  christos 	  if (gdbarch_byte_order (ax->gdbarch) == BFD_ENDIAN_BIG)
   1393  1.1  christos 	    gen_left_shift (ax, end - (offset + op_size));
   1394  1.1  christos 	  else
   1395  1.1  christos 	    gen_left_shift (ax, offset - start);
   1396  1.1  christos 
   1397  1.1  christos 	  if (!last_frag)
   1398  1.1  christos 	    /* Bring the copy of the address up to the top.  */
   1399  1.1  christos 	    ax_simple (ax, aop_swap);
   1400  1.1  christos 
   1401  1.1  christos 	  offset += op_size;
   1402  1.1  christos 	  fragment_count++;
   1403  1.1  christos 	}
   1404  1.1  christos     }
   1405  1.1  christos 
   1406  1.1  christos   /* Generate enough bitwise `or' operations to combine all the
   1407  1.1  christos      fragments we left on the stack.  */
   1408  1.1  christos   while (fragment_count-- > 1)
   1409  1.1  christos     ax_simple (ax, aop_bit_or);
   1410  1.1  christos 
   1411  1.1  christos   /* Sign- or zero-extend the value as appropriate.  */
   1412  1.1  christos   ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, end - start));
   1413  1.1  christos 
   1414  1.1  christos   /* This is *not* an lvalue.  Ugh.  */
   1415  1.8  christos   value->kind = axs_rvalue;
   1416  1.1  christos   value->type = type;
   1417  1.1  christos }
   1418  1.1  christos 
   1419  1.1  christos /* Generate bytecodes for field number FIELDNO of type TYPE.  OFFSET
   1420  1.9  christos    is an accumulated offset (in bytes), will be nonzero for objects
   1421  1.1  christos    embedded in other objects, like C++ base classes.  Behavior should
   1422  1.1  christos    generally follow value_primitive_field.  */
   1423  1.1  christos 
   1424  1.1  christos static void
   1425  1.1  christos gen_primitive_field (struct agent_expr *ax, struct axs_value *value,
   1426  1.1  christos 		     int offset, int fieldno, struct type *type)
   1427  1.1  christos {
   1428  1.1  christos   /* Is this a bitfield?  */
   1429  1.1  christos   if (TYPE_FIELD_PACKED (type, fieldno))
   1430  1.1  christos     gen_bitfield_ref (ax, value, type->field (fieldno).type (),
   1431  1.9  christos 		      (offset * TARGET_CHAR_BIT
   1432  1.1  christos 		       + TYPE_FIELD_BITPOS (type, fieldno)),
   1433  1.1  christos 		      (offset * TARGET_CHAR_BIT
   1434  1.1  christos 		       + TYPE_FIELD_BITPOS (type, fieldno)
   1435  1.1  christos 		       + TYPE_FIELD_BITSIZE (type, fieldno)));
   1436  1.1  christos   else
   1437  1.1  christos     {
   1438  1.1  christos       gen_offset (ax, offset
   1439  1.8  christos 		  + TYPE_FIELD_BITPOS (type, fieldno) / TARGET_CHAR_BIT);
   1440  1.7  christos       value->kind = axs_lvalue_memory;
   1441  1.1  christos       value->type = type->field (fieldno).type ();
   1442  1.1  christos     }
   1443  1.1  christos }
   1444  1.1  christos 
   1445  1.6  christos /* Search for the given field in either the given type or one of its
   1446  1.1  christos    base classes.  Return 1 if found, 0 if not.  */
   1447  1.9  christos 
   1448  1.1  christos static int
   1449  1.1  christos gen_struct_ref_recursive (struct agent_expr *ax, struct axs_value *value,
   1450  1.1  christos 			  const char *field, int offset, struct type *type)
   1451  1.1  christos {
   1452  1.1  christos   int i, rslt;
   1453  1.1  christos   int nbases = TYPE_N_BASECLASSES (type);
   1454  1.1  christos 
   1455  1.1  christos   type = check_typedef (type);
   1456  1.1  christos 
   1457  1.1  christos   for (i = type->num_fields () - 1; i >= nbases; i--)
   1458  1.1  christos     {
   1459  1.9  christos       const char *this_name = TYPE_FIELD_NAME (type, i);
   1460  1.1  christos 
   1461  1.8  christos       if (this_name)
   1462  1.1  christos 	{
   1463  1.1  christos 	  if (strcmp (field, this_name) == 0)
   1464  1.1  christos 	    {
   1465  1.1  christos 	      /* Note that bytecodes for the struct's base (aka
   1466  1.1  christos 		 "this") will have been generated already, which will
   1467  1.1  christos 		 be unnecessary but not harmful if the static field is
   1468  1.1  christos 		 being handled as a global.  */
   1469  1.8  christos 	      if (field_is_static (&type->field (i)))
   1470  1.1  christos 		{
   1471  1.1  christos 		  gen_static_field (ax, value, type, i);
   1472  1.1  christos 		  if (value->optimized_out)
   1473  1.1  christos 		    error (_("static field `%s' has been "
   1474  1.1  christos 			     "optimized out, cannot use"),
   1475  1.1  christos 			   field);
   1476  1.1  christos 		  return 1;
   1477  1.1  christos 		}
   1478  1.1  christos 
   1479  1.1  christos 	      gen_primitive_field (ax, value, offset, i, type);
   1480  1.1  christos 	      return 1;
   1481  1.1  christos 	    }
   1482  1.1  christos #if 0 /* is this right? */
   1483  1.1  christos 	  if (this_name[0] == '\0')
   1484  1.1  christos 	    internal_error (__FILE__, __LINE__,
   1485  1.8  christos 			    _("find_field: anonymous unions not supported"));
   1486  1.1  christos #endif
   1487  1.1  christos 	}
   1488  1.1  christos     }
   1489  1.1  christos 
   1490  1.1  christos   /* Now scan through base classes recursively.  */
   1491  1.1  christos   for (i = 0; i < nbases; i++)
   1492  1.1  christos     {
   1493  1.1  christos       struct type *basetype = check_typedef (TYPE_BASECLASS (type, i));
   1494  1.1  christos 
   1495  1.1  christos       rslt = gen_struct_ref_recursive (ax, value, field,
   1496  1.1  christos 				       offset + TYPE_BASECLASS_BITPOS (type, i)
   1497  1.1  christos 				       / TARGET_CHAR_BIT,
   1498  1.1  christos 				       basetype);
   1499  1.1  christos       if (rslt)
   1500  1.1  christos 	return 1;
   1501  1.1  christos     }
   1502  1.1  christos 
   1503  1.8  christos   /* Not found anywhere, flag so caller can complain.  */
   1504  1.8  christos   return 0;
   1505  1.8  christos }
   1506  1.1  christos 
   1507  1.1  christos /* Generate code to reference the member named FIELD of a structure or
   1508  1.1  christos    union.  The top of the stack, as described by VALUE, should have
   1509  1.1  christos    type (pointer to a)* struct/union.  OPERATOR_NAME is the name of
   1510  1.1  christos    the operator being compiled, and OPERAND_NAME is the kind of thing
   1511  1.1  christos    it operates on; we use them in error messages.  */
   1512  1.1  christos static void
   1513  1.1  christos gen_struct_ref (struct agent_expr *ax, struct axs_value *value,
   1514  1.1  christos 		const char *field, const char *operator_name,
   1515  1.1  christos 		const char *operand_name)
   1516  1.8  christos {
   1517  1.1  christos   struct type *type;
   1518  1.1  christos   int found;
   1519  1.1  christos 
   1520  1.1  christos   /* Follow pointers until we reach a non-pointer.  These aren't the C
   1521  1.9  christos      semantics, but they're what the normal GDB evaluator does, so we
   1522  1.9  christos      should at least be consistent.  */
   1523  1.1  christos   while (pointer_type (value->type))
   1524  1.1  christos     {
   1525  1.1  christos       require_rvalue (ax, value);
   1526  1.1  christos       gen_deref (value);
   1527  1.1  christos     }
   1528  1.1  christos   type = check_typedef (value->type);
   1529  1.1  christos 
   1530  1.1  christos   /* This must yield a structure or a union.  */
   1531  1.1  christos   if (type->code () != TYPE_CODE_STRUCT
   1532  1.8  christos       && type->code () != TYPE_CODE_UNION)
   1533  1.1  christos     error (_("The left operand of `%s' is not a %s."),
   1534  1.1  christos 	   operator_name, operand_name);
   1535  1.1  christos 
   1536  1.9  christos   /* And it must be in memory; we don't deal with structure rvalues,
   1537  1.1  christos      or structures living in registers.  */
   1538  1.1  christos   if (value->kind != axs_lvalue_memory)
   1539  1.1  christos     error (_("Structure does not live in memory."));
   1540  1.8  christos 
   1541  1.1  christos   /* Search through fields and base classes recursively.  */
   1542  1.1  christos   found = gen_struct_ref_recursive (ax, value, field, 0, type);
   1543  1.8  christos 
   1544  1.1  christos   if (!found)
   1545  1.1  christos     error (_("Couldn't find member named `%s' in struct/union/class `%s'"),
   1546  1.1  christos 	   field, type->name ());
   1547  1.8  christos }
   1548  1.1  christos 
   1549  1.1  christos static int
   1550  1.1  christos gen_namespace_elt (struct agent_expr *ax, struct axs_value *value,
   1551  1.1  christos 		   const struct type *curtype, char *name);
   1552  1.1  christos static int
   1553  1.1  christos gen_maybe_namespace_elt (struct agent_expr *ax, struct axs_value *value,
   1554  1.9  christos 			 const struct type *curtype, char *name);
   1555  1.1  christos 
   1556  1.1  christos static void
   1557  1.1  christos gen_static_field (struct agent_expr *ax, struct axs_value *value,
   1558  1.1  christos 		  struct type *type, int fieldno)
   1559  1.1  christos {
   1560  1.6  christos   if (TYPE_FIELD_LOC_KIND (type, fieldno) == FIELD_LOC_KIND_PHYSADDR)
   1561  1.1  christos     {
   1562  1.1  christos       ax_const_l (ax, TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
   1563  1.1  christos       value->kind = axs_lvalue_memory;
   1564  1.8  christos       value->type = type->field (fieldno).type ();
   1565  1.1  christos       value->optimized_out = 0;
   1566  1.1  christos     }
   1567  1.1  christos   else
   1568  1.1  christos     {
   1569  1.1  christos       const char *phys_name = TYPE_FIELD_STATIC_PHYSNAME (type, fieldno);
   1570  1.1  christos       struct symbol *sym = lookup_symbol (phys_name, 0, VAR_DOMAIN, 0).symbol;
   1571  1.1  christos 
   1572  1.1  christos       if (sym)
   1573  1.1  christos 	{
   1574  1.1  christos 	  gen_var_ref (ax, value, sym);
   1575  1.1  christos 
   1576  1.1  christos 	  /* Don't error if the value was optimized out, we may be
   1577  1.1  christos 	     scanning all static fields and just want to pass over this
   1578  1.1  christos 	     and continue with the rest.  */
   1579  1.1  christos 	}
   1580  1.8  christos       else
   1581  1.1  christos 	{
   1582  1.1  christos 	  /* Silently assume this was optimized out; class printing
   1583  1.1  christos 	     will let the user know why the data is missing.  */
   1584  1.1  christos 	  value->optimized_out = 1;
   1585  1.1  christos 	}
   1586  1.9  christos     }
   1587  1.9  christos }
   1588  1.1  christos 
   1589  1.1  christos static int
   1590  1.1  christos gen_struct_elt_for_reference (struct agent_expr *ax, struct axs_value *value,
   1591  1.9  christos 			      struct type *type, char *fieldname)
   1592  1.1  christos {
   1593  1.1  christos   struct type *t = type;
   1594  1.1  christos   int i;
   1595  1.1  christos 
   1596  1.1  christos   if (t->code () != TYPE_CODE_STRUCT
   1597  1.9  christos       && t->code () != TYPE_CODE_UNION)
   1598  1.1  christos     internal_error (__FILE__, __LINE__,
   1599  1.8  christos 		    _("non-aggregate type to gen_struct_elt_for_reference"));
   1600  1.1  christos 
   1601  1.1  christos   for (i = t->num_fields () - 1; i >= TYPE_N_BASECLASSES (t); i--)
   1602  1.1  christos     {
   1603  1.1  christos       const char *t_field_name = TYPE_FIELD_NAME (t, i);
   1604  1.1  christos 
   1605  1.1  christos       if (t_field_name && strcmp (t_field_name, fieldname) == 0)
   1606  1.1  christos 	{
   1607  1.1  christos 	  if (field_is_static (&t->field (i)))
   1608  1.1  christos 	    {
   1609  1.1  christos 	      gen_static_field (ax, value, t, i);
   1610  1.1  christos 	      if (value->optimized_out)
   1611  1.1  christos 		error (_("static field `%s' has been "
   1612  1.1  christos 			 "optimized out, cannot use"),
   1613  1.1  christos 		       fieldname);
   1614  1.1  christos 	      return 1;
   1615  1.1  christos 	    }
   1616  1.1  christos 	  if (TYPE_FIELD_PACKED (t, i))
   1617  1.1  christos 	    error (_("pointers to bitfield members not allowed"));
   1618  1.8  christos 
   1619  1.1  christos 	  /* FIXME we need a way to do "want_address" equivalent */
   1620  1.1  christos 
   1621  1.1  christos 	  error (_("Cannot reference non-static field \"%s\""), fieldname);
   1622  1.1  christos 	}
   1623  1.1  christos     }
   1624  1.1  christos 
   1625  1.8  christos   /* FIXME add other scoped-reference cases here */
   1626  1.1  christos 
   1627  1.1  christos   /* Do a last-ditch lookup.  */
   1628  1.8  christos   return gen_maybe_namespace_elt (ax, value, type, fieldname);
   1629  1.1  christos }
   1630  1.1  christos 
   1631  1.1  christos /* C++: Return the member NAME of the namespace given by the type
   1632  1.9  christos    CURTYPE.  */
   1633  1.1  christos 
   1634  1.1  christos static int
   1635  1.1  christos gen_namespace_elt (struct agent_expr *ax, struct axs_value *value,
   1636  1.1  christos 		   const struct type *curtype, char *name)
   1637  1.1  christos {
   1638  1.1  christos   int found = gen_maybe_namespace_elt (ax, value, curtype, name);
   1639  1.1  christos 
   1640  1.1  christos   if (!found)
   1641  1.1  christos     error (_("No symbol \"%s\" in namespace \"%s\"."),
   1642  1.1  christos 	   name, curtype->name ());
   1643  1.1  christos 
   1644  1.8  christos   return found;
   1645  1.1  christos }
   1646  1.1  christos 
   1647  1.9  christos /* A helper function used by value_namespace_elt and
   1648  1.6  christos    value_struct_elt_for_reference.  It looks up NAME inside the
   1649  1.1  christos    context CURTYPE; this works if CURTYPE is a namespace or if CURTYPE
   1650  1.1  christos    is a class and NAME refers to a type in CURTYPE itself (as opposed
   1651  1.1  christos    to, say, some base class of CURTYPE).  */
   1652  1.1  christos 
   1653  1.1  christos static int
   1654  1.6  christos gen_maybe_namespace_elt (struct agent_expr *ax, struct axs_value *value,
   1655  1.1  christos 			 const struct type *curtype, char *name)
   1656  1.1  christos {
   1657  1.8  christos   const char *namespace_name = curtype->name ();
   1658  1.1  christos   struct block_symbol sym;
   1659  1.1  christos 
   1660  1.1  christos   sym = cp_lookup_symbol_namespace (namespace_name, name,
   1661  1.9  christos 				    block_for_pc (ax->scope),
   1662  1.1  christos 				    VAR_DOMAIN);
   1663  1.1  christos 
   1664  1.1  christos   if (sym.symbol == NULL)
   1665  1.1  christos     return 0;
   1666  1.1  christos 
   1667  1.1  christos   gen_var_ref (ax, value, sym.symbol);
   1668  1.8  christos 
   1669  1.8  christos   if (value->optimized_out)
   1670  1.1  christos     error (_("`%s' has been optimized out, cannot use"),
   1671  1.9  christos 	   sym.symbol->print_name ());
   1672  1.1  christos 
   1673  1.1  christos   return 1;
   1674  1.1  christos }
   1675  1.8  christos 
   1676  1.1  christos 
   1677  1.1  christos static int
   1678  1.8  christos gen_aggregate_elt_ref (struct agent_expr *ax, struct axs_value *value,
   1679  1.1  christos 		       struct type *type, char *field)
   1680  1.1  christos {
   1681  1.1  christos   switch (type->code ())
   1682  1.1  christos     {
   1683  1.1  christos     case TYPE_CODE_STRUCT:
   1684  1.1  christos     case TYPE_CODE_UNION:
   1685  1.1  christos       return gen_struct_elt_for_reference (ax, value, type, field);
   1686  1.1  christos       break;
   1687  1.1  christos     case TYPE_CODE_NAMESPACE:
   1688  1.1  christos       return gen_namespace_elt (ax, value, type, field);
   1689  1.1  christos       break;
   1690  1.1  christos     default:
   1691  1.1  christos       internal_error (__FILE__, __LINE__,
   1692  1.1  christos 		      _("non-aggregate type in gen_aggregate_elt_ref"));
   1693  1.1  christos     }
   1694  1.1  christos 
   1695  1.1  christos   return 0;
   1696  1.1  christos }
   1697  1.1  christos 
   1698  1.1  christos /* Generate code for GDB's magical `repeat' operator.
   1699  1.1  christos    LVALUE @ INT creates an array INT elements long, and whose elements
   1700  1.1  christos    have the same type as LVALUE, located in memory so that LVALUE is
   1701  1.1  christos    its first element.  For example, argv[0]@argc gives you the array
   1702  1.1  christos    of command-line arguments.
   1703  1.1  christos 
   1704  1.1  christos    Unfortunately, because we have to know the types before we actually
   1705  1.1  christos    have a value for the expression, we can't implement this perfectly
   1706  1.1  christos    without changing the type system, having values that occupy two
   1707  1.1  christos    stack slots, doing weird things with sizeof, etc.  So we require
   1708  1.1  christos    the right operand to be a constant expression.  */
   1709  1.1  christos static void
   1710  1.1  christos gen_repeat (struct expression *exp, union exp_element **pc,
   1711  1.1  christos 	    struct agent_expr *ax, struct axs_value *value)
   1712  1.1  christos {
   1713  1.1  christos   struct axs_value value1;
   1714  1.1  christos 
   1715  1.1  christos   /* We don't want to turn this into an rvalue, so no conversions
   1716  1.1  christos      here.  */
   1717  1.1  christos   gen_expr (exp, pc, ax, &value1);
   1718  1.1  christos   if (value1.kind != axs_lvalue_memory)
   1719  1.9  christos     error (_("Left operand of `@' must be an object in memory."));
   1720  1.1  christos 
   1721  1.1  christos   /* Evaluate the length; it had better be a constant.  */
   1722  1.1  christos   {
   1723  1.1  christos     struct value *v = const_expr (pc);
   1724  1.1  christos     int length;
   1725  1.1  christos 
   1726  1.1  christos     if (!v)
   1727  1.1  christos       error (_("Right operand of `@' must be a "
   1728  1.1  christos 	       "constant, in agent expressions."));
   1729  1.1  christos     if (value_type (v)->code () != TYPE_CODE_INT)
   1730  1.1  christos       error (_("Right operand of `@' must be an integer."));
   1731  1.1  christos     length = value_as_long (v);
   1732  1.1  christos     if (length <= 0)
   1733  1.1  christos       error (_("Right operand of `@' must be positive."));
   1734  1.1  christos 
   1735  1.1  christos     /* The top of the stack is already the address of the object, so
   1736  1.1  christos        all we need to do is frob the type of the lvalue.  */
   1737  1.1  christos     {
   1738  1.1  christos       /* FIXME-type-allocation: need a way to free this type when we are
   1739  1.1  christos          done with it.  */
   1740  1.1  christos       struct type *array
   1741  1.1  christos 	= lookup_array_range_type (value1.type, 0, length - 1);
   1742  1.1  christos 
   1743  1.1  christos       value->kind = axs_lvalue_memory;
   1744  1.1  christos       value->type = array;
   1745  1.1  christos     }
   1746  1.1  christos   }
   1747  1.1  christos }
   1748  1.1  christos 
   1749  1.1  christos 
   1750  1.1  christos /* Emit code for the `sizeof' operator.
   1751  1.1  christos    *PC should point at the start of the operand expression; we advance it
   1752  1.1  christos    to the first instruction after the operand.  */
   1753  1.1  christos static void
   1754  1.1  christos gen_sizeof (struct expression *exp, union exp_element **pc,
   1755  1.1  christos 	    struct agent_expr *ax, struct axs_value *value,
   1756  1.1  christos 	    struct type *size_type)
   1757  1.1  christos {
   1758  1.1  christos   /* We don't care about the value of the operand expression; we only
   1759  1.1  christos      care about its type.  However, in the current arrangement, the
   1760  1.1  christos      only way to find an expression's type is to generate code for it.
   1761  1.1  christos      So we generate code for the operand, and then throw it away,
   1762  1.1  christos      replacing it with code that simply pushes its size.  */
   1763  1.1  christos   int start = ax->len;
   1764  1.1  christos 
   1765  1.1  christos   gen_expr (exp, pc, ax, value);
   1766  1.8  christos 
   1767  1.8  christos   /* Throw away the code we just generated.  */
   1768  1.8  christos   ax->len = start;
   1769  1.8  christos 
   1770  1.8  christos   ax_const_l (ax, TYPE_LENGTH (value->type));
   1771  1.8  christos   value->kind = axs_rvalue;
   1772  1.8  christos   value->type = size_type;
   1773  1.8  christos }
   1774  1.8  christos 
   1775  1.8  christos 
   1777  1.8  christos /* Generate bytecode for a cast to TO_TYPE.  Advance *PC over the
   1778  1.8  christos    subexpression.  */
   1779  1.8  christos 
   1780  1.8  christos static void
   1781  1.8  christos gen_expr_for_cast (struct expression *exp, union exp_element **pc,
   1782  1.8  christos 		   struct agent_expr *ax, struct axs_value *value,
   1783  1.8  christos 		   struct type *to_type)
   1784  1.8  christos {
   1785  1.8  christos   enum exp_opcode op = (*pc)[0].opcode;
   1786  1.8  christos 
   1787  1.9  christos   /* Don't let symbols be handled with gen_expr because that throws an
   1788  1.8  christos      "unknown type" error for no-debug data symbols.  Instead, we want
   1789  1.8  christos      the cast to reinterpret such symbols.  */
   1790  1.8  christos   if (op == OP_VAR_MSYM_VALUE || op == OP_VAR_VALUE)
   1791  1.9  christos     {
   1792  1.8  christos       if (op == OP_VAR_VALUE)
   1793  1.8  christos 	{
   1794  1.8  christos 	  gen_var_ref (ax, value, (*pc)[2].symbol);
   1795  1.8  christos 
   1796  1.8  christos 	  if (value->optimized_out)
   1797  1.8  christos 	    error (_("`%s' has been optimized out, cannot use"),
   1798  1.8  christos 		   (*pc)[2].symbol->print_name ());
   1799  1.8  christos 	}
   1800  1.1  christos       else
   1801  1.1  christos 	gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile);
   1802  1.1  christos       if (value->type->code () == TYPE_CODE_ERROR)
   1803  1.1  christos 	value->type = to_type;
   1804  1.1  christos       (*pc) += 4;
   1805  1.1  christos     }
   1806  1.1  christos   else
   1807  1.1  christos     gen_expr (exp, pc, ax, value);
   1808  1.1  christos   gen_cast (ax, value, to_type);
   1809  1.1  christos }
   1810  1.1  christos 
   1811  1.1  christos /* Generating bytecode from GDB expressions: general recursive thingy  */
   1812  1.1  christos 
   1813  1.8  christos /* XXX: i18n */
   1814  1.1  christos /* A gen_expr function written by a Gen-X'er guy.
   1815  1.1  christos    Append code for the subexpression of EXPR starting at *POS_P to AX.  */
   1816  1.1  christos void
   1817  1.1  christos gen_expr (struct expression *exp, union exp_element **pc,
   1818  1.1  christos 	  struct agent_expr *ax, struct axs_value *value)
   1819  1.1  christos {
   1820  1.1  christos   /* Used to hold the descriptions of operand expressions.  */
   1821  1.1  christos   struct axs_value value1, value2, value3;
   1822  1.1  christos   enum exp_opcode op = (*pc)[0].opcode, op2;
   1823  1.1  christos   int if1, go1, if2, go2, end;
   1824  1.1  christos   struct type *int_type = builtin_type (ax->gdbarch)->builtin_int;
   1825  1.1  christos 
   1826  1.1  christos   /* If we're looking at a constant expression, just push its value.  */
   1827  1.1  christos   {
   1828  1.1  christos     struct value *v = maybe_const_expr (pc);
   1829  1.1  christos 
   1830  1.1  christos     if (v)
   1831  1.1  christos       {
   1832  1.1  christos 	ax_const_l (ax, value_as_long (v));
   1833  1.1  christos 	value->kind = axs_rvalue;
   1834  1.1  christos 	value->type = check_typedef (value_type (v));
   1835  1.1  christos 	return;
   1836  1.1  christos       }
   1837  1.1  christos   }
   1838  1.1  christos 
   1839  1.1  christos   /* Otherwise, go ahead and generate code for it.  */
   1840  1.1  christos   switch (op)
   1841  1.1  christos     {
   1842  1.1  christos       /* Binary arithmetic operators.  */
   1843  1.1  christos     case BINOP_ADD:
   1844  1.1  christos     case BINOP_SUB:
   1845  1.1  christos     case BINOP_MUL:
   1846  1.1  christos     case BINOP_DIV:
   1847  1.1  christos     case BINOP_REM:
   1848  1.1  christos     case BINOP_LSH:
   1849  1.1  christos     case BINOP_RSH:
   1850  1.1  christos     case BINOP_SUBSCRIPT:
   1851  1.8  christos     case BINOP_BITWISE_AND:
   1852  1.1  christos     case BINOP_BITWISE_IOR:
   1853  1.1  christos     case BINOP_BITWISE_XOR:
   1854  1.1  christos     case BINOP_EQUAL:
   1855  1.1  christos     case BINOP_NOTEQUAL:
   1856  1.1  christos     case BINOP_LESS:
   1857  1.1  christos     case BINOP_GTR:
   1858  1.1  christos     case BINOP_LEQ:
   1859  1.8  christos     case BINOP_GEQ:
   1860  1.1  christos       (*pc)++;
   1861  1.1  christos       gen_expr (exp, pc, ax, &value1);
   1862  1.1  christos       gen_usual_unary (ax, &value1);
   1863  1.1  christos       gen_expr_binop_rest (exp, op, pc, ax, value, &value1, &value2);
   1864  1.8  christos       break;
   1865  1.1  christos 
   1866  1.1  christos     case BINOP_LOGICAL_AND:
   1867  1.1  christos       (*pc)++;
   1868  1.1  christos       /* Generate the obvious sequence of tests and jumps.  */
   1869  1.1  christos       gen_expr (exp, pc, ax, &value1);
   1870  1.1  christos       gen_usual_unary (ax, &value1);
   1871  1.1  christos       if1 = ax_goto (ax, aop_if_goto);
   1872  1.1  christos       go1 = ax_goto (ax, aop_goto);
   1873  1.1  christos       ax_label (ax, if1, ax->len);
   1874  1.1  christos       gen_expr (exp, pc, ax, &value2);
   1875  1.1  christos       gen_usual_unary (ax, &value2);
   1876  1.1  christos       if2 = ax_goto (ax, aop_if_goto);
   1877  1.1  christos       go2 = ax_goto (ax, aop_goto);
   1878  1.1  christos       ax_label (ax, if2, ax->len);
   1879  1.1  christos       ax_const_l (ax, 1);
   1880  1.1  christos       end = ax_goto (ax, aop_goto);
   1881  1.1  christos       ax_label (ax, go1, ax->len);
   1882  1.8  christos       ax_label (ax, go2, ax->len);
   1883  1.1  christos       ax_const_l (ax, 0);
   1884  1.1  christos       ax_label (ax, end, ax->len);
   1885  1.8  christos       value->kind = axs_rvalue;
   1886  1.1  christos       value->type = int_type;
   1887  1.1  christos       break;
   1888  1.1  christos 
   1889  1.1  christos     case BINOP_LOGICAL_OR:
   1890  1.1  christos       (*pc)++;
   1891  1.1  christos       /* Generate the obvious sequence of tests and jumps.  */
   1892  1.1  christos       gen_expr (exp, pc, ax, &value1);
   1893  1.1  christos       gen_usual_unary (ax, &value1);
   1894  1.1  christos       if1 = ax_goto (ax, aop_if_goto);
   1895  1.1  christos       gen_expr (exp, pc, ax, &value2);
   1896  1.1  christos       gen_usual_unary (ax, &value2);
   1897  1.1  christos       if2 = ax_goto (ax, aop_if_goto);
   1898  1.1  christos       ax_const_l (ax, 0);
   1899  1.1  christos       end = ax_goto (ax, aop_goto);
   1900  1.8  christos       ax_label (ax, if1, ax->len);
   1901  1.1  christos       ax_label (ax, if2, ax->len);
   1902  1.1  christos       ax_const_l (ax, 1);
   1903  1.1  christos       ax_label (ax, end, ax->len);
   1904  1.1  christos       value->kind = axs_rvalue;
   1905  1.1  christos       value->type = int_type;
   1906  1.1  christos       break;
   1907  1.1  christos 
   1908  1.8  christos     case TERNOP_COND:
   1909  1.1  christos       (*pc)++;
   1910  1.1  christos       gen_expr (exp, pc, ax, &value1);
   1911  1.1  christos       gen_usual_unary (ax, &value1);
   1912  1.8  christos       /* For (A ? B : C), it's easiest to generate subexpression
   1913  1.1  christos 	 bytecodes in order, but if_goto jumps on true, so we invert
   1914  1.9  christos 	 the sense of A.  Then we can do B by dropping through, and
   1915  1.1  christos 	 jump to do C.  */
   1916  1.1  christos       gen_logical_not (ax, &value1, int_type);
   1917  1.1  christos       if1 = ax_goto (ax, aop_if_goto);
   1918  1.1  christos       gen_expr (exp, pc, ax, &value2);
   1919  1.1  christos       gen_usual_unary (ax, &value2);
   1920  1.1  christos       end = ax_goto (ax, aop_goto);
   1921  1.1  christos       ax_label (ax, if1, ax->len);
   1922  1.1  christos       gen_expr (exp, pc, ax, &value3);
   1923  1.1  christos       gen_usual_unary (ax, &value3);
   1924  1.1  christos       ax_label (ax, end, ax->len);
   1925  1.1  christos       /* This is arbitrary - what if B and C are incompatible types? */
   1926  1.1  christos       value->type = value2.type;
   1927  1.1  christos       value->kind = value2.kind;
   1928  1.1  christos       break;
   1929  1.1  christos 
   1930  1.1  christos     case BINOP_ASSIGN:
   1931  1.1  christos       (*pc)++;
   1932  1.1  christos       if ((*pc)[0].opcode == OP_INTERNALVAR)
   1933  1.1  christos 	{
   1934  1.1  christos 	  char *name = internalvar_name ((*pc)[1].internalvar);
   1935  1.1  christos 	  struct trace_state_variable *tsv;
   1936  1.1  christos 
   1937  1.1  christos 	  (*pc) += 3;
   1938  1.1  christos 	  gen_expr (exp, pc, ax, value);
   1939  1.1  christos 	  tsv = find_trace_state_variable (name);
   1940  1.1  christos 	  if (tsv)
   1941  1.1  christos 	    {
   1942  1.1  christos 	      ax_tsv (ax, aop_setv, tsv->number);
   1943  1.1  christos 	      if (ax->tracing)
   1944  1.1  christos 		ax_tsv (ax, aop_tracev, tsv->number);
   1945  1.1  christos 	    }
   1946  1.1  christos 	  else
   1947  1.1  christos 	    error (_("$%s is not a trace state variable, "
   1948  1.1  christos 		     "may not assign to it"), name);
   1949  1.1  christos 	}
   1950  1.1  christos       else
   1951  1.1  christos 	error (_("May only assign to trace state variables"));
   1952  1.1  christos       break;
   1953  1.1  christos 
   1954  1.1  christos     case BINOP_ASSIGN_MODIFY:
   1955  1.1  christos       (*pc)++;
   1956  1.1  christos       op2 = (*pc)[0].opcode;
   1957  1.1  christos       (*pc)++;
   1958  1.1  christos       (*pc)++;
   1959  1.1  christos       if ((*pc)[0].opcode == OP_INTERNALVAR)
   1960  1.1  christos 	{
   1961  1.1  christos 	  char *name = internalvar_name ((*pc)[1].internalvar);
   1962  1.1  christos 	  struct trace_state_variable *tsv;
   1963  1.8  christos 
   1964  1.1  christos 	  (*pc) += 3;
   1965  1.1  christos 	  tsv = find_trace_state_variable (name);
   1966  1.1  christos 	  if (tsv)
   1967  1.1  christos 	    {
   1968  1.1  christos 	      /* The tsv will be the left half of the binary operation.  */
   1969  1.1  christos 	      ax_tsv (ax, aop_getv, tsv->number);
   1970  1.1  christos 	      if (ax->tracing)
   1971  1.1  christos 		ax_tsv (ax, aop_tracev, tsv->number);
   1972  1.1  christos 	      /* Trace state variables are always 64-bit integers.  */
   1973  1.1  christos 	      value1.kind = axs_rvalue;
   1974  1.1  christos 	      value1.type = builtin_type (ax->gdbarch)->builtin_long_long;
   1975  1.1  christos 	      /* Now do right half of expression.  */
   1976  1.1  christos 	      gen_expr_binop_rest (exp, op2, pc, ax, value, &value1, &value2);
   1977  1.1  christos 	      /* We have a result of the binary op, set the tsv.  */
   1978  1.1  christos 	      ax_tsv (ax, aop_setv, tsv->number);
   1979  1.1  christos 	      if (ax->tracing)
   1980  1.1  christos 		ax_tsv (ax, aop_tracev, tsv->number);
   1981  1.1  christos 	    }
   1982  1.1  christos 	  else
   1983  1.1  christos 	    error (_("$%s is not a trace state variable, "
   1984  1.1  christos 		     "may not assign to it"), name);
   1985  1.1  christos 	}
   1986  1.1  christos       else
   1987  1.1  christos 	error (_("May only assign to trace state variables"));
   1988  1.1  christos       break;
   1989  1.1  christos 
   1990  1.1  christos       /* Note that we need to be a little subtle about generating code
   1991  1.8  christos          for comma.  In C, we can do some optimizations here because
   1992  1.1  christos          we know the left operand is only being evaluated for effect.
   1993  1.1  christos          However, if the tracing kludge is in effect, then we always
   1994  1.1  christos          need to evaluate the left hand side fully, so that all the
   1995  1.1  christos          variables it mentions get traced.  */
   1996  1.1  christos     case BINOP_COMMA:
   1997  1.1  christos       (*pc)++;
   1998  1.1  christos       gen_expr (exp, pc, ax, &value1);
   1999  1.1  christos       /* Don't just dispose of the left operand.  We might be tracing,
   2000  1.1  christos          in which case we want to emit code to trace it if it's an
   2001  1.1  christos          lvalue.  */
   2002  1.1  christos       gen_traced_pop (ax, &value1);
   2003  1.1  christos       gen_expr (exp, pc, ax, value);
   2004  1.1  christos       /* It's the consumer's responsibility to trace the right operand.  */
   2005  1.1  christos       break;
   2006  1.1  christos 
   2007  1.8  christos     case OP_LONG:		/* some integer constant */
   2008  1.1  christos       {
   2009  1.1  christos 	struct type *type = (*pc)[1].type;
   2010  1.1  christos 	LONGEST k = (*pc)[2].longconst;
   2011  1.9  christos 
   2012  1.1  christos 	(*pc) += 4;
   2013  1.9  christos 	gen_int_literal (ax, value, k, type);
   2014  1.9  christos       }
   2015  1.8  christos       break;
   2016  1.8  christos 
   2017  1.8  christos     case OP_VAR_VALUE:
   2018  1.8  christos       gen_var_ref (ax, value, (*pc)[2].symbol);
   2019  1.8  christos 
   2020  1.8  christos       if (value->optimized_out)
   2021  1.8  christos 	error (_("`%s' has been optimized out, cannot use"),
   2022  1.9  christos 	       (*pc)[2].symbol->print_name ());
   2023  1.9  christos 
   2024  1.8  christos       if (value->type->code () == TYPE_CODE_ERROR)
   2025  1.1  christos 	error_unknown_type ((*pc)[2].symbol->print_name ());
   2026  1.1  christos 
   2027  1.1  christos       (*pc) += 4;
   2028  1.1  christos       break;
   2029  1.1  christos 
   2030  1.1  christos     case OP_VAR_MSYM_VALUE:
   2031  1.1  christos       gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile);
   2032  1.1  christos 
   2033  1.1  christos       if (value->type->code () == TYPE_CODE_ERROR)
   2034  1.8  christos 	error_unknown_type ((*pc)[2].msymbol->linkage_name ());
   2035  1.1  christos 
   2036  1.1  christos       (*pc) += 4;
   2037  1.1  christos       break;
   2038  1.1  christos 
   2039  1.8  christos     case OP_REGISTER:
   2040  1.1  christos       {
   2041  1.1  christos 	const char *name = &(*pc)[2].string;
   2042  1.1  christos 	int reg;
   2043  1.1  christos 
   2044  1.1  christos 	(*pc) += 4 + BYTES_TO_EXP_ELEM ((*pc)[1].longconst + 1);
   2045  1.8  christos 	reg = user_reg_map_name_to_regnum (ax->gdbarch, name, strlen (name));
   2046  1.1  christos 	if (reg == -1)
   2047  1.1  christos 	  internal_error (__FILE__, __LINE__,
   2048  1.1  christos 			  _("Register $%s not available"), name);
   2049  1.1  christos 	/* No support for tracing user registers yet.  */
   2050  1.1  christos 	if (reg >= gdbarch_num_cooked_regs (ax->gdbarch))
   2051  1.1  christos 	  error (_("'%s' is a user-register; "
   2052  1.1  christos 		   "GDB cannot yet trace user-register contents."),
   2053  1.1  christos 		 name);
   2054  1.1  christos 	value->kind = axs_lvalue_register;
   2055  1.1  christos 	value->u.reg = reg;
   2056  1.1  christos 	value->type = register_type (ax->gdbarch, reg);
   2057  1.1  christos       }
   2058  1.1  christos       break;
   2059  1.1  christos 
   2060  1.1  christos     case OP_INTERNALVAR:
   2061  1.1  christos       {
   2062  1.1  christos 	struct internalvar *var = (*pc)[1].internalvar;
   2063  1.1  christos 	const char *name = internalvar_name (var);
   2064  1.8  christos 	struct trace_state_variable *tsv;
   2065  1.1  christos 
   2066  1.1  christos 	(*pc) += 3;
   2067  1.1  christos 	tsv = find_trace_state_variable (name);
   2068  1.1  christos 	if (tsv)
   2069  1.1  christos 	  {
   2070  1.1  christos 	    ax_tsv (ax, aop_getv, tsv->number);
   2071  1.1  christos 	    if (ax->tracing)
   2072  1.1  christos 	      ax_tsv (ax, aop_tracev, tsv->number);
   2073  1.1  christos 	    /* Trace state variables are always 64-bit integers.  */
   2074  1.1  christos 	    value->kind = axs_rvalue;
   2075  1.1  christos 	    value->type = builtin_type (ax->gdbarch)->builtin_long_long;
   2076  1.1  christos 	  }
   2077  1.1  christos 	else if (! compile_internalvar_to_ax (var, ax, value))
   2078  1.1  christos 	  error (_("$%s is not a trace state variable; GDB agent "
   2079  1.1  christos 		   "expressions cannot use convenience variables."), name);
   2080  1.1  christos       }
   2081  1.1  christos       break;
   2082  1.1  christos 
   2083  1.1  christos       /* Weirdo operator: see comments for gen_repeat for details.  */
   2084  1.8  christos     case BINOP_REPEAT:
   2085  1.1  christos       /* Note that gen_repeat handles its own argument evaluation.  */
   2086  1.1  christos       (*pc)++;
   2087  1.1  christos       gen_repeat (exp, pc, ax, value);
   2088  1.1  christos       break;
   2089  1.1  christos 
   2090  1.1  christos     case UNOP_CAST:
   2091  1.1  christos       {
   2092  1.1  christos 	struct type *type = (*pc)[1].type;
   2093  1.1  christos 
   2094  1.1  christos 	(*pc) += 3;
   2095  1.1  christos 	gen_expr_for_cast (exp, pc, ax, value, type);
   2096  1.1  christos       }
   2097  1.1  christos       break;
   2098  1.1  christos 
   2099  1.8  christos     case UNOP_CAST_TYPE:
   2100  1.1  christos       {
   2101  1.1  christos 	int offset;
   2102  1.1  christos 	struct value *val;
   2103  1.1  christos 	struct type *type;
   2104  1.1  christos 
   2105  1.1  christos 	++*pc;
   2106  1.1  christos 	offset = *pc - exp->elts;
   2107  1.1  christos 	val = evaluate_subexp (NULL, exp, &offset, EVAL_AVOID_SIDE_EFFECTS);
   2108  1.1  christos 	type = value_type (val);
   2109  1.1  christos 	*pc = &exp->elts[offset];
   2110  1.1  christos 	gen_expr_for_cast (exp, pc, ax, value, type);
   2111  1.1  christos       }
   2112  1.1  christos       break;
   2113  1.1  christos 
   2114  1.1  christos     case UNOP_MEMVAL:
   2115  1.1  christos       {
   2116  1.1  christos 	struct type *type = check_typedef ((*pc)[1].type);
   2117  1.1  christos 
   2118  1.1  christos 	(*pc) += 3;
   2119  1.1  christos 	gen_expr (exp, pc, ax, value);
   2120  1.1  christos 
   2121  1.1  christos 	/* If we have an axs_rvalue or an axs_lvalue_memory, then we
   2122  1.1  christos 	   already have the right value on the stack.  For
   2123  1.1  christos 	   axs_lvalue_register, we must convert.  */
   2124  1.1  christos 	if (value->kind == axs_lvalue_register)
   2125  1.1  christos 	  require_rvalue (ax, value);
   2126  1.1  christos 
   2127  1.1  christos 	value->type = type;
   2128  1.1  christos 	value->kind = axs_lvalue_memory;
   2129  1.1  christos       }
   2130  1.1  christos       break;
   2131  1.1  christos 
   2132  1.1  christos     case UNOP_MEMVAL_TYPE:
   2133  1.1  christos       {
   2134  1.1  christos 	int offset;
   2135  1.1  christos 	struct value *val;
   2136  1.1  christos 	struct type *type;
   2137  1.1  christos 
   2138  1.1  christos 	++*pc;
   2139  1.1  christos 	offset = *pc - exp->elts;
   2140  1.1  christos 	val = evaluate_subexp (NULL, exp, &offset, EVAL_AVOID_SIDE_EFFECTS);
   2141  1.1  christos 	type = value_type (val);
   2142  1.1  christos 	*pc = &exp->elts[offset];
   2143  1.1  christos 
   2144  1.1  christos 	gen_expr (exp, pc, ax, value);
   2145  1.1  christos 
   2146  1.1  christos 	/* If we have an axs_rvalue or an axs_lvalue_memory, then we
   2147  1.1  christos 	   already have the right value on the stack.  For
   2148  1.1  christos 	   axs_lvalue_register, we must convert.  */
   2149  1.1  christos 	if (value->kind == axs_lvalue_register)
   2150  1.8  christos 	  require_rvalue (ax, value);
   2151  1.1  christos 
   2152  1.1  christos 	value->type = type;
   2153  1.1  christos 	value->kind = axs_lvalue_memory;
   2154  1.1  christos       }
   2155  1.1  christos       break;
   2156  1.1  christos 
   2157  1.8  christos     case UNOP_PLUS:
   2158  1.8  christos       (*pc)++;
   2159  1.1  christos       /* + FOO is equivalent to 0 + FOO, which can be optimized.  */
   2160  1.8  christos       gen_expr (exp, pc, ax, value);
   2161  1.8  christos       gen_usual_unary (ax, value);
   2162  1.1  christos       break;
   2163  1.1  christos 
   2164  1.1  christos     case UNOP_NEG:
   2165  1.1  christos       (*pc)++;
   2166  1.1  christos       /* -FOO is equivalent to 0 - FOO.  */
   2167  1.1  christos       gen_int_literal (ax, &value1, 0,
   2168  1.8  christos 		       builtin_type (ax->gdbarch)->builtin_int);
   2169  1.1  christos       gen_usual_unary (ax, &value1);	/* shouldn't do much */
   2170  1.1  christos       gen_expr (exp, pc, ax, &value2);
   2171  1.1  christos       gen_usual_unary (ax, &value2);
   2172  1.1  christos       gen_usual_arithmetic (ax, &value1, &value2);
   2173  1.1  christos       gen_binop (ax, value, &value1, &value2, aop_sub, aop_sub, 1, "negation");
   2174  1.1  christos       break;
   2175  1.8  christos 
   2176  1.8  christos     case UNOP_LOGICAL_NOT:
   2177  1.1  christos       (*pc)++;
   2178  1.1  christos       gen_expr (exp, pc, ax, value);
   2179  1.1  christos       gen_usual_unary (ax, value);
   2180  1.1  christos       gen_logical_not (ax, value, int_type);
   2181  1.1  christos       break;
   2182  1.1  christos 
   2183  1.8  christos     case UNOP_COMPLEMENT:
   2184  1.1  christos       (*pc)++;
   2185  1.1  christos       gen_expr (exp, pc, ax, value);
   2186  1.8  christos       gen_usual_unary (ax, value);
   2187  1.1  christos       gen_integral_promotions (ax, value);
   2188  1.1  christos       gen_complement (ax, value);
   2189  1.1  christos       break;
   2190  1.1  christos 
   2191  1.1  christos     case UNOP_IND:
   2192  1.8  christos       (*pc)++;
   2193  1.1  christos       gen_expr (exp, pc, ax, value);
   2194  1.1  christos       gen_usual_unary (ax, value);
   2195  1.1  christos       if (!pointer_type (value->type))
   2196  1.1  christos 	error (_("Argument of unary `*' is not a pointer."));
   2197  1.1  christos       gen_deref (value);
   2198  1.1  christos       break;
   2199  1.1  christos 
   2200  1.1  christos     case UNOP_ADDR:
   2201  1.8  christos       (*pc)++;
   2202  1.1  christos       gen_expr (exp, pc, ax, value);
   2203  1.1  christos       gen_address_of (value);
   2204  1.1  christos       break;
   2205  1.1  christos 
   2206  1.1  christos     case UNOP_SIZEOF:
   2207  1.1  christos       (*pc)++;
   2208  1.1  christos       /* Notice that gen_sizeof handles its own operand, unlike most
   2209  1.1  christos          of the other unary operator functions.  This is because we
   2210  1.1  christos          have to throw away the code we generate.  */
   2211  1.1  christos       gen_sizeof (exp, pc, ax, value,
   2212  1.1  christos 		  builtin_type (ax->gdbarch)->builtin_int);
   2213  1.8  christos       break;
   2214  1.1  christos 
   2215  1.8  christos     case STRUCTOP_STRUCT:
   2216  1.1  christos     case STRUCTOP_PTR:
   2217  1.1  christos       {
   2218  1.1  christos 	int length = (*pc)[1].longconst;
   2219  1.1  christos 	char *name = &(*pc)[2].string;
   2220  1.1  christos 
   2221  1.1  christos 	(*pc) += 4 + BYTES_TO_EXP_ELEM (length + 1);
   2222  1.1  christos 	gen_expr (exp, pc, ax, value);
   2223  1.1  christos 	if (op == STRUCTOP_STRUCT)
   2224  1.1  christos 	  gen_struct_ref (ax, value, name, ".", "structure or union");
   2225  1.1  christos 	else if (op == STRUCTOP_PTR)
   2226  1.1  christos 	  gen_struct_ref (ax, value, name, "->",
   2227  1.1  christos 			  "pointer to a structure or union");
   2228  1.3  christos 	else
   2229  1.1  christos 	  /* If this `if' chain doesn't handle it, then the case list
   2230  1.1  christos 	     shouldn't mention it, and we shouldn't be here.  */
   2231  1.1  christos 	  internal_error (__FILE__, __LINE__,
   2232  1.1  christos 			  _("gen_expr: unhandled struct case"));
   2233  1.9  christos       }
   2234  1.1  christos       break;
   2235  1.6  christos 
   2236  1.1  christos     case OP_THIS:
   2237  1.1  christos       {
   2238  1.1  christos 	struct symbol *sym, *func;
   2239  1.8  christos 	const struct block *b;
   2240  1.1  christos 	const struct language_defn *lang;
   2241  1.1  christos 
   2242  1.1  christos 	b = block_for_pc (ax->scope);
   2243  1.9  christos 	func = block_linkage_function (b);
   2244  1.1  christos 	lang = language_def (func->language ());
   2245  1.1  christos 
   2246  1.1  christos 	sym = lookup_language_this (lang, b).symbol;
   2247  1.1  christos 	if (!sym)
   2248  1.1  christos 	  error (_("no `%s' found"), lang->la_name_of_this);
   2249  1.1  christos 
   2250  1.1  christos 	gen_var_ref (ax, value, sym);
   2251  1.1  christos 
   2252  1.1  christos 	if (value->optimized_out)
   2253  1.1  christos 	  error (_("`%s' has been optimized out, cannot use"),
   2254  1.1  christos 		 sym->print_name ());
   2255  1.1  christos 
   2256  1.8  christos 	(*pc) += 2;
   2257  1.1  christos       }
   2258  1.1  christos       break;
   2259  1.1  christos 
   2260  1.1  christos     case OP_SCOPE:
   2261  1.1  christos       {
   2262  1.1  christos 	struct type *type = (*pc)[1].type;
   2263  1.1  christos 	int length = longest_to_int ((*pc)[2].longconst);
   2264  1.1  christos 	char *name = &(*pc)[3].string;
   2265  1.1  christos 	int found;
   2266  1.1  christos 
   2267  1.1  christos 	found = gen_aggregate_elt_ref (ax, value, type, name);
   2268  1.1  christos 	if (!found)
   2269  1.1  christos 	  error (_("There is no field named %s"), name);
   2270  1.1  christos 	(*pc) += 5 + BYTES_TO_EXP_ELEM (length + 1);
   2271  1.1  christos       }
   2272  1.1  christos       break;
   2273  1.1  christos 
   2274  1.1  christos     case OP_TYPE:
   2275  1.1  christos     case OP_TYPEOF:
   2276  1.1  christos     case OP_DECLTYPE:
   2277  1.1  christos       error (_("Attempt to use a type name as an expression."));
   2278  1.1  christos 
   2279  1.1  christos     default:
   2280  1.1  christos       error (_("Unsupported operator %s (%d) in expression."),
   2281  1.1  christos 	     op_name (exp, op), op);
   2282  1.1  christos     }
   2283  1.1  christos }
   2284  1.8  christos 
   2285  1.1  christos /* This handles the middle-to-right-side of code generation for binary
   2286  1.1  christos    expressions, which is shared between regular binary operations and
   2287  1.8  christos    assign-modify (+= and friends) expressions.  */
   2288  1.8  christos 
   2289  1.1  christos static void
   2290  1.1  christos gen_expr_binop_rest (struct expression *exp,
   2291  1.1  christos 		     enum exp_opcode op, union exp_element **pc,
   2292  1.9  christos 		     struct agent_expr *ax, struct axs_value *value,
   2293  1.1  christos 		     struct axs_value *value1, struct axs_value *value2)
   2294  1.1  christos {
   2295  1.1  christos   struct type *int_type = builtin_type (ax->gdbarch)->builtin_int;
   2296  1.1  christos 
   2297  1.1  christos   gen_expr (exp, pc, ax, value2);
   2298  1.1  christos   gen_usual_unary (ax, value2);
   2299  1.1  christos   gen_usual_arithmetic (ax, value1, value2);
   2300  1.9  christos   switch (op)
   2301  1.1  christos     {
   2302  1.1  christos     case BINOP_ADD:
   2303  1.1  christos       if (value1->type->code () == TYPE_CODE_INT
   2304  1.1  christos 	  && pointer_type (value2->type))
   2305  1.1  christos 	{
   2306  1.1  christos 	  /* Swap the values and proceed normally.  */
   2307  1.1  christos 	  ax_simple (ax, aop_swap);
   2308  1.9  christos 	  gen_ptradd (ax, value, value2, value1);
   2309  1.1  christos 	}
   2310  1.1  christos       else if (pointer_type (value1->type)
   2311  1.1  christos 	       && value2->type->code () == TYPE_CODE_INT)
   2312  1.1  christos 	gen_ptradd (ax, value, value1, value2);
   2313  1.1  christos       else
   2314  1.8  christos 	gen_binop (ax, value, value1, value2,
   2315  1.1  christos 		   aop_add, aop_add, 1, "addition");
   2316  1.1  christos       break;
   2317  1.1  christos     case BINOP_SUB:
   2318  1.1  christos       if (pointer_type (value1->type)
   2319  1.1  christos 	  && value2->type->code () == TYPE_CODE_INT)
   2320  1.1  christos 	gen_ptrsub (ax,value, value1, value2);
   2321  1.1  christos       else if (pointer_type (value1->type)
   2322  1.1  christos 	       && pointer_type (value2->type))
   2323  1.1  christos 	/* FIXME --- result type should be ptrdiff_t */
   2324  1.1  christos 	gen_ptrdiff (ax, value, value1, value2,
   2325  1.1  christos 		     builtin_type (ax->gdbarch)->builtin_long);
   2326  1.1  christos       else
   2327  1.1  christos 	gen_binop (ax, value, value1, value2,
   2328  1.1  christos 		   aop_sub, aop_sub, 1, "subtraction");
   2329  1.1  christos       break;
   2330  1.1  christos     case BINOP_MUL:
   2331  1.1  christos       gen_binop (ax, value, value1, value2,
   2332  1.1  christos 		 aop_mul, aop_mul, 1, "multiplication");
   2333  1.1  christos       break;
   2334  1.1  christos     case BINOP_DIV:
   2335  1.1  christos       gen_binop (ax, value, value1, value2,
   2336  1.1  christos 		 aop_div_signed, aop_div_unsigned, 1, "division");
   2337  1.1  christos       break;
   2338  1.1  christos     case BINOP_REM:
   2339  1.1  christos       gen_binop (ax, value, value1, value2,
   2340  1.1  christos 		 aop_rem_signed, aop_rem_unsigned, 1, "remainder");
   2341  1.1  christos       break;
   2342  1.1  christos     case BINOP_LSH:
   2343  1.1  christos       gen_binop (ax, value, value1, value2,
   2344  1.1  christos 		 aop_lsh, aop_lsh, 1, "left shift");
   2345  1.1  christos       break;
   2346  1.1  christos     case BINOP_RSH:
   2347  1.1  christos       gen_binop (ax, value, value1, value2,
   2348  1.1  christos 		 aop_rsh_signed, aop_rsh_unsigned, 1, "right shift");
   2349  1.1  christos       break;
   2350  1.1  christos     case BINOP_SUBSCRIPT:
   2351  1.1  christos       {
   2352  1.1  christos 	struct type *type;
   2353  1.1  christos 
   2354  1.9  christos 	if (binop_types_user_defined_p (op, value1->type, value2->type))
   2355  1.9  christos 	  {
   2356  1.1  christos 	    error (_("cannot subscript requested type: "
   2357  1.9  christos 		     "cannot call user defined functions"));
   2358  1.1  christos 	  }
   2359  1.9  christos 	else
   2360  1.1  christos 	  {
   2361  1.1  christos 	    /* If the user attempts to subscript something that is not
   2362  1.1  christos 	       an array or pointer type (like a plain int variable for
   2363  1.1  christos 	       example), then report this as an error.  */
   2364  1.1  christos 	    type = check_typedef (value1->type);
   2365  1.1  christos 	    if (type->code () != TYPE_CODE_ARRAY
   2366  1.1  christos 		&& type->code () != TYPE_CODE_PTR)
   2367  1.1  christos 	      {
   2368  1.1  christos 		if (type->name ())
   2369  1.1  christos 		  error (_("cannot subscript something of type `%s'"),
   2370  1.8  christos 			 type->name ());
   2371  1.1  christos 		else
   2372  1.1  christos 		  error (_("cannot subscript requested type"));
   2373  1.1  christos 	      }
   2374  1.1  christos 	  }
   2375  1.1  christos 
   2376  1.1  christos 	if (!is_integral_type (value2->type))
   2377  1.1  christos 	  error (_("Argument to arithmetic operation "
   2378  1.1  christos 		   "not a number or boolean."));
   2379  1.1  christos 
   2380  1.1  christos 	gen_ptradd (ax, value, value1, value2);
   2381  1.1  christos 	gen_deref (value);
   2382  1.1  christos 	break;
   2383  1.1  christos       }
   2384  1.1  christos     case BINOP_BITWISE_AND:
   2385  1.1  christos       gen_binop (ax, value, value1, value2,
   2386  1.1  christos 		 aop_bit_and, aop_bit_and, 0, "bitwise and");
   2387  1.1  christos       break;
   2388  1.1  christos 
   2389  1.1  christos     case BINOP_BITWISE_IOR:
   2390  1.1  christos       gen_binop (ax, value, value1, value2,
   2391  1.1  christos 		 aop_bit_or, aop_bit_or, 0, "bitwise or");
   2392  1.1  christos       break;
   2393  1.1  christos 
   2394  1.1  christos     case BINOP_BITWISE_XOR:
   2395  1.1  christos       gen_binop (ax, value, value1, value2,
   2396  1.1  christos 		 aop_bit_xor, aop_bit_xor, 0, "bitwise exclusive-or");
   2397  1.1  christos       break;
   2398  1.1  christos 
   2399  1.1  christos     case BINOP_EQUAL:
   2400  1.1  christos       gen_equal (ax, value, value1, value2, int_type);
   2401  1.1  christos       break;
   2402  1.1  christos 
   2403  1.1  christos     case BINOP_NOTEQUAL:
   2404  1.1  christos       gen_equal (ax, value, value1, value2, int_type);
   2405  1.1  christos       gen_logical_not (ax, value, int_type);
   2406  1.1  christos       break;
   2407  1.1  christos 
   2408  1.1  christos     case BINOP_LESS:
   2409  1.1  christos       gen_less (ax, value, value1, value2, int_type);
   2410  1.1  christos       break;
   2411  1.1  christos 
   2412  1.1  christos     case BINOP_GTR:
   2413  1.1  christos       ax_simple (ax, aop_swap);
   2414  1.1  christos       gen_less (ax, value, value1, value2, int_type);
   2415  1.1  christos       break;
   2416  1.1  christos 
   2417  1.1  christos     case BINOP_LEQ:
   2418  1.1  christos       ax_simple (ax, aop_swap);
   2419  1.1  christos       gen_less (ax, value, value1, value2, int_type);
   2420  1.1  christos       gen_logical_not (ax, value, int_type);
   2421  1.1  christos       break;
   2422  1.1  christos 
   2423  1.1  christos     case BINOP_GEQ:
   2424  1.1  christos       gen_less (ax, value, value1, value2, int_type);
   2425  1.1  christos       gen_logical_not (ax, value, int_type);
   2426  1.1  christos       break;
   2427  1.1  christos 
   2428  1.1  christos     default:
   2429  1.1  christos       /* We should only list operators in the outer case statement
   2430  1.1  christos 	 that we actually handle in the inner case statement.  */
   2431  1.7  christos       internal_error (__FILE__, __LINE__,
   2432  1.1  christos 		      _("gen_expr: op case sets don't match"));
   2433  1.1  christos     }
   2434  1.1  christos }
   2435  1.7  christos 
   2436  1.1  christos 
   2438  1.1  christos /* Given a single variable and a scope, generate bytecodes to trace
   2439  1.1  christos    its value.  This is for use in situations where we have only a
   2440  1.8  christos    variable's name, and no parsed expression; for instance, when the
   2441  1.1  christos    name comes from a list of local variables of a function.  */
   2442  1.1  christos 
   2443  1.1  christos agent_expr_up
   2444  1.1  christos gen_trace_for_var (CORE_ADDR scope, struct gdbarch *gdbarch,
   2445  1.7  christos 		   struct symbol *var, int trace_string)
   2446  1.1  christos {
   2447  1.1  christos   agent_expr_up ax (new agent_expr (gdbarch, scope));
   2448  1.8  christos   struct axs_value value;
   2449  1.1  christos 
   2450  1.1  christos   ax->tracing = 1;
   2451  1.7  christos   ax->trace_string = trace_string;
   2452  1.1  christos   gen_var_ref (ax.get (), &value, var);
   2453  1.1  christos 
   2454  1.1  christos   /* If there is no actual variable to trace, flag it by returning
   2455  1.1  christos      an empty agent expression.  */
   2456  1.1  christos   if (value.optimized_out)
   2457  1.1  christos     return agent_expr_up ();
   2458  1.1  christos 
   2459  1.1  christos   /* Make sure we record the final object, and get rid of it.  */
   2460  1.1  christos   gen_traced_pop (ax.get (), &value);
   2461  1.1  christos 
   2462  1.1  christos   /* Oh, and terminate.  */
   2463  1.7  christos   ax_simple (ax.get (), aop_end);
   2464  1.7  christos 
   2465  1.1  christos   return ax;
   2466  1.1  christos }
   2467  1.1  christos 
   2468  1.7  christos /* Generating bytecode from GDB expressions: driver */
   2469  1.1  christos 
   2470  1.1  christos /* Given a GDB expression EXPR, return bytecode to trace its value.
   2471  1.1  christos    The result will use the `trace' and `trace_quick' bytecodes to
   2472  1.1  christos    record the value of all memory touched by the expression.  The
   2473  1.1  christos    caller can then use the ax_reqs function to discover which
   2474  1.1  christos    registers it relies upon.  */
   2475  1.1  christos 
   2476  1.7  christos agent_expr_up
   2477  1.1  christos gen_trace_for_expr (CORE_ADDR scope, struct expression *expr,
   2478  1.1  christos 		    int trace_string)
   2479  1.8  christos {
   2480  1.1  christos   agent_expr_up ax (new agent_expr (expr->gdbarch, scope));
   2481  1.1  christos   union exp_element *pc;
   2482  1.7  christos   struct axs_value value;
   2483  1.1  christos 
   2484  1.1  christos   pc = expr->elts;
   2485  1.1  christos   ax->tracing = 1;
   2486  1.1  christos   ax->trace_string = trace_string;
   2487  1.1  christos   value.optimized_out = 0;
   2488  1.1  christos   gen_expr (expr, &pc, ax.get (), &value);
   2489  1.1  christos 
   2490  1.1  christos   /* Make sure we record the final object, and get rid of it.  */
   2491  1.1  christos   gen_traced_pop (ax.get (), &value);
   2492  1.1  christos 
   2493  1.1  christos   /* Oh, and terminate.  */
   2494  1.7  christos   ax_simple (ax.get (), aop_end);
   2495  1.1  christos 
   2496  1.1  christos   return ax;
   2497  1.7  christos }
   2498  1.1  christos 
   2499  1.1  christos /* Given a GDB expression EXPR, return a bytecode sequence that will
   2500  1.1  christos    evaluate and return a result.  The bytecodes will do a direct
   2501  1.1  christos    evaluation, using the current data on the target, rather than
   2502  1.1  christos    recording blocks of memory and registers for later use, as
   2503  1.1  christos    gen_trace_for_expr does.  The generated bytecode sequence leaves
   2504  1.7  christos    the result of expression evaluation on the top of the stack.  */
   2505  1.1  christos 
   2506  1.7  christos agent_expr_up
   2507  1.1  christos gen_eval_for_expr (CORE_ADDR scope, struct expression *expr)
   2508  1.1  christos {
   2509  1.7  christos   agent_expr_up ax (new agent_expr (expr->gdbarch, scope));
   2510  1.1  christos   union exp_element *pc;
   2511  1.1  christos   struct axs_value value;
   2512  1.1  christos 
   2513  1.1  christos   pc = expr->elts;
   2514  1.7  christos   ax->tracing = 0;
   2515  1.1  christos   value.optimized_out = 0;
   2516  1.1  christos   gen_expr (expr, &pc, ax.get (), &value);
   2517  1.1  christos 
   2518  1.7  christos   require_rvalue (ax.get (), &value);
   2519  1.1  christos 
   2520  1.1  christos   /* Oh, and terminate.  */
   2521  1.1  christos   ax_simple (ax.get (), aop_end);
   2522  1.1  christos 
   2523  1.1  christos   return ax;
   2524  1.7  christos }
   2525  1.1  christos 
   2526  1.1  christos agent_expr_up
   2527  1.8  christos gen_trace_for_return_address (CORE_ADDR scope, struct gdbarch *gdbarch,
   2528  1.1  christos 			      int trace_string)
   2529  1.1  christos {
   2530  1.7  christos   agent_expr_up ax (new agent_expr (gdbarch, scope));
   2531  1.1  christos   struct axs_value value;
   2532  1.1  christos 
   2533  1.1  christos   ax->tracing = 1;
   2534  1.1  christos   ax->trace_string = trace_string;
   2535  1.1  christos 
   2536  1.1  christos   gdbarch_gen_return_address (gdbarch, ax.get (), &value, scope);
   2537  1.1  christos 
   2538  1.1  christos   /* Make sure we record the final object, and get rid of it.  */
   2539  1.7  christos   gen_traced_pop (ax.get (), &value);
   2540  1.1  christos 
   2541  1.1  christos   /* Oh, and terminate.  */
   2542  1.1  christos   ax_simple (ax.get (), aop_end);
   2543  1.1  christos 
   2544  1.1  christos   return ax;
   2545  1.7  christos }
   2546  1.1  christos 
   2547  1.1  christos /* Given a collection of printf-style arguments, generate code to
   2548  1.1  christos    evaluate the arguments and pass everything to a special
   2549  1.1  christos    bytecode.  */
   2550  1.1  christos 
   2551  1.1  christos agent_expr_up
   2552  1.1  christos gen_printf (CORE_ADDR scope, struct gdbarch *gdbarch,
   2553  1.1  christos 	    CORE_ADDR function, LONGEST channel,
   2554  1.1  christos 	    const char *format, int fmtlen,
   2555  1.1  christos 	    int nargs, struct expression **exprs)
   2556  1.1  christos {
   2557  1.1  christos   agent_expr_up ax (new agent_expr (gdbarch, scope));
   2558  1.1  christos   union exp_element *pc;
   2559  1.7  christos   struct axs_value value;
   2560  1.7  christos   int tem;
   2561  1.1  christos 
   2562  1.1  christos   /* We're computing values, not doing side effects.  */
   2563  1.1  christos   ax->tracing = 0;
   2564  1.7  christos 
   2565  1.7  christos   /* Evaluate and push the args on the stack in reverse order,
   2566  1.1  christos      for simplicity of collecting them on the target side.  */
   2567  1.1  christos   for (tem = nargs - 1; tem >= 0; --tem)
   2568  1.7  christos     {
   2569  1.7  christos       pc = exprs[tem]->elts;
   2570  1.7  christos       value.optimized_out = 0;
   2571  1.1  christos       gen_expr (exprs[tem], &pc, ax.get (), &value);
   2572  1.1  christos       require_rvalue (ax.get (), &value);
   2573  1.7  christos     }
   2574  1.1  christos 
   2575  1.1  christos   /* Push function and channel.  */
   2576  1.1  christos   ax_const_l (ax.get (), channel);
   2577  1.1  christos   ax_const_l (ax.get (), function);
   2578  1.1  christos 
   2579  1.1  christos   /* Issue the printf bytecode proper.  */
   2580  1.1  christos   ax_simple (ax.get (), aop_printf);
   2581  1.1  christos   ax_raw_byte (ax.get (), nargs);
   2582  1.1  christos   ax_string (ax.get (), format, fmtlen);
   2583  1.1  christos 
   2584  1.1  christos   /* And terminate.  */
   2585  1.1  christos   ax_simple (ax.get (), aop_end);
   2586  1.1  christos 
   2587  1.1  christos   return ax;
   2588  1.1  christos }
   2589  1.1  christos 
   2590  1.7  christos static void
   2591  1.7  christos agent_eval_command_one (const char *exp, int eval, CORE_ADDR pc)
   2592  1.1  christos {
   2593  1.1  christos   const char *arg;
   2594  1.1  christos   int trace_string = 0;
   2595  1.1  christos 
   2596  1.1  christos   if (!eval)
   2597  1.1  christos     {
   2598  1.1  christos       if (*exp == '/')
   2599  1.1  christos         exp = decode_agent_options (exp, &trace_string);
   2600  1.7  christos     }
   2601  1.7  christos 
   2602  1.1  christos   agent_expr_up agent;
   2603  1.1  christos 
   2604  1.1  christos   arg = exp;
   2605  1.7  christos   if (!eval && strcmp (arg, "$_ret") == 0)
   2606  1.1  christos     {
   2607  1.1  christos       agent = gen_trace_for_return_address (pc, get_current_arch (),
   2608  1.7  christos 					    trace_string);
   2609  1.1  christos     }
   2610  1.1  christos   else
   2611  1.7  christos     {
   2612  1.7  christos       expression_up expr = parse_exp_1 (&arg, pc, block_for_pc (pc), 0);
   2613  1.1  christos 
   2614  1.1  christos       if (eval)
   2615  1.1  christos 	{
   2616  1.1  christos 	  gdb_assert (trace_string == 0);
   2617  1.1  christos 	  agent = gen_eval_for_expr (pc, expr.get ());
   2618  1.1  christos 	}
   2619  1.1  christos       else
   2620  1.1  christos 	agent = gen_trace_for_expr (pc, expr.get (), trace_string);
   2621  1.8  christos     }
   2622  1.1  christos 
   2623  1.1  christos   ax_reqs (agent.get ());
   2624  1.1  christos   ax_print (gdb_stdout, agent.get ());
   2625  1.1  christos 
   2626  1.1  christos   /* It would be nice to call ax_reqs here to gather some general info
   2627  1.1  christos      about the expression, and then print out the result.  */
   2628  1.1  christos 
   2629  1.1  christos   dont_repeat ();
   2630  1.1  christos }
   2631  1.1  christos 
   2632  1.1  christos static void
   2633  1.1  christos agent_command_1 (const char *exp, int eval)
   2634  1.1  christos {
   2635  1.1  christos   /* We don't deal with overlay debugging at the moment.  We need to
   2636  1.1  christos      think more carefully about this.  If you copy this code into
   2637  1.8  christos      another command, change the error message; the user shouldn't
   2638  1.8  christos      have to know anything about agent expressions.  */
   2639  1.7  christos   if (overlay_debugging)
   2640  1.9  christos     error (_("GDB can't do agent expression translation with overlays."));
   2641  1.1  christos 
   2642  1.1  christos   if (exp == 0)
   2643  1.1  christos     error_no_arg (_("expression to translate"));
   2644  1.1  christos 
   2645  1.1  christos   if (check_for_argument (&exp, "-at", sizeof ("-at") - 1))
   2646  1.1  christos     {
   2647  1.1  christos       struct linespec_result canonical;
   2648  1.8  christos 
   2649  1.8  christos       event_location_up location
   2650  1.8  christos 	= new_linespec_location (&exp, symbol_name_match_type::WILD);
   2651  1.1  christos       decode_line_full (location.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
   2652  1.1  christos 			NULL, 0, &canonical,
   2653  1.1  christos 			NULL, NULL);
   2654  1.1  christos       exp = skip_spaces (exp);
   2655  1.1  christos       if (exp[0] == ',')
   2656  1.1  christos         {
   2657  1.1  christos 	  exp++;
   2658  1.1  christos 	  exp = skip_spaces (exp);
   2659  1.8  christos 	}
   2660  1.1  christos       for (const auto &lsal : canonical.lsals)
   2661  1.1  christos 	for (const auto &sal : lsal.sals)
   2662  1.1  christos 	  agent_eval_command_one (exp, eval, sal.pc);
   2663  1.1  christos     }
   2664  1.1  christos   else
   2665  1.1  christos     agent_eval_command_one (exp, eval, get_frame_pc (get_current_frame ()));
   2666  1.1  christos 
   2667  1.1  christos   dont_repeat ();
   2668  1.1  christos }
   2669  1.8  christos 
   2670  1.1  christos static void
   2671  1.1  christos agent_command (const char *exp, int from_tty)
   2672  1.1  christos {
   2673  1.1  christos   agent_command_1 (exp, 0);
   2674  1.1  christos }
   2675  1.1  christos 
   2676  1.1  christos /* Parse the given expression, compile it into an agent expression
   2677  1.1  christos    that does direct evaluation, and display the resulting
   2678  1.8  christos    expression.  */
   2679  1.1  christos 
   2680  1.1  christos static void
   2681  1.1  christos agent_eval_command (const char *exp, int from_tty)
   2682  1.1  christos {
   2683  1.1  christos   agent_command_1 (exp, 1);
   2684  1.1  christos }
   2685  1.1  christos 
   2686  1.1  christos /* Parse the given expression, compile it into an agent expression
   2687  1.1  christos    that does a printf, and display the resulting expression.  */
   2688  1.1  christos 
   2689  1.1  christos static void
   2690  1.8  christos maint_agent_printf_command (const char *cmdrest, int from_tty)
   2691  1.1  christos {
   2692  1.1  christos   struct frame_info *fi = get_current_frame ();	/* need current scope */
   2693  1.8  christos   const char *format_start, *format_end;
   2694  1.1  christos 
   2695  1.1  christos   /* We don't deal with overlay debugging at the moment.  We need to
   2696  1.1  christos      think more carefully about this.  If you copy this code into
   2697  1.1  christos      another command, change the error message; the user shouldn't
   2698  1.1  christos      have to know anything about agent expressions.  */
   2699  1.1  christos   if (overlay_debugging)
   2700  1.8  christos     error (_("GDB can't do agent expression translation with overlays."));
   2701  1.1  christos 
   2702  1.1  christos   if (cmdrest == 0)
   2703  1.1  christos     error_no_arg (_("expression to translate"));
   2704  1.1  christos 
   2705  1.1  christos   cmdrest = skip_spaces (cmdrest);
   2706  1.1  christos 
   2707  1.8  christos   if (*cmdrest++ != '"')
   2708  1.1  christos     error (_("Must start with a format string."));
   2709  1.1  christos 
   2710  1.1  christos   format_start = cmdrest;
   2711  1.1  christos 
   2712  1.1  christos   format_pieces fpieces (&cmdrest);
   2713  1.1  christos 
   2714  1.8  christos   format_end = cmdrest;
   2715  1.1  christos 
   2716  1.8  christos   if (*cmdrest++ != '"')
   2717  1.1  christos     error (_("Bad format string, non-terminated '\"'."));
   2718  1.1  christos 
   2719  1.1  christos   cmdrest = skip_spaces (cmdrest);
   2720  1.1  christos 
   2721  1.1  christos   if (*cmdrest != ',' && *cmdrest != 0)
   2722  1.7  christos     error (_("Invalid argument syntax"));
   2723  1.8  christos 
   2724  1.1  christos   if (*cmdrest == ',')
   2725  1.1  christos     cmdrest++;
   2726  1.1  christos   cmdrest = skip_spaces (cmdrest);
   2727  1.1  christos 
   2728  1.1  christos   std::vector<struct expression *> argvec;
   2729  1.1  christos   while (*cmdrest != '\0')
   2730  1.1  christos     {
   2731  1.7  christos       const char *cmd1;
   2732  1.7  christos 
   2733  1.7  christos       cmd1 = cmdrest;
   2734  1.8  christos       expression_up expr = parse_exp_1 (&cmd1, 0, (struct block *) 0, 1);
   2735  1.7  christos       argvec.push_back (expr.release ());
   2736  1.7  christos       cmdrest = cmd1;
   2737  1.1  christos       if (*cmdrest == ',')
   2738  1.1  christos 	++cmdrest;
   2739  1.1  christos       /* else complain? */
   2740  1.1  christos     }
   2741  1.1  christos 
   2742  1.1  christos 
   2743  1.1  christos   agent_expr_up agent = gen_printf (get_frame_pc (fi), get_current_arch (),
   2744  1.1  christos 				    0, 0,
   2745  1.1  christos 				    format_start, format_end - format_start,
   2746  1.9  christos 				    argvec.size (), argvec.data ());
   2747  1.1  christos   ax_reqs (agent.get ());
   2748  1.9  christos   ax_print (gdb_stdout, agent.get ());
   2749  1.1  christos 
   2750  1.1  christos   /* It would be nice to call ax_reqs here to gather some general info
   2751  1.1  christos      about the expression, and then print out the result.  */
   2752  1.1  christos 
   2753  1.8  christos   dont_repeat ();
   2754  1.1  christos }
   2755  1.1  christos 
   2756  1.1  christos /* Initialization code.  */
   2757  1.1  christos 
   2758  1.1  christos void _initialize_ax_gdb ();
   2759  1.1  christos void
   2760  1.1  christos _initialize_ax_gdb ()
   2761  1.8  christos {
   2762  1.1  christos   add_cmd ("agent", class_maintenance, agent_command,
   2763  1.1  christos 	   _("\
   2764  1.1  christos Translate an expression into remote agent bytecode for tracing.\n\
   2765  1.1  christos Usage: maint agent [-at LOCATION,] EXPRESSION\n\
   2766  1.1  christos If -at is given, generate remote agent bytecode for this location.\n\
   2767  1.1  christos If not, generate remote agent bytecode for current frame pc address."),
   2768  1.1  christos 	   &maintenancelist);
   2769  1.1  christos 
   2770  1.1  christos   add_cmd ("agent-eval", class_maintenance, agent_eval_command,
   2771                	   _("\
   2772                Translate an expression into remote agent bytecode for evaluation.\n\
   2773                Usage: maint agent-eval [-at LOCATION,] EXPRESSION\n\
   2774                If -at is given, generate remote agent bytecode for this location.\n\
   2775                If not, generate remote agent bytecode for current frame pc address."),
   2776                	   &maintenancelist);
   2777                
   2778                  add_cmd ("agent-printf", class_maintenance, maint_agent_printf_command,
   2779                	   _("Translate an expression into remote "
   2780                	     "agent bytecode for evaluation and display the bytecodes."),
   2781                	   &maintenancelist);
   2782                }
   2783