Initial import of binutils 2.22 on the new vendor branch
[dragonfly.git] / contrib / gdb-7 / gdb / dwarf2loc.c
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 \f
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 \f
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 };