OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [ax-gdb.c] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* GDB-specific functions for operating on agent expressions
2
   Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3
 
4
   This file is part of GDB.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 59 Temple Place - Suite 330,
19
   Boston, MA 02111-1307, USA.  */
20
 
21
#include "defs.h"
22
#include "symtab.h"
23
#include "symfile.h"
24
#include "gdbtypes.h"
25
#include "value.h"
26
#include "expression.h"
27
#include "command.h"
28
#include "gdbcmd.h"
29
#include "frame.h"
30
#include "target.h"
31
#include "ax.h"
32
#include "ax-gdb.h"
33
#include "gdb_string.h"
34
 
35
/* To make sense of this file, you should read doc/agentexpr.texi.
36
   Then look at the types and enums in ax-gdb.h.  For the code itself,
37
   look at gen_expr, towards the bottom; that's the main function that
38
   looks at the GDB expressions and calls everything else to generate
39
   code.
40
 
41
   I'm beginning to wonder whether it wouldn't be nicer to internally
42
   generate trees, with types, and then spit out the bytecode in
43
   linear form afterwards; we could generate fewer `swap', `ext', and
44
   `zero_ext' bytecodes that way; it would make good constant folding
45
   easier, too.  But at the moment, I think we should be willing to
46
   pay for the simplicity of this code with less-than-optimal bytecode
47
   strings.
48
 
49
   Remember, "GBD" stands for "Great Britain, Dammit!"  So be careful.  */
50
 
51
 
52
 
53
/* Prototypes for local functions. */
54
 
55
/* There's a standard order to the arguments of these functions:
56
   union exp_element ** --- pointer into expression
57
   struct agent_expr * --- agent expression buffer to generate code into
58
   struct axs_value * --- describes value left on top of stack  */
59
 
60
static struct value *const_var_ref (struct symbol *var);
61
static struct value *const_expr (union exp_element **pc);
62
static struct value *maybe_const_expr (union exp_element **pc);
63
 
64
static void gen_traced_pop (struct agent_expr *, struct axs_value *);
65
 
66
static void gen_sign_extend (struct agent_expr *, struct type *);
67
static void gen_extend (struct agent_expr *, struct type *);
68
static void gen_fetch (struct agent_expr *, struct type *);
69
static void gen_left_shift (struct agent_expr *, int);
70
 
71
 
72
static void gen_frame_args_address (struct agent_expr *);
73
static void gen_frame_locals_address (struct agent_expr *);
74
static void gen_offset (struct agent_expr *ax, int offset);
75
static void gen_sym_offset (struct agent_expr *, struct symbol *);
76
static void gen_var_ref (struct agent_expr *ax,
77
                         struct axs_value *value, struct symbol *var);
78
 
79
 
80
static void gen_int_literal (struct agent_expr *ax,
81
                             struct axs_value *value,
82
                             LONGEST k, struct type *type);
83
 
84
 
85
static void require_rvalue (struct agent_expr *ax, struct axs_value *value);
86
static void gen_usual_unary (struct agent_expr *ax, struct axs_value *value);
87
static int type_wider_than (struct type *type1, struct type *type2);
88
static struct type *max_type (struct type *type1, struct type *type2);
89
static void gen_conversion (struct agent_expr *ax,
90
                            struct type *from, struct type *to);
91
static int is_nontrivial_conversion (struct type *from, struct type *to);
92
static void gen_usual_arithmetic (struct agent_expr *ax,
93
                                  struct axs_value *value1,
94
                                  struct axs_value *value2);
95
static void gen_integral_promotions (struct agent_expr *ax,
96
                                     struct axs_value *value);
97
static void gen_cast (struct agent_expr *ax,
98
                      struct axs_value *value, struct type *type);
99
static void gen_scale (struct agent_expr *ax,
100
                       enum agent_op op, struct type *type);
101
static void gen_add (struct agent_expr *ax,
102
                     struct axs_value *value,
103
                     struct axs_value *value1,
104
                     struct axs_value *value2, char *name);
105
static void gen_sub (struct agent_expr *ax,
106
                     struct axs_value *value,
107
                     struct axs_value *value1, struct axs_value *value2);
108
static void gen_binop (struct agent_expr *ax,
109
                       struct axs_value *value,
110
                       struct axs_value *value1,
111
                       struct axs_value *value2,
112
                       enum agent_op op,
113
                       enum agent_op op_unsigned, int may_carry, char *name);
114
static void gen_logical_not (struct agent_expr *ax, struct axs_value *value);
115
static void gen_complement (struct agent_expr *ax, struct axs_value *value);
116
static void gen_deref (struct agent_expr *, struct axs_value *);
117
static void gen_address_of (struct agent_expr *, struct axs_value *);
118
static int find_field (struct type *type, char *name);
119
static void gen_bitfield_ref (struct agent_expr *ax,
120
                              struct axs_value *value,
121
                              struct type *type, int start, int end);
122
static void gen_struct_ref (struct agent_expr *ax,
123
                            struct axs_value *value,
124
                            char *field,
125
                            char *operator_name, char *operand_name);
126
static void gen_repeat (union exp_element **pc,
127
                        struct agent_expr *ax, struct axs_value *value);
128
static void gen_sizeof (union exp_element **pc,
129
                        struct agent_expr *ax, struct axs_value *value);
130
static void gen_expr (union exp_element **pc,
131
                      struct agent_expr *ax, struct axs_value *value);
132
 
133
static void print_axs_value (struct ui_file *f, struct axs_value * value);
134
static void agent_command (char *exp, int from_tty);
135
 
136
 
137
/* Detecting constant expressions.  */
138
 
139
/* If the variable reference at *PC is a constant, return its value.
140
   Otherwise, return zero.
141
 
142
   Hey, Wally!  How can a variable reference be a constant?
143
 
144
   Well, Beav, this function really handles the OP_VAR_VALUE operator,
145
   not specifically variable references.  GDB uses OP_VAR_VALUE to
146
   refer to any kind of symbolic reference: function names, enum
147
   elements, and goto labels are all handled through the OP_VAR_VALUE
148
   operator, even though they're constants.  It makes sense given the
149
   situation.
150
 
151
   Gee, Wally, don'cha wonder sometimes if data representations that
152
   subvert commonly accepted definitions of terms in favor of heavily
153
   context-specific interpretations are really just a tool of the
154
   programming hegemony to preserve their power and exclude the
155
   proletariat?  */
156
 
157
static struct value *
158
const_var_ref (struct symbol *var)
159
{
160
  struct type *type = SYMBOL_TYPE (var);
161
 
162
  switch (SYMBOL_CLASS (var))
163
    {
164
    case LOC_CONST:
165
      return value_from_longest (type, (LONGEST) SYMBOL_VALUE (var));
166
 
167
    case LOC_LABEL:
168
      return value_from_pointer (type, (CORE_ADDR) SYMBOL_VALUE_ADDRESS (var));
169
 
170
    default:
171
      return 0;
172
    }
173
}
174
 
175
 
176
/* If the expression starting at *PC has a constant value, return it.
177
   Otherwise, return zero.  If we return a value, then *PC will be
178
   advanced to the end of it.  If we return zero, *PC could be
179
   anywhere.  */
180
static struct value *
181
const_expr (union exp_element **pc)
182
{
183
  enum exp_opcode op = (*pc)->opcode;
184
  struct value *v1;
185
 
186
  switch (op)
187
    {
188
    case OP_LONG:
189
      {
190
        struct type *type = (*pc)[1].type;
191
        LONGEST k = (*pc)[2].longconst;
192
        (*pc) += 4;
193
        return value_from_longest (type, k);
194
      }
195
 
196
    case OP_VAR_VALUE:
197
      {
198
        struct value *v = const_var_ref ((*pc)[2].symbol);
199
        (*pc) += 4;
200
        return v;
201
      }
202
 
203
      /* We could add more operators in here.  */
204
 
205
    case UNOP_NEG:
206
      (*pc)++;
207
      v1 = const_expr (pc);
208
      if (v1)
209
        return value_neg (v1);
210
      else
211
        return 0;
212
 
213
    default:
214
      return 0;
215
    }
216
}
217
 
218
 
219
/* Like const_expr, but guarantee also that *PC is undisturbed if the
220
   expression is not constant.  */
221
static struct value *
222
maybe_const_expr (union exp_element **pc)
223
{
224
  union exp_element *tentative_pc = *pc;
225
  struct value *v = const_expr (&tentative_pc);
226
 
227
  /* If we got a value, then update the real PC.  */
228
  if (v)
229
    *pc = tentative_pc;
230
 
231
  return v;
232
}
233
 
234
 
235
/* Generating bytecode from GDB expressions: general assumptions */
236
 
237
/* Here are a few general assumptions made throughout the code; if you
238
   want to make a change that contradicts one of these, then you'd
239
   better scan things pretty thoroughly.
240
 
241
   - We assume that all values occupy one stack element.  For example,
242
   sometimes we'll swap to get at the left argument to a binary
243
   operator.  If we decide that void values should occupy no stack
244
   elements, or that synthetic arrays (whose size is determined at
245
   run time, created by the `@' operator) should occupy two stack
246
   elements (address and length), then this will cause trouble.
247
 
248
   - We assume the stack elements are infinitely wide, and that we
249
   don't have to worry what happens if the user requests an
250
   operation that is wider than the actual interpreter's stack.
251
   That is, it's up to the interpreter to handle directly all the
252
   integer widths the user has access to.  (Woe betide the language
253
   with bignums!)
254
 
255
   - We don't support side effects.  Thus, we don't have to worry about
256
   GCC's generalized lvalues, function calls, etc.
257
 
258
   - We don't support floating point.  Many places where we switch on
259
   some type don't bother to include cases for floating point; there
260
   may be even more subtle ways this assumption exists.  For
261
   example, the arguments to % must be integers.
262
 
263
   - We assume all subexpressions have a static, unchanging type.  If
264
   we tried to support convenience variables, this would be a
265
   problem.
266
 
267
   - All values on the stack should always be fully zero- or
268
   sign-extended.
269
 
270
   (I wasn't sure whether to choose this or its opposite --- that
271
   only addresses are assumed extended --- but it turns out that
272
   neither convention completely eliminates spurious extend
273
   operations (if everything is always extended, then you have to
274
   extend after add, because it could overflow; if nothing is
275
   extended, then you end up producing extends whenever you change
276
   sizes), and this is simpler.)  */
277
 
278
 
279
/* Generating bytecode from GDB expressions: the `trace' kludge  */
280
 
281
/* The compiler in this file is a general-purpose mechanism for
282
   translating GDB expressions into bytecode.  One ought to be able to
283
   find a million and one uses for it.
284
 
285
   However, at the moment it is HOPELESSLY BRAIN-DAMAGED for the sake
286
   of expediency.  Let he who is without sin cast the first stone.
287
 
288
   For the data tracing facility, we need to insert `trace' bytecodes
289
   before each data fetch; this records all the memory that the
290
   expression touches in the course of evaluation, so that memory will
291
   be available when the user later tries to evaluate the expression
292
   in GDB.
293
 
294
   This should be done (I think) in a post-processing pass, that walks
295
   an arbitrary agent expression and inserts `trace' operations at the
296
   appropriate points.  But it's much faster to just hack them
297
   directly into the code.  And since we're in a crunch, that's what
298
   I've done.
299
 
300
   Setting the flag trace_kludge to non-zero enables the code that
301
   emits the trace bytecodes at the appropriate points.  */
302
static int trace_kludge;
303
 
304
/* Trace the lvalue on the stack, if it needs it.  In either case, pop
305
   the value.  Useful on the left side of a comma, and at the end of
306
   an expression being used for tracing.  */
307
static void
308
gen_traced_pop (struct agent_expr *ax, struct axs_value *value)
309
{
310
  if (trace_kludge)
311
    switch (value->kind)
312
      {
313
      case axs_rvalue:
314
        /* We don't trace rvalues, just the lvalues necessary to
315
           produce them.  So just dispose of this value.  */
316
        ax_simple (ax, aop_pop);
317
        break;
318
 
319
      case axs_lvalue_memory:
320
        {
321
          int length = TYPE_LENGTH (value->type);
322
 
323
          /* There's no point in trying to use a trace_quick bytecode
324
             here, since "trace_quick SIZE pop" is three bytes, whereas
325
             "const8 SIZE trace" is also three bytes, does the same
326
             thing, and the simplest code which generates that will also
327
             work correctly for objects with large sizes.  */
328
          ax_const_l (ax, length);
329
          ax_simple (ax, aop_trace);
330
        }
331
        break;
332
 
333
      case axs_lvalue_register:
334
        /* We need to mention the register somewhere in the bytecode,
335
           so ax_reqs will pick it up and add it to the mask of
336
           registers used.  */
337
        ax_reg (ax, value->u.reg);
338
        ax_simple (ax, aop_pop);
339
        break;
340
      }
341
  else
342
    /* If we're not tracing, just pop the value.  */
343
    ax_simple (ax, aop_pop);
344
}
345
 
346
 
347
 
348
/* Generating bytecode from GDB expressions: helper functions */
349
 
350
/* Assume that the lower bits of the top of the stack is a value of
351
   type TYPE, and the upper bits are zero.  Sign-extend if necessary.  */
352
static void
353
gen_sign_extend (struct agent_expr *ax, struct type *type)
354
{
355
  /* Do we need to sign-extend this?  */
356
  if (!TYPE_UNSIGNED (type))
357
    ax_ext (ax, TYPE_LENGTH (type) * TARGET_CHAR_BIT);
358
}
359
 
360
 
361
/* Assume the lower bits of the top of the stack hold a value of type
362
   TYPE, and the upper bits are garbage.  Sign-extend or truncate as
363
   needed.  */
364
static void
365
gen_extend (struct agent_expr *ax, struct type *type)
366
{
367
  int bits = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
368
  /* I just had to.  */
369
  ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, bits));
370
}
371
 
372
 
373
/* Assume that the top of the stack contains a value of type "pointer
374
   to TYPE"; generate code to fetch its value.  Note that TYPE is the
375
   target type, not the pointer type.  */
376
static void
377
gen_fetch (struct agent_expr *ax, struct type *type)
378
{
379
  if (trace_kludge)
380
    {
381
      /* Record the area of memory we're about to fetch.  */
382
      ax_trace_quick (ax, TYPE_LENGTH (type));
383
    }
384
 
385
  switch (TYPE_CODE (type))
386
    {
387
    case TYPE_CODE_PTR:
388
    case TYPE_CODE_ENUM:
389
    case TYPE_CODE_INT:
390
    case TYPE_CODE_CHAR:
391
      /* It's a scalar value, so we know how to dereference it.  How
392
         many bytes long is it?  */
393
      switch (TYPE_LENGTH (type))
394
        {
395
        case 8 / TARGET_CHAR_BIT:
396
          ax_simple (ax, aop_ref8);
397
          break;
398
        case 16 / TARGET_CHAR_BIT:
399
          ax_simple (ax, aop_ref16);
400
          break;
401
        case 32 / TARGET_CHAR_BIT:
402
          ax_simple (ax, aop_ref32);
403
          break;
404
        case 64 / TARGET_CHAR_BIT:
405
          ax_simple (ax, aop_ref64);
406
          break;
407
 
408
          /* Either our caller shouldn't have asked us to dereference
409
             that pointer (other code's fault), or we're not
410
             implementing something we should be (this code's fault).
411
             In any case, it's a bug the user shouldn't see.  */
412
        default:
413
          internal_error (__FILE__, __LINE__,
414
                          "gen_fetch: strange size");
415
        }
416
 
417
      gen_sign_extend (ax, type);
418
      break;
419
 
420
    default:
421
      /* Either our caller shouldn't have asked us to dereference that
422
         pointer (other code's fault), or we're not implementing
423
         something we should be (this code's fault).  In any case,
424
         it's a bug the user shouldn't see.  */
425
      internal_error (__FILE__, __LINE__,
426
                      "gen_fetch: bad type code");
427
    }
428
}
429
 
430
 
431
/* Generate code to left shift the top of the stack by DISTANCE bits, or
432
   right shift it by -DISTANCE bits if DISTANCE < 0.  This generates
433
   unsigned (logical) right shifts.  */
434
static void
435
gen_left_shift (struct agent_expr *ax, int distance)
436
{
437
  if (distance > 0)
438
    {
439
      ax_const_l (ax, distance);
440
      ax_simple (ax, aop_lsh);
441
    }
442
  else if (distance < 0)
443
    {
444
      ax_const_l (ax, -distance);
445
      ax_simple (ax, aop_rsh_unsigned);
446
    }
447
}
448
 
449
 
450
 
451
/* Generating bytecode from GDB expressions: symbol references */
452
 
453
/* Generate code to push the base address of the argument portion of
454
   the top stack frame.  */
455
static void
456
gen_frame_args_address (struct agent_expr *ax)
457
{
458
  int frame_reg;
459
  LONGEST frame_offset;
460
 
461
  TARGET_VIRTUAL_FRAME_POINTER (ax->scope, &frame_reg, &frame_offset);
462
  ax_reg (ax, frame_reg);
463
  gen_offset (ax, frame_offset);
464
}
465
 
466
 
467
/* Generate code to push the base address of the locals portion of the
468
   top stack frame.  */
469
static void
470
gen_frame_locals_address (struct agent_expr *ax)
471
{
472
  int frame_reg;
473
  LONGEST frame_offset;
474
 
475
  TARGET_VIRTUAL_FRAME_POINTER (ax->scope, &frame_reg, &frame_offset);
476
  ax_reg (ax, frame_reg);
477
  gen_offset (ax, frame_offset);
478
}
479
 
480
 
481
/* Generate code to add OFFSET to the top of the stack.  Try to
482
   generate short and readable code.  We use this for getting to
483
   variables on the stack, and structure members.  If we were
484
   programming in ML, it would be clearer why these are the same
485
   thing.  */
486
static void
487
gen_offset (struct agent_expr *ax, int offset)
488
{
489
  /* It would suffice to simply push the offset and add it, but this
490
     makes it easier to read positive and negative offsets in the
491
     bytecode.  */
492
  if (offset > 0)
493
    {
494
      ax_const_l (ax, offset);
495
      ax_simple (ax, aop_add);
496
    }
497
  else if (offset < 0)
498
    {
499
      ax_const_l (ax, -offset);
500
      ax_simple (ax, aop_sub);
501
    }
502
}
503
 
504
 
505
/* In many cases, a symbol's value is the offset from some other
506
   address (stack frame, base register, etc.)  Generate code to add
507
   VAR's value to the top of the stack.  */
508
static void
509
gen_sym_offset (struct agent_expr *ax, struct symbol *var)
510
{
511
  gen_offset (ax, SYMBOL_VALUE (var));
512
}
513
 
514
 
515
/* Generate code for a variable reference to AX.  The variable is the
516
   symbol VAR.  Set VALUE to describe the result.  */
517
 
518
static void
519
gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
520
{
521
  /* Dereference any typedefs. */
522
  value->type = check_typedef (SYMBOL_TYPE (var));
523
 
524
  /* I'm imitating the code in read_var_value.  */
525
  switch (SYMBOL_CLASS (var))
526
    {
527
    case LOC_CONST:             /* A constant, like an enum value.  */
528
      ax_const_l (ax, (LONGEST) SYMBOL_VALUE (var));
529
      value->kind = axs_rvalue;
530
      break;
531
 
532
    case LOC_LABEL:             /* A goto label, being used as a value.  */
533
      ax_const_l (ax, (LONGEST) SYMBOL_VALUE_ADDRESS (var));
534
      value->kind = axs_rvalue;
535
      break;
536
 
537
    case LOC_CONST_BYTES:
538
      internal_error (__FILE__, __LINE__,
539
                      "gen_var_ref: LOC_CONST_BYTES symbols are not supported");
540
 
541
      /* Variable at a fixed location in memory.  Easy.  */
542
    case LOC_STATIC:
543
      /* Push the address of the variable.  */
544
      ax_const_l (ax, SYMBOL_VALUE_ADDRESS (var));
545
      value->kind = axs_lvalue_memory;
546
      break;
547
 
548
    case LOC_ARG:               /* var lives in argument area of frame */
549
      gen_frame_args_address (ax);
550
      gen_sym_offset (ax, var);
551
      value->kind = axs_lvalue_memory;
552
      break;
553
 
554
    case LOC_REF_ARG:           /* As above, but the frame slot really
555
                                   holds the address of the variable.  */
556
      gen_frame_args_address (ax);
557
      gen_sym_offset (ax, var);
558
      /* Don't assume any particular pointer size.  */
559
      gen_fetch (ax, lookup_pointer_type (builtin_type_void));
560
      value->kind = axs_lvalue_memory;
561
      break;
562
 
563
    case LOC_LOCAL:             /* var lives in locals area of frame */
564
    case LOC_LOCAL_ARG:
565
      gen_frame_locals_address (ax);
566
      gen_sym_offset (ax, var);
567
      value->kind = axs_lvalue_memory;
568
      break;
569
 
570
    case LOC_BASEREG:           /* relative to some base register */
571
    case LOC_BASEREG_ARG:
572
      ax_reg (ax, SYMBOL_BASEREG (var));
573
      gen_sym_offset (ax, var);
574
      value->kind = axs_lvalue_memory;
575
      break;
576
 
577
    case LOC_TYPEDEF:
578
      error ("Cannot compute value of typedef `%s'.",
579
             SYMBOL_SOURCE_NAME (var));
580
      break;
581
 
582
    case LOC_BLOCK:
583
      ax_const_l (ax, BLOCK_START (SYMBOL_BLOCK_VALUE (var)));
584
      value->kind = axs_rvalue;
585
      break;
586
 
587
    case LOC_REGISTER:
588
    case LOC_REGPARM:
589
      /* Don't generate any code at all; in the process of treating
590
         this as an lvalue or rvalue, the caller will generate the
591
         right code.  */
592
      value->kind = axs_lvalue_register;
593
      value->u.reg = SYMBOL_VALUE (var);
594
      break;
595
 
596
      /* A lot like LOC_REF_ARG, but the pointer lives directly in a
597
         register, not on the stack.  Simpler than LOC_REGISTER and
598
         LOC_REGPARM, because it's just like any other case where the
599
         thing has a real address.  */
600
    case LOC_REGPARM_ADDR:
601
      ax_reg (ax, SYMBOL_VALUE (var));
602
      value->kind = axs_lvalue_memory;
603
      break;
604
 
605
    case LOC_UNRESOLVED:
606
      {
607
        struct minimal_symbol *msym
608
        = lookup_minimal_symbol (SYMBOL_NAME (var), NULL, NULL);
609
        if (!msym)
610
          error ("Couldn't resolve symbol `%s'.", SYMBOL_SOURCE_NAME (var));
611
 
612
        /* Push the address of the variable.  */
613
        ax_const_l (ax, SYMBOL_VALUE_ADDRESS (msym));
614
        value->kind = axs_lvalue_memory;
615
      }
616
      break;
617
 
618
    case LOC_OPTIMIZED_OUT:
619
      error ("The variable `%s' has been optimized out.",
620
             SYMBOL_SOURCE_NAME (var));
621
      break;
622
 
623
    default:
624
      error ("Cannot find value of botched symbol `%s'.",
625
             SYMBOL_SOURCE_NAME (var));
626
      break;
627
    }
628
}
629
 
630
 
631
 
632
/* Generating bytecode from GDB expressions: literals */
633
 
634
static void
635
gen_int_literal (struct agent_expr *ax, struct axs_value *value, LONGEST k,
636
                 struct type *type)
637
{
638
  ax_const_l (ax, k);
639
  value->kind = axs_rvalue;
640
  value->type = type;
641
}
642
 
643
 
644
 
645
/* Generating bytecode from GDB expressions: unary conversions, casts */
646
 
647
/* Take what's on the top of the stack (as described by VALUE), and
648
   try to make an rvalue out of it.  Signal an error if we can't do
649
   that.  */
650
static void
651
require_rvalue (struct agent_expr *ax, struct axs_value *value)
652
{
653
  switch (value->kind)
654
    {
655
    case axs_rvalue:
656
      /* It's already an rvalue.  */
657
      break;
658
 
659
    case axs_lvalue_memory:
660
      /* The top of stack is the address of the object.  Dereference.  */
661
      gen_fetch (ax, value->type);
662
      break;
663
 
664
    case axs_lvalue_register:
665
      /* There's nothing on the stack, but value->u.reg is the
666
         register number containing the value.
667
 
668
         When we add floating-point support, this is going to have to
669
         change.  What about SPARC register pairs, for example?  */
670
      ax_reg (ax, value->u.reg);
671
      gen_extend (ax, value->type);
672
      break;
673
    }
674
 
675
  value->kind = axs_rvalue;
676
}
677
 
678
 
679
/* Assume the top of the stack is described by VALUE, and perform the
680
   usual unary conversions.  This is motivated by ANSI 6.2.2, but of
681
   course GDB expressions are not ANSI; they're the mishmash union of
682
   a bunch of languages.  Rah.
683
 
684
   NOTE!  This function promises to produce an rvalue only when the
685
   incoming value is of an appropriate type.  In other words, the
686
   consumer of the value this function produces may assume the value
687
   is an rvalue only after checking its type.
688
 
689
   The immediate issue is that if the user tries to use a structure or
690
   union as an operand of, say, the `+' operator, we don't want to try
691
   to convert that structure to an rvalue; require_rvalue will bomb on
692
   structs and unions.  Rather, we want to simply pass the struct
693
   lvalue through unchanged, and let `+' raise an error.  */
694
 
695
static void
696
gen_usual_unary (struct agent_expr *ax, struct axs_value *value)
697
{
698
  /* We don't have to generate any code for the usual integral
699
     conversions, since values are always represented as full-width on
700
     the stack.  Should we tweak the type?  */
701
 
702
  /* Some types require special handling.  */
703
  switch (TYPE_CODE (value->type))
704
    {
705
      /* Functions get converted to a pointer to the function.  */
706
    case TYPE_CODE_FUNC:
707
      value->type = lookup_pointer_type (value->type);
708
      value->kind = axs_rvalue; /* Should always be true, but just in case.  */
709
      break;
710
 
711
      /* Arrays get converted to a pointer to their first element, and
712
         are no longer an lvalue.  */
713
    case TYPE_CODE_ARRAY:
714
      {
715
        struct type *elements = TYPE_TARGET_TYPE (value->type);
716
        value->type = lookup_pointer_type (elements);
717
        value->kind = axs_rvalue;
718
        /* We don't need to generate any code; the address of the array
719
           is also the address of its first element.  */
720
      }
721
      break;
722
 
723
      /* Don't try to convert structures and unions to rvalues.  Let the
724
         consumer signal an error.  */
725
    case TYPE_CODE_STRUCT:
726
    case TYPE_CODE_UNION:
727
      return;
728
 
729
      /* If the value is an enum, call it an integer.  */
730
    case TYPE_CODE_ENUM:
731
      value->type = builtin_type_int;
732
      break;
733
    }
734
 
735
  /* If the value is an lvalue, dereference it.  */
736
  require_rvalue (ax, value);
737
}
738
 
739
 
740
/* Return non-zero iff the type TYPE1 is considered "wider" than the
741
   type TYPE2, according to the rules described in gen_usual_arithmetic.  */
742
static int
743
type_wider_than (struct type *type1, struct type *type2)
744
{
745
  return (TYPE_LENGTH (type1) > TYPE_LENGTH (type2)
746
          || (TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
747
              && TYPE_UNSIGNED (type1)
748
              && !TYPE_UNSIGNED (type2)));
749
}
750
 
751
 
752
/* Return the "wider" of the two types TYPE1 and TYPE2.  */
753
static struct type *
754
max_type (struct type *type1, struct type *type2)
755
{
756
  return type_wider_than (type1, type2) ? type1 : type2;
757
}
758
 
759
 
760
/* Generate code to convert a scalar value of type FROM to type TO.  */
761
static void
762
gen_conversion (struct agent_expr *ax, struct type *from, struct type *to)
763
{
764
  /* Perhaps there is a more graceful way to state these rules.  */
765
 
766
  /* If we're converting to a narrower type, then we need to clear out
767
     the upper bits.  */
768
  if (TYPE_LENGTH (to) < TYPE_LENGTH (from))
769
    gen_extend (ax, from);
770
 
771
  /* If the two values have equal width, but different signednesses,
772
     then we need to extend.  */
773
  else if (TYPE_LENGTH (to) == TYPE_LENGTH (from))
774
    {
775
      if (TYPE_UNSIGNED (from) != TYPE_UNSIGNED (to))
776
        gen_extend (ax, to);
777
    }
778
 
779
  /* If we're converting to a wider type, and becoming unsigned, then
780
     we need to zero out any possible sign bits.  */
781
  else if (TYPE_LENGTH (to) > TYPE_LENGTH (from))
782
    {
783
      if (TYPE_UNSIGNED (to))
784
        gen_extend (ax, to);
785
    }
786
}
787
 
788
 
789
/* Return non-zero iff the type FROM will require any bytecodes to be
790
   emitted to be converted to the type TO.  */
791
static int
792
is_nontrivial_conversion (struct type *from, struct type *to)
793
{
794
  struct agent_expr *ax = new_agent_expr (0);
795
  int nontrivial;
796
 
797
  /* Actually generate the code, and see if anything came out.  At the
798
     moment, it would be trivial to replicate the code in
799
     gen_conversion here, but in the future, when we're supporting
800
     floating point and the like, it may not be.  Doing things this
801
     way allows this function to be independent of the logic in
802
     gen_conversion.  */
803
  gen_conversion (ax, from, to);
804
  nontrivial = ax->len > 0;
805
  free_agent_expr (ax);
806
  return nontrivial;
807
}
808
 
809
 
810
/* Generate code to perform the "usual arithmetic conversions" (ANSI C
811
   6.2.1.5) for the two operands of an arithmetic operator.  This
812
   effectively finds a "least upper bound" type for the two arguments,
813
   and promotes each argument to that type.  *VALUE1 and *VALUE2
814
   describe the values as they are passed in, and as they are left.  */
815
static void
816
gen_usual_arithmetic (struct agent_expr *ax, struct axs_value *value1,
817
                      struct axs_value *value2)
818
{
819
  /* Do the usual binary conversions.  */
820
  if (TYPE_CODE (value1->type) == TYPE_CODE_INT
821
      && TYPE_CODE (value2->type) == TYPE_CODE_INT)
822
    {
823
      /* The ANSI integral promotions seem to work this way: Order the
824
         integer types by size, and then by signedness: an n-bit
825
         unsigned type is considered "wider" than an n-bit signed
826
         type.  Promote to the "wider" of the two types, and always
827
         promote at least to int.  */
828
      struct type *target = max_type (builtin_type_int,
829
                                      max_type (value1->type, value2->type));
830
 
831
      /* Deal with value2, on the top of the stack.  */
832
      gen_conversion (ax, value2->type, target);
833
 
834
      /* Deal with value1, not on the top of the stack.  Don't
835
         generate the `swap' instructions if we're not actually going
836
         to do anything.  */
837
      if (is_nontrivial_conversion (value1->type, target))
838
        {
839
          ax_simple (ax, aop_swap);
840
          gen_conversion (ax, value1->type, target);
841
          ax_simple (ax, aop_swap);
842
        }
843
 
844
      value1->type = value2->type = target;
845
    }
846
}
847
 
848
 
849
/* Generate code to perform the integral promotions (ANSI 6.2.1.1) on
850
   the value on the top of the stack, as described by VALUE.  Assume
851
   the value has integral type.  */
852
static void
853
gen_integral_promotions (struct agent_expr *ax, struct axs_value *value)
854
{
855
  if (!type_wider_than (value->type, builtin_type_int))
856
    {
857
      gen_conversion (ax, value->type, builtin_type_int);
858
      value->type = builtin_type_int;
859
    }
860
  else if (!type_wider_than (value->type, builtin_type_unsigned_int))
861
    {
862
      gen_conversion (ax, value->type, builtin_type_unsigned_int);
863
      value->type = builtin_type_unsigned_int;
864
    }
865
}
866
 
867
 
868
/* Generate code for a cast to TYPE.  */
869
static void
870
gen_cast (struct agent_expr *ax, struct axs_value *value, struct type *type)
871
{
872
  /* GCC does allow casts to yield lvalues, so this should be fixed
873
     before merging these changes into the trunk.  */
874
  require_rvalue (ax, value);
875
  /* Dereference typedefs. */
876
  type = check_typedef (type);
877
 
878
  switch (TYPE_CODE (type))
879
    {
880
    case TYPE_CODE_PTR:
881
      /* It's implementation-defined, and I'll bet this is what GCC
882
         does.  */
883
      break;
884
 
885
    case TYPE_CODE_ARRAY:
886
    case TYPE_CODE_STRUCT:
887
    case TYPE_CODE_UNION:
888
    case TYPE_CODE_FUNC:
889
      error ("Illegal type cast: intended type must be scalar.");
890
 
891
    case TYPE_CODE_ENUM:
892
      /* We don't have to worry about the size of the value, because
893
         all our integral values are fully sign-extended, and when
894
         casting pointers we can do anything we like.  Is there any
895
         way for us to actually know what GCC actually does with a
896
         cast like this?  */
897
      value->type = type;
898
      break;
899
 
900
    case TYPE_CODE_INT:
901
      gen_conversion (ax, value->type, type);
902
      break;
903
 
904
    case TYPE_CODE_VOID:
905
      /* We could pop the value, and rely on everyone else to check
906
         the type and notice that this value doesn't occupy a stack
907
         slot.  But for now, leave the value on the stack, and
908
         preserve the "value == stack element" assumption.  */
909
      break;
910
 
911
    default:
912
      error ("Casts to requested type are not yet implemented.");
913
    }
914
 
915
  value->type = type;
916
}
917
 
918
 
919
 
920
/* Generating bytecode from GDB expressions: arithmetic */
921
 
922
/* Scale the integer on the top of the stack by the size of the target
923
   of the pointer type TYPE.  */
924
static void
925
gen_scale (struct agent_expr *ax, enum agent_op op, struct type *type)
926
{
927
  struct type *element = TYPE_TARGET_TYPE (type);
928
 
929
  if (TYPE_LENGTH (element) != 1)
930
    {
931
      ax_const_l (ax, TYPE_LENGTH (element));
932
      ax_simple (ax, op);
933
    }
934
}
935
 
936
 
937
/* Generate code for an addition; non-trivial because we deal with
938
   pointer arithmetic.  We set VALUE to describe the result value; we
939
   assume VALUE1 and VALUE2 describe the two operands, and that
940
   they've undergone the usual binary conversions.  Used by both
941
   BINOP_ADD and BINOP_SUBSCRIPT.  NAME is used in error messages.  */
942
static void
943
gen_add (struct agent_expr *ax, struct axs_value *value,
944
         struct axs_value *value1, struct axs_value *value2, char *name)
945
{
946
  /* Is it INT+PTR?  */
947
  if (TYPE_CODE (value1->type) == TYPE_CODE_INT
948
      && TYPE_CODE (value2->type) == TYPE_CODE_PTR)
949
    {
950
      /* Swap the values and proceed normally.  */
951
      ax_simple (ax, aop_swap);
952
      gen_scale (ax, aop_mul, value2->type);
953
      ax_simple (ax, aop_add);
954
      gen_extend (ax, value2->type);    /* Catch overflow.  */
955
      value->type = value2->type;
956
    }
957
 
958
  /* Is it PTR+INT?  */
959
  else if (TYPE_CODE (value1->type) == TYPE_CODE_PTR
960
           && TYPE_CODE (value2->type) == TYPE_CODE_INT)
961
    {
962
      gen_scale (ax, aop_mul, value1->type);
963
      ax_simple (ax, aop_add);
964
      gen_extend (ax, value1->type);    /* Catch overflow.  */
965
      value->type = value1->type;
966
    }
967
 
968
  /* Must be number + number; the usual binary conversions will have
969
     brought them both to the same width.  */
970
  else if (TYPE_CODE (value1->type) == TYPE_CODE_INT
971
           && TYPE_CODE (value2->type) == TYPE_CODE_INT)
972
    {
973
      ax_simple (ax, aop_add);
974
      gen_extend (ax, value1->type);    /* Catch overflow.  */
975
      value->type = value1->type;
976
    }
977
 
978
  else
979
    error ("Illegal combination of types in %s.", name);
980
 
981
  value->kind = axs_rvalue;
982
}
983
 
984
 
985
/* Generate code for an addition; non-trivial because we have to deal
986
   with pointer arithmetic.  We set VALUE to describe the result
987
   value; we assume VALUE1 and VALUE2 describe the two operands, and
988
   that they've undergone the usual binary conversions.  */
989
static void
990
gen_sub (struct agent_expr *ax, struct axs_value *value,
991
         struct axs_value *value1, struct axs_value *value2)
992
{
993
  if (TYPE_CODE (value1->type) == TYPE_CODE_PTR)
994
    {
995
      /* Is it PTR - INT?  */
996
      if (TYPE_CODE (value2->type) == TYPE_CODE_INT)
997
        {
998
          gen_scale (ax, aop_mul, value1->type);
999
          ax_simple (ax, aop_sub);
1000
          gen_extend (ax, value1->type);        /* Catch overflow.  */
1001
          value->type = value1->type;
1002
        }
1003
 
1004
      /* Is it PTR - PTR?  Strictly speaking, the types ought to
1005
         match, but this is what the normal GDB expression evaluator
1006
         tests for.  */
1007
      else if (TYPE_CODE (value2->type) == TYPE_CODE_PTR
1008
               && (TYPE_LENGTH (TYPE_TARGET_TYPE (value1->type))
1009
                   == TYPE_LENGTH (TYPE_TARGET_TYPE (value2->type))))
1010
        {
1011
          ax_simple (ax, aop_sub);
1012
          gen_scale (ax, aop_div_unsigned, value1->type);
1013
          value->type = builtin_type_long;      /* FIXME --- should be ptrdiff_t */
1014
        }
1015
      else
1016
        error ("\
1017
First argument of `-' is a pointer, but second argument is neither\n\
1018
an integer nor a pointer of the same type.");
1019
    }
1020
 
1021
  /* Must be number + number.  */
1022
  else if (TYPE_CODE (value1->type) == TYPE_CODE_INT
1023
           && TYPE_CODE (value2->type) == TYPE_CODE_INT)
1024
    {
1025
      ax_simple (ax, aop_sub);
1026
      gen_extend (ax, value1->type);    /* Catch overflow.  */
1027
      value->type = value1->type;
1028
    }
1029
 
1030
  else
1031
    error ("Illegal combination of types in subtraction.");
1032
 
1033
  value->kind = axs_rvalue;
1034
}
1035
 
1036
/* Generate code for a binary operator that doesn't do pointer magic.
1037
   We set VALUE to describe the result value; we assume VALUE1 and
1038
   VALUE2 describe the two operands, and that they've undergone the
1039
   usual binary conversions.  MAY_CARRY should be non-zero iff the
1040
   result needs to be extended.  NAME is the English name of the
1041
   operator, used in error messages */
1042
static void
1043
gen_binop (struct agent_expr *ax, struct axs_value *value,
1044
           struct axs_value *value1, struct axs_value *value2, enum agent_op op,
1045
           enum agent_op op_unsigned, int may_carry, char *name)
1046
{
1047
  /* We only handle INT op INT.  */
1048
  if ((TYPE_CODE (value1->type) != TYPE_CODE_INT)
1049
      || (TYPE_CODE (value2->type) != TYPE_CODE_INT))
1050
    error ("Illegal combination of types in %s.", name);
1051
 
1052
  ax_simple (ax,
1053
             TYPE_UNSIGNED (value1->type) ? op_unsigned : op);
1054
  if (may_carry)
1055
    gen_extend (ax, value1->type);      /* catch overflow */
1056
  value->type = value1->type;
1057
  value->kind = axs_rvalue;
1058
}
1059
 
1060
 
1061
static void
1062
gen_logical_not (struct agent_expr *ax, struct axs_value *value)
1063
{
1064
  if (TYPE_CODE (value->type) != TYPE_CODE_INT
1065
      && TYPE_CODE (value->type) != TYPE_CODE_PTR)
1066
    error ("Illegal type of operand to `!'.");
1067
 
1068
  gen_usual_unary (ax, value);
1069
  ax_simple (ax, aop_log_not);
1070
  value->type = builtin_type_int;
1071
}
1072
 
1073
 
1074
static void
1075
gen_complement (struct agent_expr *ax, struct axs_value *value)
1076
{
1077
  if (TYPE_CODE (value->type) != TYPE_CODE_INT)
1078
    error ("Illegal type of operand to `~'.");
1079
 
1080
  gen_usual_unary (ax, value);
1081
  gen_integral_promotions (ax, value);
1082
  ax_simple (ax, aop_bit_not);
1083
  gen_extend (ax, value->type);
1084
}
1085
 
1086
 
1087
 
1088
/* Generating bytecode from GDB expressions: * & . -> @ sizeof */
1089
 
1090
/* Dereference the value on the top of the stack.  */
1091
static void
1092
gen_deref (struct agent_expr *ax, struct axs_value *value)
1093
{
1094
  /* The caller should check the type, because several operators use
1095
     this, and we don't know what error message to generate.  */
1096
  if (TYPE_CODE (value->type) != TYPE_CODE_PTR)
1097
    internal_error (__FILE__, __LINE__,
1098
                    "gen_deref: expected a pointer");
1099
 
1100
  /* We've got an rvalue now, which is a pointer.  We want to yield an
1101
     lvalue, whose address is exactly that pointer.  So we don't
1102
     actually emit any code; we just change the type from "Pointer to
1103
     T" to "T", and mark the value as an lvalue in memory.  Leave it
1104
     to the consumer to actually dereference it.  */
1105
  value->type = check_typedef (TYPE_TARGET_TYPE (value->type));
1106
  value->kind = ((TYPE_CODE (value->type) == TYPE_CODE_FUNC)
1107
                 ? axs_rvalue : axs_lvalue_memory);
1108
}
1109
 
1110
 
1111
/* Produce the address of the lvalue on the top of the stack.  */
1112
static void
1113
gen_address_of (struct agent_expr *ax, struct axs_value *value)
1114
{
1115
  /* Special case for taking the address of a function.  The ANSI
1116
     standard describes this as a special case, too, so this
1117
     arrangement is not without motivation.  */
1118
  if (TYPE_CODE (value->type) == TYPE_CODE_FUNC)
1119
    /* The value's already an rvalue on the stack, so we just need to
1120
       change the type.  */
1121
    value->type = lookup_pointer_type (value->type);
1122
  else
1123
    switch (value->kind)
1124
      {
1125
      case axs_rvalue:
1126
        error ("Operand of `&' is an rvalue, which has no address.");
1127
 
1128
      case axs_lvalue_register:
1129
        error ("Operand of `&' is in a register, and has no address.");
1130
 
1131
      case axs_lvalue_memory:
1132
        value->kind = axs_rvalue;
1133
        value->type = lookup_pointer_type (value->type);
1134
        break;
1135
      }
1136
}
1137
 
1138
 
1139
/* A lot of this stuff will have to change to support C++.  But we're
1140
   not going to deal with that at the moment.  */
1141
 
1142
/* Find the field in the structure type TYPE named NAME, and return
1143
   its index in TYPE's field array.  */
1144
static int
1145
find_field (struct type *type, char *name)
1146
{
1147
  int i;
1148
 
1149
  CHECK_TYPEDEF (type);
1150
 
1151
  /* Make sure this isn't C++.  */
1152
  if (TYPE_N_BASECLASSES (type) != 0)
1153
    internal_error (__FILE__, __LINE__,
1154
                    "find_field: derived classes supported");
1155
 
1156
  for (i = 0; i < TYPE_NFIELDS (type); i++)
1157
    {
1158
      char *this_name = TYPE_FIELD_NAME (type, i);
1159
 
1160
      if (this_name && STREQ (name, this_name))
1161
        return i;
1162
 
1163
      if (this_name[0] == '\0')
1164
        internal_error (__FILE__, __LINE__,
1165
                        "find_field: anonymous unions not supported");
1166
    }
1167
 
1168
  error ("Couldn't find member named `%s' in struct/union `%s'",
1169
         name, TYPE_TAG_NAME (type));
1170
 
1171
  return 0;
1172
}
1173
 
1174
 
1175
/* Generate code to push the value of a bitfield of a structure whose
1176
   address is on the top of the stack.  START and END give the
1177
   starting and one-past-ending *bit* numbers of the field within the
1178
   structure.  */
1179
static void
1180
gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
1181
                  struct type *type, int start, int end)
1182
{
1183
  /* Note that ops[i] fetches 8 << i bits.  */
1184
  static enum agent_op ops[]
1185
  =
1186
  {aop_ref8, aop_ref16, aop_ref32, aop_ref64};
1187
  static int num_ops = (sizeof (ops) / sizeof (ops[0]));
1188
 
1189
  /* We don't want to touch any byte that the bitfield doesn't
1190
     actually occupy; we shouldn't make any accesses we're not
1191
     explicitly permitted to.  We rely here on the fact that the
1192
     bytecode `ref' operators work on unaligned addresses.
1193
 
1194
     It takes some fancy footwork to get the stack to work the way
1195
     we'd like.  Say we're retrieving a bitfield that requires three
1196
     fetches.  Initially, the stack just contains the address:
1197
     addr
1198
     For the first fetch, we duplicate the address
1199
     addr addr
1200
     then add the byte offset, do the fetch, and shift and mask as
1201
     needed, yielding a fragment of the value, properly aligned for
1202
     the final bitwise or:
1203
     addr frag1
1204
     then we swap, and repeat the process:
1205
     frag1 addr                    --- address on top
1206
     frag1 addr addr               --- duplicate it
1207
     frag1 addr frag2              --- get second fragment
1208
     frag1 frag2 addr              --- swap again
1209
     frag1 frag2 frag3             --- get third fragment
1210
     Notice that, since the third fragment is the last one, we don't
1211
     bother duplicating the address this time.  Now we have all the
1212
     fragments on the stack, and we can simply `or' them together,
1213
     yielding the final value of the bitfield.  */
1214
 
1215
  /* The first and one-after-last bits in the field, but rounded down
1216
     and up to byte boundaries.  */
1217
  int bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT;
1218
  int bound_end = (((end + TARGET_CHAR_BIT - 1)
1219
                    / TARGET_CHAR_BIT)
1220
                   * TARGET_CHAR_BIT);
1221
 
1222
  /* current bit offset within the structure */
1223
  int offset;
1224
 
1225
  /* The index in ops of the opcode we're considering.  */
1226
  int op;
1227
 
1228
  /* The number of fragments we generated in the process.  Probably
1229
     equal to the number of `one' bits in bytesize, but who cares?  */
1230
  int fragment_count;
1231
 
1232
  /* Dereference any typedefs. */
1233
  type = check_typedef (type);
1234
 
1235
  /* Can we fetch the number of bits requested at all?  */
1236
  if ((end - start) > ((1 << num_ops) * 8))
1237
    internal_error (__FILE__, __LINE__,
1238
                    "gen_bitfield_ref: bitfield too wide");
1239
 
1240
  /* Note that we know here that we only need to try each opcode once.
1241
     That may not be true on machines with weird byte sizes.  */
1242
  offset = bound_start;
1243
  fragment_count = 0;
1244
  for (op = num_ops - 1; op >= 0; op--)
1245
    {
1246
      /* number of bits that ops[op] would fetch */
1247
      int op_size = 8 << op;
1248
 
1249
      /* The stack at this point, from bottom to top, contains zero or
1250
         more fragments, then the address.  */
1251
 
1252
      /* Does this fetch fit within the bitfield?  */
1253
      if (offset + op_size <= bound_end)
1254
        {
1255
          /* Is this the last fragment?  */
1256
          int last_frag = (offset + op_size == bound_end);
1257
 
1258
          if (!last_frag)
1259
            ax_simple (ax, aop_dup);    /* keep a copy of the address */
1260
 
1261
          /* Add the offset.  */
1262
          gen_offset (ax, offset / TARGET_CHAR_BIT);
1263
 
1264
          if (trace_kludge)
1265
            {
1266
              /* Record the area of memory we're about to fetch.  */
1267
              ax_trace_quick (ax, op_size / TARGET_CHAR_BIT);
1268
            }
1269
 
1270
          /* Perform the fetch.  */
1271
          ax_simple (ax, ops[op]);
1272
 
1273
          /* Shift the bits we have to their proper position.
1274
             gen_left_shift will generate right shifts when the operand
1275
             is negative.
1276
 
1277
             A big-endian field diagram to ponder:
1278
             byte 0  byte 1  byte 2  byte 3  byte 4  byte 5  byte 6  byte 7
1279
             +------++------++------++------++------++------++------++------+
1280
             xxxxAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCxxxxxxxxxxx
1281
             ^               ^               ^    ^
1282
             bit number      16              32              48   53
1283
             These are bit numbers as supplied by GDB.  Note that the
1284
             bit numbers run from right to left once you've fetched the
1285
             value!
1286
 
1287
             A little-endian field diagram to ponder:
1288
             byte 7  byte 6  byte 5  byte 4  byte 3  byte 2  byte 1  byte 0
1289
             +------++------++------++------++------++------++------++------+
1290
             xxxxxxxxxxxAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCxxxx
1291
             ^               ^               ^           ^   ^
1292
             bit number     48              32              16          4   0
1293
 
1294
             In both cases, the most significant end is on the left
1295
             (i.e. normal numeric writing order), which means that you
1296
             don't go crazy thinking about `left' and `right' shifts.
1297
 
1298
             We don't have to worry about masking yet:
1299
             - If they contain garbage off the least significant end, then we
1300
             must be looking at the low end of the field, and the right
1301
             shift will wipe them out.
1302
             - If they contain garbage off the most significant end, then we
1303
             must be looking at the most significant end of the word, and
1304
             the sign/zero extension will wipe them out.
1305
             - If we're in the interior of the word, then there is no garbage
1306
             on either end, because the ref operators zero-extend.  */
1307
          if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1308
            gen_left_shift (ax, end - (offset + op_size));
1309
          else
1310
            gen_left_shift (ax, offset - start);
1311
 
1312
          if (!last_frag)
1313
            /* Bring the copy of the address up to the top.  */
1314
            ax_simple (ax, aop_swap);
1315
 
1316
          offset += op_size;
1317
          fragment_count++;
1318
        }
1319
    }
1320
 
1321
  /* Generate enough bitwise `or' operations to combine all the
1322
     fragments we left on the stack.  */
1323
  while (fragment_count-- > 1)
1324
    ax_simple (ax, aop_bit_or);
1325
 
1326
  /* Sign- or zero-extend the value as appropriate.  */
1327
  ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, end - start));
1328
 
1329
  /* This is *not* an lvalue.  Ugh.  */
1330
  value->kind = axs_rvalue;
1331
  value->type = type;
1332
}
1333
 
1334
 
1335
/* Generate code to reference the member named FIELD of a structure or
1336
   union.  The top of the stack, as described by VALUE, should have
1337
   type (pointer to a)* struct/union.  OPERATOR_NAME is the name of
1338
   the operator being compiled, and OPERAND_NAME is the kind of thing
1339
   it operates on; we use them in error messages.  */
1340
static void
1341
gen_struct_ref (struct agent_expr *ax, struct axs_value *value, char *field,
1342
                char *operator_name, char *operand_name)
1343
{
1344
  struct type *type;
1345
  int i;
1346
 
1347
  /* Follow pointers until we reach a non-pointer.  These aren't the C
1348
     semantics, but they're what the normal GDB evaluator does, so we
1349
     should at least be consistent.  */
1350
  while (TYPE_CODE (value->type) == TYPE_CODE_PTR)
1351
    {
1352
      gen_usual_unary (ax, value);
1353
      gen_deref (ax, value);
1354
    }
1355
  type = check_typedef (value->type);
1356
 
1357
  /* This must yield a structure or a union.  */
1358
  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
1359
      && TYPE_CODE (type) != TYPE_CODE_UNION)
1360
    error ("The left operand of `%s' is not a %s.",
1361
           operator_name, operand_name);
1362
 
1363
  /* And it must be in memory; we don't deal with structure rvalues,
1364
     or structures living in registers.  */
1365
  if (value->kind != axs_lvalue_memory)
1366
    error ("Structure does not live in memory.");
1367
 
1368
  i = find_field (type, field);
1369
 
1370
  /* Is this a bitfield?  */
1371
  if (TYPE_FIELD_PACKED (type, i))
1372
    gen_bitfield_ref (ax, value, TYPE_FIELD_TYPE (type, i),
1373
                      TYPE_FIELD_BITPOS (type, i),
1374
                      (TYPE_FIELD_BITPOS (type, i)
1375
                       + TYPE_FIELD_BITSIZE (type, i)));
1376
  else
1377
    {
1378
      gen_offset (ax, TYPE_FIELD_BITPOS (type, i) / TARGET_CHAR_BIT);
1379
      value->kind = axs_lvalue_memory;
1380
      value->type = TYPE_FIELD_TYPE (type, i);
1381
    }
1382
}
1383
 
1384
 
1385
/* Generate code for GDB's magical `repeat' operator.
1386
   LVALUE @ INT creates an array INT elements long, and whose elements
1387
   have the same type as LVALUE, located in memory so that LVALUE is
1388
   its first element.  For example, argv[0]@argc gives you the array
1389
   of command-line arguments.
1390
 
1391
   Unfortunately, because we have to know the types before we actually
1392
   have a value for the expression, we can't implement this perfectly
1393
   without changing the type system, having values that occupy two
1394
   stack slots, doing weird things with sizeof, etc.  So we require
1395
   the right operand to be a constant expression.  */
1396
static void
1397
gen_repeat (union exp_element **pc, struct agent_expr *ax,
1398
            struct axs_value *value)
1399
{
1400
  struct axs_value value1;
1401
  /* We don't want to turn this into an rvalue, so no conversions
1402
     here.  */
1403
  gen_expr (pc, ax, &value1);
1404
  if (value1.kind != axs_lvalue_memory)
1405
    error ("Left operand of `@' must be an object in memory.");
1406
 
1407
  /* Evaluate the length; it had better be a constant.  */
1408
  {
1409
    struct value *v = const_expr (pc);
1410
    int length;
1411
 
1412
    if (!v)
1413
      error ("Right operand of `@' must be a constant, in agent expressions.");
1414
    if (TYPE_CODE (v->type) != TYPE_CODE_INT)
1415
      error ("Right operand of `@' must be an integer.");
1416
    length = value_as_long (v);
1417
    if (length <= 0)
1418
      error ("Right operand of `@' must be positive.");
1419
 
1420
    /* The top of the stack is already the address of the object, so
1421
       all we need to do is frob the type of the lvalue.  */
1422
    {
1423
      /* FIXME-type-allocation: need a way to free this type when we are
1424
         done with it.  */
1425
      struct type *range
1426
      = create_range_type (0, builtin_type_int, 0, length - 1);
1427
      struct type *array = create_array_type (0, value1.type, range);
1428
 
1429
      value->kind = axs_lvalue_memory;
1430
      value->type = array;
1431
    }
1432
  }
1433
}
1434
 
1435
 
1436
/* Emit code for the `sizeof' operator.
1437
   *PC should point at the start of the operand expression; we advance it
1438
   to the first instruction after the operand.  */
1439
static void
1440
gen_sizeof (union exp_element **pc, struct agent_expr *ax,
1441
            struct axs_value *value)
1442
{
1443
  /* We don't care about the value of the operand expression; we only
1444
     care about its type.  However, in the current arrangement, the
1445
     only way to find an expression's type is to generate code for it.
1446
     So we generate code for the operand, and then throw it away,
1447
     replacing it with code that simply pushes its size.  */
1448
  int start = ax->len;
1449
  gen_expr (pc, ax, value);
1450
 
1451
  /* Throw away the code we just generated.  */
1452
  ax->len = start;
1453
 
1454
  ax_const_l (ax, TYPE_LENGTH (value->type));
1455
  value->kind = axs_rvalue;
1456
  value->type = builtin_type_int;
1457
}
1458
 
1459
 
1460
/* Generating bytecode from GDB expressions: general recursive thingy  */
1461
 
1462
/* A gen_expr function written by a Gen-X'er guy.
1463
   Append code for the subexpression of EXPR starting at *POS_P to AX.  */
1464
static void
1465
gen_expr (union exp_element **pc, struct agent_expr *ax,
1466
          struct axs_value *value)
1467
{
1468
  /* Used to hold the descriptions of operand expressions.  */
1469
  struct axs_value value1, value2;
1470
  enum exp_opcode op = (*pc)[0].opcode;
1471
 
1472
  /* If we're looking at a constant expression, just push its value.  */
1473
  {
1474
    struct value *v = maybe_const_expr (pc);
1475
 
1476
    if (v)
1477
      {
1478
        ax_const_l (ax, value_as_long (v));
1479
        value->kind = axs_rvalue;
1480
        value->type = check_typedef (VALUE_TYPE (v));
1481
        return;
1482
      }
1483
  }
1484
 
1485
  /* Otherwise, go ahead and generate code for it.  */
1486
  switch (op)
1487
    {
1488
      /* Binary arithmetic operators.  */
1489
    case BINOP_ADD:
1490
    case BINOP_SUB:
1491
    case BINOP_MUL:
1492
    case BINOP_DIV:
1493
    case BINOP_REM:
1494
    case BINOP_SUBSCRIPT:
1495
    case BINOP_BITWISE_AND:
1496
    case BINOP_BITWISE_IOR:
1497
    case BINOP_BITWISE_XOR:
1498
      (*pc)++;
1499
      gen_expr (pc, ax, &value1);
1500
      gen_usual_unary (ax, &value1);
1501
      gen_expr (pc, ax, &value2);
1502
      gen_usual_unary (ax, &value2);
1503
      gen_usual_arithmetic (ax, &value1, &value2);
1504
      switch (op)
1505
        {
1506
        case BINOP_ADD:
1507
          gen_add (ax, value, &value1, &value2, "addition");
1508
          break;
1509
        case BINOP_SUB:
1510
          gen_sub (ax, value, &value1, &value2);
1511
          break;
1512
        case BINOP_MUL:
1513
          gen_binop (ax, value, &value1, &value2,
1514
                     aop_mul, aop_mul, 1, "multiplication");
1515
          break;
1516
        case BINOP_DIV:
1517
          gen_binop (ax, value, &value1, &value2,
1518
                     aop_div_signed, aop_div_unsigned, 1, "division");
1519
          break;
1520
        case BINOP_REM:
1521
          gen_binop (ax, value, &value1, &value2,
1522
                     aop_rem_signed, aop_rem_unsigned, 1, "remainder");
1523
          break;
1524
        case BINOP_SUBSCRIPT:
1525
          gen_add (ax, value, &value1, &value2, "array subscripting");
1526
          if (TYPE_CODE (value->type) != TYPE_CODE_PTR)
1527
            error ("Illegal combination of types in array subscripting.");
1528
          gen_deref (ax, value);
1529
          break;
1530
        case BINOP_BITWISE_AND:
1531
          gen_binop (ax, value, &value1, &value2,
1532
                     aop_bit_and, aop_bit_and, 0, "bitwise and");
1533
          break;
1534
 
1535
        case BINOP_BITWISE_IOR:
1536
          gen_binop (ax, value, &value1, &value2,
1537
                     aop_bit_or, aop_bit_or, 0, "bitwise or");
1538
          break;
1539
 
1540
        case BINOP_BITWISE_XOR:
1541
          gen_binop (ax, value, &value1, &value2,
1542
                     aop_bit_xor, aop_bit_xor, 0, "bitwise exclusive-or");
1543
          break;
1544
 
1545
        default:
1546
          /* We should only list operators in the outer case statement
1547
             that we actually handle in the inner case statement.  */
1548
          internal_error (__FILE__, __LINE__,
1549
                          "gen_expr: op case sets don't match");
1550
        }
1551
      break;
1552
 
1553
      /* Note that we need to be a little subtle about generating code
1554
         for comma.  In C, we can do some optimizations here because
1555
         we know the left operand is only being evaluated for effect.
1556
         However, if the tracing kludge is in effect, then we always
1557
         need to evaluate the left hand side fully, so that all the
1558
         variables it mentions get traced.  */
1559
    case BINOP_COMMA:
1560
      (*pc)++;
1561
      gen_expr (pc, ax, &value1);
1562
      /* Don't just dispose of the left operand.  We might be tracing,
1563
         in which case we want to emit code to trace it if it's an
1564
         lvalue.  */
1565
      gen_traced_pop (ax, &value1);
1566
      gen_expr (pc, ax, value);
1567
      /* It's the consumer's responsibility to trace the right operand.  */
1568
      break;
1569
 
1570
    case OP_LONG:               /* some integer constant */
1571
      {
1572
        struct type *type = (*pc)[1].type;
1573
        LONGEST k = (*pc)[2].longconst;
1574
        (*pc) += 4;
1575
        gen_int_literal (ax, value, k, type);
1576
      }
1577
      break;
1578
 
1579
    case OP_VAR_VALUE:
1580
      gen_var_ref (ax, value, (*pc)[2].symbol);
1581
      (*pc) += 4;
1582
      break;
1583
 
1584
    case OP_REGISTER:
1585
      {
1586
        int reg = (int) (*pc)[1].longconst;
1587
        (*pc) += 3;
1588
        value->kind = axs_lvalue_register;
1589
        value->u.reg = reg;
1590
        value->type = REGISTER_VIRTUAL_TYPE (reg);
1591
      }
1592
      break;
1593
 
1594
    case OP_INTERNALVAR:
1595
      error ("GDB agent expressions cannot use convenience variables.");
1596
 
1597
      /* Weirdo operator: see comments for gen_repeat for details.  */
1598
    case BINOP_REPEAT:
1599
      /* Note that gen_repeat handles its own argument evaluation.  */
1600
      (*pc)++;
1601
      gen_repeat (pc, ax, value);
1602
      break;
1603
 
1604
    case UNOP_CAST:
1605
      {
1606
        struct type *type = (*pc)[1].type;
1607
        (*pc) += 3;
1608
        gen_expr (pc, ax, value);
1609
        gen_cast (ax, value, type);
1610
      }
1611
      break;
1612
 
1613
    case UNOP_MEMVAL:
1614
      {
1615
        struct type *type = check_typedef ((*pc)[1].type);
1616
        (*pc) += 3;
1617
        gen_expr (pc, ax, value);
1618
        /* I'm not sure I understand UNOP_MEMVAL entirely.  I think
1619
           it's just a hack for dealing with minsyms; you take some
1620
           integer constant, pretend it's the address of an lvalue of
1621
           the given type, and dereference it.  */
1622
        if (value->kind != axs_rvalue)
1623
          /* This would be weird.  */
1624
          internal_error (__FILE__, __LINE__,
1625
                          "gen_expr: OP_MEMVAL operand isn't an rvalue???");
1626
        value->type = type;
1627
        value->kind = axs_lvalue_memory;
1628
      }
1629
      break;
1630
 
1631
    case UNOP_NEG:
1632
      (*pc)++;
1633
      /* -FOO is equivalent to 0 - FOO.  */
1634
      gen_int_literal (ax, &value1, (LONGEST) 0, builtin_type_int);
1635
      gen_usual_unary (ax, &value1);    /* shouldn't do much */
1636
      gen_expr (pc, ax, &value2);
1637
      gen_usual_unary (ax, &value2);
1638
      gen_usual_arithmetic (ax, &value1, &value2);
1639
      gen_sub (ax, value, &value1, &value2);
1640
      break;
1641
 
1642
    case UNOP_LOGICAL_NOT:
1643
      (*pc)++;
1644
      gen_expr (pc, ax, value);
1645
      gen_logical_not (ax, value);
1646
      break;
1647
 
1648
    case UNOP_COMPLEMENT:
1649
      (*pc)++;
1650
      gen_expr (pc, ax, value);
1651
      gen_complement (ax, value);
1652
      break;
1653
 
1654
    case UNOP_IND:
1655
      (*pc)++;
1656
      gen_expr (pc, ax, value);
1657
      gen_usual_unary (ax, value);
1658
      if (TYPE_CODE (value->type) != TYPE_CODE_PTR)
1659
        error ("Argument of unary `*' is not a pointer.");
1660
      gen_deref (ax, value);
1661
      break;
1662
 
1663
    case UNOP_ADDR:
1664
      (*pc)++;
1665
      gen_expr (pc, ax, value);
1666
      gen_address_of (ax, value);
1667
      break;
1668
 
1669
    case UNOP_SIZEOF:
1670
      (*pc)++;
1671
      /* Notice that gen_sizeof handles its own operand, unlike most
1672
         of the other unary operator functions.  This is because we
1673
         have to throw away the code we generate.  */
1674
      gen_sizeof (pc, ax, value);
1675
      break;
1676
 
1677
    case STRUCTOP_STRUCT:
1678
    case STRUCTOP_PTR:
1679
      {
1680
        int length = (*pc)[1].longconst;
1681
        char *name = &(*pc)[2].string;
1682
 
1683
        (*pc) += 4 + BYTES_TO_EXP_ELEM (length + 1);
1684
        gen_expr (pc, ax, value);
1685
        if (op == STRUCTOP_STRUCT)
1686
          gen_struct_ref (ax, value, name, ".", "structure or union");
1687
        else if (op == STRUCTOP_PTR)
1688
          gen_struct_ref (ax, value, name, "->",
1689
                          "pointer to a structure or union");
1690
        else
1691
          /* If this `if' chain doesn't handle it, then the case list
1692
             shouldn't mention it, and we shouldn't be here.  */
1693
          internal_error (__FILE__, __LINE__,
1694
                          "gen_expr: unhandled struct case");
1695
      }
1696
      break;
1697
 
1698
    case OP_TYPE:
1699
      error ("Attempt to use a type name as an expression.");
1700
 
1701
    default:
1702
      error ("Unsupported operator in expression.");
1703
    }
1704
}
1705
 
1706
 
1707
 
1708
/* Generating bytecode from GDB expressions: driver */
1709
 
1710
/* Given a GDB expression EXPR, produce a string of agent bytecode
1711
   which computes its value.  Return the agent expression, and set
1712
   *VALUE to describe its type, and whether it's an lvalue or rvalue.  */
1713
struct agent_expr *
1714
expr_to_agent (struct expression *expr, struct axs_value *value)
1715
{
1716
  struct cleanup *old_chain = 0;
1717
  struct agent_expr *ax = new_agent_expr (0);
1718
  union exp_element *pc;
1719
 
1720
  old_chain = make_cleanup_free_agent_expr (ax);
1721
 
1722
  pc = expr->elts;
1723
  trace_kludge = 0;
1724
  gen_expr (&pc, ax, value);
1725
 
1726
  /* We have successfully built the agent expr, so cancel the cleanup
1727
     request.  If we add more cleanups that we always want done, this
1728
     will have to get more complicated.  */
1729
  discard_cleanups (old_chain);
1730
  return ax;
1731
}
1732
 
1733
 
1734
#if 0                           /* not used */
1735
/* Given a GDB expression EXPR denoting an lvalue in memory, produce a
1736
   string of agent bytecode which will leave its address and size on
1737
   the top of stack.  Return the agent expression.
1738
 
1739
   Not sure this function is useful at all.  */
1740
struct agent_expr *
1741
expr_to_address_and_size (struct expression *expr)
1742
{
1743
  struct axs_value value;
1744
  struct agent_expr *ax = expr_to_agent (expr, &value);
1745
 
1746
  /* Complain if the result is not a memory lvalue.  */
1747
  if (value.kind != axs_lvalue_memory)
1748
    {
1749
      free_agent_expr (ax);
1750
      error ("Expression does not denote an object in memory.");
1751
    }
1752
 
1753
  /* Push the object's size on the stack.  */
1754
  ax_const_l (ax, TYPE_LENGTH (value.type));
1755
 
1756
  return ax;
1757
}
1758
#endif
1759
 
1760
/* Given a GDB expression EXPR, return bytecode to trace its value.
1761
   The result will use the `trace' and `trace_quick' bytecodes to
1762
   record the value of all memory touched by the expression.  The
1763
   caller can then use the ax_reqs function to discover which
1764
   registers it relies upon.  */
1765
struct agent_expr *
1766
gen_trace_for_expr (CORE_ADDR scope, struct expression *expr)
1767
{
1768
  struct cleanup *old_chain = 0;
1769
  struct agent_expr *ax = new_agent_expr (scope);
1770
  union exp_element *pc;
1771
  struct axs_value value;
1772
 
1773
  old_chain = make_cleanup_free_agent_expr (ax);
1774
 
1775
  pc = expr->elts;
1776
  trace_kludge = 1;
1777
  gen_expr (&pc, ax, &value);
1778
 
1779
  /* Make sure we record the final object, and get rid of it.  */
1780
  gen_traced_pop (ax, &value);
1781
 
1782
  /* Oh, and terminate.  */
1783
  ax_simple (ax, aop_end);
1784
 
1785
  /* We have successfully built the agent expr, so cancel the cleanup
1786
     request.  If we add more cleanups that we always want done, this
1787
     will have to get more complicated.  */
1788
  discard_cleanups (old_chain);
1789
  return ax;
1790
}
1791
 
1792
 
1793
 
1794
/* The "agent" command, for testing: compile and disassemble an expression.  */
1795
 
1796
static void
1797
print_axs_value (struct ui_file *f, struct axs_value *value)
1798
{
1799
  switch (value->kind)
1800
    {
1801
    case axs_rvalue:
1802
      fputs_filtered ("rvalue", f);
1803
      break;
1804
 
1805
    case axs_lvalue_memory:
1806
      fputs_filtered ("memory lvalue", f);
1807
      break;
1808
 
1809
    case axs_lvalue_register:
1810
      fprintf_filtered (f, "register %d lvalue", value->u.reg);
1811
      break;
1812
    }
1813
 
1814
  fputs_filtered (" : ", f);
1815
  type_print (value->type, "", f, -1);
1816
}
1817
 
1818
 
1819
static void
1820
agent_command (char *exp, int from_tty)
1821
{
1822
  struct cleanup *old_chain = 0;
1823
  struct expression *expr;
1824
  struct agent_expr *agent;
1825
  struct frame_info *fi = get_current_frame (); /* need current scope */
1826
 
1827
  /* We don't deal with overlay debugging at the moment.  We need to
1828
     think more carefully about this.  If you copy this code into
1829
     another command, change the error message; the user shouldn't
1830
     have to know anything about agent expressions.  */
1831
  if (overlay_debugging)
1832
    error ("GDB can't do agent expression translation with overlays.");
1833
 
1834
  if (exp == 0)
1835
    error_no_arg ("expression to translate");
1836
 
1837
  expr = parse_expression (exp);
1838
  old_chain = make_cleanup (free_current_contents, &expr);
1839
  agent = gen_trace_for_expr (fi->pc, expr);
1840
  make_cleanup_free_agent_expr (agent);
1841
  ax_print (gdb_stdout, agent);
1842
 
1843
  /* It would be nice to call ax_reqs here to gather some general info
1844
     about the expression, and then print out the result.  */
1845
 
1846
  do_cleanups (old_chain);
1847
  dont_repeat ();
1848
}
1849
 
1850
 
1851
/* Initialization code.  */
1852
 
1853
void _initialize_ax_gdb (void);
1854
void
1855
_initialize_ax_gdb (void)
1856
{
1857
  add_cmd ("agent", class_maintenance, agent_command,
1858
           "Translate an expression into remote agent bytecode.",
1859
           &maintenancelist);
1860
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.