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