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