xref: /dragonfly/contrib/gdb-7/gdb/dwarf2loc.c (revision 783d47c4)
1 /* DWARF 2 location expression support for GDB.
2 
3    Copyright (C) 2003, 2005, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5 
6    Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
7 
8    This file is part of GDB.
9 
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14 
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19 
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22 
23 #include "defs.h"
24 #include "ui-out.h"
25 #include "value.h"
26 #include "frame.h"
27 #include "gdbcore.h"
28 #include "target.h"
29 #include "inferior.h"
30 #include "ax.h"
31 #include "ax-gdb.h"
32 #include "regcache.h"
33 #include "objfiles.h"
34 #include "exceptions.h"
35 #include "block.h"
36 
37 #include "dwarf2.h"
38 #include "dwarf2expr.h"
39 #include "dwarf2loc.h"
40 #include "dwarf2-frame.h"
41 
42 #include "gdb_string.h"
43 #include "gdb_assert.h"
44 
45 extern int dwarf2_always_disassemble;
46 
47 static void
48 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
49 			 const gdb_byte **start, size_t *length);
50 
51 static struct value *
52 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
53 			       const gdb_byte *data, unsigned short size,
54 			       struct dwarf2_per_cu_data *per_cu,
55 			       LONGEST byte_offset);
56 
57 /* A function for dealing with location lists.  Given a
58    symbol baton (BATON) and a pc value (PC), find the appropriate
59    location expression, set *LOCEXPR_LENGTH, and return a pointer
60    to the beginning of the expression.  Returns NULL on failure.
61 
62    For now, only return the first matching location expression; there
63    can be more than one in the list.  */
64 
65 const gdb_byte *
66 dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
67 				 size_t *locexpr_length, CORE_ADDR pc)
68 {
69   CORE_ADDR low, high;
70   const gdb_byte *loc_ptr, *buf_end;
71   int length;
72   struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu);
73   struct gdbarch *gdbarch = get_objfile_arch (objfile);
74   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
75   unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
76   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
77   CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
78   /* Adjust base_address for relocatable objects.  */
79   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (baton->per_cu);
80   CORE_ADDR base_address = baton->base_address + base_offset;
81 
82   loc_ptr = baton->data;
83   buf_end = baton->data + baton->size;
84 
85   while (1)
86     {
87       if (buf_end - loc_ptr < 2 * addr_size)
88 	error (_("dwarf2_find_location_expression: "
89 		 "Corrupted DWARF expression."));
90 
91       if (signed_addr_p)
92 	low = extract_signed_integer (loc_ptr, addr_size, byte_order);
93       else
94 	low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
95       loc_ptr += addr_size;
96 
97       if (signed_addr_p)
98 	high = extract_signed_integer (loc_ptr, addr_size, byte_order);
99       else
100 	high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
101       loc_ptr += addr_size;
102 
103       /* A base-address-selection entry.  */
104       if ((low & base_mask) == base_mask)
105 	{
106 	  base_address = high + base_offset;
107 	  continue;
108 	}
109 
110       /* An end-of-list entry.  */
111       if (low == 0 && high == 0)
112 	return NULL;
113 
114       /* Otherwise, a location expression entry.  */
115       low += base_address;
116       high += base_address;
117 
118       length = extract_unsigned_integer (loc_ptr, 2, byte_order);
119       loc_ptr += 2;
120 
121       if (pc >= low && pc < high)
122 	{
123 	  *locexpr_length = length;
124 	  return loc_ptr;
125 	}
126 
127       loc_ptr += length;
128     }
129 }
130 
131 /* This is the baton used when performing dwarf2 expression
132    evaluation.  */
133 struct dwarf_expr_baton
134 {
135   struct frame_info *frame;
136   struct dwarf2_per_cu_data *per_cu;
137 };
138 
139 /* Helper functions for dwarf2_evaluate_loc_desc.  */
140 
141 /* Using the frame specified in BATON, return the value of register
142    REGNUM, treated as a pointer.  */
143 static CORE_ADDR
144 dwarf_expr_read_reg (void *baton, int dwarf_regnum)
145 {
146   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
147   struct gdbarch *gdbarch = get_frame_arch (debaton->frame);
148   CORE_ADDR result;
149   int regnum;
150 
151   regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
152   result = address_from_register (builtin_type (gdbarch)->builtin_data_ptr,
153 				  regnum, debaton->frame);
154   return result;
155 }
156 
157 /* Read memory at ADDR (length LEN) into BUF.  */
158 
159 static void
160 dwarf_expr_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
161 {
162   read_memory (addr, buf, len);
163 }
164 
165 /* Using the frame specified in BATON, find the location expression
166    describing the frame base.  Return a pointer to it in START and
167    its length in LENGTH.  */
168 static void
169 dwarf_expr_frame_base (void *baton, const gdb_byte **start, size_t * length)
170 {
171   /* FIXME: cagney/2003-03-26: This code should be using
172      get_frame_base_address(), and then implement a dwarf2 specific
173      this_base method.  */
174   struct symbol *framefunc;
175   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
176 
177   /* Use block_linkage_function, which returns a real (not inlined)
178      function, instead of get_frame_function, which may return an
179      inlined function.  */
180   framefunc = block_linkage_function (get_frame_block (debaton->frame, NULL));
181 
182   /* If we found a frame-relative symbol then it was certainly within
183      some function associated with a frame. If we can't find the frame,
184      something has gone wrong.  */
185   gdb_assert (framefunc != NULL);
186 
187   dwarf_expr_frame_base_1 (framefunc,
188 			   get_frame_address_in_block (debaton->frame),
189 			   start, length);
190 }
191 
192 static void
193 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
194 			 const gdb_byte **start, size_t *length)
195 {
196   if (SYMBOL_LOCATION_BATON (framefunc) == NULL)
197     *start = NULL;
198   else if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_loclist_funcs)
199     {
200       struct dwarf2_loclist_baton *symbaton;
201 
202       symbaton = SYMBOL_LOCATION_BATON (framefunc);
203       *start = dwarf2_find_location_expression (symbaton, length, pc);
204     }
205   else
206     {
207       struct dwarf2_locexpr_baton *symbaton;
208 
209       symbaton = SYMBOL_LOCATION_BATON (framefunc);
210       if (symbaton != NULL)
211 	{
212 	  *length = symbaton->size;
213 	  *start = symbaton->data;
214 	}
215       else
216 	*start = NULL;
217     }
218 
219   if (*start == NULL)
220     error (_("Could not find the frame base for \"%s\"."),
221 	   SYMBOL_NATURAL_NAME (framefunc));
222 }
223 
224 /* Helper function for dwarf2_evaluate_loc_desc.  Computes the CFA for
225    the frame in BATON.  */
226 
227 static CORE_ADDR
228 dwarf_expr_frame_cfa (void *baton)
229 {
230   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
231 
232   return dwarf2_frame_cfa (debaton->frame);
233 }
234 
235 /* Helper function for dwarf2_evaluate_loc_desc.  Computes the PC for
236    the frame in BATON.  */
237 
238 static CORE_ADDR
239 dwarf_expr_frame_pc (void *baton)
240 {
241   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
242 
243   return get_frame_address_in_block (debaton->frame);
244 }
245 
246 /* Using the objfile specified in BATON, find the address for the
247    current thread's thread-local storage with offset OFFSET.  */
248 static CORE_ADDR
249 dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
250 {
251   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
252   struct objfile *objfile = dwarf2_per_cu_objfile (debaton->per_cu);
253 
254   return target_translate_tls_address (objfile, offset);
255 }
256 
257 /* Call DWARF subroutine from DW_AT_location of DIE at DIE_OFFSET in
258    current CU (as is PER_CU).  State of the CTX is not affected by the
259    call and return.  */
260 
261 static void
262 per_cu_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset,
263 		   struct dwarf2_per_cu_data *per_cu,
264 		   CORE_ADDR (*get_frame_pc) (void *baton),
265 		   void *baton)
266 {
267   struct dwarf2_locexpr_baton block;
268 
269   block = dwarf2_fetch_die_location_block (die_offset, per_cu,
270 					   get_frame_pc, baton);
271 
272   /* DW_OP_call_ref is currently not supported.  */
273   gdb_assert (block.per_cu == per_cu);
274 
275   dwarf_expr_eval (ctx, block.data, block.size);
276 }
277 
278 /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc.  */
279 
280 static void
281 dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
282 {
283   struct dwarf_expr_baton *debaton = ctx->baton;
284 
285   per_cu_dwarf_call (ctx, die_offset, debaton->per_cu,
286 		     ctx->get_frame_pc, ctx->baton);
287 }
288 
289 struct piece_closure
290 {
291   /* Reference count.  */
292   int refc;
293 
294   /* The CU from which this closure's expression came.  */
295   struct dwarf2_per_cu_data *per_cu;
296 
297   /* The number of pieces used to describe this variable.  */
298   int n_pieces;
299 
300   /* The target address size, used only for DWARF_VALUE_STACK.  */
301   int addr_size;
302 
303   /* The pieces themselves.  */
304   struct dwarf_expr_piece *pieces;
305 };
306 
307 /* Allocate a closure for a value formed from separately-described
308    PIECES.  */
309 
310 static struct piece_closure *
311 allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
312 			int n_pieces, struct dwarf_expr_piece *pieces,
313 			int addr_size)
314 {
315   struct piece_closure *c = XZALLOC (struct piece_closure);
316 
317   c->refc = 1;
318   c->per_cu = per_cu;
319   c->n_pieces = n_pieces;
320   c->addr_size = addr_size;
321   c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
322 
323   memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
324 
325   return c;
326 }
327 
328 /* The lowest-level function to extract bits from a byte buffer.
329    SOURCE is the buffer.  It is updated if we read to the end of a
330    byte.
331    SOURCE_OFFSET_BITS is the offset of the first bit to read.  It is
332    updated to reflect the number of bits actually read.
333    NBITS is the number of bits we want to read.  It is updated to
334    reflect the number of bits actually read.  This function may read
335    fewer bits.
336    BITS_BIG_ENDIAN is taken directly from gdbarch.
337    This function returns the extracted bits.  */
338 
339 static unsigned int
340 extract_bits_primitive (const gdb_byte **source,
341 			unsigned int *source_offset_bits,
342 			int *nbits, int bits_big_endian)
343 {
344   unsigned int avail, mask, datum;
345 
346   gdb_assert (*source_offset_bits < 8);
347 
348   avail = 8 - *source_offset_bits;
349   if (avail > *nbits)
350     avail = *nbits;
351 
352   mask = (1 << avail) - 1;
353   datum = **source;
354   if (bits_big_endian)
355     datum >>= 8 - (*source_offset_bits + *nbits);
356   else
357     datum >>= *source_offset_bits;
358   datum &= mask;
359 
360   *nbits -= avail;
361   *source_offset_bits += avail;
362   if (*source_offset_bits >= 8)
363     {
364       *source_offset_bits -= 8;
365       ++*source;
366     }
367 
368   return datum;
369 }
370 
371 /* Extract some bits from a source buffer and move forward in the
372    buffer.
373 
374    SOURCE is the source buffer.  It is updated as bytes are read.
375    SOURCE_OFFSET_BITS is the offset into SOURCE.  It is updated as
376    bits are read.
377    NBITS is the number of bits to read.
378    BITS_BIG_ENDIAN is taken directly from gdbarch.
379 
380    This function returns the bits that were read.  */
381 
382 static unsigned int
383 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
384 	      int nbits, int bits_big_endian)
385 {
386   unsigned int datum;
387 
388   gdb_assert (nbits > 0 && nbits <= 8);
389 
390   datum = extract_bits_primitive (source, source_offset_bits, &nbits,
391 				  bits_big_endian);
392   if (nbits > 0)
393     {
394       unsigned int more;
395 
396       more = extract_bits_primitive (source, source_offset_bits, &nbits,
397 				     bits_big_endian);
398       if (bits_big_endian)
399 	datum <<= nbits;
400       else
401 	more <<= nbits;
402       datum |= more;
403     }
404 
405   return datum;
406 }
407 
408 /* Write some bits into a buffer and move forward in the buffer.
409 
410    DATUM is the bits to write.  The low-order bits of DATUM are used.
411    DEST is the destination buffer.  It is updated as bytes are
412    written.
413    DEST_OFFSET_BITS is the bit offset in DEST at which writing is
414    done.
415    NBITS is the number of valid bits in DATUM.
416    BITS_BIG_ENDIAN is taken directly from gdbarch.  */
417 
418 static void
419 insert_bits (unsigned int datum,
420 	     gdb_byte *dest, unsigned int dest_offset_bits,
421 	     int nbits, int bits_big_endian)
422 {
423   unsigned int mask;
424 
425   gdb_assert (dest_offset_bits + nbits <= 8);
426 
427   mask = (1 << nbits) - 1;
428   if (bits_big_endian)
429     {
430       datum <<= 8 - (dest_offset_bits + nbits);
431       mask <<= 8 - (dest_offset_bits + nbits);
432     }
433   else
434     {
435       datum <<= dest_offset_bits;
436       mask <<= dest_offset_bits;
437     }
438 
439   gdb_assert ((datum & ~mask) == 0);
440 
441   *dest = (*dest & ~mask) | datum;
442 }
443 
444 /* Copy bits from a source to a destination.
445 
446    DEST is where the bits should be written.
447    DEST_OFFSET_BITS is the bit offset into DEST.
448    SOURCE is the source of bits.
449    SOURCE_OFFSET_BITS is the bit offset into SOURCE.
450    BIT_COUNT is the number of bits to copy.
451    BITS_BIG_ENDIAN is taken directly from gdbarch.  */
452 
453 static void
454 copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
455 	      const gdb_byte *source, unsigned int source_offset_bits,
456 	      unsigned int bit_count,
457 	      int bits_big_endian)
458 {
459   unsigned int dest_avail;
460   int datum;
461 
462   /* Reduce everything to byte-size pieces.  */
463   dest += dest_offset_bits / 8;
464   dest_offset_bits %= 8;
465   source += source_offset_bits / 8;
466   source_offset_bits %= 8;
467 
468   dest_avail = 8 - dest_offset_bits % 8;
469 
470   /* See if we can fill the first destination byte.  */
471   if (dest_avail < bit_count)
472     {
473       datum = extract_bits (&source, &source_offset_bits, dest_avail,
474 			    bits_big_endian);
475       insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
476       ++dest;
477       dest_offset_bits = 0;
478       bit_count -= dest_avail;
479     }
480 
481   /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
482      than 8 bits remaining.  */
483   gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
484   for (; bit_count >= 8; bit_count -= 8)
485     {
486       datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
487       *dest++ = (gdb_byte) datum;
488     }
489 
490   /* Finally, we may have a few leftover bits.  */
491   gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
492   if (bit_count > 0)
493     {
494       datum = extract_bits (&source, &source_offset_bits, bit_count,
495 			    bits_big_endian);
496       insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
497     }
498 }
499 
500 static void
501 read_pieced_value (struct value *v)
502 {
503   int i;
504   long offset = 0;
505   ULONGEST bits_to_skip;
506   gdb_byte *contents;
507   struct piece_closure *c
508     = (struct piece_closure *) value_computed_closure (v);
509   struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
510   size_t type_len;
511   size_t buffer_size = 0;
512   char *buffer = NULL;
513   struct cleanup *cleanup;
514   int bits_big_endian
515     = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
516 
517   if (value_type (v) != value_enclosing_type (v))
518     internal_error (__FILE__, __LINE__,
519 		    _("Should not be able to create a lazy value with "
520 		      "an enclosing type"));
521 
522   cleanup = make_cleanup (free_current_contents, &buffer);
523 
524   contents = value_contents_raw (v);
525   bits_to_skip = 8 * value_offset (v);
526   if (value_bitsize (v))
527     {
528       bits_to_skip += value_bitpos (v);
529       type_len = value_bitsize (v);
530     }
531   else
532     type_len = 8 * TYPE_LENGTH (value_type (v));
533 
534   for (i = 0; i < c->n_pieces && offset < type_len; i++)
535     {
536       struct dwarf_expr_piece *p = &c->pieces[i];
537       size_t this_size, this_size_bits;
538       long dest_offset_bits, source_offset_bits, source_offset;
539       const gdb_byte *intermediate_buffer;
540 
541       /* Compute size, source, and destination offsets for copying, in
542 	 bits.  */
543       this_size_bits = p->size;
544       if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
545 	{
546 	  bits_to_skip -= this_size_bits;
547 	  continue;
548 	}
549       if (this_size_bits > type_len - offset)
550 	this_size_bits = type_len - offset;
551       if (bits_to_skip > 0)
552 	{
553 	  dest_offset_bits = 0;
554 	  source_offset_bits = bits_to_skip;
555 	  this_size_bits -= bits_to_skip;
556 	  bits_to_skip = 0;
557 	}
558       else
559 	{
560 	  dest_offset_bits = offset;
561 	  source_offset_bits = 0;
562 	}
563 
564       this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
565       source_offset = source_offset_bits / 8;
566       if (buffer_size < this_size)
567 	{
568 	  buffer_size = this_size;
569 	  buffer = xrealloc (buffer, buffer_size);
570 	}
571       intermediate_buffer = buffer;
572 
573       /* Copy from the source to DEST_BUFFER.  */
574       switch (p->location)
575 	{
576 	case DWARF_VALUE_REGISTER:
577 	  {
578 	    struct gdbarch *arch = get_frame_arch (frame);
579 	    int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.value);
580 	    int reg_offset = source_offset;
581 
582 	    if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
583 		&& this_size < register_size (arch, gdb_regnum))
584 	      {
585 		/* Big-endian, and we want less than full size.  */
586 		reg_offset = register_size (arch, gdb_regnum) - this_size;
587 		/* We want the lower-order THIS_SIZE_BITS of the bytes
588 		   we extract from the register.  */
589 		source_offset_bits += 8 * this_size - this_size_bits;
590 	      }
591 
592 	    if (gdb_regnum != -1)
593 	      {
594 		int optim, unavail;
595 
596 		if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
597 					       this_size, buffer,
598 					       &optim, &unavail))
599 		  {
600 		    /* Just so garbage doesn't ever shine through.  */
601 		    memset (buffer, 0, this_size);
602 
603 		    if (optim)
604 		      set_value_optimized_out (v, 1);
605 		    if (unavail)
606 		      mark_value_bytes_unavailable (v, offset, this_size);
607 		  }
608 	      }
609 	    else
610 	      {
611 		error (_("Unable to access DWARF register number %s"),
612 		       paddress (arch, p->v.value));
613 	      }
614 	  }
615 	  break;
616 
617 	case DWARF_VALUE_MEMORY:
618 	  read_value_memory (v, offset,
619 			     p->v.mem.in_stack_memory,
620 			     p->v.mem.addr + source_offset,
621 			     buffer, this_size);
622 	  break;
623 
624 	case DWARF_VALUE_STACK:
625 	  {
626 	    struct gdbarch *gdbarch = get_type_arch (value_type (v));
627 	    size_t n = this_size;
628 
629 	    if (n > c->addr_size - source_offset)
630 	      n = (c->addr_size >= source_offset
631 		   ? c->addr_size - source_offset
632 		   : 0);
633 	    if (n == 0)
634 	      {
635 		/* Nothing.  */
636 	      }
637 	    else if (source_offset == 0)
638 	      store_unsigned_integer (buffer, n,
639 				      gdbarch_byte_order (gdbarch),
640 				      p->v.value);
641 	    else
642 	      {
643 		gdb_byte bytes[sizeof (ULONGEST)];
644 
645 		store_unsigned_integer (bytes, n + source_offset,
646 					gdbarch_byte_order (gdbarch),
647 					p->v.value);
648 		memcpy (buffer, bytes + source_offset, n);
649 	      }
650 	  }
651 	  break;
652 
653 	case DWARF_VALUE_LITERAL:
654 	  {
655 	    size_t n = this_size;
656 
657 	    if (n > p->v.literal.length - source_offset)
658 	      n = (p->v.literal.length >= source_offset
659 		   ? p->v.literal.length - source_offset
660 		   : 0);
661 	    if (n != 0)
662 	      intermediate_buffer = p->v.literal.data + source_offset;
663 	  }
664 	  break;
665 
666 	  /* These bits show up as zeros -- but do not cause the value
667 	     to be considered optimized-out.  */
668 	case DWARF_VALUE_IMPLICIT_POINTER:
669 	  break;
670 
671 	case DWARF_VALUE_OPTIMIZED_OUT:
672 	  set_value_optimized_out (v, 1);
673 	  break;
674 
675 	default:
676 	  internal_error (__FILE__, __LINE__, _("invalid location type"));
677 	}
678 
679       if (p->location != DWARF_VALUE_OPTIMIZED_OUT
680 	  && p->location != DWARF_VALUE_IMPLICIT_POINTER)
681 	copy_bitwise (contents, dest_offset_bits,
682 		      intermediate_buffer, source_offset_bits % 8,
683 		      this_size_bits, bits_big_endian);
684 
685       offset += this_size_bits;
686     }
687 
688   do_cleanups (cleanup);
689 }
690 
691 static void
692 write_pieced_value (struct value *to, struct value *from)
693 {
694   int i;
695   long offset = 0;
696   ULONGEST bits_to_skip;
697   const gdb_byte *contents;
698   struct piece_closure *c
699     = (struct piece_closure *) value_computed_closure (to);
700   struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
701   size_t type_len;
702   size_t buffer_size = 0;
703   char *buffer = NULL;
704   struct cleanup *cleanup;
705   int bits_big_endian
706     = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
707 
708   if (frame == NULL)
709     {
710       set_value_optimized_out (to, 1);
711       return;
712     }
713 
714   cleanup = make_cleanup (free_current_contents, &buffer);
715 
716   contents = value_contents (from);
717   bits_to_skip = 8 * value_offset (to);
718   if (value_bitsize (to))
719     {
720       bits_to_skip += value_bitpos (to);
721       type_len = value_bitsize (to);
722     }
723   else
724     type_len = 8 * TYPE_LENGTH (value_type (to));
725 
726   for (i = 0; i < c->n_pieces && offset < type_len; i++)
727     {
728       struct dwarf_expr_piece *p = &c->pieces[i];
729       size_t this_size_bits, this_size;
730       long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
731       int need_bitwise;
732       const gdb_byte *source_buffer;
733 
734       this_size_bits = p->size;
735       if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
736 	{
737 	  bits_to_skip -= this_size_bits;
738 	  continue;
739 	}
740       if (this_size_bits > type_len - offset)
741 	this_size_bits = type_len - offset;
742       if (bits_to_skip > 0)
743 	{
744 	  dest_offset_bits = bits_to_skip;
745 	  source_offset_bits = 0;
746 	  this_size_bits -= bits_to_skip;
747 	  bits_to_skip = 0;
748 	}
749       else
750 	{
751 	  dest_offset_bits = 0;
752 	  source_offset_bits = offset;
753 	}
754 
755       this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
756       source_offset = source_offset_bits / 8;
757       dest_offset = dest_offset_bits / 8;
758       if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
759 	{
760 	  source_buffer = contents + source_offset;
761 	  need_bitwise = 0;
762 	}
763       else
764 	{
765 	  if (buffer_size < this_size)
766 	    {
767 	      buffer_size = this_size;
768 	      buffer = xrealloc (buffer, buffer_size);
769 	    }
770 	  source_buffer = buffer;
771 	  need_bitwise = 1;
772 	}
773 
774       switch (p->location)
775 	{
776 	case DWARF_VALUE_REGISTER:
777 	  {
778 	    struct gdbarch *arch = get_frame_arch (frame);
779 	    int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.value);
780 	    int reg_offset = dest_offset;
781 
782 	    if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
783 		&& this_size <= register_size (arch, gdb_regnum))
784 	      /* Big-endian, and we want less than full size.  */
785 	      reg_offset = register_size (arch, gdb_regnum) - this_size;
786 
787 	    if (gdb_regnum != -1)
788 	      {
789 		if (need_bitwise)
790 		  {
791 		    int optim, unavail;
792 
793 		    if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
794 						   this_size, buffer,
795 						   &optim, &unavail))
796 		      {
797 			if (optim)
798 			  error (_("Can't do read-modify-write to "
799 				   "update bitfield; containing word has been "
800 				   "optimized out"));
801 			if (unavail)
802 			  throw_error (NOT_AVAILABLE_ERROR,
803 				       _("Can't do read-modify-write to update "
804 					 "bitfield; containing word "
805 					 "is unavailable"));
806 		      }
807 		    copy_bitwise (buffer, dest_offset_bits,
808 				  contents, source_offset_bits,
809 				  this_size_bits,
810 				  bits_big_endian);
811 		  }
812 
813 		put_frame_register_bytes (frame, gdb_regnum, reg_offset,
814 					  this_size, source_buffer);
815 	      }
816 	    else
817 	      {
818 		error (_("Unable to write to DWARF register number %s"),
819 		       paddress (arch, p->v.value));
820 	      }
821 	  }
822 	  break;
823 	case DWARF_VALUE_MEMORY:
824 	  if (need_bitwise)
825 	    {
826 	      /* Only the first and last bytes can possibly have any
827 		 bits reused.  */
828 	      read_memory (p->v.mem.addr + dest_offset, buffer, 1);
829 	      read_memory (p->v.mem.addr + dest_offset + this_size - 1,
830 			   buffer + this_size - 1, 1);
831 	      copy_bitwise (buffer, dest_offset_bits,
832 			    contents, source_offset_bits,
833 			    this_size_bits,
834 			    bits_big_endian);
835 	    }
836 
837 	  write_memory (p->v.mem.addr + dest_offset,
838 			source_buffer, this_size);
839 	  break;
840 	default:
841 	  set_value_optimized_out (to, 1);
842 	  break;
843 	}
844       offset += this_size_bits;
845     }
846 
847   do_cleanups (cleanup);
848 }
849 
850 /* A helper function that checks bit validity in a pieced value.
851    CHECK_FOR indicates the kind of validity checking.
852    DWARF_VALUE_MEMORY means to check whether any bit is valid.
853    DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is
854    optimized out.
855    DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
856    implicit pointer.  */
857 
858 static int
859 check_pieced_value_bits (const struct value *value, int bit_offset,
860 			 int bit_length,
861 			 enum dwarf_value_location check_for)
862 {
863   struct piece_closure *c
864     = (struct piece_closure *) value_computed_closure (value);
865   int i;
866   int validity = (check_for == DWARF_VALUE_MEMORY
867 		  || check_for == DWARF_VALUE_IMPLICIT_POINTER);
868 
869   bit_offset += 8 * value_offset (value);
870   if (value_bitsize (value))
871     bit_offset += value_bitpos (value);
872 
873   for (i = 0; i < c->n_pieces && bit_length > 0; i++)
874     {
875       struct dwarf_expr_piece *p = &c->pieces[i];
876       size_t this_size_bits = p->size;
877 
878       if (bit_offset > 0)
879 	{
880 	  if (bit_offset >= this_size_bits)
881 	    {
882 	      bit_offset -= this_size_bits;
883 	      continue;
884 	    }
885 
886 	  bit_length -= this_size_bits - bit_offset;
887 	  bit_offset = 0;
888 	}
889       else
890 	bit_length -= this_size_bits;
891 
892       if (check_for == DWARF_VALUE_IMPLICIT_POINTER)
893 	{
894 	  if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
895 	    return 0;
896 	}
897       else if (p->location == DWARF_VALUE_OPTIMIZED_OUT
898 	       || p->location == DWARF_VALUE_IMPLICIT_POINTER)
899 	{
900 	  if (validity)
901 	    return 0;
902 	}
903       else
904 	{
905 	  if (!validity)
906 	    return 1;
907 	}
908     }
909 
910   return validity;
911 }
912 
913 static int
914 check_pieced_value_validity (const struct value *value, int bit_offset,
915 			     int bit_length)
916 {
917   return check_pieced_value_bits (value, bit_offset, bit_length,
918 				  DWARF_VALUE_MEMORY);
919 }
920 
921 static int
922 check_pieced_value_invalid (const struct value *value)
923 {
924   return check_pieced_value_bits (value, 0,
925 				  8 * TYPE_LENGTH (value_type (value)),
926 				  DWARF_VALUE_OPTIMIZED_OUT);
927 }
928 
929 /* An implementation of an lval_funcs method to see whether a value is
930    a synthetic pointer.  */
931 
932 static int
933 check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
934 				int bit_length)
935 {
936   return check_pieced_value_bits (value, bit_offset, bit_length,
937 				  DWARF_VALUE_IMPLICIT_POINTER);
938 }
939 
940 /* A wrapper function for get_frame_address_in_block.  */
941 
942 static CORE_ADDR
943 get_frame_address_in_block_wrapper (void *baton)
944 {
945   return get_frame_address_in_block (baton);
946 }
947 
948 /* An implementation of an lval_funcs method to indirect through a
949    pointer.  This handles the synthetic pointer case when needed.  */
950 
951 static struct value *
952 indirect_pieced_value (struct value *value)
953 {
954   struct piece_closure *c
955     = (struct piece_closure *) value_computed_closure (value);
956   struct type *type;
957   struct frame_info *frame;
958   struct dwarf2_locexpr_baton baton;
959   int i, bit_offset, bit_length;
960   struct dwarf_expr_piece *piece = NULL;
961   struct value *result;
962   LONGEST byte_offset;
963 
964   type = value_type (value);
965   if (TYPE_CODE (type) != TYPE_CODE_PTR)
966     return NULL;
967 
968   bit_length = 8 * TYPE_LENGTH (type);
969   bit_offset = 8 * value_offset (value);
970   if (value_bitsize (value))
971     bit_offset += value_bitpos (value);
972 
973   for (i = 0; i < c->n_pieces && bit_length > 0; i++)
974     {
975       struct dwarf_expr_piece *p = &c->pieces[i];
976       size_t this_size_bits = p->size;
977 
978       if (bit_offset > 0)
979 	{
980 	  if (bit_offset >= this_size_bits)
981 	    {
982 	      bit_offset -= this_size_bits;
983 	      continue;
984 	    }
985 
986 	  bit_length -= this_size_bits - bit_offset;
987 	  bit_offset = 0;
988 	}
989       else
990 	bit_length -= this_size_bits;
991 
992       if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
993 	return NULL;
994 
995       if (bit_length != 0)
996 	error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
997 
998       piece = p;
999       break;
1000     }
1001 
1002   frame = get_selected_frame (_("No frame selected."));
1003   byte_offset = value_as_address (value);
1004 
1005   gdb_assert (piece);
1006   baton = dwarf2_fetch_die_location_block (piece->v.ptr.die, c->per_cu,
1007 					   get_frame_address_in_block_wrapper,
1008 					   frame);
1009 
1010   result = dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
1011 					  baton.data, baton.size, baton.per_cu,
1012 					  byte_offset);
1013 
1014   return result;
1015 }
1016 
1017 static void *
1018 copy_pieced_value_closure (const struct value *v)
1019 {
1020   struct piece_closure *c
1021     = (struct piece_closure *) value_computed_closure (v);
1022 
1023   ++c->refc;
1024   return c;
1025 }
1026 
1027 static void
1028 free_pieced_value_closure (struct value *v)
1029 {
1030   struct piece_closure *c
1031     = (struct piece_closure *) value_computed_closure (v);
1032 
1033   --c->refc;
1034   if (c->refc == 0)
1035     {
1036       xfree (c->pieces);
1037       xfree (c);
1038     }
1039 }
1040 
1041 /* Functions for accessing a variable described by DW_OP_piece.  */
1042 static struct lval_funcs pieced_value_funcs = {
1043   read_pieced_value,
1044   write_pieced_value,
1045   check_pieced_value_validity,
1046   check_pieced_value_invalid,
1047   indirect_pieced_value,
1048   check_pieced_synthetic_pointer,
1049   copy_pieced_value_closure,
1050   free_pieced_value_closure
1051 };
1052 
1053 /* Helper function which throws an error if a synthetic pointer is
1054    invalid.  */
1055 
1056 static void
1057 invalid_synthetic_pointer (void)
1058 {
1059   error (_("access outside bounds of object "
1060 	   "referenced via synthetic pointer"));
1061 }
1062 
1063 /* Evaluate a location description, starting at DATA and with length
1064    SIZE, to find the current location of variable of TYPE in the
1065    context of FRAME.  BYTE_OFFSET is applied after the contents are
1066    computed.  */
1067 
1068 static struct value *
1069 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
1070 			       const gdb_byte *data, unsigned short size,
1071 			       struct dwarf2_per_cu_data *per_cu,
1072 			       LONGEST byte_offset)
1073 {
1074   struct value *retval;
1075   struct dwarf_expr_baton baton;
1076   struct dwarf_expr_context *ctx;
1077   struct cleanup *old_chain;
1078   struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1079   volatile struct gdb_exception ex;
1080 
1081   if (byte_offset < 0)
1082     invalid_synthetic_pointer ();
1083 
1084   if (size == 0)
1085     {
1086       retval = allocate_value (type);
1087       VALUE_LVAL (retval) = not_lval;
1088       set_value_optimized_out (retval, 1);
1089       return retval;
1090     }
1091 
1092   baton.frame = frame;
1093   baton.per_cu = per_cu;
1094 
1095   ctx = new_dwarf_expr_context ();
1096   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1097 
1098   ctx->gdbarch = get_objfile_arch (objfile);
1099   ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1100   ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1101   ctx->baton = &baton;
1102   ctx->read_reg = dwarf_expr_read_reg;
1103   ctx->read_mem = dwarf_expr_read_mem;
1104   ctx->get_frame_base = dwarf_expr_frame_base;
1105   ctx->get_frame_cfa = dwarf_expr_frame_cfa;
1106   ctx->get_frame_pc = dwarf_expr_frame_pc;
1107   ctx->get_tls_address = dwarf_expr_tls_address;
1108   ctx->dwarf_call = dwarf_expr_dwarf_call;
1109 
1110   TRY_CATCH (ex, RETURN_MASK_ERROR)
1111     {
1112       dwarf_expr_eval (ctx, data, size);
1113     }
1114   if (ex.reason < 0)
1115     {
1116       if (ex.error == NOT_AVAILABLE_ERROR)
1117 	{
1118 	  retval = allocate_value (type);
1119 	  mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
1120 	  return retval;
1121 	}
1122       else
1123 	throw_exception (ex);
1124     }
1125 
1126   if (ctx->num_pieces > 0)
1127     {
1128       struct piece_closure *c;
1129       struct frame_id frame_id = get_frame_id (frame);
1130       ULONGEST bit_size = 0;
1131       int i;
1132 
1133       for (i = 0; i < ctx->num_pieces; ++i)
1134 	bit_size += ctx->pieces[i].size;
1135       if (8 * (byte_offset + TYPE_LENGTH (type)) > bit_size)
1136 	invalid_synthetic_pointer ();
1137 
1138       c = allocate_piece_closure (per_cu, ctx->num_pieces, ctx->pieces,
1139 				  ctx->addr_size);
1140       retval = allocate_computed_value (type, &pieced_value_funcs, c);
1141       VALUE_FRAME_ID (retval) = frame_id;
1142       set_value_offset (retval, byte_offset);
1143     }
1144   else
1145     {
1146       switch (ctx->location)
1147 	{
1148 	case DWARF_VALUE_REGISTER:
1149 	  {
1150 	    struct gdbarch *arch = get_frame_arch (frame);
1151 	    ULONGEST dwarf_regnum = dwarf_expr_fetch (ctx, 0);
1152 	    int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
1153 
1154 	    if (byte_offset != 0)
1155 	      error (_("cannot use offset on synthetic pointer to register"));
1156 	    if (gdb_regnum != -1)
1157 	      retval = value_from_register (type, gdb_regnum, frame);
1158 	    else
1159 	      error (_("Unable to access DWARF register number %s"),
1160 		     paddress (arch, dwarf_regnum));
1161 	  }
1162 	  break;
1163 
1164 	case DWARF_VALUE_MEMORY:
1165 	  {
1166 	    CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
1167 	    int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
1168 
1169 	    retval = allocate_value_lazy (type);
1170 	    VALUE_LVAL (retval) = lval_memory;
1171 	    if (in_stack_memory)
1172 	      set_value_stack (retval, 1);
1173 	    set_value_address (retval, address + byte_offset);
1174 	  }
1175 	  break;
1176 
1177 	case DWARF_VALUE_STACK:
1178 	  {
1179 	    ULONGEST value = dwarf_expr_fetch (ctx, 0);
1180 	    bfd_byte *contents, *tem;
1181 	    size_t n = ctx->addr_size;
1182 
1183 	    if (byte_offset + TYPE_LENGTH (type) > n)
1184 	      invalid_synthetic_pointer ();
1185 
1186 	    tem = alloca (n);
1187 	    store_unsigned_integer (tem, n,
1188 				    gdbarch_byte_order (ctx->gdbarch),
1189 				    value);
1190 
1191 	    tem += byte_offset;
1192 	    n -= byte_offset;
1193 
1194 	    retval = allocate_value (type);
1195 	    contents = value_contents_raw (retval);
1196 	    if (n > TYPE_LENGTH (type))
1197 	      n = TYPE_LENGTH (type);
1198 	    memcpy (contents, tem, n);
1199 	  }
1200 	  break;
1201 
1202 	case DWARF_VALUE_LITERAL:
1203 	  {
1204 	    bfd_byte *contents;
1205 	    const bfd_byte *ldata;
1206 	    size_t n = ctx->len;
1207 
1208 	    if (byte_offset + TYPE_LENGTH (type) > n)
1209 	      invalid_synthetic_pointer ();
1210 
1211 	    retval = allocate_value (type);
1212 	    contents = value_contents_raw (retval);
1213 
1214 	    ldata = ctx->data + byte_offset;
1215 	    n -= byte_offset;
1216 
1217 	    if (n > TYPE_LENGTH (type))
1218 	      n = TYPE_LENGTH (type);
1219 	    memcpy (contents, ldata, n);
1220 	  }
1221 	  break;
1222 
1223 	case DWARF_VALUE_OPTIMIZED_OUT:
1224 	  retval = allocate_value (type);
1225 	  VALUE_LVAL (retval) = not_lval;
1226 	  set_value_optimized_out (retval, 1);
1227 	  break;
1228 
1229 	  /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
1230 	     operation by execute_stack_op.  */
1231 	case DWARF_VALUE_IMPLICIT_POINTER:
1232 	  /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
1233 	     it can only be encountered when making a piece.  */
1234 	default:
1235 	  internal_error (__FILE__, __LINE__, _("invalid location type"));
1236 	}
1237     }
1238 
1239   set_value_initialized (retval, ctx->initialized);
1240 
1241   do_cleanups (old_chain);
1242 
1243   return retval;
1244 }
1245 
1246 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
1247    passes 0 as the byte_offset.  */
1248 
1249 struct value *
1250 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
1251 			  const gdb_byte *data, unsigned short size,
1252 			  struct dwarf2_per_cu_data *per_cu)
1253 {
1254   return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
1255 }
1256 
1257 
1258 /* Helper functions and baton for dwarf2_loc_desc_needs_frame.  */
1259 
1260 struct needs_frame_baton
1261 {
1262   int needs_frame;
1263   struct dwarf2_per_cu_data *per_cu;
1264 };
1265 
1266 /* Reads from registers do require a frame.  */
1267 static CORE_ADDR
1268 needs_frame_read_reg (void *baton, int regnum)
1269 {
1270   struct needs_frame_baton *nf_baton = baton;
1271 
1272   nf_baton->needs_frame = 1;
1273   return 1;
1274 }
1275 
1276 /* Reads from memory do not require a frame.  */
1277 static void
1278 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
1279 {
1280   memset (buf, 0, len);
1281 }
1282 
1283 /* Frame-relative accesses do require a frame.  */
1284 static void
1285 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
1286 {
1287   static gdb_byte lit0 = DW_OP_lit0;
1288   struct needs_frame_baton *nf_baton = baton;
1289 
1290   *start = &lit0;
1291   *length = 1;
1292 
1293   nf_baton->needs_frame = 1;
1294 }
1295 
1296 /* CFA accesses require a frame.  */
1297 
1298 static CORE_ADDR
1299 needs_frame_frame_cfa (void *baton)
1300 {
1301   struct needs_frame_baton *nf_baton = baton;
1302 
1303   nf_baton->needs_frame = 1;
1304   return 1;
1305 }
1306 
1307 /* Thread-local accesses do require a frame.  */
1308 static CORE_ADDR
1309 needs_frame_tls_address (void *baton, CORE_ADDR offset)
1310 {
1311   struct needs_frame_baton *nf_baton = baton;
1312 
1313   nf_baton->needs_frame = 1;
1314   return 1;
1315 }
1316 
1317 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame.  */
1318 
1319 static void
1320 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
1321 {
1322   struct needs_frame_baton *nf_baton = ctx->baton;
1323 
1324   per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
1325 		     ctx->get_frame_pc, ctx->baton);
1326 }
1327 
1328 /* Return non-zero iff the location expression at DATA (length SIZE)
1329    requires a frame to evaluate.  */
1330 
1331 static int
1332 dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
1333 			     struct dwarf2_per_cu_data *per_cu)
1334 {
1335   struct needs_frame_baton baton;
1336   struct dwarf_expr_context *ctx;
1337   int in_reg;
1338   struct cleanup *old_chain;
1339   struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1340 
1341   baton.needs_frame = 0;
1342   baton.per_cu = per_cu;
1343 
1344   ctx = new_dwarf_expr_context ();
1345   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1346 
1347   ctx->gdbarch = get_objfile_arch (objfile);
1348   ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1349   ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1350   ctx->baton = &baton;
1351   ctx->read_reg = needs_frame_read_reg;
1352   ctx->read_mem = needs_frame_read_mem;
1353   ctx->get_frame_base = needs_frame_frame_base;
1354   ctx->get_frame_cfa = needs_frame_frame_cfa;
1355   ctx->get_frame_pc = needs_frame_frame_cfa;
1356   ctx->get_tls_address = needs_frame_tls_address;
1357   ctx->dwarf_call = needs_frame_dwarf_call;
1358 
1359   dwarf_expr_eval (ctx, data, size);
1360 
1361   in_reg = ctx->location == DWARF_VALUE_REGISTER;
1362 
1363   if (ctx->num_pieces > 0)
1364     {
1365       int i;
1366 
1367       /* If the location has several pieces, and any of them are in
1368          registers, then we will need a frame to fetch them from.  */
1369       for (i = 0; i < ctx->num_pieces; i++)
1370         if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
1371           in_reg = 1;
1372     }
1373 
1374   do_cleanups (old_chain);
1375 
1376   return baton.needs_frame || in_reg;
1377 }
1378 
1379 /* A helper function that throws an unimplemented error mentioning a
1380    given DWARF operator.  */
1381 
1382 static void
1383 unimplemented (unsigned int op)
1384 {
1385   const char *name = dwarf_stack_op_name (op);
1386 
1387   if (name)
1388     error (_("DWARF operator %s cannot be translated to an agent expression"),
1389 	   name);
1390   else
1391     error (_("Unknown DWARF operator 0x%02x cannot be translated "
1392 	     "to an agent expression"),
1393 	   op);
1394 }
1395 
1396 /* A helper function to convert a DWARF register to an arch register.
1397    ARCH is the architecture.
1398    DWARF_REG is the register.
1399    This will throw an exception if the DWARF register cannot be
1400    translated to an architecture register.  */
1401 
1402 static int
1403 translate_register (struct gdbarch *arch, int dwarf_reg)
1404 {
1405   int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
1406   if (reg == -1)
1407     error (_("Unable to access DWARF register number %d"), dwarf_reg);
1408   return reg;
1409 }
1410 
1411 /* A helper function that emits an access to memory.  ARCH is the
1412    target architecture.  EXPR is the expression which we are building.
1413    NBITS is the number of bits we want to read.  This emits the
1414    opcodes needed to read the memory and then extract the desired
1415    bits.  */
1416 
1417 static void
1418 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
1419 {
1420   ULONGEST nbytes = (nbits + 7) / 8;
1421 
1422   gdb_assert (nbits > 0 && nbits <= sizeof (LONGEST));
1423 
1424   if (trace_kludge)
1425     ax_trace_quick (expr, nbytes);
1426 
1427   if (nbits <= 8)
1428     ax_simple (expr, aop_ref8);
1429   else if (nbits <= 16)
1430     ax_simple (expr, aop_ref16);
1431   else if (nbits <= 32)
1432     ax_simple (expr, aop_ref32);
1433   else
1434     ax_simple (expr, aop_ref64);
1435 
1436   /* If we read exactly the number of bytes we wanted, we're done.  */
1437   if (8 * nbytes == nbits)
1438     return;
1439 
1440   if (gdbarch_bits_big_endian (arch))
1441     {
1442       /* On a bits-big-endian machine, we want the high-order
1443 	 NBITS.  */
1444       ax_const_l (expr, 8 * nbytes - nbits);
1445       ax_simple (expr, aop_rsh_unsigned);
1446     }
1447   else
1448     {
1449       /* On a bits-little-endian box, we want the low-order NBITS.  */
1450       ax_zero_ext (expr, nbits);
1451     }
1452 }
1453 
1454 /* A helper function to return the frame's PC.  */
1455 
1456 static CORE_ADDR
1457 get_ax_pc (void *baton)
1458 {
1459   struct agent_expr *expr = baton;
1460 
1461   return expr->scope;
1462 }
1463 
1464 /* Compile a DWARF location expression to an agent expression.
1465 
1466    EXPR is the agent expression we are building.
1467    LOC is the agent value we modify.
1468    ARCH is the architecture.
1469    ADDR_SIZE is the size of addresses, in bytes.
1470    OP_PTR is the start of the location expression.
1471    OP_END is one past the last byte of the location expression.
1472 
1473    This will throw an exception for various kinds of errors -- for
1474    example, if the expression cannot be compiled, or if the expression
1475    is invalid.  */
1476 
1477 void
1478 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
1479 			   struct gdbarch *arch, unsigned int addr_size,
1480 			   const gdb_byte *op_ptr, const gdb_byte *op_end,
1481 			   struct dwarf2_per_cu_data *per_cu)
1482 {
1483   struct cleanup *cleanups;
1484   int i, *offsets;
1485   VEC(int) *dw_labels = NULL, *patches = NULL;
1486   const gdb_byte * const base = op_ptr;
1487   const gdb_byte *previous_piece = op_ptr;
1488   enum bfd_endian byte_order = gdbarch_byte_order (arch);
1489   ULONGEST bits_collected = 0;
1490   unsigned int addr_size_bits = 8 * addr_size;
1491   int bits_big_endian = gdbarch_bits_big_endian (arch);
1492 
1493   offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
1494   cleanups = make_cleanup (xfree, offsets);
1495 
1496   for (i = 0; i < op_end - op_ptr; ++i)
1497     offsets[i] = -1;
1498 
1499   make_cleanup (VEC_cleanup (int), &dw_labels);
1500   make_cleanup (VEC_cleanup (int), &patches);
1501 
1502   /* By default we are making an address.  */
1503   loc->kind = axs_lvalue_memory;
1504 
1505   while (op_ptr < op_end)
1506     {
1507       enum dwarf_location_atom op = *op_ptr;
1508       ULONGEST uoffset, reg;
1509       LONGEST offset;
1510       int i;
1511 
1512       offsets[op_ptr - base] = expr->len;
1513       ++op_ptr;
1514 
1515       /* Our basic approach to code generation is to map DWARF
1516 	 operations directly to AX operations.  However, there are
1517 	 some differences.
1518 
1519 	 First, DWARF works on address-sized units, but AX always uses
1520 	 LONGEST.  For most operations we simply ignore this
1521 	 difference; instead we generate sign extensions as needed
1522 	 before division and comparison operations.  It would be nice
1523 	 to omit the sign extensions, but there is no way to determine
1524 	 the size of the target's LONGEST.  (This code uses the size
1525 	 of the host LONGEST in some cases -- that is a bug but it is
1526 	 difficult to fix.)
1527 
1528 	 Second, some DWARF operations cannot be translated to AX.
1529 	 For these we simply fail.  See
1530 	 http://sourceware.org/bugzilla/show_bug.cgi?id=11662.  */
1531       switch (op)
1532 	{
1533 	case DW_OP_lit0:
1534 	case DW_OP_lit1:
1535 	case DW_OP_lit2:
1536 	case DW_OP_lit3:
1537 	case DW_OP_lit4:
1538 	case DW_OP_lit5:
1539 	case DW_OP_lit6:
1540 	case DW_OP_lit7:
1541 	case DW_OP_lit8:
1542 	case DW_OP_lit9:
1543 	case DW_OP_lit10:
1544 	case DW_OP_lit11:
1545 	case DW_OP_lit12:
1546 	case DW_OP_lit13:
1547 	case DW_OP_lit14:
1548 	case DW_OP_lit15:
1549 	case DW_OP_lit16:
1550 	case DW_OP_lit17:
1551 	case DW_OP_lit18:
1552 	case DW_OP_lit19:
1553 	case DW_OP_lit20:
1554 	case DW_OP_lit21:
1555 	case DW_OP_lit22:
1556 	case DW_OP_lit23:
1557 	case DW_OP_lit24:
1558 	case DW_OP_lit25:
1559 	case DW_OP_lit26:
1560 	case DW_OP_lit27:
1561 	case DW_OP_lit28:
1562 	case DW_OP_lit29:
1563 	case DW_OP_lit30:
1564 	case DW_OP_lit31:
1565 	  ax_const_l (expr, op - DW_OP_lit0);
1566 	  break;
1567 
1568 	case DW_OP_addr:
1569 	  uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
1570 	  op_ptr += addr_size;
1571 	  /* Some versions of GCC emit DW_OP_addr before
1572 	     DW_OP_GNU_push_tls_address.  In this case the value is an
1573 	     index, not an address.  We don't support things like
1574 	     branching between the address and the TLS op.  */
1575 	  if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
1576 	    uoffset += dwarf2_per_cu_text_offset (per_cu);
1577 	  ax_const_l (expr, uoffset);
1578 	  break;
1579 
1580 	case DW_OP_const1u:
1581 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
1582 	  op_ptr += 1;
1583 	  break;
1584 	case DW_OP_const1s:
1585 	  ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
1586 	  op_ptr += 1;
1587 	  break;
1588 	case DW_OP_const2u:
1589 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
1590 	  op_ptr += 2;
1591 	  break;
1592 	case DW_OP_const2s:
1593 	  ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
1594 	  op_ptr += 2;
1595 	  break;
1596 	case DW_OP_const4u:
1597 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
1598 	  op_ptr += 4;
1599 	  break;
1600 	case DW_OP_const4s:
1601 	  ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
1602 	  op_ptr += 4;
1603 	  break;
1604 	case DW_OP_const8u:
1605 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
1606 	  op_ptr += 8;
1607 	  break;
1608 	case DW_OP_const8s:
1609 	  ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
1610 	  op_ptr += 8;
1611 	  break;
1612 	case DW_OP_constu:
1613 	  op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
1614 	  ax_const_l (expr, uoffset);
1615 	  break;
1616 	case DW_OP_consts:
1617 	  op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1618 	  ax_const_l (expr, offset);
1619 	  break;
1620 
1621 	case DW_OP_reg0:
1622 	case DW_OP_reg1:
1623 	case DW_OP_reg2:
1624 	case DW_OP_reg3:
1625 	case DW_OP_reg4:
1626 	case DW_OP_reg5:
1627 	case DW_OP_reg6:
1628 	case DW_OP_reg7:
1629 	case DW_OP_reg8:
1630 	case DW_OP_reg9:
1631 	case DW_OP_reg10:
1632 	case DW_OP_reg11:
1633 	case DW_OP_reg12:
1634 	case DW_OP_reg13:
1635 	case DW_OP_reg14:
1636 	case DW_OP_reg15:
1637 	case DW_OP_reg16:
1638 	case DW_OP_reg17:
1639 	case DW_OP_reg18:
1640 	case DW_OP_reg19:
1641 	case DW_OP_reg20:
1642 	case DW_OP_reg21:
1643 	case DW_OP_reg22:
1644 	case DW_OP_reg23:
1645 	case DW_OP_reg24:
1646 	case DW_OP_reg25:
1647 	case DW_OP_reg26:
1648 	case DW_OP_reg27:
1649 	case DW_OP_reg28:
1650 	case DW_OP_reg29:
1651 	case DW_OP_reg30:
1652 	case DW_OP_reg31:
1653 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1654 	  loc->u.reg = translate_register (arch, op - DW_OP_reg0);
1655 	  loc->kind = axs_lvalue_register;
1656 	  break;
1657 
1658 	case DW_OP_regx:
1659 	  op_ptr = read_uleb128 (op_ptr, op_end, &reg);
1660 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1661 	  loc->u.reg = translate_register (arch, reg);
1662 	  loc->kind = axs_lvalue_register;
1663 	  break;
1664 
1665 	case DW_OP_implicit_value:
1666 	  {
1667 	    ULONGEST len;
1668 
1669 	    op_ptr = read_uleb128 (op_ptr, op_end, &len);
1670 	    if (op_ptr + len > op_end)
1671 	      error (_("DW_OP_implicit_value: too few bytes available."));
1672 	    if (len > sizeof (ULONGEST))
1673 	      error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
1674 		     (int) len);
1675 
1676 	    ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
1677 							byte_order));
1678 	    op_ptr += len;
1679 	    dwarf_expr_require_composition (op_ptr, op_end,
1680 					    "DW_OP_implicit_value");
1681 
1682 	    loc->kind = axs_rvalue;
1683 	  }
1684 	  break;
1685 
1686 	case DW_OP_stack_value:
1687 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
1688 	  loc->kind = axs_rvalue;
1689 	  break;
1690 
1691 	case DW_OP_breg0:
1692 	case DW_OP_breg1:
1693 	case DW_OP_breg2:
1694 	case DW_OP_breg3:
1695 	case DW_OP_breg4:
1696 	case DW_OP_breg5:
1697 	case DW_OP_breg6:
1698 	case DW_OP_breg7:
1699 	case DW_OP_breg8:
1700 	case DW_OP_breg9:
1701 	case DW_OP_breg10:
1702 	case DW_OP_breg11:
1703 	case DW_OP_breg12:
1704 	case DW_OP_breg13:
1705 	case DW_OP_breg14:
1706 	case DW_OP_breg15:
1707 	case DW_OP_breg16:
1708 	case DW_OP_breg17:
1709 	case DW_OP_breg18:
1710 	case DW_OP_breg19:
1711 	case DW_OP_breg20:
1712 	case DW_OP_breg21:
1713 	case DW_OP_breg22:
1714 	case DW_OP_breg23:
1715 	case DW_OP_breg24:
1716 	case DW_OP_breg25:
1717 	case DW_OP_breg26:
1718 	case DW_OP_breg27:
1719 	case DW_OP_breg28:
1720 	case DW_OP_breg29:
1721 	case DW_OP_breg30:
1722 	case DW_OP_breg31:
1723 	  op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1724 	  i = translate_register (arch, op - DW_OP_breg0);
1725 	  ax_reg (expr, i);
1726 	  if (offset != 0)
1727 	    {
1728 	      ax_const_l (expr, offset);
1729 	      ax_simple (expr, aop_add);
1730 	    }
1731 	  break;
1732 	case DW_OP_bregx:
1733 	  {
1734 	    op_ptr = read_uleb128 (op_ptr, op_end, &reg);
1735 	    op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1736 	    i = translate_register (arch, reg);
1737 	    ax_reg (expr, i);
1738 	    if (offset != 0)
1739 	      {
1740 		ax_const_l (expr, offset);
1741 		ax_simple (expr, aop_add);
1742 	      }
1743 	  }
1744 	  break;
1745 	case DW_OP_fbreg:
1746 	  {
1747 	    const gdb_byte *datastart;
1748 	    size_t datalen;
1749 	    unsigned int before_stack_len;
1750 	    struct block *b;
1751 	    struct symbol *framefunc;
1752 	    LONGEST base_offset = 0;
1753 
1754 	    b = block_for_pc (expr->scope);
1755 
1756 	    if (!b)
1757 	      error (_("No block found for address"));
1758 
1759 	    framefunc = block_linkage_function (b);
1760 
1761 	    if (!framefunc)
1762 	      error (_("No function found for block"));
1763 
1764 	    dwarf_expr_frame_base_1 (framefunc, expr->scope,
1765 				     &datastart, &datalen);
1766 
1767 	    op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1768 	    dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
1769 				       datastart + datalen, per_cu);
1770 
1771 	    if (offset != 0)
1772 	      {
1773 		ax_const_l (expr, offset);
1774 		ax_simple (expr, aop_add);
1775 	      }
1776 
1777 	    loc->kind = axs_lvalue_memory;
1778 	  }
1779 	  break;
1780 
1781 	case DW_OP_dup:
1782 	  ax_simple (expr, aop_dup);
1783 	  break;
1784 
1785 	case DW_OP_drop:
1786 	  ax_simple (expr, aop_pop);
1787 	  break;
1788 
1789 	case DW_OP_pick:
1790 	  offset = *op_ptr++;
1791 	  ax_pick (expr, offset);
1792 	  break;
1793 
1794 	case DW_OP_swap:
1795 	  ax_simple (expr, aop_swap);
1796 	  break;
1797 
1798 	case DW_OP_over:
1799 	  ax_pick (expr, 1);
1800 	  break;
1801 
1802 	case DW_OP_rot:
1803 	  ax_simple (expr, aop_rot);
1804 	  break;
1805 
1806 	case DW_OP_deref:
1807 	case DW_OP_deref_size:
1808 	  {
1809 	    int size;
1810 
1811 	    if (op == DW_OP_deref_size)
1812 	      size = *op_ptr++;
1813 	    else
1814 	      size = addr_size;
1815 
1816 	    switch (size)
1817 	      {
1818 	      case 8:
1819 		ax_simple (expr, aop_ref8);
1820 		break;
1821 	      case 16:
1822 		ax_simple (expr, aop_ref16);
1823 		break;
1824 	      case 32:
1825 		ax_simple (expr, aop_ref32);
1826 		break;
1827 	      case 64:
1828 		ax_simple (expr, aop_ref64);
1829 		break;
1830 	      default:
1831 		/* Note that dwarf_stack_op_name will never return
1832 		   NULL here.  */
1833 		error (_("Unsupported size %d in %s"),
1834 		       size, dwarf_stack_op_name (op));
1835 	      }
1836 	  }
1837 	  break;
1838 
1839 	case DW_OP_abs:
1840 	  /* Sign extend the operand.  */
1841 	  ax_ext (expr, addr_size_bits);
1842 	  ax_simple (expr, aop_dup);
1843 	  ax_const_l (expr, 0);
1844 	  ax_simple (expr, aop_less_signed);
1845 	  ax_simple (expr, aop_log_not);
1846 	  i = ax_goto (expr, aop_if_goto);
1847 	  /* We have to emit 0 - X.  */
1848 	  ax_const_l (expr, 0);
1849 	  ax_simple (expr, aop_swap);
1850 	  ax_simple (expr, aop_sub);
1851 	  ax_label (expr, i, expr->len);
1852 	  break;
1853 
1854 	case DW_OP_neg:
1855 	  /* No need to sign extend here.  */
1856 	  ax_const_l (expr, 0);
1857 	  ax_simple (expr, aop_swap);
1858 	  ax_simple (expr, aop_sub);
1859 	  break;
1860 
1861 	case DW_OP_not:
1862 	  /* Sign extend the operand.  */
1863 	  ax_ext (expr, addr_size_bits);
1864 	  ax_simple (expr, aop_bit_not);
1865 	  break;
1866 
1867 	case DW_OP_plus_uconst:
1868 	  op_ptr = read_uleb128 (op_ptr, op_end, &reg);
1869 	  /* It would be really weird to emit `DW_OP_plus_uconst 0',
1870 	     but we micro-optimize anyhow.  */
1871 	  if (reg != 0)
1872 	    {
1873 	      ax_const_l (expr, reg);
1874 	      ax_simple (expr, aop_add);
1875 	    }
1876 	  break;
1877 
1878 	case DW_OP_and:
1879 	  ax_simple (expr, aop_bit_and);
1880 	  break;
1881 
1882 	case DW_OP_div:
1883 	  /* Sign extend the operands.  */
1884 	  ax_ext (expr, addr_size_bits);
1885 	  ax_simple (expr, aop_swap);
1886 	  ax_ext (expr, addr_size_bits);
1887 	  ax_simple (expr, aop_swap);
1888 	  ax_simple (expr, aop_div_signed);
1889 	  break;
1890 
1891 	case DW_OP_minus:
1892 	  ax_simple (expr, aop_sub);
1893 	  break;
1894 
1895 	case DW_OP_mod:
1896 	  ax_simple (expr, aop_rem_unsigned);
1897 	  break;
1898 
1899 	case DW_OP_mul:
1900 	  ax_simple (expr, aop_mul);
1901 	  break;
1902 
1903 	case DW_OP_or:
1904 	  ax_simple (expr, aop_bit_or);
1905 	  break;
1906 
1907 	case DW_OP_plus:
1908 	  ax_simple (expr, aop_add);
1909 	  break;
1910 
1911 	case DW_OP_shl:
1912 	  ax_simple (expr, aop_lsh);
1913 	  break;
1914 
1915 	case DW_OP_shr:
1916 	  ax_simple (expr, aop_rsh_unsigned);
1917 	  break;
1918 
1919 	case DW_OP_shra:
1920 	  ax_simple (expr, aop_rsh_signed);
1921 	  break;
1922 
1923 	case DW_OP_xor:
1924 	  ax_simple (expr, aop_bit_xor);
1925 	  break;
1926 
1927 	case DW_OP_le:
1928 	  /* Sign extend the operands.  */
1929 	  ax_ext (expr, addr_size_bits);
1930 	  ax_simple (expr, aop_swap);
1931 	  ax_ext (expr, addr_size_bits);
1932 	  /* Note no swap here: A <= B is !(B < A).  */
1933 	  ax_simple (expr, aop_less_signed);
1934 	  ax_simple (expr, aop_log_not);
1935 	  break;
1936 
1937 	case DW_OP_ge:
1938 	  /* Sign extend the operands.  */
1939 	  ax_ext (expr, addr_size_bits);
1940 	  ax_simple (expr, aop_swap);
1941 	  ax_ext (expr, addr_size_bits);
1942 	  ax_simple (expr, aop_swap);
1943 	  /* A >= B is !(A < B).  */
1944 	  ax_simple (expr, aop_less_signed);
1945 	  ax_simple (expr, aop_log_not);
1946 	  break;
1947 
1948 	case DW_OP_eq:
1949 	  /* Sign extend the operands.  */
1950 	  ax_ext (expr, addr_size_bits);
1951 	  ax_simple (expr, aop_swap);
1952 	  ax_ext (expr, addr_size_bits);
1953 	  /* No need for a second swap here.  */
1954 	  ax_simple (expr, aop_equal);
1955 	  break;
1956 
1957 	case DW_OP_lt:
1958 	  /* Sign extend the operands.  */
1959 	  ax_ext (expr, addr_size_bits);
1960 	  ax_simple (expr, aop_swap);
1961 	  ax_ext (expr, addr_size_bits);
1962 	  ax_simple (expr, aop_swap);
1963 	  ax_simple (expr, aop_less_signed);
1964 	  break;
1965 
1966 	case DW_OP_gt:
1967 	  /* Sign extend the operands.  */
1968 	  ax_ext (expr, addr_size_bits);
1969 	  ax_simple (expr, aop_swap);
1970 	  ax_ext (expr, addr_size_bits);
1971 	  /* Note no swap here: A > B is B < A.  */
1972 	  ax_simple (expr, aop_less_signed);
1973 	  break;
1974 
1975 	case DW_OP_ne:
1976 	  /* Sign extend the operands.  */
1977 	  ax_ext (expr, addr_size_bits);
1978 	  ax_simple (expr, aop_swap);
1979 	  ax_ext (expr, addr_size_bits);
1980 	  /* No need for a swap here.  */
1981 	  ax_simple (expr, aop_equal);
1982 	  ax_simple (expr, aop_log_not);
1983 	  break;
1984 
1985 	case DW_OP_call_frame_cfa:
1986 	  dwarf2_compile_cfa_to_ax (expr, loc, arch, expr->scope, per_cu);
1987 	  loc->kind = axs_lvalue_memory;
1988 	  break;
1989 
1990 	case DW_OP_GNU_push_tls_address:
1991 	  unimplemented (op);
1992 	  break;
1993 
1994 	case DW_OP_skip:
1995 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
1996 	  op_ptr += 2;
1997 	  i = ax_goto (expr, aop_goto);
1998 	  VEC_safe_push (int, dw_labels, op_ptr + offset - base);
1999 	  VEC_safe_push (int, patches, i);
2000 	  break;
2001 
2002 	case DW_OP_bra:
2003 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
2004 	  op_ptr += 2;
2005 	  /* Zero extend the operand.  */
2006 	  ax_zero_ext (expr, addr_size_bits);
2007 	  i = ax_goto (expr, aop_if_goto);
2008 	  VEC_safe_push (int, dw_labels, op_ptr + offset - base);
2009 	  VEC_safe_push (int, patches, i);
2010 	  break;
2011 
2012 	case DW_OP_nop:
2013 	  break;
2014 
2015         case DW_OP_piece:
2016 	case DW_OP_bit_piece:
2017 	  {
2018 	    ULONGEST size, offset;
2019 
2020 	    if (op_ptr - 1 == previous_piece)
2021 	      error (_("Cannot translate empty pieces to agent expressions"));
2022 	    previous_piece = op_ptr - 1;
2023 
2024             op_ptr = read_uleb128 (op_ptr, op_end, &size);
2025 	    if (op == DW_OP_piece)
2026 	      {
2027 		size *= 8;
2028 		offset = 0;
2029 	      }
2030 	    else
2031 	      op_ptr = read_uleb128 (op_ptr, op_end, &offset);
2032 
2033 	    if (bits_collected + size > 8 * sizeof (LONGEST))
2034 	      error (_("Expression pieces exceed word size"));
2035 
2036 	    /* Access the bits.  */
2037 	    switch (loc->kind)
2038 	      {
2039 	      case axs_lvalue_register:
2040 		ax_reg (expr, loc->u.reg);
2041 		break;
2042 
2043 	      case axs_lvalue_memory:
2044 		/* Offset the pointer, if needed.  */
2045 		if (offset > 8)
2046 		  {
2047 		    ax_const_l (expr, offset / 8);
2048 		    ax_simple (expr, aop_add);
2049 		    offset %= 8;
2050 		  }
2051 		access_memory (arch, expr, size);
2052 		break;
2053 	      }
2054 
2055 	    /* For a bits-big-endian target, shift up what we already
2056 	       have.  For a bits-little-endian target, shift up the
2057 	       new data.  Note that there is a potential bug here if
2058 	       the DWARF expression leaves multiple values on the
2059 	       stack.  */
2060 	    if (bits_collected > 0)
2061 	      {
2062 		if (bits_big_endian)
2063 		  {
2064 		    ax_simple (expr, aop_swap);
2065 		    ax_const_l (expr, size);
2066 		    ax_simple (expr, aop_lsh);
2067 		    /* We don't need a second swap here, because
2068 		       aop_bit_or is symmetric.  */
2069 		  }
2070 		else
2071 		  {
2072 		    ax_const_l (expr, size);
2073 		    ax_simple (expr, aop_lsh);
2074 		  }
2075 		ax_simple (expr, aop_bit_or);
2076 	      }
2077 
2078 	    bits_collected += size;
2079 	    loc->kind = axs_rvalue;
2080 	  }
2081 	  break;
2082 
2083 	case DW_OP_GNU_uninit:
2084 	  unimplemented (op);
2085 
2086 	case DW_OP_call2:
2087 	case DW_OP_call4:
2088 	  {
2089 	    struct dwarf2_locexpr_baton block;
2090 	    int size = (op == DW_OP_call2 ? 2 : 4);
2091 
2092 	    uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
2093 	    op_ptr += size;
2094 
2095 	    block = dwarf2_fetch_die_location_block (uoffset, per_cu,
2096 						     get_ax_pc, expr);
2097 
2098 	    /* DW_OP_call_ref is currently not supported.  */
2099 	    gdb_assert (block.per_cu == per_cu);
2100 
2101 	    dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size,
2102 				       block.data, block.data + block.size,
2103 				       per_cu);
2104 	  }
2105 	  break;
2106 
2107 	case DW_OP_call_ref:
2108 	  unimplemented (op);
2109 
2110 	default:
2111 	  unimplemented (op);
2112 	}
2113     }
2114 
2115   /* Patch all the branches we emitted.  */
2116   for (i = 0; i < VEC_length (int, patches); ++i)
2117     {
2118       int targ = offsets[VEC_index (int, dw_labels, i)];
2119       if (targ == -1)
2120 	internal_error (__FILE__, __LINE__, _("invalid label"));
2121       ax_label (expr, VEC_index (int, patches, i), targ);
2122     }
2123 
2124   do_cleanups (cleanups);
2125 }
2126 
2127 
2128 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2129    evaluator to calculate the location.  */
2130 static struct value *
2131 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
2132 {
2133   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2134   struct value *val;
2135 
2136   val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
2137 				  dlbaton->size, dlbaton->per_cu);
2138 
2139   return val;
2140 }
2141 
2142 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
2143 static int
2144 locexpr_read_needs_frame (struct symbol *symbol)
2145 {
2146   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2147 
2148   return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
2149 				      dlbaton->per_cu);
2150 }
2151 
2152 /* Return true if DATA points to the end of a piece.  END is one past
2153    the last byte in the expression.  */
2154 
2155 static int
2156 piece_end_p (const gdb_byte *data, const gdb_byte *end)
2157 {
2158   return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
2159 }
2160 
2161 /* Nicely describe a single piece of a location, returning an updated
2162    position in the bytecode sequence.  This function cannot recognize
2163    all locations; if a location is not recognized, it simply returns
2164    DATA.  */
2165 
2166 static const gdb_byte *
2167 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
2168 				 CORE_ADDR addr, struct objfile *objfile,
2169 				 const gdb_byte *data, const gdb_byte *end,
2170 				 unsigned int addr_size)
2171 {
2172   struct gdbarch *gdbarch = get_objfile_arch (objfile);
2173   int regno;
2174 
2175   if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
2176     {
2177       regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, data[0] - DW_OP_reg0);
2178       fprintf_filtered (stream, _("a variable in $%s"),
2179 			gdbarch_register_name (gdbarch, regno));
2180       data += 1;
2181     }
2182   else if (data[0] == DW_OP_regx)
2183     {
2184       ULONGEST reg;
2185 
2186       data = read_uleb128 (data + 1, end, &reg);
2187       regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, reg);
2188       fprintf_filtered (stream, _("a variable in $%s"),
2189 			gdbarch_register_name (gdbarch, regno));
2190     }
2191   else if (data[0] == DW_OP_fbreg)
2192     {
2193       struct block *b;
2194       struct symbol *framefunc;
2195       int frame_reg = 0;
2196       LONGEST frame_offset;
2197       const gdb_byte *base_data, *new_data, *save_data = data;
2198       size_t base_size;
2199       LONGEST base_offset = 0;
2200 
2201       new_data = read_sleb128 (data + 1, end, &frame_offset);
2202       if (!piece_end_p (new_data, end))
2203 	return data;
2204       data = new_data;
2205 
2206       b = block_for_pc (addr);
2207 
2208       if (!b)
2209 	error (_("No block found for address for symbol \"%s\"."),
2210 	       SYMBOL_PRINT_NAME (symbol));
2211 
2212       framefunc = block_linkage_function (b);
2213 
2214       if (!framefunc)
2215 	error (_("No function found for block for symbol \"%s\"."),
2216 	       SYMBOL_PRINT_NAME (symbol));
2217 
2218       dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
2219 
2220       if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
2221 	{
2222 	  const gdb_byte *buf_end;
2223 
2224 	  frame_reg = base_data[0] - DW_OP_breg0;
2225 	  buf_end = read_sleb128 (base_data + 1,
2226 				  base_data + base_size, &base_offset);
2227 	  if (buf_end != base_data + base_size)
2228 	    error (_("Unexpected opcode after "
2229 		     "DW_OP_breg%u for symbol \"%s\"."),
2230 		   frame_reg, SYMBOL_PRINT_NAME (symbol));
2231 	}
2232       else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
2233 	{
2234 	  /* The frame base is just the register, with no offset.  */
2235 	  frame_reg = base_data[0] - DW_OP_reg0;
2236 	  base_offset = 0;
2237 	}
2238       else
2239 	{
2240 	  /* We don't know what to do with the frame base expression,
2241 	     so we can't trace this variable; give up.  */
2242 	  return save_data;
2243 	}
2244 
2245       regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, frame_reg);
2246 
2247       fprintf_filtered (stream,
2248 			_("a variable at frame base reg $%s offset %s+%s"),
2249 			gdbarch_register_name (gdbarch, regno),
2250 			plongest (base_offset), plongest (frame_offset));
2251     }
2252   else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
2253 	   && piece_end_p (data, end))
2254     {
2255       LONGEST offset;
2256 
2257       regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, data[0] - DW_OP_breg0);
2258 
2259       data = read_sleb128 (data + 1, end, &offset);
2260 
2261       fprintf_filtered (stream,
2262 			_("a variable at offset %s from base reg $%s"),
2263 			plongest (offset),
2264 			gdbarch_register_name (gdbarch, regno));
2265     }
2266 
2267   /* The location expression for a TLS variable looks like this (on a
2268      64-bit LE machine):
2269 
2270      DW_AT_location    : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
2271                         (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
2272 
2273      0x3 is the encoding for DW_OP_addr, which has an operand as long
2274      as the size of an address on the target machine (here is 8
2275      bytes).  Note that more recent version of GCC emit DW_OP_const4u
2276      or DW_OP_const8u, depending on address size, rather than
2277      DW_OP_addr.  0xe0 is the encoding for DW_OP_GNU_push_tls_address.
2278      The operand represents the offset at which the variable is within
2279      the thread local storage.  */
2280 
2281   else if (data + 1 + addr_size < end
2282 	   && (data[0] == DW_OP_addr
2283 	       || (addr_size == 4 && data[0] == DW_OP_const4u)
2284 	       || (addr_size == 8 && data[0] == DW_OP_const8u))
2285 	   && data[1 + addr_size] == DW_OP_GNU_push_tls_address
2286 	   && piece_end_p (data + 2 + addr_size, end))
2287     {
2288       ULONGEST offset;
2289       offset = extract_unsigned_integer (data + 1, addr_size,
2290 					 gdbarch_byte_order (gdbarch));
2291 
2292       fprintf_filtered (stream,
2293 			_("a thread-local variable at offset 0x%s "
2294 			  "in the thread-local storage for `%s'"),
2295 			phex_nz (offset, addr_size), objfile->name);
2296 
2297       data += 1 + addr_size + 1;
2298     }
2299   else if (data[0] >= DW_OP_lit0
2300 	   && data[0] <= DW_OP_lit31
2301 	   && data + 1 < end
2302 	   && data[1] == DW_OP_stack_value)
2303     {
2304       fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
2305       data += 2;
2306     }
2307 
2308   return data;
2309 }
2310 
2311 /* Disassemble an expression, stopping at the end of a piece or at the
2312    end of the expression.  Returns a pointer to the next unread byte
2313    in the input expression.  If ALL is nonzero, then this function
2314    will keep going until it reaches the end of the expression.  */
2315 
2316 static const gdb_byte *
2317 disassemble_dwarf_expression (struct ui_file *stream,
2318 			      struct gdbarch *arch, unsigned int addr_size,
2319 			      int offset_size,
2320 			      const gdb_byte *data, const gdb_byte *end,
2321 			      int all)
2322 {
2323   const gdb_byte *start = data;
2324 
2325   fprintf_filtered (stream, _("a complex DWARF expression:\n"));
2326 
2327   while (data < end
2328 	 && (all
2329 	     || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
2330     {
2331       enum dwarf_location_atom op = *data++;
2332       ULONGEST ul;
2333       LONGEST l;
2334       const char *name;
2335 
2336       name = dwarf_stack_op_name (op);
2337 
2338       if (!name)
2339 	error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
2340 	       op, (long) (data - start));
2341       fprintf_filtered (stream, "  % 4ld: %s", (long) (data - start), name);
2342 
2343       switch (op)
2344 	{
2345 	case DW_OP_addr:
2346 	  ul = extract_unsigned_integer (data, addr_size,
2347 					 gdbarch_byte_order (arch));
2348 	  data += addr_size;
2349 	  fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
2350 	  break;
2351 
2352 	case DW_OP_const1u:
2353 	  ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
2354 	  data += 1;
2355 	  fprintf_filtered (stream, " %s", pulongest (ul));
2356 	  break;
2357 	case DW_OP_const1s:
2358 	  l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
2359 	  data += 1;
2360 	  fprintf_filtered (stream, " %s", plongest (l));
2361 	  break;
2362 	case DW_OP_const2u:
2363 	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2364 	  data += 2;
2365 	  fprintf_filtered (stream, " %s", pulongest (ul));
2366 	  break;
2367 	case DW_OP_const2s:
2368 	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2369 	  data += 2;
2370 	  fprintf_filtered (stream, " %s", plongest (l));
2371 	  break;
2372 	case DW_OP_const4u:
2373 	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2374 	  data += 4;
2375 	  fprintf_filtered (stream, " %s", pulongest (ul));
2376 	  break;
2377 	case DW_OP_const4s:
2378 	  l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
2379 	  data += 4;
2380 	  fprintf_filtered (stream, " %s", plongest (l));
2381 	  break;
2382 	case DW_OP_const8u:
2383 	  ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
2384 	  data += 8;
2385 	  fprintf_filtered (stream, " %s", pulongest (ul));
2386 	  break;
2387 	case DW_OP_const8s:
2388 	  l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
2389 	  data += 8;
2390 	  fprintf_filtered (stream, " %s", plongest (l));
2391 	  break;
2392 	case DW_OP_constu:
2393 	  data = read_uleb128 (data, end, &ul);
2394 	  fprintf_filtered (stream, " %s", pulongest (ul));
2395 	  break;
2396 	case DW_OP_consts:
2397 	  data = read_sleb128 (data, end, &l);
2398 	  fprintf_filtered (stream, " %s", plongest (l));
2399 	  break;
2400 
2401 	case DW_OP_reg0:
2402 	case DW_OP_reg1:
2403 	case DW_OP_reg2:
2404 	case DW_OP_reg3:
2405 	case DW_OP_reg4:
2406 	case DW_OP_reg5:
2407 	case DW_OP_reg6:
2408 	case DW_OP_reg7:
2409 	case DW_OP_reg8:
2410 	case DW_OP_reg9:
2411 	case DW_OP_reg10:
2412 	case DW_OP_reg11:
2413 	case DW_OP_reg12:
2414 	case DW_OP_reg13:
2415 	case DW_OP_reg14:
2416 	case DW_OP_reg15:
2417 	case DW_OP_reg16:
2418 	case DW_OP_reg17:
2419 	case DW_OP_reg18:
2420 	case DW_OP_reg19:
2421 	case DW_OP_reg20:
2422 	case DW_OP_reg21:
2423 	case DW_OP_reg22:
2424 	case DW_OP_reg23:
2425 	case DW_OP_reg24:
2426 	case DW_OP_reg25:
2427 	case DW_OP_reg26:
2428 	case DW_OP_reg27:
2429 	case DW_OP_reg28:
2430 	case DW_OP_reg29:
2431 	case DW_OP_reg30:
2432 	case DW_OP_reg31:
2433 	  fprintf_filtered (stream, " [$%s]",
2434 			    gdbarch_register_name (arch, op - DW_OP_reg0));
2435 	  break;
2436 
2437 	case DW_OP_regx:
2438 	  data = read_uleb128 (data, end, &ul);
2439 	  fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
2440 			    gdbarch_register_name (arch, (int) ul));
2441 	  break;
2442 
2443 	case DW_OP_implicit_value:
2444 	  data = read_uleb128 (data, end, &ul);
2445 	  data += ul;
2446 	  fprintf_filtered (stream, " %s", pulongest (ul));
2447 	  break;
2448 
2449 	case DW_OP_breg0:
2450 	case DW_OP_breg1:
2451 	case DW_OP_breg2:
2452 	case DW_OP_breg3:
2453 	case DW_OP_breg4:
2454 	case DW_OP_breg5:
2455 	case DW_OP_breg6:
2456 	case DW_OP_breg7:
2457 	case DW_OP_breg8:
2458 	case DW_OP_breg9:
2459 	case DW_OP_breg10:
2460 	case DW_OP_breg11:
2461 	case DW_OP_breg12:
2462 	case DW_OP_breg13:
2463 	case DW_OP_breg14:
2464 	case DW_OP_breg15:
2465 	case DW_OP_breg16:
2466 	case DW_OP_breg17:
2467 	case DW_OP_breg18:
2468 	case DW_OP_breg19:
2469 	case DW_OP_breg20:
2470 	case DW_OP_breg21:
2471 	case DW_OP_breg22:
2472 	case DW_OP_breg23:
2473 	case DW_OP_breg24:
2474 	case DW_OP_breg25:
2475 	case DW_OP_breg26:
2476 	case DW_OP_breg27:
2477 	case DW_OP_breg28:
2478 	case DW_OP_breg29:
2479 	case DW_OP_breg30:
2480 	case DW_OP_breg31:
2481 	  data = read_sleb128 (data, end, &l);
2482 	  fprintf_filtered (stream, " %s [$%s]", plongest (l),
2483 			    gdbarch_register_name (arch, op - DW_OP_breg0));
2484 	  break;
2485 
2486 	case DW_OP_bregx:
2487 	  data = read_uleb128 (data, end, &ul);
2488 	  data = read_sleb128 (data, end, &l);
2489 	  fprintf_filtered (stream, " register %s [$%s] offset %s",
2490 			    pulongest (ul),
2491 			    gdbarch_register_name (arch, (int) ul),
2492 			    plongest (l));
2493 	  break;
2494 
2495 	case DW_OP_fbreg:
2496 	  data = read_sleb128 (data, end, &l);
2497 	  fprintf_filtered (stream, " %s", plongest (l));
2498 	  break;
2499 
2500 	case DW_OP_xderef_size:
2501 	case DW_OP_deref_size:
2502 	case DW_OP_pick:
2503 	  fprintf_filtered (stream, " %d", *data);
2504 	  ++data;
2505 	  break;
2506 
2507 	case DW_OP_plus_uconst:
2508 	  data = read_uleb128 (data, end, &ul);
2509 	  fprintf_filtered (stream, " %s", pulongest (ul));
2510 	  break;
2511 
2512 	case DW_OP_skip:
2513 	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2514 	  data += 2;
2515 	  fprintf_filtered (stream, " to %ld",
2516 			    (long) (data + l - start));
2517 	  break;
2518 
2519 	case DW_OP_bra:
2520 	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2521 	  data += 2;
2522 	  fprintf_filtered (stream, " %ld",
2523 			    (long) (data + l - start));
2524 	  break;
2525 
2526 	case DW_OP_call2:
2527 	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2528 	  data += 2;
2529 	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
2530 	  break;
2531 
2532 	case DW_OP_call4:
2533 	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2534 	  data += 4;
2535 	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
2536 	  break;
2537 
2538 	case DW_OP_call_ref:
2539 	  ul = extract_unsigned_integer (data, offset_size,
2540 					 gdbarch_byte_order (arch));
2541 	  data += offset_size;
2542 	  fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
2543 	  break;
2544 
2545         case DW_OP_piece:
2546 	  data = read_uleb128 (data, end, &ul);
2547 	  fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
2548 	  break;
2549 
2550 	case DW_OP_bit_piece:
2551 	  {
2552 	    ULONGEST offset;
2553 
2554 	    data = read_uleb128 (data, end, &ul);
2555 	    data = read_uleb128 (data, end, &offset);
2556 	    fprintf_filtered (stream, " size %s offset %s (bits)",
2557 			      pulongest (ul), pulongest (offset));
2558 	  }
2559 	  break;
2560 
2561 	case DW_OP_GNU_implicit_pointer:
2562 	  {
2563 	    ul = extract_unsigned_integer (data, offset_size,
2564 					   gdbarch_byte_order (arch));
2565 	    data += offset_size;
2566 
2567 	    data = read_sleb128 (data, end, &l);
2568 
2569 	    fprintf_filtered (stream, " DIE %s offset %s",
2570 			      phex_nz (ul, offset_size),
2571 			      plongest (l));
2572 	  }
2573 	  break;
2574 	}
2575 
2576       fprintf_filtered (stream, "\n");
2577     }
2578 
2579   return data;
2580 }
2581 
2582 /* Describe a single location, which may in turn consist of multiple
2583    pieces.  */
2584 
2585 static void
2586 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
2587 			     struct ui_file *stream,
2588 			     const gdb_byte *data, int size,
2589 			     struct objfile *objfile, unsigned int addr_size,
2590 			     int offset_size)
2591 {
2592   const gdb_byte *end = data + size;
2593   int first_piece = 1, bad = 0;
2594 
2595   while (data < end)
2596     {
2597       const gdb_byte *here = data;
2598       int disassemble = 1;
2599 
2600       if (first_piece)
2601 	first_piece = 0;
2602       else
2603 	fprintf_filtered (stream, _(", and "));
2604 
2605       if (!dwarf2_always_disassemble)
2606 	{
2607 	  data = locexpr_describe_location_piece (symbol, stream,
2608 						  addr, objfile,
2609 						  data, end, addr_size);
2610 	  /* If we printed anything, or if we have an empty piece,
2611 	     then don't disassemble.  */
2612 	  if (data != here
2613 	      || data[0] == DW_OP_piece
2614 	      || data[0] == DW_OP_bit_piece)
2615 	    disassemble = 0;
2616 	}
2617       if (disassemble)
2618 	data = disassemble_dwarf_expression (stream,
2619 					     get_objfile_arch (objfile),
2620 					     addr_size, offset_size, data, end,
2621 					     dwarf2_always_disassemble);
2622 
2623       if (data < end)
2624 	{
2625 	  int empty = data == here;
2626 
2627 	  if (disassemble)
2628 	    fprintf_filtered (stream, "   ");
2629 	  if (data[0] == DW_OP_piece)
2630 	    {
2631 	      ULONGEST bytes;
2632 
2633 	      data = read_uleb128 (data + 1, end, &bytes);
2634 
2635 	      if (empty)
2636 		fprintf_filtered (stream, _("an empty %s-byte piece"),
2637 				  pulongest (bytes));
2638 	      else
2639 		fprintf_filtered (stream, _(" [%s-byte piece]"),
2640 				  pulongest (bytes));
2641 	    }
2642 	  else if (data[0] == DW_OP_bit_piece)
2643 	    {
2644 	      ULONGEST bits, offset;
2645 
2646 	      data = read_uleb128 (data + 1, end, &bits);
2647 	      data = read_uleb128 (data, end, &offset);
2648 
2649 	      if (empty)
2650 		fprintf_filtered (stream,
2651 				  _("an empty %s-bit piece"),
2652 				  pulongest (bits));
2653 	      else
2654 		fprintf_filtered (stream,
2655 				  _(" [%s-bit piece, offset %s bits]"),
2656 				  pulongest (bits), pulongest (offset));
2657 	    }
2658 	  else
2659 	    {
2660 	      bad = 1;
2661 	      break;
2662 	    }
2663 	}
2664     }
2665 
2666   if (bad || data > end)
2667     error (_("Corrupted DWARF2 expression for \"%s\"."),
2668 	   SYMBOL_PRINT_NAME (symbol));
2669 }
2670 
2671 /* Print a natural-language description of SYMBOL to STREAM.  This
2672    version is for a symbol with a single location.  */
2673 
2674 static void
2675 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
2676 			   struct ui_file *stream)
2677 {
2678   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2679   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2680   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2681   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2682 
2683   locexpr_describe_location_1 (symbol, addr, stream,
2684 			       dlbaton->data, dlbaton->size,
2685 			       objfile, addr_size, offset_size);
2686 }
2687 
2688 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2689    any necessary bytecode in AX.  */
2690 
2691 static void
2692 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2693 			    struct agent_expr *ax, struct axs_value *value)
2694 {
2695   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2696   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2697 
2698   if (dlbaton->data == NULL || dlbaton->size == 0)
2699     value->optimized_out = 1;
2700   else
2701     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size,
2702 			       dlbaton->data, dlbaton->data + dlbaton->size,
2703 			       dlbaton->per_cu);
2704 }
2705 
2706 /* The set of location functions used with the DWARF-2 expression
2707    evaluator.  */
2708 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
2709   locexpr_read_variable,
2710   locexpr_read_needs_frame,
2711   locexpr_describe_location,
2712   locexpr_tracepoint_var_ref
2713 };
2714 
2715 
2716 /* Wrapper functions for location lists.  These generally find
2717    the appropriate location expression and call something above.  */
2718 
2719 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2720    evaluator to calculate the location.  */
2721 static struct value *
2722 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
2723 {
2724   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2725   struct value *val;
2726   const gdb_byte *data;
2727   size_t size;
2728   CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
2729 
2730   data = dwarf2_find_location_expression (dlbaton, &size, pc);
2731   if (data == NULL)
2732     {
2733       val = allocate_value (SYMBOL_TYPE (symbol));
2734       VALUE_LVAL (val) = not_lval;
2735       set_value_optimized_out (val, 1);
2736     }
2737   else
2738     val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
2739 				    dlbaton->per_cu);
2740 
2741   return val;
2742 }
2743 
2744 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
2745 static int
2746 loclist_read_needs_frame (struct symbol *symbol)
2747 {
2748   /* If there's a location list, then assume we need to have a frame
2749      to choose the appropriate location expression.  With tracking of
2750      global variables this is not necessarily true, but such tracking
2751      is disabled in GCC at the moment until we figure out how to
2752      represent it.  */
2753 
2754   return 1;
2755 }
2756 
2757 /* Print a natural-language description of SYMBOL to STREAM.  This
2758    version applies when there is a list of different locations, each
2759    with a specified address range.  */
2760 
2761 static void
2762 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
2763 			   struct ui_file *stream)
2764 {
2765   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2766   CORE_ADDR low, high;
2767   const gdb_byte *loc_ptr, *buf_end;
2768   int length, first = 1;
2769   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2770   struct gdbarch *gdbarch = get_objfile_arch (objfile);
2771   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2772   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2773   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2774   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
2775   CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
2776   /* Adjust base_address for relocatable objects.  */
2777   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
2778   CORE_ADDR base_address = dlbaton->base_address + base_offset;
2779 
2780   loc_ptr = dlbaton->data;
2781   buf_end = dlbaton->data + dlbaton->size;
2782 
2783   fprintf_filtered (stream, _("multi-location:\n"));
2784 
2785   /* Iterate through locations until we run out.  */
2786   while (1)
2787     {
2788       if (buf_end - loc_ptr < 2 * addr_size)
2789 	error (_("Corrupted DWARF expression for symbol \"%s\"."),
2790 	       SYMBOL_PRINT_NAME (symbol));
2791 
2792       if (signed_addr_p)
2793 	low = extract_signed_integer (loc_ptr, addr_size, byte_order);
2794       else
2795 	low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2796       loc_ptr += addr_size;
2797 
2798       if (signed_addr_p)
2799 	high = extract_signed_integer (loc_ptr, addr_size, byte_order);
2800       else
2801 	high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2802       loc_ptr += addr_size;
2803 
2804       /* A base-address-selection entry.  */
2805       if ((low & base_mask) == base_mask)
2806 	{
2807 	  base_address = high + base_offset;
2808 	  fprintf_filtered (stream, _("  Base address %s"),
2809 			    paddress (gdbarch, base_address));
2810 	  continue;
2811 	}
2812 
2813       /* An end-of-list entry.  */
2814       if (low == 0 && high == 0)
2815 	break;
2816 
2817       /* Otherwise, a location expression entry.  */
2818       low += base_address;
2819       high += base_address;
2820 
2821       length = extract_unsigned_integer (loc_ptr, 2, byte_order);
2822       loc_ptr += 2;
2823 
2824       /* (It would improve readability to print only the minimum
2825 	 necessary digits of the second number of the range.)  */
2826       fprintf_filtered (stream, _("  Range %s-%s: "),
2827 			paddress (gdbarch, low), paddress (gdbarch, high));
2828 
2829       /* Now describe this particular location.  */
2830       locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
2831 				   objfile, addr_size, offset_size);
2832 
2833       fprintf_filtered (stream, "\n");
2834 
2835       loc_ptr += length;
2836     }
2837 }
2838 
2839 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2840    any necessary bytecode in AX.  */
2841 static void
2842 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2843 			    struct agent_expr *ax, struct axs_value *value)
2844 {
2845   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2846   const gdb_byte *data;
2847   size_t size;
2848   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2849 
2850   data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
2851   if (data == NULL || size == 0)
2852     value->optimized_out = 1;
2853   else
2854     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size, data, data + size,
2855 			       dlbaton->per_cu);
2856 }
2857 
2858 /* The set of location functions used with the DWARF-2 expression
2859    evaluator and location lists.  */
2860 const struct symbol_computed_ops dwarf2_loclist_funcs = {
2861   loclist_read_variable,
2862   loclist_read_needs_frame,
2863   loclist_describe_location,
2864   loclist_tracepoint_var_ref
2865 };
2866