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