xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/compile/compile-loc2c.c (revision 82d56013d7b633d116a93943de88e08335357a7c)
1 /* Convert a DWARF location expression to C
2 
3    Copyright (C) 2014-2019 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "dwarf2.h"
22 #include "dwarf2expr.h"
23 #include "dwarf2loc.h"
24 #include "ui-file.h"
25 #include "utils.h"
26 #include "compile-internal.h"
27 #include "compile-c.h"
28 #include "compile.h"
29 #include "block.h"
30 #include "dwarf2-frame.h"
31 #include "common/gdb_vecs.h"
32 #include "value.h"
33 
34 
35 
36 /* Information about a given instruction.  */
37 
38 struct insn_info
39 {
40   /* Stack depth at entry.  */
41 
42   unsigned int depth;
43 
44   /* Whether this instruction has been visited.  */
45 
46   unsigned int visited : 1;
47 
48   /* Whether this instruction needs a label.  */
49 
50   unsigned int label : 1;
51 
52   /* Whether this instruction is DW_OP_GNU_push_tls_address or
53      DW_OP_form_tls_address.  This is a hack until we can add a
54      feature to glibc to let us properly generate code for TLS.  */
55 
56   unsigned int is_tls : 1;
57 };
58 
59 /* A helper function for compute_stack_depth that does the work.  This
60    examines the DWARF expression starting from START and computes
61    stack effects.
62 
63    NEED_TEMPVAR is an out parameter which is set if this expression
64    needs a special temporary variable to be emitted (see the code
65    generator).
66    INFO is a vector of insn_info objects, indexed by offset from the
67    start of the DWARF expression.
68    TO_DO is a list of bytecodes which must be examined; it may be
69    added to by this function.
70    BYTE_ORDER and ADDR_SIZE describe this bytecode in the obvious way.
71    OP_PTR and OP_END are the bounds of the DWARF expression.  */
72 
73 static void
74 compute_stack_depth_worker (int start, int *need_tempvar,
75 			    std::vector<struct insn_info> *info,
76 			    std::vector<int> *to_do,
77 			    enum bfd_endian byte_order, unsigned int addr_size,
78 			    const gdb_byte *op_ptr, const gdb_byte *op_end)
79 {
80   const gdb_byte * const base = op_ptr;
81   int stack_depth;
82 
83   op_ptr += start;
84   gdb_assert ((*info)[start].visited);
85   stack_depth = (*info)[start].depth;
86 
87   while (op_ptr < op_end)
88     {
89       enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
90       uint64_t reg;
91       int64_t offset;
92       int ndx = op_ptr - base;
93 
94 #define SET_CHECK_DEPTH(WHERE)				\
95       if ((*info)[WHERE].visited)				\
96 	{						\
97 	  if ((*info)[WHERE].depth != stack_depth)		\
98 	    error (_("inconsistent stack depths"));	\
99 	}						\
100       else						\
101 	{						\
102 	  /* Stack depth not set, so set it.  */	\
103 	  (*info)[WHERE].visited = 1;			\
104 	  (*info)[WHERE].depth = stack_depth;		\
105 	}
106 
107       SET_CHECK_DEPTH (ndx);
108 
109       ++op_ptr;
110 
111       switch (op)
112 	{
113 	case DW_OP_lit0:
114 	case DW_OP_lit1:
115 	case DW_OP_lit2:
116 	case DW_OP_lit3:
117 	case DW_OP_lit4:
118 	case DW_OP_lit5:
119 	case DW_OP_lit6:
120 	case DW_OP_lit7:
121 	case DW_OP_lit8:
122 	case DW_OP_lit9:
123 	case DW_OP_lit10:
124 	case DW_OP_lit11:
125 	case DW_OP_lit12:
126 	case DW_OP_lit13:
127 	case DW_OP_lit14:
128 	case DW_OP_lit15:
129 	case DW_OP_lit16:
130 	case DW_OP_lit17:
131 	case DW_OP_lit18:
132 	case DW_OP_lit19:
133 	case DW_OP_lit20:
134 	case DW_OP_lit21:
135 	case DW_OP_lit22:
136 	case DW_OP_lit23:
137 	case DW_OP_lit24:
138 	case DW_OP_lit25:
139 	case DW_OP_lit26:
140 	case DW_OP_lit27:
141 	case DW_OP_lit28:
142 	case DW_OP_lit29:
143 	case DW_OP_lit30:
144 	case DW_OP_lit31:
145 	  ++stack_depth;
146 	  break;
147 
148 	case DW_OP_addr:
149 	  op_ptr += addr_size;
150 	  ++stack_depth;
151 	  break;
152 
153 	case DW_OP_const1u:
154 	case DW_OP_const1s:
155 	  op_ptr += 1;
156 	  ++stack_depth;
157 	  break;
158 	case DW_OP_const2u:
159 	case DW_OP_const2s:
160 	  op_ptr += 2;
161 	  ++stack_depth;
162 	  break;
163 	case DW_OP_const4u:
164 	case DW_OP_const4s:
165 	  op_ptr += 4;
166 	  ++stack_depth;
167 	  break;
168 	case DW_OP_const8u:
169 	case DW_OP_const8s:
170 	  op_ptr += 8;
171 	  ++stack_depth;
172 	  break;
173 	case DW_OP_constu:
174 	case DW_OP_consts:
175 	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
176 	  ++stack_depth;
177 	  break;
178 
179 	case DW_OP_reg0:
180 	case DW_OP_reg1:
181 	case DW_OP_reg2:
182 	case DW_OP_reg3:
183 	case DW_OP_reg4:
184 	case DW_OP_reg5:
185 	case DW_OP_reg6:
186 	case DW_OP_reg7:
187 	case DW_OP_reg8:
188 	case DW_OP_reg9:
189 	case DW_OP_reg10:
190 	case DW_OP_reg11:
191 	case DW_OP_reg12:
192 	case DW_OP_reg13:
193 	case DW_OP_reg14:
194 	case DW_OP_reg15:
195 	case DW_OP_reg16:
196 	case DW_OP_reg17:
197 	case DW_OP_reg18:
198 	case DW_OP_reg19:
199 	case DW_OP_reg20:
200 	case DW_OP_reg21:
201 	case DW_OP_reg22:
202 	case DW_OP_reg23:
203 	case DW_OP_reg24:
204 	case DW_OP_reg25:
205 	case DW_OP_reg26:
206 	case DW_OP_reg27:
207 	case DW_OP_reg28:
208 	case DW_OP_reg29:
209 	case DW_OP_reg30:
210 	case DW_OP_reg31:
211 	  ++stack_depth;
212 	  break;
213 
214 	case DW_OP_regx:
215 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
216 	  ++stack_depth;
217 	  break;
218 
219 	case DW_OP_breg0:
220 	case DW_OP_breg1:
221 	case DW_OP_breg2:
222 	case DW_OP_breg3:
223 	case DW_OP_breg4:
224 	case DW_OP_breg5:
225 	case DW_OP_breg6:
226 	case DW_OP_breg7:
227 	case DW_OP_breg8:
228 	case DW_OP_breg9:
229 	case DW_OP_breg10:
230 	case DW_OP_breg11:
231 	case DW_OP_breg12:
232 	case DW_OP_breg13:
233 	case DW_OP_breg14:
234 	case DW_OP_breg15:
235 	case DW_OP_breg16:
236 	case DW_OP_breg17:
237 	case DW_OP_breg18:
238 	case DW_OP_breg19:
239 	case DW_OP_breg20:
240 	case DW_OP_breg21:
241 	case DW_OP_breg22:
242 	case DW_OP_breg23:
243 	case DW_OP_breg24:
244 	case DW_OP_breg25:
245 	case DW_OP_breg26:
246 	case DW_OP_breg27:
247 	case DW_OP_breg28:
248 	case DW_OP_breg29:
249 	case DW_OP_breg30:
250 	case DW_OP_breg31:
251 	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
252 	  ++stack_depth;
253 	  break;
254 	case DW_OP_bregx:
255 	  {
256 	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
257 	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
258 	    ++stack_depth;
259 	  }
260 	  break;
261 	case DW_OP_fbreg:
262 	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
263 	  ++stack_depth;
264 	  break;
265 
266 	case DW_OP_dup:
267 	  ++stack_depth;
268 	  break;
269 
270 	case DW_OP_drop:
271 	  --stack_depth;
272 	  break;
273 
274 	case DW_OP_pick:
275 	  ++op_ptr;
276 	  ++stack_depth;
277 	  break;
278 
279 	case DW_OP_rot:
280 	case DW_OP_swap:
281 	  *need_tempvar = 1;
282 	  break;
283 
284 	case DW_OP_over:
285 	  ++stack_depth;
286 	  break;
287 
288 	case DW_OP_abs:
289 	case DW_OP_neg:
290 	case DW_OP_not:
291 	case DW_OP_deref:
292 	  break;
293 
294 	case DW_OP_deref_size:
295 	  ++op_ptr;
296 	  break;
297 
298 	case DW_OP_plus_uconst:
299 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
300 	  break;
301 
302 	case DW_OP_div:
303 	case DW_OP_shra:
304 	case DW_OP_and:
305 	case DW_OP_minus:
306 	case DW_OP_mod:
307 	case DW_OP_mul:
308 	case DW_OP_or:
309 	case DW_OP_plus:
310 	case DW_OP_shl:
311 	case DW_OP_shr:
312 	case DW_OP_xor:
313 	case DW_OP_le:
314 	case DW_OP_ge:
315 	case DW_OP_eq:
316 	case DW_OP_lt:
317 	case DW_OP_gt:
318 	case DW_OP_ne:
319 	  --stack_depth;
320 	  break;
321 
322 	case DW_OP_call_frame_cfa:
323 	  ++stack_depth;
324 	  break;
325 
326 	case DW_OP_GNU_push_tls_address:
327 	case DW_OP_form_tls_address:
328 	  (*info)[ndx].is_tls = 1;
329 	  break;
330 
331 	case DW_OP_skip:
332 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
333 	  op_ptr += 2;
334 	  offset = op_ptr + offset - base;
335 	  /* If the destination has not been seen yet, add it to the
336 	     to-do list.  */
337 	  if (!(*info)[offset].visited)
338 	    to_do->push_back (offset);
339 	  SET_CHECK_DEPTH (offset);
340 	  (*info)[offset].label = 1;
341 	  /* We're done with this line of code.  */
342 	  return;
343 
344 	case DW_OP_bra:
345 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
346 	  op_ptr += 2;
347 	  offset = op_ptr + offset - base;
348 	  --stack_depth;
349 	  /* If the destination has not been seen yet, add it to the
350 	     to-do list.  */
351 	  if (!(*info)[offset].visited)
352 	    to_do->push_back (offset);
353 	  SET_CHECK_DEPTH (offset);
354 	  (*info)[offset].label = 1;
355 	  break;
356 
357 	case DW_OP_nop:
358 	  break;
359 
360 	default:
361 	  error (_("unhandled DWARF op: %s"), get_DW_OP_name (op));
362 	}
363     }
364 
365   gdb_assert (op_ptr == op_end);
366 
367 #undef SET_CHECK_DEPTH
368 }
369 
370 /* Compute the maximum needed stack depth of a DWARF expression, and
371    some other information as well.
372 
373    BYTE_ORDER and ADDR_SIZE describe this bytecode in the obvious way.
374    NEED_TEMPVAR is an out parameter which is set if this expression
375    needs a special temporary variable to be emitted (see the code
376    generator).
377    IS_TLS is an out parameter which is set if this expression refers
378    to a TLS variable.
379    OP_PTR and OP_END are the bounds of the DWARF expression.
380    INITIAL_DEPTH is the initial depth of the DWARF expression stack.
381    INFO is an array of insn_info objects, indexed by offset from the
382    start of the DWARF expression.
383 
384    This returns the maximum stack depth.  */
385 
386 static int
387 compute_stack_depth (enum bfd_endian byte_order, unsigned int addr_size,
388 		     int *need_tempvar, int *is_tls,
389 		     const gdb_byte *op_ptr, const gdb_byte *op_end,
390 		     int initial_depth,
391 		     std::vector<struct insn_info> *info)
392 {
393   std::vector<int> to_do;
394   int stack_depth, i;
395 
396   info->resize (op_end - op_ptr);
397 
398   to_do.push_back (0);
399   (*info)[0].depth = initial_depth;
400   (*info)[0].visited = 1;
401 
402   while (!to_do.empty ())
403     {
404       int ndx = to_do.back ();
405       to_do.pop_back ();
406 
407       compute_stack_depth_worker (ndx, need_tempvar, info, &to_do,
408 				  byte_order, addr_size,
409 				  op_ptr, op_end);
410     }
411 
412   stack_depth = 0;
413   *is_tls = 0;
414   for (i = 0; i < op_end - op_ptr; ++i)
415     {
416       if ((*info)[i].depth > stack_depth)
417 	stack_depth = (*info)[i].depth;
418       if ((*info)[i].is_tls)
419 	*is_tls = 1;
420     }
421 
422   return stack_depth + 1;
423 }
424 
425 
426 
427 #define GCC_UINTPTR "__gdb_uintptr"
428 #define GCC_INTPTR "__gdb_intptr"
429 
430 /* Emit code to push a constant.  */
431 
432 static void
433 push (int indent, string_file *stream, ULONGEST l)
434 {
435   fprintfi_filtered (indent, stream,
436 		     "__gdb_stack[++__gdb_tos] = (" GCC_UINTPTR ") %s;\n",
437 		     hex_string (l));
438 }
439 
440 /* Emit code to push an arbitrary expression.  This works like
441    printf.  */
442 
443 static void pushf (int indent, string_file *stream, const char *format, ...)
444   ATTRIBUTE_PRINTF (3, 4);
445 
446 static void
447 pushf (int indent, string_file *stream, const char *format, ...)
448 {
449   va_list args;
450 
451   fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos + 1] = ");
452   va_start (args, format);
453   stream->vprintf (format, args);
454   va_end (args);
455   stream->puts (";\n");
456 
457   fprintfi_filtered (indent, stream, "++__gdb_tos;\n");
458 }
459 
460 /* Emit code for a unary expression -- one which operates in-place on
461    the top-of-stack.  This works like printf.  */
462 
463 static void unary (int indent, string_file *stream, const char *format, ...)
464   ATTRIBUTE_PRINTF (3, 4);
465 
466 static void
467 unary (int indent, string_file *stream, const char *format, ...)
468 {
469   va_list args;
470 
471   fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos] = ");
472   va_start (args, format);
473   stream->vprintf (format, args);
474   va_end (args);
475   stream->puts (";\n");
476 }
477 
478 /* Emit code for a unary expression -- one which uses the top two
479    stack items, popping the topmost one.  This works like printf.  */
480 static void binary (int indent, string_file *stream, const char *format, ...)
481   ATTRIBUTE_PRINTF (3, 4);
482 
483 static void
484 binary (int indent, string_file *stream, const char *format, ...)
485 {
486   va_list args;
487 
488   fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos - 1] = ");
489   va_start (args, format);
490   stream->vprintf (format, args);
491   va_end (args);
492   stream->puts (";\n");
493   fprintfi_filtered (indent, stream, "--__gdb_tos;\n");
494 }
495 
496 /* Print the name of a label given its "SCOPE", an arbitrary integer
497    used for uniqueness, and its TARGET, the bytecode offset
498    corresponding to the label's point of definition.  */
499 
500 static void
501 print_label (string_file *stream, unsigned int scope, int target)
502 {
503   stream->printf ("__label_%u_%s", scope, pulongest (target));
504 }
505 
506 /* Emit code that pushes a register's address on the stack.
507    REGISTERS_USED is an out parameter which is updated to note which
508    register was needed by this expression.  */
509 
510 static void
511 pushf_register_address (int indent, string_file *stream,
512 			unsigned char *registers_used,
513 			struct gdbarch *gdbarch, int regnum)
514 {
515   std::string regname = compile_register_name_mangled (gdbarch, regnum);
516 
517   registers_used[regnum] = 1;
518   pushf (indent, stream,
519 	 "(" GCC_UINTPTR ") &" COMPILE_I_SIMPLE_REGISTER_ARG_NAME "->%s",
520 	 regname.c_str ());
521 }
522 
523 /* Emit code that pushes a register's value on the stack.
524    REGISTERS_USED is an out parameter which is updated to note which
525    register was needed by this expression.  OFFSET is added to the
526    register's value before it is pushed.  */
527 
528 static void
529 pushf_register (int indent, string_file *stream,
530 		unsigned char *registers_used,
531 		struct gdbarch *gdbarch, int regnum, uint64_t offset)
532 {
533   std::string regname = compile_register_name_mangled (gdbarch, regnum);
534 
535   registers_used[regnum] = 1;
536   if (offset == 0)
537     pushf (indent, stream, COMPILE_I_SIMPLE_REGISTER_ARG_NAME "->%s",
538 	   regname.c_str ());
539   else
540     pushf (indent, stream,
541 	   COMPILE_I_SIMPLE_REGISTER_ARG_NAME "->%s + (" GCC_UINTPTR ") %s",
542 	   regname.c_str (), hex_string (offset));
543 }
544 
545 /* Compile a DWARF expression to C code.
546 
547    INDENT is the indentation level to use.
548    STREAM is the stream where the code should be written.
549 
550    TYPE_NAME names the type of the result of the DWARF expression.
551    For locations this is "void *" but for array bounds it will be an
552    integer type.
553 
554    RESULT_NAME is the name of a variable in the resulting C code.  The
555    result of the expression will be assigned to this variable.
556 
557    SYM is the symbol corresponding to this expression.
558    PC is the location at which the expression is being evaluated.
559    ARCH is the architecture to use.
560 
561    REGISTERS_USED is an out parameter which is updated to note which
562    registers were needed by this expression.
563 
564    ADDR_SIZE is the DWARF address size to use.
565 
566    OPT_PTR and OP_END are the bounds of the DWARF expression.
567 
568    If non-NULL, INITIAL points to an initial value to write to the
569    stack.  If NULL, no initial value is written.
570 
571    PER_CU is the per-CU object used for looking up various other
572    things.  */
573 
574 static void
575 do_compile_dwarf_expr_to_c (int indent, string_file *stream,
576 			    const char *type_name,
577 			    const char *result_name,
578 			    struct symbol *sym, CORE_ADDR pc,
579 			    struct gdbarch *arch,
580 			    unsigned char *registers_used,
581 			    unsigned int addr_size,
582 			    const gdb_byte *op_ptr, const gdb_byte *op_end,
583 			    CORE_ADDR *initial,
584 			    struct dwarf2_per_cu_data *per_cu)
585 {
586   /* We keep a counter so that labels and other objects we create have
587      unique names.  */
588   static unsigned int scope;
589 
590   enum bfd_endian byte_order = gdbarch_byte_order (arch);
591   const gdb_byte * const base = op_ptr;
592   int need_tempvar = 0;
593   int is_tls = 0;
594   std::vector<struct insn_info> info;
595   int stack_depth;
596 
597   ++scope;
598 
599   fprintfi_filtered (indent, stream, "__attribute__ ((unused)) %s %s;\n",
600 		     type_name, result_name);
601   fprintfi_filtered (indent, stream, "{\n");
602   indent += 2;
603 
604   stack_depth = compute_stack_depth (byte_order, addr_size,
605 				     &need_tempvar, &is_tls,
606 				     op_ptr, op_end, initial != NULL,
607 				     &info);
608 
609   /* This is a hack until we can add a feature to glibc to let us
610      properly generate code for TLS.  You might think we could emit
611      the address in the ordinary course of translating
612      DW_OP_GNU_push_tls_address, but since the operand appears on the
613      stack, it is relatively hard to find, and the idea of calling
614      target_translate_tls_address with OFFSET==0 and then adding the
615      offset by hand seemed too hackish.  */
616   if (is_tls)
617     {
618       struct frame_info *frame = get_selected_frame (NULL);
619       struct value *val;
620 
621       if (frame == NULL)
622 	error (_("Symbol \"%s\" cannot be used because "
623 		 "there is no selected frame"),
624 	       SYMBOL_PRINT_NAME (sym));
625 
626       val = read_var_value (sym, NULL, frame);
627       if (VALUE_LVAL (val) != lval_memory)
628 	error (_("Symbol \"%s\" cannot be used for compilation evaluation "
629 		 "as its address has not been found."),
630 	       SYMBOL_PRINT_NAME (sym));
631 
632       warning (_("Symbol \"%s\" is thread-local and currently can only "
633 		 "be referenced from the current thread in "
634 		 "compiled code."),
635 	       SYMBOL_PRINT_NAME (sym));
636 
637       fprintfi_filtered (indent, stream, "%s = %s;\n",
638 			 result_name,
639 			 core_addr_to_string (value_address (val)));
640       fprintfi_filtered (indent - 2, stream, "}\n");
641       return;
642     }
643 
644   fprintfi_filtered (indent, stream, GCC_UINTPTR " __gdb_stack[%d];\n",
645 		     stack_depth);
646 
647   if (need_tempvar)
648     fprintfi_filtered (indent, stream, GCC_UINTPTR " __gdb_tmp;\n");
649   fprintfi_filtered (indent, stream, "int __gdb_tos = -1;\n");
650 
651   if (initial != NULL)
652     pushf (indent, stream, "%s", core_addr_to_string (*initial));
653 
654   while (op_ptr < op_end)
655     {
656       enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
657       uint64_t uoffset, reg;
658       int64_t offset;
659 
660       print_spaces (indent - 2, stream);
661       if (info[op_ptr - base].label)
662 	{
663 	  print_label (stream, scope, op_ptr - base);
664 	  stream->puts (":;");
665 	}
666       stream->printf ("/* %s */\n", get_DW_OP_name (op));
667 
668       /* This is handy for debugging the generated code:
669       fprintf_filtered (stream, "if (__gdb_tos != %d) abort ();\n",
670 			(int) info[op_ptr - base].depth - 1);
671       */
672 
673       ++op_ptr;
674 
675       switch (op)
676 	{
677 	case DW_OP_lit0:
678 	case DW_OP_lit1:
679 	case DW_OP_lit2:
680 	case DW_OP_lit3:
681 	case DW_OP_lit4:
682 	case DW_OP_lit5:
683 	case DW_OP_lit6:
684 	case DW_OP_lit7:
685 	case DW_OP_lit8:
686 	case DW_OP_lit9:
687 	case DW_OP_lit10:
688 	case DW_OP_lit11:
689 	case DW_OP_lit12:
690 	case DW_OP_lit13:
691 	case DW_OP_lit14:
692 	case DW_OP_lit15:
693 	case DW_OP_lit16:
694 	case DW_OP_lit17:
695 	case DW_OP_lit18:
696 	case DW_OP_lit19:
697 	case DW_OP_lit20:
698 	case DW_OP_lit21:
699 	case DW_OP_lit22:
700 	case DW_OP_lit23:
701 	case DW_OP_lit24:
702 	case DW_OP_lit25:
703 	case DW_OP_lit26:
704 	case DW_OP_lit27:
705 	case DW_OP_lit28:
706 	case DW_OP_lit29:
707 	case DW_OP_lit30:
708 	case DW_OP_lit31:
709 	  push (indent, stream, op - DW_OP_lit0);
710 	  break;
711 
712 	case DW_OP_addr:
713 	  uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
714 	  op_ptr += addr_size;
715 	  /* Some versions of GCC emit DW_OP_addr before
716 	     DW_OP_GNU_push_tls_address.  In this case the value is an
717 	     index, not an address.  We don't support things like
718 	     branching between the address and the TLS op.  */
719 	  if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
720 	    uoffset += dwarf2_per_cu_text_offset (per_cu);
721 	  push (indent, stream, uoffset);
722 	  break;
723 
724 	case DW_OP_const1u:
725 	  push (indent, stream,
726 		extract_unsigned_integer (op_ptr, 1, byte_order));
727 	  op_ptr += 1;
728 	  break;
729 	case DW_OP_const1s:
730 	  push (indent, stream,
731 		extract_signed_integer (op_ptr, 1, byte_order));
732 	  op_ptr += 1;
733 	  break;
734 	case DW_OP_const2u:
735 	  push (indent, stream,
736 		extract_unsigned_integer (op_ptr, 2, byte_order));
737 	  op_ptr += 2;
738 	  break;
739 	case DW_OP_const2s:
740 	  push (indent, stream,
741 		extract_signed_integer (op_ptr, 2, byte_order));
742 	  op_ptr += 2;
743 	  break;
744 	case DW_OP_const4u:
745 	  push (indent, stream,
746 		extract_unsigned_integer (op_ptr, 4, byte_order));
747 	  op_ptr += 4;
748 	  break;
749 	case DW_OP_const4s:
750 	  push (indent, stream,
751 		extract_signed_integer (op_ptr, 4, byte_order));
752 	  op_ptr += 4;
753 	  break;
754 	case DW_OP_const8u:
755 	  push (indent, stream,
756 		extract_unsigned_integer (op_ptr, 8, byte_order));
757 	  op_ptr += 8;
758 	  break;
759 	case DW_OP_const8s:
760 	  push (indent, stream,
761 		extract_signed_integer (op_ptr, 8, byte_order));
762 	  op_ptr += 8;
763 	  break;
764 	case DW_OP_constu:
765 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
766 	  push (indent, stream, uoffset);
767 	  break;
768 	case DW_OP_consts:
769 	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
770 	  push (indent, stream, offset);
771 	  break;
772 
773 	case DW_OP_reg0:
774 	case DW_OP_reg1:
775 	case DW_OP_reg2:
776 	case DW_OP_reg3:
777 	case DW_OP_reg4:
778 	case DW_OP_reg5:
779 	case DW_OP_reg6:
780 	case DW_OP_reg7:
781 	case DW_OP_reg8:
782 	case DW_OP_reg9:
783 	case DW_OP_reg10:
784 	case DW_OP_reg11:
785 	case DW_OP_reg12:
786 	case DW_OP_reg13:
787 	case DW_OP_reg14:
788 	case DW_OP_reg15:
789 	case DW_OP_reg16:
790 	case DW_OP_reg17:
791 	case DW_OP_reg18:
792 	case DW_OP_reg19:
793 	case DW_OP_reg20:
794 	case DW_OP_reg21:
795 	case DW_OP_reg22:
796 	case DW_OP_reg23:
797 	case DW_OP_reg24:
798 	case DW_OP_reg25:
799 	case DW_OP_reg26:
800 	case DW_OP_reg27:
801 	case DW_OP_reg28:
802 	case DW_OP_reg29:
803 	case DW_OP_reg30:
804 	case DW_OP_reg31:
805 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
806 	  pushf_register_address (indent, stream, registers_used, arch,
807 				  dwarf_reg_to_regnum_or_error
808 				    (arch, op - DW_OP_reg0));
809 	  break;
810 
811 	case DW_OP_regx:
812 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
813 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
814 	  pushf_register_address (indent, stream, registers_used, arch,
815 				  dwarf_reg_to_regnum_or_error (arch, reg));
816 	  break;
817 
818 	case DW_OP_breg0:
819 	case DW_OP_breg1:
820 	case DW_OP_breg2:
821 	case DW_OP_breg3:
822 	case DW_OP_breg4:
823 	case DW_OP_breg5:
824 	case DW_OP_breg6:
825 	case DW_OP_breg7:
826 	case DW_OP_breg8:
827 	case DW_OP_breg9:
828 	case DW_OP_breg10:
829 	case DW_OP_breg11:
830 	case DW_OP_breg12:
831 	case DW_OP_breg13:
832 	case DW_OP_breg14:
833 	case DW_OP_breg15:
834 	case DW_OP_breg16:
835 	case DW_OP_breg17:
836 	case DW_OP_breg18:
837 	case DW_OP_breg19:
838 	case DW_OP_breg20:
839 	case DW_OP_breg21:
840 	case DW_OP_breg22:
841 	case DW_OP_breg23:
842 	case DW_OP_breg24:
843 	case DW_OP_breg25:
844 	case DW_OP_breg26:
845 	case DW_OP_breg27:
846 	case DW_OP_breg28:
847 	case DW_OP_breg29:
848 	case DW_OP_breg30:
849 	case DW_OP_breg31:
850 	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
851 	  pushf_register (indent, stream, registers_used, arch,
852 			  dwarf_reg_to_regnum_or_error (arch,
853 							op - DW_OP_breg0),
854 			  offset);
855 	  break;
856 	case DW_OP_bregx:
857 	  {
858 	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
859 	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
860 	    pushf_register (indent, stream, registers_used, arch,
861 			    dwarf_reg_to_regnum_or_error (arch, reg), offset);
862 	  }
863 	  break;
864 	case DW_OP_fbreg:
865 	  {
866 	    const gdb_byte *datastart;
867 	    size_t datalen;
868 	    const struct block *b;
869 	    struct symbol *framefunc;
870 	    char fb_name[50];
871 
872 	    b = block_for_pc (pc);
873 
874 	    if (!b)
875 	      error (_("No block found for address"));
876 
877 	    framefunc = block_linkage_function (b);
878 
879 	    if (!framefunc)
880 	      error (_("No function found for block"));
881 
882 	    func_get_frame_base_dwarf_block (framefunc, pc,
883 					     &datastart, &datalen);
884 
885 	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
886 
887 	    /* Generate a unique-enough name, in case the frame base
888 	       is computed multiple times in this expression.  */
889 	    xsnprintf (fb_name, sizeof (fb_name), "__frame_base_%ld",
890 		       (long) (op_ptr - base));
891 
892 	    do_compile_dwarf_expr_to_c (indent, stream,
893 					GCC_UINTPTR, fb_name,
894 					sym, pc,
895 					arch, registers_used, addr_size,
896 					datastart, datastart + datalen,
897 					NULL, per_cu);
898 
899 	    pushf (indent, stream, "%s + %s", fb_name, hex_string (offset));
900 	  }
901 	  break;
902 
903 	case DW_OP_dup:
904 	  pushf (indent, stream, "__gdb_stack[__gdb_tos]");
905 	  break;
906 
907 	case DW_OP_drop:
908 	  fprintfi_filtered (indent, stream, "--__gdb_tos;\n");
909 	  break;
910 
911 	case DW_OP_pick:
912 	  offset = *op_ptr++;
913 	  pushf (indent, stream, "__gdb_stack[__gdb_tos - %s]",
914 		 plongest (offset));
915 	  break;
916 
917 	case DW_OP_swap:
918 	  fprintfi_filtered (indent, stream,
919 			     "__gdb_tmp = __gdb_stack[__gdb_tos - 1];\n");
920 	  fprintfi_filtered (indent, stream,
921 			     "__gdb_stack[__gdb_tos - 1] = "
922 			     "__gdb_stack[__gdb_tos];\n");
923 	  fprintfi_filtered (indent, stream, ("__gdb_stack[__gdb_tos] = "
924 					      "__gdb_tmp;\n"));
925 	  break;
926 
927 	case DW_OP_over:
928 	  pushf (indent, stream, "__gdb_stack[__gdb_tos - 1]");
929 	  break;
930 
931 	case DW_OP_rot:
932 	  fprintfi_filtered (indent, stream, ("__gdb_tmp = "
933 					      "__gdb_stack[__gdb_tos];\n"));
934 	  fprintfi_filtered (indent, stream,
935 			     "__gdb_stack[__gdb_tos] = "
936 			     "__gdb_stack[__gdb_tos - 1];\n");
937 	  fprintfi_filtered (indent, stream,
938 			     "__gdb_stack[__gdb_tos - 1] = "
939 			     "__gdb_stack[__gdb_tos -2];\n");
940 	  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos - 2] = "
941 			     "__gdb_tmp;\n");
942 	  break;
943 
944 	case DW_OP_deref:
945 	case DW_OP_deref_size:
946 	  {
947 	    int size;
948 	    const char *mode;
949 
950 	    if (op == DW_OP_deref_size)
951 	      size = *op_ptr++;
952 	    else
953 	      size = addr_size;
954 
955 	    mode = c_get_mode_for_size (size);
956 	    if (mode == NULL)
957 	      error (_("Unsupported size %d in %s"),
958 		     size, get_DW_OP_name (op));
959 
960 	    /* Cast to a pointer of the desired type, then
961 	       dereference.  */
962 	    fprintfi_filtered (indent, stream,
963 			       "__gdb_stack[__gdb_tos] = "
964 			       "*((__gdb_int_%s *) "
965 			       "__gdb_stack[__gdb_tos]);\n",
966 			       mode);
967 	  }
968 	  break;
969 
970 	case DW_OP_abs:
971 	  unary (indent, stream,
972 		 "((" GCC_INTPTR ") __gdb_stack[__gdb_tos]) < 0 ? "
973 		 "-__gdb_stack[__gdb_tos] : __gdb_stack[__gdb_tos]");
974 	  break;
975 
976 	case DW_OP_neg:
977 	  unary (indent, stream, "-__gdb_stack[__gdb_tos]");
978 	  break;
979 
980 	case DW_OP_not:
981 	  unary (indent, stream, "~__gdb_stack[__gdb_tos]");
982 	  break;
983 
984 	case DW_OP_plus_uconst:
985 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
986 	  unary (indent, stream, "__gdb_stack[__gdb_tos] + %s",
987 		 hex_string (reg));
988 	  break;
989 
990 	case DW_OP_div:
991 	  binary (indent, stream, ("((" GCC_INTPTR
992 				   ") __gdb_stack[__gdb_tos-1]) / (("
993 				   GCC_INTPTR ") __gdb_stack[__gdb_tos])"));
994 	  break;
995 
996 	case DW_OP_shra:
997 	  binary (indent, stream,
998 		  "((" GCC_INTPTR ") __gdb_stack[__gdb_tos-1]) >> "
999 		  "__gdb_stack[__gdb_tos]");
1000 	  break;
1001 
1002 #define BINARY(OP)							\
1003 	  binary (indent, stream, "%s", "__gdb_stack[__gdb_tos-1] " #OP \
1004 				   " __gdb_stack[__gdb_tos]");	\
1005 	  break
1006 
1007 	case DW_OP_and:
1008 	  BINARY (&);
1009 	case DW_OP_minus:
1010 	  BINARY (-);
1011 	case DW_OP_mod:
1012 	  BINARY (%);
1013 	case DW_OP_mul:
1014 	  BINARY (*);
1015 	case DW_OP_or:
1016 	  BINARY (|);
1017 	case DW_OP_plus:
1018 	  BINARY (+);
1019 	case DW_OP_shl:
1020 	  BINARY (<<);
1021 	case DW_OP_shr:
1022 	  BINARY (>>);
1023 	case DW_OP_xor:
1024 	  BINARY (^);
1025 #undef BINARY
1026 
1027 #define COMPARE(OP)							\
1028 	  binary (indent, stream,					\
1029 		  "(((" GCC_INTPTR ") __gdb_stack[__gdb_tos-1]) " #OP	\
1030 		  " ((" GCC_INTPTR					\
1031 		  ") __gdb_stack[__gdb_tos]))");			\
1032 	  break
1033 
1034 	case DW_OP_le:
1035 	  COMPARE (<=);
1036 	case DW_OP_ge:
1037 	  COMPARE (>=);
1038 	case DW_OP_eq:
1039 	  COMPARE (==);
1040 	case DW_OP_lt:
1041 	  COMPARE (<);
1042 	case DW_OP_gt:
1043 	  COMPARE (>);
1044 	case DW_OP_ne:
1045 	  COMPARE (!=);
1046 #undef COMPARE
1047 
1048 	case DW_OP_call_frame_cfa:
1049 	  {
1050 	    int regnum;
1051 	    CORE_ADDR text_offset;
1052 	    LONGEST off;
1053 	    const gdb_byte *cfa_start, *cfa_end;
1054 
1055 	    if (dwarf2_fetch_cfa_info (arch, pc, per_cu,
1056 				       &regnum, &off,
1057 				       &text_offset, &cfa_start, &cfa_end))
1058 	      {
1059 		/* Register.  */
1060 		pushf_register (indent, stream, registers_used, arch, regnum,
1061 				off);
1062 	      }
1063 	    else
1064 	      {
1065 		/* Another expression.  */
1066 		char cfa_name[50];
1067 
1068 		/* Generate a unique-enough name, in case the CFA is
1069 		   computed multiple times in this expression.  */
1070 		xsnprintf (cfa_name, sizeof (cfa_name),
1071 			   "__cfa_%ld", (long) (op_ptr - base));
1072 
1073 		do_compile_dwarf_expr_to_c (indent, stream,
1074 					    GCC_UINTPTR, cfa_name,
1075 					    sym, pc, arch, registers_used,
1076 					    addr_size,
1077 					    cfa_start, cfa_end,
1078 					    &text_offset, per_cu);
1079 		pushf (indent, stream, "%s", cfa_name);
1080 	      }
1081 	  }
1082 
1083 	  break;
1084 
1085 	case DW_OP_skip:
1086 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
1087 	  op_ptr += 2;
1088 	  fprintfi_filtered (indent, stream, "goto ");
1089 	  print_label (stream, scope, op_ptr + offset - base);
1090 	  stream->puts (";\n");
1091 	  break;
1092 
1093 	case DW_OP_bra:
1094 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
1095 	  op_ptr += 2;
1096 	  fprintfi_filtered (indent, stream,
1097 			     "if ((( " GCC_INTPTR
1098 			     ") __gdb_stack[__gdb_tos--]) != 0) goto ");
1099 	  print_label (stream, scope, op_ptr + offset - base);
1100 	  stream->puts (";\n");
1101 	  break;
1102 
1103 	case DW_OP_nop:
1104 	  break;
1105 
1106 	default:
1107 	  error (_("unhandled DWARF op: %s"), get_DW_OP_name (op));
1108 	}
1109     }
1110 
1111   fprintfi_filtered (indent, stream, "%s = __gdb_stack[__gdb_tos];\n",
1112 		     result_name);
1113   fprintfi_filtered (indent - 2, stream, "}\n");
1114 }
1115 
1116 /* See compile.h.  */
1117 
1118 void
1119 compile_dwarf_expr_to_c (string_file *stream, const char *result_name,
1120 			 struct symbol *sym, CORE_ADDR pc,
1121 			 struct gdbarch *arch, unsigned char *registers_used,
1122 			 unsigned int addr_size,
1123 			 const gdb_byte *op_ptr, const gdb_byte *op_end,
1124 			 struct dwarf2_per_cu_data *per_cu)
1125 {
1126   do_compile_dwarf_expr_to_c (2, stream, GCC_UINTPTR, result_name, sym, pc,
1127 			      arch, registers_used, addr_size, op_ptr, op_end,
1128 			      NULL, per_cu);
1129 }
1130 
1131 /* See compile.h.  */
1132 
1133 void
1134 compile_dwarf_bounds_to_c (string_file *stream,
1135 			   const char *result_name,
1136 			   const struct dynamic_prop *prop,
1137 			   struct symbol *sym, CORE_ADDR pc,
1138 			   struct gdbarch *arch, unsigned char *registers_used,
1139 			   unsigned int addr_size,
1140 			   const gdb_byte *op_ptr, const gdb_byte *op_end,
1141 			   struct dwarf2_per_cu_data *per_cu)
1142 {
1143   do_compile_dwarf_expr_to_c (2, stream, "unsigned long ", result_name,
1144 			      sym, pc, arch, registers_used,
1145 			      addr_size, op_ptr, op_end, NULL, per_cu);
1146 }
1147