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