constify deprecate_cmd
[platform/upstream/binutils.git] / gdb / dwarf2loc.c
1 /* DWARF 2 location expression support for GDB.
2
3    Copyright (C) 2003-2014 Free Software Foundation, Inc.
4
5    Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "ui-out.h"
24 #include "value.h"
25 #include "frame.h"
26 #include "gdbcore.h"
27 #include "target.h"
28 #include "inferior.h"
29 #include "ax.h"
30 #include "ax-gdb.h"
31 #include "regcache.h"
32 #include "objfiles.h"
33 #include "exceptions.h"
34 #include "block.h"
35 #include "gdbcmd.h"
36
37 #include "dwarf2.h"
38 #include "dwarf2expr.h"
39 #include "dwarf2loc.h"
40 #include "dwarf2-frame.h"
41
42 #include <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 const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs;
51
52 static struct value *dwarf2_evaluate_loc_desc_full (struct type *type,
53                                                     struct frame_info *frame,
54                                                     const gdb_byte *data,
55                                                     size_t size,
56                                                     struct dwarf2_per_cu_data *per_cu,
57                                                     LONGEST byte_offset);
58
59 /* Until these have formal names, we define these here.
60    ref: http://gcc.gnu.org/wiki/DebugFission
61    Each entry in .debug_loc.dwo begins with a byte that describes the entry,
62    and is then followed by data specific to that entry.  */
63
64 enum debug_loc_kind
65 {
66   /* Indicates the end of the list of entries.  */
67   DEBUG_LOC_END_OF_LIST = 0,
68
69   /* This is followed by an unsigned LEB128 number that is an index into
70      .debug_addr and specifies the base address for all following entries.  */
71   DEBUG_LOC_BASE_ADDRESS = 1,
72
73   /* This is followed by two unsigned LEB128 numbers that are indices into
74      .debug_addr and specify the beginning and ending addresses, and then
75      a normal location expression as in .debug_loc.  */
76   DEBUG_LOC_START_END = 2,
77
78   /* This is followed by an unsigned LEB128 number that is an index into
79      .debug_addr and specifies the beginning address, and a 4 byte unsigned
80      number that specifies the length, and then a normal location expression
81      as in .debug_loc.  */
82   DEBUG_LOC_START_LENGTH = 3,
83
84   /* An internal value indicating there is insufficient data.  */
85   DEBUG_LOC_BUFFER_OVERFLOW = -1,
86
87   /* An internal value indicating an invalid kind of entry was found.  */
88   DEBUG_LOC_INVALID_ENTRY = -2
89 };
90
91 /* Helper function which throws an error if a synthetic pointer is
92    invalid.  */
93
94 static void
95 invalid_synthetic_pointer (void)
96 {
97   error (_("access outside bounds of object "
98            "referenced via synthetic pointer"));
99 }
100
101 /* Decode the addresses in a non-dwo .debug_loc entry.
102    A pointer to the next byte to examine is returned in *NEW_PTR.
103    The encoded low,high addresses are return in *LOW,*HIGH.
104    The result indicates the kind of entry found.  */
105
106 static enum debug_loc_kind
107 decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end,
108                             const gdb_byte **new_ptr,
109                             CORE_ADDR *low, CORE_ADDR *high,
110                             enum bfd_endian byte_order,
111                             unsigned int addr_size,
112                             int signed_addr_p)
113 {
114   CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
115
116   if (buf_end - loc_ptr < 2 * addr_size)
117     return DEBUG_LOC_BUFFER_OVERFLOW;
118
119   if (signed_addr_p)
120     *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
121   else
122     *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
123   loc_ptr += addr_size;
124
125   if (signed_addr_p)
126     *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
127   else
128     *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
129   loc_ptr += addr_size;
130
131   *new_ptr = loc_ptr;
132
133   /* A base-address-selection entry.  */
134   if ((*low & base_mask) == base_mask)
135     return DEBUG_LOC_BASE_ADDRESS;
136
137   /* An end-of-list entry.  */
138   if (*low == 0 && *high == 0)
139     return DEBUG_LOC_END_OF_LIST;
140
141   return DEBUG_LOC_START_END;
142 }
143
144 /* Decode the addresses in .debug_loc.dwo entry.
145    A pointer to the next byte to examine is returned in *NEW_PTR.
146    The encoded low,high addresses are return in *LOW,*HIGH.
147    The result indicates the kind of entry found.  */
148
149 static enum debug_loc_kind
150 decode_debug_loc_dwo_addresses (struct dwarf2_per_cu_data *per_cu,
151                                 const gdb_byte *loc_ptr,
152                                 const gdb_byte *buf_end,
153                                 const gdb_byte **new_ptr,
154                                 CORE_ADDR *low, CORE_ADDR *high,
155                                 enum bfd_endian byte_order)
156 {
157   uint64_t low_index, high_index;
158
159   if (loc_ptr == buf_end)
160     return DEBUG_LOC_BUFFER_OVERFLOW;
161
162   switch (*loc_ptr++)
163     {
164     case DEBUG_LOC_END_OF_LIST:
165       *new_ptr = loc_ptr;
166       return DEBUG_LOC_END_OF_LIST;
167     case DEBUG_LOC_BASE_ADDRESS:
168       *low = 0;
169       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
170       if (loc_ptr == NULL)
171         return DEBUG_LOC_BUFFER_OVERFLOW;
172       *high = dwarf2_read_addr_index (per_cu, high_index);
173       *new_ptr = loc_ptr;
174       return DEBUG_LOC_BASE_ADDRESS;
175     case DEBUG_LOC_START_END:
176       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
177       if (loc_ptr == NULL)
178         return DEBUG_LOC_BUFFER_OVERFLOW;
179       *low = dwarf2_read_addr_index (per_cu, low_index);
180       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
181       if (loc_ptr == NULL)
182         return DEBUG_LOC_BUFFER_OVERFLOW;
183       *high = dwarf2_read_addr_index (per_cu, high_index);
184       *new_ptr = loc_ptr;
185       return DEBUG_LOC_START_END;
186     case DEBUG_LOC_START_LENGTH:
187       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
188       if (loc_ptr == NULL)
189         return DEBUG_LOC_BUFFER_OVERFLOW;
190       *low = dwarf2_read_addr_index (per_cu, low_index);
191       if (loc_ptr + 4 > buf_end)
192         return DEBUG_LOC_BUFFER_OVERFLOW;
193       *high = *low;
194       *high += extract_unsigned_integer (loc_ptr, 4, byte_order);
195       *new_ptr = loc_ptr + 4;
196       return DEBUG_LOC_START_LENGTH;
197     default:
198       return DEBUG_LOC_INVALID_ENTRY;
199     }
200 }
201
202 /* A function for dealing with location lists.  Given a
203    symbol baton (BATON) and a pc value (PC), find the appropriate
204    location expression, set *LOCEXPR_LENGTH, and return a pointer
205    to the beginning of the expression.  Returns NULL on failure.
206
207    For now, only return the first matching location expression; there
208    can be more than one in the list.  */
209
210 const gdb_byte *
211 dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
212                                  size_t *locexpr_length, CORE_ADDR pc)
213 {
214   struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu);
215   struct gdbarch *gdbarch = get_objfile_arch (objfile);
216   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
217   unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
218   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
219   /* Adjust base_address for relocatable objects.  */
220   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (baton->per_cu);
221   CORE_ADDR base_address = baton->base_address + base_offset;
222   const gdb_byte *loc_ptr, *buf_end;
223
224   loc_ptr = baton->data;
225   buf_end = baton->data + baton->size;
226
227   while (1)
228     {
229       CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
230       int length;
231       enum debug_loc_kind kind;
232       const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
233
234       if (baton->from_dwo)
235         kind = decode_debug_loc_dwo_addresses (baton->per_cu,
236                                                loc_ptr, buf_end, &new_ptr,
237                                                &low, &high, byte_order);
238       else
239         kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
240                                            &low, &high,
241                                            byte_order, addr_size,
242                                            signed_addr_p);
243       loc_ptr = new_ptr;
244       switch (kind)
245         {
246         case DEBUG_LOC_END_OF_LIST:
247           *locexpr_length = 0;
248           return NULL;
249         case DEBUG_LOC_BASE_ADDRESS:
250           base_address = high + base_offset;
251           continue;
252         case DEBUG_LOC_START_END:
253         case DEBUG_LOC_START_LENGTH:
254           break;
255         case DEBUG_LOC_BUFFER_OVERFLOW:
256         case DEBUG_LOC_INVALID_ENTRY:
257           error (_("dwarf2_find_location_expression: "
258                    "Corrupted DWARF expression."));
259         default:
260           gdb_assert_not_reached ("bad debug_loc_kind");
261         }
262
263       /* Otherwise, a location expression entry.
264          If the entry is from a DWO, don't add base address: the entry is
265          from .debug_addr which has absolute addresses.  */
266       if (! baton->from_dwo)
267         {
268           low += base_address;
269           high += base_address;
270         }
271
272       length = extract_unsigned_integer (loc_ptr, 2, byte_order);
273       loc_ptr += 2;
274
275       if (low == high && pc == low)
276         {
277           /* This is entry PC record present only at entry point
278              of a function.  Verify it is really the function entry point.  */
279
280           const struct block *pc_block = block_for_pc (pc);
281           struct symbol *pc_func = NULL;
282
283           if (pc_block)
284             pc_func = block_linkage_function (pc_block);
285
286           if (pc_func && pc == BLOCK_START (SYMBOL_BLOCK_VALUE (pc_func)))
287             {
288               *locexpr_length = length;
289               return loc_ptr;
290             }
291         }
292
293       if (pc >= low && pc < high)
294         {
295           *locexpr_length = length;
296           return loc_ptr;
297         }
298
299       loc_ptr += length;
300     }
301 }
302
303 /* This is the baton used when performing dwarf2 expression
304    evaluation.  */
305 struct dwarf_expr_baton
306 {
307   struct frame_info *frame;
308   struct dwarf2_per_cu_data *per_cu;
309 };
310
311 /* Helper functions for dwarf2_evaluate_loc_desc.  */
312
313 /* Using the frame specified in BATON, return the value of register
314    REGNUM, treated as a pointer.  */
315 static CORE_ADDR
316 dwarf_expr_read_addr_from_reg (void *baton, int dwarf_regnum)
317 {
318   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
319   struct gdbarch *gdbarch = get_frame_arch (debaton->frame);
320   int regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
321
322   return address_from_register (regnum, debaton->frame);
323 }
324
325 /* Implement struct dwarf_expr_context_funcs' "get_reg_value" callback.  */
326
327 static struct value *
328 dwarf_expr_get_reg_value (void *baton, struct type *type, int dwarf_regnum)
329 {
330   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
331   struct gdbarch *gdbarch = get_frame_arch (debaton->frame);
332   int regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
333
334   return value_from_register (type, regnum, debaton->frame);
335 }
336
337 /* Read memory at ADDR (length LEN) into BUF.  */
338
339 static void
340 dwarf_expr_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
341 {
342   read_memory (addr, buf, len);
343 }
344
345 /* Using the frame specified in BATON, find the location expression
346    describing the frame base.  Return a pointer to it in START and
347    its length in LENGTH.  */
348 static void
349 dwarf_expr_frame_base (void *baton, const gdb_byte **start, size_t * length)
350 {
351   /* FIXME: cagney/2003-03-26: This code should be using
352      get_frame_base_address(), and then implement a dwarf2 specific
353      this_base method.  */
354   struct symbol *framefunc;
355   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
356   const struct block *bl = get_frame_block (debaton->frame, NULL);
357
358   if (bl == NULL)
359     error (_("frame address is not available."));
360
361   /* Use block_linkage_function, which returns a real (not inlined)
362      function, instead of get_frame_function, which may return an
363      inlined function.  */
364   framefunc = block_linkage_function (bl);
365
366   /* If we found a frame-relative symbol then it was certainly within
367      some function associated with a frame. If we can't find the frame,
368      something has gone wrong.  */
369   gdb_assert (framefunc != NULL);
370
371   dwarf_expr_frame_base_1 (framefunc,
372                            get_frame_address_in_block (debaton->frame),
373                            start, length);
374 }
375
376 /* Implement find_frame_base_location method for LOC_BLOCK functions using
377    DWARF expression for its DW_AT_frame_base.  */
378
379 static void
380 locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
381                                   const gdb_byte **start, size_t *length)
382 {
383   struct dwarf2_locexpr_baton *symbaton = SYMBOL_LOCATION_BATON (framefunc);
384
385   *length = symbaton->size;
386   *start = symbaton->data;
387 }
388
389 /* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
390    function uses DWARF expression for its DW_AT_frame_base.  */
391
392 const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs =
393 {
394   locexpr_find_frame_base_location
395 };
396
397 /* Implement find_frame_base_location method for LOC_BLOCK functions using
398    DWARF location list for its DW_AT_frame_base.  */
399
400 static void
401 loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
402                                   const gdb_byte **start, size_t *length)
403 {
404   struct dwarf2_loclist_baton *symbaton = SYMBOL_LOCATION_BATON (framefunc);
405
406   *start = dwarf2_find_location_expression (symbaton, length, pc);
407 }
408
409 /* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
410    function uses DWARF location list for its DW_AT_frame_base.  */
411
412 const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs =
413 {
414   loclist_find_frame_base_location
415 };
416
417 static void
418 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
419                          const gdb_byte **start, size_t *length)
420 {
421   if (SYMBOL_BLOCK_OPS (framefunc) != NULL)
422     {
423       const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc);
424
425       ops_block->find_frame_base_location (framefunc, pc, start, length);
426     }
427   else
428     *length = 0;
429
430   if (*length == 0)
431     error (_("Could not find the frame base for \"%s\"."),
432            SYMBOL_NATURAL_NAME (framefunc));
433 }
434
435 /* Helper function for dwarf2_evaluate_loc_desc.  Computes the CFA for
436    the frame in BATON.  */
437
438 static CORE_ADDR
439 dwarf_expr_frame_cfa (void *baton)
440 {
441   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
442
443   return dwarf2_frame_cfa (debaton->frame);
444 }
445
446 /* Helper function for dwarf2_evaluate_loc_desc.  Computes the PC for
447    the frame in BATON.  */
448
449 static CORE_ADDR
450 dwarf_expr_frame_pc (void *baton)
451 {
452   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
453
454   return get_frame_address_in_block (debaton->frame);
455 }
456
457 /* Using the objfile specified in BATON, find the address for the
458    current thread's thread-local storage with offset OFFSET.  */
459 static CORE_ADDR
460 dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
461 {
462   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
463   struct objfile *objfile = dwarf2_per_cu_objfile (debaton->per_cu);
464
465   return target_translate_tls_address (objfile, offset);
466 }
467
468 /* Call DWARF subroutine from DW_AT_location of DIE at DIE_OFFSET in
469    current CU (as is PER_CU).  State of the CTX is not affected by the
470    call and return.  */
471
472 static void
473 per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset,
474                    struct dwarf2_per_cu_data *per_cu,
475                    CORE_ADDR (*get_frame_pc) (void *baton),
476                    void *baton)
477 {
478   struct dwarf2_locexpr_baton block;
479
480   block = dwarf2_fetch_die_loc_cu_off (die_offset, per_cu, get_frame_pc, baton);
481
482   /* DW_OP_call_ref is currently not supported.  */
483   gdb_assert (block.per_cu == per_cu);
484
485   dwarf_expr_eval (ctx, block.data, block.size);
486 }
487
488 /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc.  */
489
490 static void
491 dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
492 {
493   struct dwarf_expr_baton *debaton = ctx->baton;
494
495   per_cu_dwarf_call (ctx, die_offset, debaton->per_cu,
496                      ctx->funcs->get_frame_pc, ctx->baton);
497 }
498
499 /* Callback function for dwarf2_evaluate_loc_desc.  */
500
501 static struct type *
502 dwarf_expr_get_base_type (struct dwarf_expr_context *ctx,
503                           cu_offset die_offset)
504 {
505   struct dwarf_expr_baton *debaton = ctx->baton;
506
507   return dwarf2_get_die_type (die_offset, debaton->per_cu);
508 }
509
510 /* See dwarf2loc.h.  */
511
512 unsigned int entry_values_debug = 0;
513
514 /* Helper to set entry_values_debug.  */
515
516 static void
517 show_entry_values_debug (struct ui_file *file, int from_tty,
518                          struct cmd_list_element *c, const char *value)
519 {
520   fprintf_filtered (file,
521                     _("Entry values and tail call frames debugging is %s.\n"),
522                     value);
523 }
524
525 /* Find DW_TAG_GNU_call_site's DW_AT_GNU_call_site_target address.
526    CALLER_FRAME (for registers) can be NULL if it is not known.  This function
527    always returns valid address or it throws NO_ENTRY_VALUE_ERROR.  */
528
529 static CORE_ADDR
530 call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
531                           struct call_site *call_site,
532                           struct frame_info *caller_frame)
533 {
534   switch (FIELD_LOC_KIND (call_site->target))
535     {
536     case FIELD_LOC_KIND_DWARF_BLOCK:
537       {
538         struct dwarf2_locexpr_baton *dwarf_block;
539         struct value *val;
540         struct type *caller_core_addr_type;
541         struct gdbarch *caller_arch;
542
543         dwarf_block = FIELD_DWARF_BLOCK (call_site->target);
544         if (dwarf_block == NULL)
545           {
546             struct bound_minimal_symbol msym;
547             
548             msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
549             throw_error (NO_ENTRY_VALUE_ERROR,
550                          _("DW_AT_GNU_call_site_target is not specified "
551                            "at %s in %s"),
552                          paddress (call_site_gdbarch, call_site->pc),
553                          (msym.minsym == NULL ? "???"
554                           : MSYMBOL_PRINT_NAME (msym.minsym)));
555                         
556           }
557         if (caller_frame == NULL)
558           {
559             struct bound_minimal_symbol msym;
560             
561             msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
562             throw_error (NO_ENTRY_VALUE_ERROR,
563                          _("DW_AT_GNU_call_site_target DWARF block resolving "
564                            "requires known frame which is currently not "
565                            "available at %s in %s"),
566                          paddress (call_site_gdbarch, call_site->pc),
567                          (msym.minsym == NULL ? "???"
568                           : MSYMBOL_PRINT_NAME (msym.minsym)));
569                         
570           }
571         caller_arch = get_frame_arch (caller_frame);
572         caller_core_addr_type = builtin_type (caller_arch)->builtin_func_ptr;
573         val = dwarf2_evaluate_loc_desc (caller_core_addr_type, caller_frame,
574                                         dwarf_block->data, dwarf_block->size,
575                                         dwarf_block->per_cu);
576         /* DW_AT_GNU_call_site_target is a DWARF expression, not a DWARF
577            location.  */
578         if (VALUE_LVAL (val) == lval_memory)
579           return value_address (val);
580         else
581           return value_as_address (val);
582       }
583
584     case FIELD_LOC_KIND_PHYSNAME:
585       {
586         const char *physname;
587         struct bound_minimal_symbol msym;
588
589         physname = FIELD_STATIC_PHYSNAME (call_site->target);
590
591         /* Handle both the mangled and demangled PHYSNAME.  */
592         msym = lookup_minimal_symbol (physname, NULL, NULL);
593         if (msym.minsym == NULL)
594           {
595             msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
596             throw_error (NO_ENTRY_VALUE_ERROR,
597                          _("Cannot find function \"%s\" for a call site target "
598                            "at %s in %s"),
599                          physname, paddress (call_site_gdbarch, call_site->pc),
600                          (msym.minsym == NULL ? "???"
601                           : MSYMBOL_PRINT_NAME (msym.minsym)));
602                         
603           }
604         return BMSYMBOL_VALUE_ADDRESS (msym);
605       }
606
607     case FIELD_LOC_KIND_PHYSADDR:
608       return FIELD_STATIC_PHYSADDR (call_site->target);
609
610     default:
611       internal_error (__FILE__, __LINE__, _("invalid call site target kind"));
612     }
613 }
614
615 /* Convert function entry point exact address ADDR to the function which is
616    compliant with TAIL_CALL_LIST_COMPLETE condition.  Throw
617    NO_ENTRY_VALUE_ERROR otherwise.  */
618
619 static struct symbol *
620 func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr)
621 {
622   struct symbol *sym = find_pc_function (addr);
623   struct type *type;
624
625   if (sym == NULL || BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) != addr)
626     throw_error (NO_ENTRY_VALUE_ERROR,
627                  _("DW_TAG_GNU_call_site resolving failed to find function "
628                    "name for address %s"),
629                  paddress (gdbarch, addr));
630
631   type = SYMBOL_TYPE (sym);
632   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FUNC);
633   gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
634
635   return sym;
636 }
637
638 /* Verify function with entry point exact address ADDR can never call itself
639    via its tail calls (incl. transitively).  Throw NO_ENTRY_VALUE_ERROR if it
640    can call itself via tail calls.
641
642    If a funtion can tail call itself its entry value based parameters are
643    unreliable.  There is no verification whether the value of some/all
644    parameters is unchanged through the self tail call, we expect if there is
645    a self tail call all the parameters can be modified.  */
646
647 static void
648 func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr)
649 {
650   struct obstack addr_obstack;
651   struct cleanup *old_chain;
652   CORE_ADDR addr;
653
654   /* Track here CORE_ADDRs which were already visited.  */
655   htab_t addr_hash;
656
657   /* The verification is completely unordered.  Track here function addresses
658      which still need to be iterated.  */
659   VEC (CORE_ADDR) *todo = NULL;
660
661   obstack_init (&addr_obstack);
662   old_chain = make_cleanup_obstack_free (&addr_obstack);   
663   addr_hash = htab_create_alloc_ex (64, core_addr_hash, core_addr_eq, NULL,
664                                     &addr_obstack, hashtab_obstack_allocate,
665                                     NULL);
666   make_cleanup_htab_delete (addr_hash);
667
668   make_cleanup (VEC_cleanup (CORE_ADDR), &todo);
669
670   VEC_safe_push (CORE_ADDR, todo, verify_addr);
671   while (!VEC_empty (CORE_ADDR, todo))
672     {
673       struct symbol *func_sym;
674       struct call_site *call_site;
675
676       addr = VEC_pop (CORE_ADDR, todo);
677
678       func_sym = func_addr_to_tail_call_list (gdbarch, addr);
679
680       for (call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (func_sym));
681            call_site; call_site = call_site->tail_call_next)
682         {
683           CORE_ADDR target_addr;
684           void **slot;
685
686           /* CALLER_FRAME with registers is not available for tail-call jumped
687              frames.  */
688           target_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
689
690           if (target_addr == verify_addr)
691             {
692               struct bound_minimal_symbol msym;
693               
694               msym = lookup_minimal_symbol_by_pc (verify_addr);
695               throw_error (NO_ENTRY_VALUE_ERROR,
696                            _("DW_OP_GNU_entry_value resolving has found "
697                              "function \"%s\" at %s can call itself via tail "
698                              "calls"),
699                            (msym.minsym == NULL ? "???"
700                             : MSYMBOL_PRINT_NAME (msym.minsym)),
701                            paddress (gdbarch, verify_addr));
702             }
703
704           slot = htab_find_slot (addr_hash, &target_addr, INSERT);
705           if (*slot == NULL)
706             {
707               *slot = obstack_copy (&addr_obstack, &target_addr,
708                                     sizeof (target_addr));
709               VEC_safe_push (CORE_ADDR, todo, target_addr);
710             }
711         }
712     }
713
714   do_cleanups (old_chain);
715 }
716
717 /* Print user readable form of CALL_SITE->PC to gdb_stdlog.  Used only for
718    ENTRY_VALUES_DEBUG.  */
719
720 static void
721 tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
722 {
723   CORE_ADDR addr = call_site->pc;
724   struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1);
725
726   fprintf_unfiltered (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
727                       (msym.minsym == NULL ? "???"
728                        : MSYMBOL_PRINT_NAME (msym.minsym)));
729
730 }
731
732 /* vec.h needs single word type name, typedef it.  */
733 typedef struct call_site *call_sitep;
734
735 /* Define VEC (call_sitep) functions.  */
736 DEF_VEC_P (call_sitep);
737
738 /* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP
739    only top callers and bottom callees which are present in both.  GDBARCH is
740    used only for ENTRY_VALUES_DEBUG.  RESULTP is NULL after return if there are
741    no remaining possibilities to provide unambiguous non-trivial result.
742    RESULTP should point to NULL on the first (initialization) call.  Caller is
743    responsible for xfree of any RESULTP data.  */
744
745 static void
746 chain_candidate (struct gdbarch *gdbarch, struct call_site_chain **resultp,
747                  VEC (call_sitep) *chain)
748 {
749   struct call_site_chain *result = *resultp;
750   long length = VEC_length (call_sitep, chain);
751   int callers, callees, idx;
752
753   if (result == NULL)
754     {
755       /* Create the initial chain containing all the passed PCs.  */
756
757       result = xmalloc (sizeof (*result) + sizeof (*result->call_site)
758                                            * (length - 1));
759       result->length = length;
760       result->callers = result->callees = length;
761       if (!VEC_empty (call_sitep, chain))
762         memcpy (result->call_site, VEC_address (call_sitep, chain),
763                 sizeof (*result->call_site) * length);
764       *resultp = result;
765
766       if (entry_values_debug)
767         {
768           fprintf_unfiltered (gdb_stdlog, "tailcall: initial:");
769           for (idx = 0; idx < length; idx++)
770             tailcall_dump (gdbarch, result->call_site[idx]);
771           fputc_unfiltered ('\n', gdb_stdlog);
772         }
773
774       return;
775     }
776
777   if (entry_values_debug)
778     {
779       fprintf_unfiltered (gdb_stdlog, "tailcall: compare:");
780       for (idx = 0; idx < length; idx++)
781         tailcall_dump (gdbarch, VEC_index (call_sitep, chain, idx));
782       fputc_unfiltered ('\n', gdb_stdlog);
783     }
784
785   /* Intersect callers.  */
786
787   callers = min (result->callers, length);
788   for (idx = 0; idx < callers; idx++)
789     if (result->call_site[idx] != VEC_index (call_sitep, chain, idx))
790       {
791         result->callers = idx;
792         break;
793       }
794
795   /* Intersect callees.  */
796
797   callees = min (result->callees, length);
798   for (idx = 0; idx < callees; idx++)
799     if (result->call_site[result->length - 1 - idx]
800         != VEC_index (call_sitep, chain, length - 1 - idx))
801       {
802         result->callees = idx;
803         break;
804       }
805
806   if (entry_values_debug)
807     {
808       fprintf_unfiltered (gdb_stdlog, "tailcall: reduced:");
809       for (idx = 0; idx < result->callers; idx++)
810         tailcall_dump (gdbarch, result->call_site[idx]);
811       fputs_unfiltered (" |", gdb_stdlog);
812       for (idx = 0; idx < result->callees; idx++)
813         tailcall_dump (gdbarch, result->call_site[result->length
814                                                   - result->callees + idx]);
815       fputc_unfiltered ('\n', gdb_stdlog);
816     }
817
818   if (result->callers == 0 && result->callees == 0)
819     {
820       /* There are no common callers or callees.  It could be also a direct
821          call (which has length 0) with ambiguous possibility of an indirect
822          call - CALLERS == CALLEES == 0 is valid during the first allocation
823          but any subsequence processing of such entry means ambiguity.  */
824       xfree (result);
825       *resultp = NULL;
826       return;
827     }
828
829   /* See call_site_find_chain_1 why there is no way to reach the bottom callee
830      PC again.  In such case there must be two different code paths to reach
831      it, therefore some of the former determined intermediate PCs must differ
832      and the unambiguous chain gets shortened.  */
833   gdb_assert (result->callers + result->callees < result->length);
834 }
835
836 /* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All the
837    assumed frames between them use GDBARCH.  Use depth first search so we can
838    keep single CHAIN of call_site's back to CALLER_PC.  Function recursion
839    would have needless GDB stack overhead.  Caller is responsible for xfree of
840    the returned result.  Any unreliability results in thrown
841    NO_ENTRY_VALUE_ERROR.  */
842
843 static struct call_site_chain *
844 call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
845                         CORE_ADDR callee_pc)
846 {
847   CORE_ADDR save_callee_pc = callee_pc;
848   struct obstack addr_obstack;
849   struct cleanup *back_to_retval, *back_to_workdata;
850   struct call_site_chain *retval = NULL;
851   struct call_site *call_site;
852
853   /* Mark CALL_SITEs so we do not visit the same ones twice.  */
854   htab_t addr_hash;
855
856   /* CHAIN contains only the intermediate CALL_SITEs.  Neither CALLER_PC's
857      call_site nor any possible call_site at CALLEE_PC's function is there.
858      Any CALL_SITE in CHAIN will be iterated to its siblings - via
859      TAIL_CALL_NEXT.  This is inappropriate for CALLER_PC's call_site.  */
860   VEC (call_sitep) *chain = NULL;
861
862   /* We are not interested in the specific PC inside the callee function.  */
863   callee_pc = get_pc_function_start (callee_pc);
864   if (callee_pc == 0)
865     throw_error (NO_ENTRY_VALUE_ERROR, _("Unable to find function for PC %s"),
866                  paddress (gdbarch, save_callee_pc));
867
868   back_to_retval = make_cleanup (free_current_contents, &retval);
869
870   obstack_init (&addr_obstack);
871   back_to_workdata = make_cleanup_obstack_free (&addr_obstack);   
872   addr_hash = htab_create_alloc_ex (64, core_addr_hash, core_addr_eq, NULL,
873                                     &addr_obstack, hashtab_obstack_allocate,
874                                     NULL);
875   make_cleanup_htab_delete (addr_hash);
876
877   make_cleanup (VEC_cleanup (call_sitep), &chain);
878
879   /* Do not push CALL_SITE to CHAIN.  Push there only the first tail call site
880      at the target's function.  All the possible tail call sites in the
881      target's function will get iterated as already pushed into CHAIN via their
882      TAIL_CALL_NEXT.  */
883   call_site = call_site_for_pc (gdbarch, caller_pc);
884
885   while (call_site)
886     {
887       CORE_ADDR target_func_addr;
888       struct call_site *target_call_site;
889
890       /* CALLER_FRAME with registers is not available for tail-call jumped
891          frames.  */
892       target_func_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
893
894       if (target_func_addr == callee_pc)
895         {
896           chain_candidate (gdbarch, &retval, chain);
897           if (retval == NULL)
898             break;
899
900           /* There is no way to reach CALLEE_PC again as we would prevent
901              entering it twice as being already marked in ADDR_HASH.  */
902           target_call_site = NULL;
903         }
904       else
905         {
906           struct symbol *target_func;
907
908           target_func = func_addr_to_tail_call_list (gdbarch, target_func_addr);
909           target_call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (target_func));
910         }
911
912       do
913         {
914           /* Attempt to visit TARGET_CALL_SITE.  */
915
916           if (target_call_site)
917             {
918               void **slot;
919
920               slot = htab_find_slot (addr_hash, &target_call_site->pc, INSERT);
921               if (*slot == NULL)
922                 {
923                   /* Successfully entered TARGET_CALL_SITE.  */
924
925                   *slot = &target_call_site->pc;
926                   VEC_safe_push (call_sitep, chain, target_call_site);
927                   break;
928                 }
929             }
930
931           /* Backtrack (without revisiting the originating call_site).  Try the
932              callers's sibling; if there isn't any try the callers's callers's
933              sibling etc.  */
934
935           target_call_site = NULL;
936           while (!VEC_empty (call_sitep, chain))
937             {
938               call_site = VEC_pop (call_sitep, chain);
939
940               gdb_assert (htab_find_slot (addr_hash, &call_site->pc,
941                                           NO_INSERT) != NULL);
942               htab_remove_elt (addr_hash, &call_site->pc);
943
944               target_call_site = call_site->tail_call_next;
945               if (target_call_site)
946                 break;
947             }
948         }
949       while (target_call_site);
950
951       if (VEC_empty (call_sitep, chain))
952         call_site = NULL;
953       else
954         call_site = VEC_last (call_sitep, chain);
955     }
956
957   if (retval == NULL)
958     {
959       struct bound_minimal_symbol msym_caller, msym_callee;
960       
961       msym_caller = lookup_minimal_symbol_by_pc (caller_pc);
962       msym_callee = lookup_minimal_symbol_by_pc (callee_pc);
963       throw_error (NO_ENTRY_VALUE_ERROR,
964                    _("There are no unambiguously determinable intermediate "
965                      "callers or callees between caller function \"%s\" at %s "
966                      "and callee function \"%s\" at %s"),
967                    (msym_caller.minsym == NULL
968                     ? "???" : MSYMBOL_PRINT_NAME (msym_caller.minsym)),
969                    paddress (gdbarch, caller_pc),
970                    (msym_callee.minsym == NULL
971                     ? "???" : MSYMBOL_PRINT_NAME (msym_callee.minsym)),
972                    paddress (gdbarch, callee_pc));
973     }
974
975   do_cleanups (back_to_workdata);
976   discard_cleanups (back_to_retval);
977   return retval;
978 }
979
980 /* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All the
981    assumed frames between them use GDBARCH.  If valid call_site_chain cannot be
982    constructed return NULL.  Caller is responsible for xfree of the returned
983    result.  */
984
985 struct call_site_chain *
986 call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
987                       CORE_ADDR callee_pc)
988 {
989   volatile struct gdb_exception e;
990   struct call_site_chain *retval = NULL;
991
992   TRY_CATCH (e, RETURN_MASK_ERROR)
993     {
994       retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc);
995     }
996   if (e.reason < 0)
997     {
998       if (e.error == NO_ENTRY_VALUE_ERROR)
999         {
1000           if (entry_values_debug)
1001             exception_print (gdb_stdout, e);
1002
1003           return NULL;
1004         }
1005       else
1006         throw_exception (e);
1007     }
1008   return retval;
1009 }
1010
1011 /* Return 1 if KIND and KIND_U match PARAMETER.  Return 0 otherwise.  */
1012
1013 static int
1014 call_site_parameter_matches (struct call_site_parameter *parameter,
1015                              enum call_site_parameter_kind kind,
1016                              union call_site_parameter_u kind_u)
1017 {
1018   if (kind == parameter->kind)
1019     switch (kind)
1020       {
1021       case CALL_SITE_PARAMETER_DWARF_REG:
1022         return kind_u.dwarf_reg == parameter->u.dwarf_reg;
1023       case CALL_SITE_PARAMETER_FB_OFFSET:
1024         return kind_u.fb_offset == parameter->u.fb_offset;
1025       case CALL_SITE_PARAMETER_PARAM_OFFSET:
1026         return kind_u.param_offset.cu_off == parameter->u.param_offset.cu_off;
1027       }
1028   return 0;
1029 }
1030
1031 /* Fetch call_site_parameter from caller matching KIND and KIND_U.
1032    FRAME is for callee.
1033
1034    Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR
1035    otherwise.  */
1036
1037 static struct call_site_parameter *
1038 dwarf_expr_reg_to_entry_parameter (struct frame_info *frame,
1039                                    enum call_site_parameter_kind kind,
1040                                    union call_site_parameter_u kind_u,
1041                                    struct dwarf2_per_cu_data **per_cu_return)
1042 {
1043   CORE_ADDR func_addr, caller_pc;
1044   struct gdbarch *gdbarch;
1045   struct frame_info *caller_frame;
1046   struct call_site *call_site;
1047   int iparams;
1048   /* Initialize it just to avoid a GCC false warning.  */
1049   struct call_site_parameter *parameter = NULL;
1050   CORE_ADDR target_addr;
1051
1052   while (get_frame_type (frame) == INLINE_FRAME)
1053     {
1054       frame = get_prev_frame (frame);
1055       gdb_assert (frame != NULL);
1056     }
1057
1058   func_addr = get_frame_func (frame);
1059   gdbarch = get_frame_arch (frame);
1060   caller_frame = get_prev_frame (frame);
1061   if (gdbarch != frame_unwind_arch (frame))
1062     {
1063       struct bound_minimal_symbol msym
1064         = lookup_minimal_symbol_by_pc (func_addr);
1065       struct gdbarch *caller_gdbarch = frame_unwind_arch (frame);
1066
1067       throw_error (NO_ENTRY_VALUE_ERROR,
1068                    _("DW_OP_GNU_entry_value resolving callee gdbarch %s "
1069                      "(of %s (%s)) does not match caller gdbarch %s"),
1070                    gdbarch_bfd_arch_info (gdbarch)->printable_name,
1071                    paddress (gdbarch, func_addr),
1072                    (msym.minsym == NULL ? "???"
1073                     : MSYMBOL_PRINT_NAME (msym.minsym)),
1074                    gdbarch_bfd_arch_info (caller_gdbarch)->printable_name);
1075     }
1076
1077   if (caller_frame == NULL)
1078     {
1079       struct bound_minimal_symbol msym
1080         = lookup_minimal_symbol_by_pc (func_addr);
1081
1082       throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_GNU_entry_value resolving "
1083                                            "requires caller of %s (%s)"),
1084                    paddress (gdbarch, func_addr),
1085                    (msym.minsym == NULL ? "???"
1086                     : MSYMBOL_PRINT_NAME (msym.minsym)));
1087     }
1088   caller_pc = get_frame_pc (caller_frame);
1089   call_site = call_site_for_pc (gdbarch, caller_pc);
1090
1091   target_addr = call_site_to_target_addr (gdbarch, call_site, caller_frame);
1092   if (target_addr != func_addr)
1093     {
1094       struct minimal_symbol *target_msym, *func_msym;
1095
1096       target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym;
1097       func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym;
1098       throw_error (NO_ENTRY_VALUE_ERROR,
1099                    _("DW_OP_GNU_entry_value resolving expects callee %s at %s "
1100                      "but the called frame is for %s at %s"),
1101                    (target_msym == NULL ? "???"
1102                                         : MSYMBOL_PRINT_NAME (target_msym)),
1103                    paddress (gdbarch, target_addr),
1104                    func_msym == NULL ? "???" : MSYMBOL_PRINT_NAME (func_msym),
1105                    paddress (gdbarch, func_addr));
1106     }
1107
1108   /* No entry value based parameters would be reliable if this function can
1109      call itself via tail calls.  */
1110   func_verify_no_selftailcall (gdbarch, func_addr);
1111
1112   for (iparams = 0; iparams < call_site->parameter_count; iparams++)
1113     {
1114       parameter = &call_site->parameter[iparams];
1115       if (call_site_parameter_matches (parameter, kind, kind_u))
1116         break;
1117     }
1118   if (iparams == call_site->parameter_count)
1119     {
1120       struct minimal_symbol *msym
1121         = lookup_minimal_symbol_by_pc (caller_pc).minsym;
1122
1123       /* DW_TAG_GNU_call_site_parameter will be missing just if GCC could not
1124          determine its value.  */
1125       throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter "
1126                                            "at DW_TAG_GNU_call_site %s at %s"),
1127                    paddress (gdbarch, caller_pc),
1128                    msym == NULL ? "???" : MSYMBOL_PRINT_NAME (msym)); 
1129     }
1130
1131   *per_cu_return = call_site->per_cu;
1132   return parameter;
1133 }
1134
1135 /* Return value for PARAMETER matching DEREF_SIZE.  If DEREF_SIZE is -1, return
1136    the normal DW_AT_GNU_call_site_value block.  Otherwise return the
1137    DW_AT_GNU_call_site_data_value (dereferenced) block.
1138
1139    TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned
1140    struct value.
1141
1142    Function always returns non-NULL, non-optimized out value.  It throws
1143    NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason.  */
1144
1145 static struct value *
1146 dwarf_entry_parameter_to_value (struct call_site_parameter *parameter,
1147                                 CORE_ADDR deref_size, struct type *type,
1148                                 struct frame_info *caller_frame,
1149                                 struct dwarf2_per_cu_data *per_cu)
1150 {
1151   const gdb_byte *data_src;
1152   gdb_byte *data;
1153   size_t size;
1154
1155   data_src = deref_size == -1 ? parameter->value : parameter->data_value;
1156   size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
1157
1158   /* DEREF_SIZE size is not verified here.  */
1159   if (data_src == NULL)
1160     throw_error (NO_ENTRY_VALUE_ERROR,
1161                  _("Cannot resolve DW_AT_GNU_call_site_data_value"));
1162
1163   /* DW_AT_GNU_call_site_value is a DWARF expression, not a DWARF
1164      location.  Postprocessing of DWARF_VALUE_MEMORY would lose the type from
1165      DWARF block.  */
1166   data = alloca (size + 1);
1167   memcpy (data, data_src, size);
1168   data[size] = DW_OP_stack_value;
1169
1170   return dwarf2_evaluate_loc_desc (type, caller_frame, data, size + 1, per_cu);
1171 }
1172
1173 /* Execute DWARF block of call_site_parameter which matches KIND and KIND_U.
1174    Choose DEREF_SIZE value of that parameter.  Search caller of the CTX's
1175    frame.  CTX must be of dwarf_expr_ctx_funcs kind.
1176
1177    The CTX caller can be from a different CU - per_cu_dwarf_call implementation
1178    can be more simple as it does not support cross-CU DWARF executions.  */
1179
1180 static void
1181 dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
1182                                        enum call_site_parameter_kind kind,
1183                                        union call_site_parameter_u kind_u,
1184                                        int deref_size)
1185 {
1186   struct dwarf_expr_baton *debaton;
1187   struct frame_info *frame, *caller_frame;
1188   struct dwarf2_per_cu_data *caller_per_cu;
1189   struct dwarf_expr_baton baton_local;
1190   struct dwarf_expr_context saved_ctx;
1191   struct call_site_parameter *parameter;
1192   const gdb_byte *data_src;
1193   size_t size;
1194
1195   gdb_assert (ctx->funcs == &dwarf_expr_ctx_funcs);
1196   debaton = ctx->baton;
1197   frame = debaton->frame;
1198   caller_frame = get_prev_frame (frame);
1199
1200   parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
1201                                                  &caller_per_cu);
1202   data_src = deref_size == -1 ? parameter->value : parameter->data_value;
1203   size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
1204
1205   /* DEREF_SIZE size is not verified here.  */
1206   if (data_src == NULL)
1207     throw_error (NO_ENTRY_VALUE_ERROR,
1208                  _("Cannot resolve DW_AT_GNU_call_site_data_value"));
1209
1210   baton_local.frame = caller_frame;
1211   baton_local.per_cu = caller_per_cu;
1212
1213   saved_ctx.gdbarch = ctx->gdbarch;
1214   saved_ctx.addr_size = ctx->addr_size;
1215   saved_ctx.offset = ctx->offset;
1216   saved_ctx.baton = ctx->baton;
1217   ctx->gdbarch = get_objfile_arch (dwarf2_per_cu_objfile (baton_local.per_cu));
1218   ctx->addr_size = dwarf2_per_cu_addr_size (baton_local.per_cu);
1219   ctx->offset = dwarf2_per_cu_text_offset (baton_local.per_cu);
1220   ctx->baton = &baton_local;
1221
1222   dwarf_expr_eval (ctx, data_src, size);
1223
1224   ctx->gdbarch = saved_ctx.gdbarch;
1225   ctx->addr_size = saved_ctx.addr_size;
1226   ctx->offset = saved_ctx.offset;
1227   ctx->baton = saved_ctx.baton;
1228 }
1229
1230 /* Callback function for dwarf2_evaluate_loc_desc.
1231    Fetch the address indexed by DW_OP_GNU_addr_index.  */
1232
1233 static CORE_ADDR
1234 dwarf_expr_get_addr_index (void *baton, unsigned int index)
1235 {
1236   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
1237
1238   return dwarf2_read_addr_index (debaton->per_cu, index);
1239 }
1240
1241 /* VALUE must be of type lval_computed with entry_data_value_funcs.  Perform
1242    the indirect method on it, that is use its stored target value, the sole
1243    purpose of entry_data_value_funcs..  */
1244
1245 static struct value *
1246 entry_data_value_coerce_ref (const struct value *value)
1247 {
1248   struct type *checked_type = check_typedef (value_type (value));
1249   struct value *target_val;
1250
1251   if (TYPE_CODE (checked_type) != TYPE_CODE_REF)
1252     return NULL;
1253
1254   target_val = value_computed_closure (value);
1255   value_incref (target_val);
1256   return target_val;
1257 }
1258
1259 /* Implement copy_closure.  */
1260
1261 static void *
1262 entry_data_value_copy_closure (const struct value *v)
1263 {
1264   struct value *target_val = value_computed_closure (v);
1265
1266   value_incref (target_val);
1267   return target_val;
1268 }
1269
1270 /* Implement free_closure.  */
1271
1272 static void
1273 entry_data_value_free_closure (struct value *v)
1274 {
1275   struct value *target_val = value_computed_closure (v);
1276
1277   value_free (target_val);
1278 }
1279
1280 /* Vector for methods for an entry value reference where the referenced value
1281    is stored in the caller.  On the first dereference use
1282    DW_AT_GNU_call_site_data_value in the caller.  */
1283
1284 static const struct lval_funcs entry_data_value_funcs =
1285 {
1286   NULL, /* read */
1287   NULL, /* write */
1288   NULL, /* check_validity */
1289   NULL, /* check_any_valid */
1290   NULL, /* indirect */
1291   entry_data_value_coerce_ref,
1292   NULL, /* check_synthetic_pointer */
1293   entry_data_value_copy_closure,
1294   entry_data_value_free_closure
1295 };
1296
1297 /* Read parameter of TYPE at (callee) FRAME's function entry.  KIND and KIND_U
1298    are used to match DW_AT_location at the caller's
1299    DW_TAG_GNU_call_site_parameter.
1300
1301    Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
1302    cannot resolve the parameter for any reason.  */
1303
1304 static struct value *
1305 value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame,
1306                           enum call_site_parameter_kind kind,
1307                           union call_site_parameter_u kind_u)
1308 {
1309   struct type *checked_type = check_typedef (type);
1310   struct type *target_type = TYPE_TARGET_TYPE (checked_type);
1311   struct frame_info *caller_frame = get_prev_frame (frame);
1312   struct value *outer_val, *target_val, *val;
1313   struct call_site_parameter *parameter;
1314   struct dwarf2_per_cu_data *caller_per_cu;
1315
1316   parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
1317                                                  &caller_per_cu);
1318
1319   outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
1320                                               type, caller_frame,
1321                                               caller_per_cu);
1322
1323   /* Check if DW_AT_GNU_call_site_data_value cannot be used.  If it should be
1324      used and it is not available do not fall back to OUTER_VAL - dereferencing
1325      TYPE_CODE_REF with non-entry data value would give current value - not the
1326      entry value.  */
1327
1328   if (TYPE_CODE (checked_type) != TYPE_CODE_REF
1329       || TYPE_TARGET_TYPE (checked_type) == NULL)
1330     return outer_val;
1331
1332   target_val = dwarf_entry_parameter_to_value (parameter,
1333                                                TYPE_LENGTH (target_type),
1334                                                target_type, caller_frame,
1335                                                caller_per_cu);
1336
1337   release_value (target_val);
1338   val = allocate_computed_value (type, &entry_data_value_funcs,
1339                                  target_val /* closure */);
1340
1341   /* Copy the referencing pointer to the new computed value.  */
1342   memcpy (value_contents_raw (val), value_contents_raw (outer_val),
1343           TYPE_LENGTH (checked_type));
1344   set_value_lazy (val, 0);
1345
1346   return val;
1347 }
1348
1349 /* Read parameter of TYPE at (callee) FRAME's function entry.  DATA and
1350    SIZE are DWARF block used to match DW_AT_location at the caller's
1351    DW_TAG_GNU_call_site_parameter.
1352
1353    Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
1354    cannot resolve the parameter for any reason.  */
1355
1356 static struct value *
1357 value_of_dwarf_block_entry (struct type *type, struct frame_info *frame,
1358                             const gdb_byte *block, size_t block_len)
1359 {
1360   union call_site_parameter_u kind_u;
1361
1362   kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
1363   if (kind_u.dwarf_reg != -1)
1364     return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG,
1365                                      kind_u);
1366
1367   if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset))
1368     return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET,
1369                                      kind_u);
1370
1371   /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
1372      suppressed during normal operation.  The expression can be arbitrary if
1373      there is no caller-callee entry value binding expected.  */
1374   throw_error (NO_ENTRY_VALUE_ERROR,
1375                _("DWARF-2 expression error: DW_OP_GNU_entry_value is supported "
1376                  "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
1377 }
1378
1379 struct piece_closure
1380 {
1381   /* Reference count.  */
1382   int refc;
1383
1384   /* The CU from which this closure's expression came.  */
1385   struct dwarf2_per_cu_data *per_cu;
1386
1387   /* The number of pieces used to describe this variable.  */
1388   int n_pieces;
1389
1390   /* The target address size, used only for DWARF_VALUE_STACK.  */
1391   int addr_size;
1392
1393   /* The pieces themselves.  */
1394   struct dwarf_expr_piece *pieces;
1395 };
1396
1397 /* Allocate a closure for a value formed from separately-described
1398    PIECES.  */
1399
1400 static struct piece_closure *
1401 allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
1402                         int n_pieces, struct dwarf_expr_piece *pieces,
1403                         int addr_size)
1404 {
1405   struct piece_closure *c = XCNEW (struct piece_closure);
1406   int i;
1407
1408   c->refc = 1;
1409   c->per_cu = per_cu;
1410   c->n_pieces = n_pieces;
1411   c->addr_size = addr_size;
1412   c->pieces = XCNEWVEC (struct dwarf_expr_piece, n_pieces);
1413
1414   memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
1415   for (i = 0; i < n_pieces; ++i)
1416     if (c->pieces[i].location == DWARF_VALUE_STACK)
1417       value_incref (c->pieces[i].v.value);
1418
1419   return c;
1420 }
1421
1422 /* The lowest-level function to extract bits from a byte buffer.
1423    SOURCE is the buffer.  It is updated if we read to the end of a
1424    byte.
1425    SOURCE_OFFSET_BITS is the offset of the first bit to read.  It is
1426    updated to reflect the number of bits actually read.
1427    NBITS is the number of bits we want to read.  It is updated to
1428    reflect the number of bits actually read.  This function may read
1429    fewer bits.
1430    BITS_BIG_ENDIAN is taken directly from gdbarch.
1431    This function returns the extracted bits.  */
1432
1433 static unsigned int
1434 extract_bits_primitive (const gdb_byte **source,
1435                         unsigned int *source_offset_bits,
1436                         int *nbits, int bits_big_endian)
1437 {
1438   unsigned int avail, mask, datum;
1439
1440   gdb_assert (*source_offset_bits < 8);
1441
1442   avail = 8 - *source_offset_bits;
1443   if (avail > *nbits)
1444     avail = *nbits;
1445
1446   mask = (1 << avail) - 1;
1447   datum = **source;
1448   if (bits_big_endian)
1449     datum >>= 8 - (*source_offset_bits + *nbits);
1450   else
1451     datum >>= *source_offset_bits;
1452   datum &= mask;
1453
1454   *nbits -= avail;
1455   *source_offset_bits += avail;
1456   if (*source_offset_bits >= 8)
1457     {
1458       *source_offset_bits -= 8;
1459       ++*source;
1460     }
1461
1462   return datum;
1463 }
1464
1465 /* Extract some bits from a source buffer and move forward in the
1466    buffer.
1467    
1468    SOURCE is the source buffer.  It is updated as bytes are read.
1469    SOURCE_OFFSET_BITS is the offset into SOURCE.  It is updated as
1470    bits are read.
1471    NBITS is the number of bits to read.
1472    BITS_BIG_ENDIAN is taken directly from gdbarch.
1473    
1474    This function returns the bits that were read.  */
1475
1476 static unsigned int
1477 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
1478               int nbits, int bits_big_endian)
1479 {
1480   unsigned int datum;
1481
1482   gdb_assert (nbits > 0 && nbits <= 8);
1483
1484   datum = extract_bits_primitive (source, source_offset_bits, &nbits,
1485                                   bits_big_endian);
1486   if (nbits > 0)
1487     {
1488       unsigned int more;
1489
1490       more = extract_bits_primitive (source, source_offset_bits, &nbits,
1491                                      bits_big_endian);
1492       if (bits_big_endian)
1493         datum <<= nbits;
1494       else
1495         more <<= nbits;
1496       datum |= more;
1497     }
1498
1499   return datum;
1500 }
1501
1502 /* Write some bits into a buffer and move forward in the buffer.
1503    
1504    DATUM is the bits to write.  The low-order bits of DATUM are used.
1505    DEST is the destination buffer.  It is updated as bytes are
1506    written.
1507    DEST_OFFSET_BITS is the bit offset in DEST at which writing is
1508    done.
1509    NBITS is the number of valid bits in DATUM.
1510    BITS_BIG_ENDIAN is taken directly from gdbarch.  */
1511
1512 static void
1513 insert_bits (unsigned int datum,
1514              gdb_byte *dest, unsigned int dest_offset_bits,
1515              int nbits, int bits_big_endian)
1516 {
1517   unsigned int mask;
1518
1519   gdb_assert (dest_offset_bits + nbits <= 8);
1520
1521   mask = (1 << nbits) - 1;
1522   if (bits_big_endian)
1523     {
1524       datum <<= 8 - (dest_offset_bits + nbits);
1525       mask <<= 8 - (dest_offset_bits + nbits);
1526     }
1527   else
1528     {
1529       datum <<= dest_offset_bits;
1530       mask <<= dest_offset_bits;
1531     }
1532
1533   gdb_assert ((datum & ~mask) == 0);
1534
1535   *dest = (*dest & ~mask) | datum;
1536 }
1537
1538 /* Copy bits from a source to a destination.
1539    
1540    DEST is where the bits should be written.
1541    DEST_OFFSET_BITS is the bit offset into DEST.
1542    SOURCE is the source of bits.
1543    SOURCE_OFFSET_BITS is the bit offset into SOURCE.
1544    BIT_COUNT is the number of bits to copy.
1545    BITS_BIG_ENDIAN is taken directly from gdbarch.  */
1546
1547 static void
1548 copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
1549               const gdb_byte *source, unsigned int source_offset_bits,
1550               unsigned int bit_count,
1551               int bits_big_endian)
1552 {
1553   unsigned int dest_avail;
1554   int datum;
1555
1556   /* Reduce everything to byte-size pieces.  */
1557   dest += dest_offset_bits / 8;
1558   dest_offset_bits %= 8;
1559   source += source_offset_bits / 8;
1560   source_offset_bits %= 8;
1561
1562   dest_avail = 8 - dest_offset_bits % 8;
1563
1564   /* See if we can fill the first destination byte.  */
1565   if (dest_avail < bit_count)
1566     {
1567       datum = extract_bits (&source, &source_offset_bits, dest_avail,
1568                             bits_big_endian);
1569       insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
1570       ++dest;
1571       dest_offset_bits = 0;
1572       bit_count -= dest_avail;
1573     }
1574
1575   /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
1576      than 8 bits remaining.  */
1577   gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
1578   for (; bit_count >= 8; bit_count -= 8)
1579     {
1580       datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
1581       *dest++ = (gdb_byte) datum;
1582     }
1583
1584   /* Finally, we may have a few leftover bits.  */
1585   gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
1586   if (bit_count > 0)
1587     {
1588       datum = extract_bits (&source, &source_offset_bits, bit_count,
1589                             bits_big_endian);
1590       insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
1591     }
1592 }
1593
1594 static void
1595 read_pieced_value (struct value *v)
1596 {
1597   int i;
1598   long offset = 0;
1599   ULONGEST bits_to_skip;
1600   gdb_byte *contents;
1601   struct piece_closure *c
1602     = (struct piece_closure *) value_computed_closure (v);
1603   struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
1604   size_t type_len;
1605   size_t buffer_size = 0;
1606   gdb_byte *buffer = NULL;
1607   struct cleanup *cleanup;
1608   int bits_big_endian
1609     = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
1610
1611   if (value_type (v) != value_enclosing_type (v))
1612     internal_error (__FILE__, __LINE__,
1613                     _("Should not be able to create a lazy value with "
1614                       "an enclosing type"));
1615
1616   cleanup = make_cleanup (free_current_contents, &buffer);
1617
1618   contents = value_contents_raw (v);
1619   bits_to_skip = 8 * value_offset (v);
1620   if (value_bitsize (v))
1621     {
1622       bits_to_skip += value_bitpos (v);
1623       type_len = value_bitsize (v);
1624     }
1625   else
1626     type_len = 8 * TYPE_LENGTH (value_type (v));
1627
1628   for (i = 0; i < c->n_pieces && offset < type_len; i++)
1629     {
1630       struct dwarf_expr_piece *p = &c->pieces[i];
1631       size_t this_size, this_size_bits;
1632       long dest_offset_bits, source_offset_bits, source_offset;
1633       const gdb_byte *intermediate_buffer;
1634
1635       /* Compute size, source, and destination offsets for copying, in
1636          bits.  */
1637       this_size_bits = p->size;
1638       if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
1639         {
1640           bits_to_skip -= this_size_bits;
1641           continue;
1642         }
1643       if (bits_to_skip > 0)
1644         {
1645           dest_offset_bits = 0;
1646           source_offset_bits = bits_to_skip;
1647           this_size_bits -= bits_to_skip;
1648           bits_to_skip = 0;
1649         }
1650       else
1651         {
1652           dest_offset_bits = offset;
1653           source_offset_bits = 0;
1654         }
1655       if (this_size_bits > type_len - offset)
1656         this_size_bits = type_len - offset;
1657
1658       this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
1659       source_offset = source_offset_bits / 8;
1660       if (buffer_size < this_size)
1661         {
1662           buffer_size = this_size;
1663           buffer = xrealloc (buffer, buffer_size);
1664         }
1665       intermediate_buffer = buffer;
1666
1667       /* Copy from the source to DEST_BUFFER.  */
1668       switch (p->location)
1669         {
1670         case DWARF_VALUE_REGISTER:
1671           {
1672             struct gdbarch *arch = get_frame_arch (frame);
1673             int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
1674             int reg_offset = source_offset;
1675
1676             if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
1677                 && this_size < register_size (arch, gdb_regnum))
1678               {
1679                 /* Big-endian, and we want less than full size.  */
1680                 reg_offset = register_size (arch, gdb_regnum) - this_size;
1681                 /* We want the lower-order THIS_SIZE_BITS of the bytes
1682                    we extract from the register.  */
1683                 source_offset_bits += 8 * this_size - this_size_bits;
1684               }
1685
1686             if (gdb_regnum != -1)
1687               {
1688                 int optim, unavail;
1689
1690                 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
1691                                                this_size, buffer,
1692                                                &optim, &unavail))
1693                   {
1694                     /* Just so garbage doesn't ever shine through.  */
1695                     memset (buffer, 0, this_size);
1696
1697                     if (optim)
1698                       set_value_optimized_out (v, 1);
1699                     if (unavail)
1700                       mark_value_bits_unavailable (v, offset, this_size_bits);
1701                   }
1702               }
1703             else
1704               {
1705                 error (_("Unable to access DWARF register number %s"),
1706                        paddress (arch, p->v.regno));
1707               }
1708           }
1709           break;
1710
1711         case DWARF_VALUE_MEMORY:
1712           read_value_memory (v, offset,
1713                              p->v.mem.in_stack_memory,
1714                              p->v.mem.addr + source_offset,
1715                              buffer, this_size);
1716           break;
1717
1718         case DWARF_VALUE_STACK:
1719           {
1720             size_t n = this_size;
1721
1722             if (n > c->addr_size - source_offset)
1723               n = (c->addr_size >= source_offset
1724                    ? c->addr_size - source_offset
1725                    : 0);
1726             if (n == 0)
1727               {
1728                 /* Nothing.  */
1729               }
1730             else
1731               {
1732                 const gdb_byte *val_bytes = value_contents_all (p->v.value);
1733
1734                 intermediate_buffer = val_bytes + source_offset;
1735               }
1736           }
1737           break;
1738
1739         case DWARF_VALUE_LITERAL:
1740           {
1741             size_t n = this_size;
1742
1743             if (n > p->v.literal.length - source_offset)
1744               n = (p->v.literal.length >= source_offset
1745                    ? p->v.literal.length - source_offset
1746                    : 0);
1747             if (n != 0)
1748               intermediate_buffer = p->v.literal.data + source_offset;
1749           }
1750           break;
1751
1752           /* These bits show up as zeros -- but do not cause the value
1753              to be considered optimized-out.  */
1754         case DWARF_VALUE_IMPLICIT_POINTER:
1755           break;
1756
1757         case DWARF_VALUE_OPTIMIZED_OUT:
1758           set_value_optimized_out (v, 1);
1759           break;
1760
1761         default:
1762           internal_error (__FILE__, __LINE__, _("invalid location type"));
1763         }
1764
1765       if (p->location != DWARF_VALUE_OPTIMIZED_OUT
1766           && p->location != DWARF_VALUE_IMPLICIT_POINTER)
1767         copy_bitwise (contents, dest_offset_bits,
1768                       intermediate_buffer, source_offset_bits % 8,
1769                       this_size_bits, bits_big_endian);
1770
1771       offset += this_size_bits;
1772     }
1773
1774   do_cleanups (cleanup);
1775 }
1776
1777 static void
1778 write_pieced_value (struct value *to, struct value *from)
1779 {
1780   int i;
1781   long offset = 0;
1782   ULONGEST bits_to_skip;
1783   const gdb_byte *contents;
1784   struct piece_closure *c
1785     = (struct piece_closure *) value_computed_closure (to);
1786   struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
1787   size_t type_len;
1788   size_t buffer_size = 0;
1789   gdb_byte *buffer = NULL;
1790   struct cleanup *cleanup;
1791   int bits_big_endian
1792     = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
1793
1794   if (frame == NULL)
1795     {
1796       set_value_optimized_out (to, 1);
1797       return;
1798     }
1799
1800   cleanup = make_cleanup (free_current_contents, &buffer);
1801
1802   contents = value_contents (from);
1803   bits_to_skip = 8 * value_offset (to);
1804   if (value_bitsize (to))
1805     {
1806       bits_to_skip += value_bitpos (to);
1807       type_len = value_bitsize (to);
1808     }
1809   else
1810     type_len = 8 * TYPE_LENGTH (value_type (to));
1811
1812   for (i = 0; i < c->n_pieces && offset < type_len; i++)
1813     {
1814       struct dwarf_expr_piece *p = &c->pieces[i];
1815       size_t this_size_bits, this_size;
1816       long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
1817       int need_bitwise;
1818       const gdb_byte *source_buffer;
1819
1820       this_size_bits = p->size;
1821       if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
1822         {
1823           bits_to_skip -= this_size_bits;
1824           continue;
1825         }
1826       if (this_size_bits > type_len - offset)
1827         this_size_bits = type_len - offset;
1828       if (bits_to_skip > 0)
1829         {
1830           dest_offset_bits = bits_to_skip;
1831           source_offset_bits = 0;
1832           this_size_bits -= bits_to_skip;
1833           bits_to_skip = 0;
1834         }
1835       else
1836         {
1837           dest_offset_bits = 0;
1838           source_offset_bits = offset;
1839         }
1840
1841       this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
1842       source_offset = source_offset_bits / 8;
1843       dest_offset = dest_offset_bits / 8;
1844       if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
1845         {
1846           source_buffer = contents + source_offset;
1847           need_bitwise = 0;
1848         }
1849       else
1850         {
1851           if (buffer_size < this_size)
1852             {
1853               buffer_size = this_size;
1854               buffer = xrealloc (buffer, buffer_size);
1855             }
1856           source_buffer = buffer;
1857           need_bitwise = 1;
1858         }
1859
1860       switch (p->location)
1861         {
1862         case DWARF_VALUE_REGISTER:
1863           {
1864             struct gdbarch *arch = get_frame_arch (frame);
1865             int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
1866             int reg_offset = dest_offset;
1867
1868             if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
1869                 && this_size <= register_size (arch, gdb_regnum))
1870               /* Big-endian, and we want less than full size.  */
1871               reg_offset = register_size (arch, gdb_regnum) - this_size;
1872
1873             if (gdb_regnum != -1)
1874               {
1875                 if (need_bitwise)
1876                   {
1877                     int optim, unavail;
1878
1879                     if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
1880                                                    this_size, buffer,
1881                                                    &optim, &unavail))
1882                       {
1883                         if (optim)
1884                           throw_error (OPTIMIZED_OUT_ERROR,
1885                                        _("Can't do read-modify-write to "
1886                                          "update bitfield; containing word "
1887                                          "has been optimized out"));
1888                         if (unavail)
1889                           throw_error (NOT_AVAILABLE_ERROR,
1890                                        _("Can't do read-modify-write to update "
1891                                          "bitfield; containing word "
1892                                          "is unavailable"));
1893                       }
1894                     copy_bitwise (buffer, dest_offset_bits,
1895                                   contents, source_offset_bits,
1896                                   this_size_bits,
1897                                   bits_big_endian);
1898                   }
1899
1900                 put_frame_register_bytes (frame, gdb_regnum, reg_offset, 
1901                                           this_size, source_buffer);
1902               }
1903             else
1904               {
1905                 error (_("Unable to write to DWARF register number %s"),
1906                        paddress (arch, p->v.regno));
1907               }
1908           }
1909           break;
1910         case DWARF_VALUE_MEMORY:
1911           if (need_bitwise)
1912             {
1913               /* Only the first and last bytes can possibly have any
1914                  bits reused.  */
1915               read_memory (p->v.mem.addr + dest_offset, buffer, 1);
1916               read_memory (p->v.mem.addr + dest_offset + this_size - 1,
1917                            buffer + this_size - 1, 1);
1918               copy_bitwise (buffer, dest_offset_bits,
1919                             contents, source_offset_bits,
1920                             this_size_bits,
1921                             bits_big_endian);
1922             }
1923
1924           write_memory (p->v.mem.addr + dest_offset,
1925                         source_buffer, this_size);
1926           break;
1927         default:
1928           set_value_optimized_out (to, 1);
1929           break;
1930         }
1931       offset += this_size_bits;
1932     }
1933
1934   do_cleanups (cleanup);
1935 }
1936
1937 /* A helper function that checks bit validity in a pieced value.
1938    CHECK_FOR indicates the kind of validity checking.
1939    DWARF_VALUE_MEMORY means to check whether any bit is valid.
1940    DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is
1941    optimized out.
1942    DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
1943    implicit pointer.  */
1944
1945 static int
1946 check_pieced_value_bits (const struct value *value, int bit_offset,
1947                          int bit_length,
1948                          enum dwarf_value_location check_for)
1949 {
1950   struct piece_closure *c
1951     = (struct piece_closure *) value_computed_closure (value);
1952   int i;
1953   int validity = (check_for == DWARF_VALUE_MEMORY
1954                   || check_for == DWARF_VALUE_IMPLICIT_POINTER);
1955
1956   bit_offset += 8 * value_offset (value);
1957   if (value_bitsize (value))
1958     bit_offset += value_bitpos (value);
1959
1960   for (i = 0; i < c->n_pieces && bit_length > 0; i++)
1961     {
1962       struct dwarf_expr_piece *p = &c->pieces[i];
1963       size_t this_size_bits = p->size;
1964
1965       if (bit_offset > 0)
1966         {
1967           if (bit_offset >= this_size_bits)
1968             {
1969               bit_offset -= this_size_bits;
1970               continue;
1971             }
1972
1973           bit_length -= this_size_bits - bit_offset;
1974           bit_offset = 0;
1975         }
1976       else
1977         bit_length -= this_size_bits;
1978
1979       if (check_for == DWARF_VALUE_IMPLICIT_POINTER)
1980         {
1981           if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
1982             return 0;
1983         }
1984       else if (p->location == DWARF_VALUE_OPTIMIZED_OUT
1985                || p->location == DWARF_VALUE_IMPLICIT_POINTER)
1986         {
1987           if (validity)
1988             return 0;
1989         }
1990       else
1991         {
1992           if (!validity)
1993             return 1;
1994         }
1995     }
1996
1997   return validity;
1998 }
1999
2000 static int
2001 check_pieced_value_validity (const struct value *value, int bit_offset,
2002                              int bit_length)
2003 {
2004   return check_pieced_value_bits (value, bit_offset, bit_length,
2005                                   DWARF_VALUE_MEMORY);
2006 }
2007
2008 static int
2009 check_pieced_value_invalid (const struct value *value)
2010 {
2011   return check_pieced_value_bits (value, 0,
2012                                   8 * TYPE_LENGTH (value_type (value)),
2013                                   DWARF_VALUE_OPTIMIZED_OUT);
2014 }
2015
2016 /* An implementation of an lval_funcs method to see whether a value is
2017    a synthetic pointer.  */
2018
2019 static int
2020 check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
2021                                 int bit_length)
2022 {
2023   return check_pieced_value_bits (value, bit_offset, bit_length,
2024                                   DWARF_VALUE_IMPLICIT_POINTER);
2025 }
2026
2027 /* A wrapper function for get_frame_address_in_block.  */
2028
2029 static CORE_ADDR
2030 get_frame_address_in_block_wrapper (void *baton)
2031 {
2032   return get_frame_address_in_block (baton);
2033 }
2034
2035 /* An implementation of an lval_funcs method to indirect through a
2036    pointer.  This handles the synthetic pointer case when needed.  */
2037
2038 static struct value *
2039 indirect_pieced_value (struct value *value)
2040 {
2041   struct piece_closure *c
2042     = (struct piece_closure *) value_computed_closure (value);
2043   struct type *type;
2044   struct frame_info *frame;
2045   struct dwarf2_locexpr_baton baton;
2046   int i, bit_offset, bit_length;
2047   struct dwarf_expr_piece *piece = NULL;
2048   LONGEST byte_offset;
2049
2050   type = check_typedef (value_type (value));
2051   if (TYPE_CODE (type) != TYPE_CODE_PTR)
2052     return NULL;
2053
2054   bit_length = 8 * TYPE_LENGTH (type);
2055   bit_offset = 8 * value_offset (value);
2056   if (value_bitsize (value))
2057     bit_offset += value_bitpos (value);
2058
2059   for (i = 0; i < c->n_pieces && bit_length > 0; i++)
2060     {
2061       struct dwarf_expr_piece *p = &c->pieces[i];
2062       size_t this_size_bits = p->size;
2063
2064       if (bit_offset > 0)
2065         {
2066           if (bit_offset >= this_size_bits)
2067             {
2068               bit_offset -= this_size_bits;
2069               continue;
2070             }
2071
2072           bit_length -= this_size_bits - bit_offset;
2073           bit_offset = 0;
2074         }
2075       else
2076         bit_length -= this_size_bits;
2077
2078       if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
2079         return NULL;
2080
2081       if (bit_length != 0)
2082         error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
2083
2084       piece = p;
2085       break;
2086     }
2087
2088   frame = get_selected_frame (_("No frame selected."));
2089
2090   /* This is an offset requested by GDB, such as value subscripts.
2091      However, due to how synthetic pointers are implemented, this is
2092      always presented to us as a pointer type.  This means we have to
2093      sign-extend it manually as appropriate.  */
2094   byte_offset = value_as_address (value);
2095   if (TYPE_LENGTH (value_type (value)) < sizeof (LONGEST))
2096     byte_offset = gdb_sign_extend (byte_offset,
2097                                    8 * TYPE_LENGTH (value_type (value)));
2098   byte_offset += piece->v.ptr.offset;
2099
2100   gdb_assert (piece);
2101   baton
2102     = dwarf2_fetch_die_loc_sect_off (piece->v.ptr.die, c->per_cu,
2103                                      get_frame_address_in_block_wrapper,
2104                                      frame);
2105
2106   if (baton.data != NULL)
2107     return dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
2108                                           baton.data, baton.size, baton.per_cu,
2109                                           byte_offset);
2110
2111   {
2112     struct obstack temp_obstack;
2113     struct cleanup *cleanup;
2114     const gdb_byte *bytes;
2115     LONGEST len;
2116     struct value *result;
2117
2118     obstack_init (&temp_obstack);
2119     cleanup = make_cleanup_obstack_free (&temp_obstack);
2120
2121     bytes = dwarf2_fetch_constant_bytes (piece->v.ptr.die, c->per_cu,
2122                                          &temp_obstack, &len);
2123     if (bytes == NULL)
2124       result = allocate_optimized_out_value (TYPE_TARGET_TYPE (type));
2125     else
2126       {
2127         if (byte_offset < 0
2128             || byte_offset + TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > len)
2129           invalid_synthetic_pointer ();
2130         bytes += byte_offset;
2131         result = value_from_contents (TYPE_TARGET_TYPE (type), bytes);
2132       }
2133
2134     do_cleanups (cleanup);
2135     return result;
2136   }
2137 }
2138
2139 static void *
2140 copy_pieced_value_closure (const struct value *v)
2141 {
2142   struct piece_closure *c
2143     = (struct piece_closure *) value_computed_closure (v);
2144   
2145   ++c->refc;
2146   return c;
2147 }
2148
2149 static void
2150 free_pieced_value_closure (struct value *v)
2151 {
2152   struct piece_closure *c
2153     = (struct piece_closure *) value_computed_closure (v);
2154
2155   --c->refc;
2156   if (c->refc == 0)
2157     {
2158       int i;
2159
2160       for (i = 0; i < c->n_pieces; ++i)
2161         if (c->pieces[i].location == DWARF_VALUE_STACK)
2162           value_free (c->pieces[i].v.value);
2163
2164       xfree (c->pieces);
2165       xfree (c);
2166     }
2167 }
2168
2169 /* Functions for accessing a variable described by DW_OP_piece.  */
2170 static const struct lval_funcs pieced_value_funcs = {
2171   read_pieced_value,
2172   write_pieced_value,
2173   check_pieced_value_validity,
2174   check_pieced_value_invalid,
2175   indirect_pieced_value,
2176   NULL, /* coerce_ref */
2177   check_pieced_synthetic_pointer,
2178   copy_pieced_value_closure,
2179   free_pieced_value_closure
2180 };
2181
2182 /* Virtual method table for dwarf2_evaluate_loc_desc_full below.  */
2183
2184 static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
2185 {
2186   dwarf_expr_read_addr_from_reg,
2187   dwarf_expr_get_reg_value,
2188   dwarf_expr_read_mem,
2189   dwarf_expr_frame_base,
2190   dwarf_expr_frame_cfa,
2191   dwarf_expr_frame_pc,
2192   dwarf_expr_tls_address,
2193   dwarf_expr_dwarf_call,
2194   dwarf_expr_get_base_type,
2195   dwarf_expr_push_dwarf_reg_entry_value,
2196   dwarf_expr_get_addr_index
2197 };
2198
2199 /* Evaluate a location description, starting at DATA and with length
2200    SIZE, to find the current location of variable of TYPE in the
2201    context of FRAME.  BYTE_OFFSET is applied after the contents are
2202    computed.  */
2203
2204 static struct value *
2205 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
2206                                const gdb_byte *data, size_t size,
2207                                struct dwarf2_per_cu_data *per_cu,
2208                                LONGEST byte_offset)
2209 {
2210   struct value *retval;
2211   struct dwarf_expr_baton baton;
2212   struct dwarf_expr_context *ctx;
2213   struct cleanup *old_chain, *value_chain;
2214   struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
2215   volatile struct gdb_exception ex;
2216
2217   if (byte_offset < 0)
2218     invalid_synthetic_pointer ();
2219
2220   if (size == 0)
2221     return allocate_optimized_out_value (type);
2222
2223   baton.frame = frame;
2224   baton.per_cu = per_cu;
2225
2226   ctx = new_dwarf_expr_context ();
2227   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
2228   value_chain = make_cleanup_value_free_to_mark (value_mark ());
2229
2230   ctx->gdbarch = get_objfile_arch (objfile);
2231   ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
2232   ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu);
2233   ctx->offset = dwarf2_per_cu_text_offset (per_cu);
2234   ctx->baton = &baton;
2235   ctx->funcs = &dwarf_expr_ctx_funcs;
2236
2237   TRY_CATCH (ex, RETURN_MASK_ERROR)
2238     {
2239       dwarf_expr_eval (ctx, data, size);
2240     }
2241   if (ex.reason < 0)
2242     {
2243       if (ex.error == NOT_AVAILABLE_ERROR)
2244         {
2245           do_cleanups (old_chain);
2246           retval = allocate_value (type);
2247           mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
2248           return retval;
2249         }
2250       else if (ex.error == NO_ENTRY_VALUE_ERROR)
2251         {
2252           if (entry_values_debug)
2253             exception_print (gdb_stdout, ex);
2254           do_cleanups (old_chain);
2255           return allocate_optimized_out_value (type);
2256         }
2257       else
2258         throw_exception (ex);
2259     }
2260
2261   if (ctx->num_pieces > 0)
2262     {
2263       struct piece_closure *c;
2264       struct frame_id frame_id = get_frame_id (frame);
2265       ULONGEST bit_size = 0;
2266       int i;
2267
2268       for (i = 0; i < ctx->num_pieces; ++i)
2269         bit_size += ctx->pieces[i].size;
2270       if (8 * (byte_offset + TYPE_LENGTH (type)) > bit_size)
2271         invalid_synthetic_pointer ();
2272
2273       c = allocate_piece_closure (per_cu, ctx->num_pieces, ctx->pieces,
2274                                   ctx->addr_size);
2275       /* We must clean up the value chain after creating the piece
2276          closure but before allocating the result.  */
2277       do_cleanups (value_chain);
2278       retval = allocate_computed_value (type, &pieced_value_funcs, c);
2279       VALUE_FRAME_ID (retval) = frame_id;
2280       set_value_offset (retval, byte_offset);
2281     }
2282   else
2283     {
2284       switch (ctx->location)
2285         {
2286         case DWARF_VALUE_REGISTER:
2287           {
2288             struct gdbarch *arch = get_frame_arch (frame);
2289             int dwarf_regnum
2290               = longest_to_int (value_as_long (dwarf_expr_fetch (ctx, 0)));
2291             int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
2292
2293             if (byte_offset != 0)
2294               error (_("cannot use offset on synthetic pointer to register"));
2295             do_cleanups (value_chain);
2296            if (gdb_regnum == -1)
2297               error (_("Unable to access DWARF register number %d"),
2298                      dwarf_regnum);
2299            retval = value_from_register (type, gdb_regnum, frame);
2300            if (value_optimized_out (retval))
2301              {
2302                /* This means the register has undefined value / was
2303                   not saved.  As we're computing the location of some
2304                   variable etc. in the program, not a value for
2305                   inspecting a register ($pc, $sp, etc.), return a
2306                   generic optimized out value instead, so that we show
2307                   <optimized out> instead of <not saved>.  */
2308                do_cleanups (value_chain);
2309                retval = allocate_optimized_out_value (type);
2310              }
2311           }
2312           break;
2313
2314         case DWARF_VALUE_MEMORY:
2315           {
2316             CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
2317             int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
2318
2319             do_cleanups (value_chain);
2320             retval = value_at_lazy (type, address + byte_offset);
2321             if (in_stack_memory)
2322               set_value_stack (retval, 1);
2323           }
2324           break;
2325
2326         case DWARF_VALUE_STACK:
2327           {
2328             struct value *value = dwarf_expr_fetch (ctx, 0);
2329             gdb_byte *contents;
2330             const gdb_byte *val_bytes;
2331             size_t n = TYPE_LENGTH (value_type (value));
2332
2333             if (byte_offset + TYPE_LENGTH (type) > n)
2334               invalid_synthetic_pointer ();
2335
2336             val_bytes = value_contents_all (value);
2337             val_bytes += byte_offset;
2338             n -= byte_offset;
2339
2340             /* Preserve VALUE because we are going to free values back
2341                to the mark, but we still need the value contents
2342                below.  */
2343             value_incref (value);
2344             do_cleanups (value_chain);
2345             make_cleanup_value_free (value);
2346
2347             retval = allocate_value (type);
2348             contents = value_contents_raw (retval);
2349             if (n > TYPE_LENGTH (type))
2350               {
2351                 struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
2352
2353                 if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
2354                   val_bytes += n - TYPE_LENGTH (type);
2355                 n = TYPE_LENGTH (type);
2356               }
2357             memcpy (contents, val_bytes, n);
2358           }
2359           break;
2360
2361         case DWARF_VALUE_LITERAL:
2362           {
2363             bfd_byte *contents;
2364             const bfd_byte *ldata;
2365             size_t n = ctx->len;
2366
2367             if (byte_offset + TYPE_LENGTH (type) > n)
2368               invalid_synthetic_pointer ();
2369
2370             do_cleanups (value_chain);
2371             retval = allocate_value (type);
2372             contents = value_contents_raw (retval);
2373
2374             ldata = ctx->data + byte_offset;
2375             n -= byte_offset;
2376
2377             if (n > TYPE_LENGTH (type))
2378               {
2379                 struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
2380
2381                 if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
2382                   ldata += n - TYPE_LENGTH (type);
2383                 n = TYPE_LENGTH (type);
2384               }
2385             memcpy (contents, ldata, n);
2386           }
2387           break;
2388
2389         case DWARF_VALUE_OPTIMIZED_OUT:
2390           do_cleanups (value_chain);
2391           retval = allocate_optimized_out_value (type);
2392           break;
2393
2394           /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
2395              operation by execute_stack_op.  */
2396         case DWARF_VALUE_IMPLICIT_POINTER:
2397           /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
2398              it can only be encountered when making a piece.  */
2399         default:
2400           internal_error (__FILE__, __LINE__, _("invalid location type"));
2401         }
2402     }
2403
2404   set_value_initialized (retval, ctx->initialized);
2405
2406   do_cleanups (old_chain);
2407
2408   return retval;
2409 }
2410
2411 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
2412    passes 0 as the byte_offset.  */
2413
2414 struct value *
2415 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
2416                           const gdb_byte *data, size_t size,
2417                           struct dwarf2_per_cu_data *per_cu)
2418 {
2419   return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
2420 }
2421
2422 /* Evaluates a dwarf expression and stores the result in VAL, expecting
2423    that the dwarf expression only produces a single CORE_ADDR.  ADDR is a
2424    context (location of a variable) and might be needed to evaluate the
2425    location expression.
2426    Returns 1 on success, 0 otherwise.   */
2427
2428 static int
2429 dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
2430                            CORE_ADDR *valp)
2431 {
2432   struct dwarf_expr_context *ctx;
2433   struct dwarf_expr_baton baton;
2434   struct objfile *objfile;
2435   struct cleanup *cleanup;
2436
2437   if (dlbaton == NULL || dlbaton->size == 0)
2438     return 0;
2439
2440   ctx = new_dwarf_expr_context ();
2441   cleanup = make_cleanup_free_dwarf_expr_context (ctx);
2442
2443   baton.frame = get_selected_frame (NULL);
2444   baton.per_cu = dlbaton->per_cu;
2445
2446   objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2447
2448   ctx->gdbarch = get_objfile_arch (objfile);
2449   ctx->addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2450   ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (dlbaton->per_cu);
2451   ctx->offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
2452   ctx->funcs = &dwarf_expr_ctx_funcs;
2453   ctx->baton = &baton;
2454
2455   dwarf_expr_eval (ctx, dlbaton->data, dlbaton->size);
2456
2457   switch (ctx->location)
2458     {
2459     case DWARF_VALUE_REGISTER:
2460     case DWARF_VALUE_MEMORY:
2461     case DWARF_VALUE_STACK:
2462       *valp = dwarf_expr_fetch_address (ctx, 0);
2463       if (ctx->location == DWARF_VALUE_REGISTER)
2464         *valp = dwarf_expr_read_addr_from_reg (&baton, *valp);
2465       do_cleanups (cleanup);
2466       return 1;
2467     case DWARF_VALUE_LITERAL:
2468       *valp = extract_signed_integer (ctx->data, ctx->len,
2469                                       gdbarch_byte_order (ctx->gdbarch));
2470       do_cleanups (cleanup);
2471       return 1;
2472       /* Unsupported dwarf values.  */
2473     case DWARF_VALUE_OPTIMIZED_OUT:
2474     case DWARF_VALUE_IMPLICIT_POINTER:
2475       break;
2476     }
2477
2478   do_cleanups (cleanup);
2479   return 0;
2480 }
2481
2482 /* See dwarf2loc.h.  */
2483
2484 int
2485 dwarf2_evaluate_property (const struct dynamic_prop *prop, CORE_ADDR *value)
2486 {
2487   if (prop == NULL)
2488     return 0;
2489
2490   switch (prop->kind)
2491     {
2492     case PROP_LOCEXPR:
2493       {
2494         const struct dwarf2_property_baton *baton = prop->data.baton;
2495
2496         if (dwarf2_locexpr_baton_eval (&baton->locexpr, value))
2497           {
2498             if (baton->referenced_type)
2499               {
2500                 struct value *val = value_at (baton->referenced_type, *value);
2501
2502                 *value = value_as_address (val);
2503               }
2504             return 1;
2505           }
2506       }
2507       break;
2508
2509     case PROP_LOCLIST:
2510       {
2511         struct dwarf2_property_baton *baton = prop->data.baton;
2512         struct frame_info *frame = get_selected_frame (NULL);
2513         CORE_ADDR pc = get_frame_address_in_block (frame);
2514         const gdb_byte *data;
2515         struct value *val;
2516         size_t size;
2517
2518         data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
2519         if (data != NULL)
2520           {
2521             val = dwarf2_evaluate_loc_desc (baton->referenced_type, frame, data,
2522                                             size, baton->loclist.per_cu);
2523             if (!value_optimized_out (val))
2524               {
2525                 *value = value_as_address (val);
2526                 return 1;
2527               }
2528           }
2529       }
2530       break;
2531
2532     case PROP_CONST:
2533       *value = prop->data.const_val;
2534       return 1;
2535     }
2536
2537   return 0;
2538 }
2539
2540 \f
2541 /* Helper functions and baton for dwarf2_loc_desc_needs_frame.  */
2542
2543 struct needs_frame_baton
2544 {
2545   int needs_frame;
2546   struct dwarf2_per_cu_data *per_cu;
2547 };
2548
2549 /* Reads from registers do require a frame.  */
2550 static CORE_ADDR
2551 needs_frame_read_addr_from_reg (void *baton, int regnum)
2552 {
2553   struct needs_frame_baton *nf_baton = baton;
2554
2555   nf_baton->needs_frame = 1;
2556   return 1;
2557 }
2558
2559 /* struct dwarf_expr_context_funcs' "get_reg_value" callback:
2560    Reads from registers do require a frame.  */
2561
2562 static struct value *
2563 needs_frame_get_reg_value (void *baton, struct type *type, int regnum)
2564 {
2565   struct needs_frame_baton *nf_baton = baton;
2566
2567   nf_baton->needs_frame = 1;
2568   return value_zero (type, not_lval);
2569 }
2570
2571 /* Reads from memory do not require a frame.  */
2572 static void
2573 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
2574 {
2575   memset (buf, 0, len);
2576 }
2577
2578 /* Frame-relative accesses do require a frame.  */
2579 static void
2580 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
2581 {
2582   static gdb_byte lit0 = DW_OP_lit0;
2583   struct needs_frame_baton *nf_baton = baton;
2584
2585   *start = &lit0;
2586   *length = 1;
2587
2588   nf_baton->needs_frame = 1;
2589 }
2590
2591 /* CFA accesses require a frame.  */
2592
2593 static CORE_ADDR
2594 needs_frame_frame_cfa (void *baton)
2595 {
2596   struct needs_frame_baton *nf_baton = baton;
2597
2598   nf_baton->needs_frame = 1;
2599   return 1;
2600 }
2601
2602 /* Thread-local accesses do require a frame.  */
2603 static CORE_ADDR
2604 needs_frame_tls_address (void *baton, CORE_ADDR offset)
2605 {
2606   struct needs_frame_baton *nf_baton = baton;
2607
2608   nf_baton->needs_frame = 1;
2609   return 1;
2610 }
2611
2612 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame.  */
2613
2614 static void
2615 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
2616 {
2617   struct needs_frame_baton *nf_baton = ctx->baton;
2618
2619   per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
2620                      ctx->funcs->get_frame_pc, ctx->baton);
2621 }
2622
2623 /* DW_OP_GNU_entry_value accesses require a caller, therefore a frame.  */
2624
2625 static void
2626 needs_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
2627                              enum call_site_parameter_kind kind,
2628                              union call_site_parameter_u kind_u, int deref_size)
2629 {
2630   struct needs_frame_baton *nf_baton = ctx->baton;
2631
2632   nf_baton->needs_frame = 1;
2633
2634   /* The expression may require some stub values on DWARF stack.  */
2635   dwarf_expr_push_address (ctx, 0, 0);
2636 }
2637
2638 /* DW_OP_GNU_addr_index doesn't require a frame.  */
2639
2640 static CORE_ADDR
2641 needs_get_addr_index (void *baton, unsigned int index)
2642 {
2643   /* Nothing to do.  */
2644   return 1;
2645 }
2646
2647 /* Virtual method table for dwarf2_loc_desc_needs_frame below.  */
2648
2649 static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs =
2650 {
2651   needs_frame_read_addr_from_reg,
2652   needs_frame_get_reg_value,
2653   needs_frame_read_mem,
2654   needs_frame_frame_base,
2655   needs_frame_frame_cfa,
2656   needs_frame_frame_cfa,        /* get_frame_pc */
2657   needs_frame_tls_address,
2658   needs_frame_dwarf_call,
2659   NULL,                         /* get_base_type */
2660   needs_dwarf_reg_entry_value,
2661   needs_get_addr_index
2662 };
2663
2664 /* Return non-zero iff the location expression at DATA (length SIZE)
2665    requires a frame to evaluate.  */
2666
2667 static int
2668 dwarf2_loc_desc_needs_frame (const gdb_byte *data, size_t size,
2669                              struct dwarf2_per_cu_data *per_cu)
2670 {
2671   struct needs_frame_baton baton;
2672   struct dwarf_expr_context *ctx;
2673   int in_reg;
2674   struct cleanup *old_chain;
2675   struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
2676
2677   baton.needs_frame = 0;
2678   baton.per_cu = per_cu;
2679
2680   ctx = new_dwarf_expr_context ();
2681   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
2682   make_cleanup_value_free_to_mark (value_mark ());
2683
2684   ctx->gdbarch = get_objfile_arch (objfile);
2685   ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
2686   ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu);
2687   ctx->offset = dwarf2_per_cu_text_offset (per_cu);
2688   ctx->baton = &baton;
2689   ctx->funcs = &needs_frame_ctx_funcs;
2690
2691   dwarf_expr_eval (ctx, data, size);
2692
2693   in_reg = ctx->location == DWARF_VALUE_REGISTER;
2694
2695   if (ctx->num_pieces > 0)
2696     {
2697       int i;
2698
2699       /* If the location has several pieces, and any of them are in
2700          registers, then we will need a frame to fetch them from.  */
2701       for (i = 0; i < ctx->num_pieces; i++)
2702         if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
2703           in_reg = 1;
2704     }
2705
2706   do_cleanups (old_chain);
2707
2708   return baton.needs_frame || in_reg;
2709 }
2710
2711 /* A helper function that throws an unimplemented error mentioning a
2712    given DWARF operator.  */
2713
2714 static void
2715 unimplemented (unsigned int op)
2716 {
2717   const char *name = get_DW_OP_name (op);
2718
2719   if (name)
2720     error (_("DWARF operator %s cannot be translated to an agent expression"),
2721            name);
2722   else
2723     error (_("Unknown DWARF operator 0x%02x cannot be translated "
2724              "to an agent expression"),
2725            op);
2726 }
2727
2728 /* A helper function to convert a DWARF register to an arch register.
2729    ARCH is the architecture.
2730    DWARF_REG is the register.
2731    This will throw an exception if the DWARF register cannot be
2732    translated to an architecture register.  */
2733
2734 static int
2735 translate_register (struct gdbarch *arch, int dwarf_reg)
2736 {
2737   int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
2738   if (reg == -1)
2739     error (_("Unable to access DWARF register number %d"), dwarf_reg);
2740   return reg;
2741 }
2742
2743 /* A helper function that emits an access to memory.  ARCH is the
2744    target architecture.  EXPR is the expression which we are building.
2745    NBITS is the number of bits we want to read.  This emits the
2746    opcodes needed to read the memory and then extract the desired
2747    bits.  */
2748
2749 static void
2750 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
2751 {
2752   ULONGEST nbytes = (nbits + 7) / 8;
2753
2754   gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
2755
2756   if (expr->tracing)
2757     ax_trace_quick (expr, nbytes);
2758
2759   if (nbits <= 8)
2760     ax_simple (expr, aop_ref8);
2761   else if (nbits <= 16)
2762     ax_simple (expr, aop_ref16);
2763   else if (nbits <= 32)
2764     ax_simple (expr, aop_ref32);
2765   else
2766     ax_simple (expr, aop_ref64);
2767
2768   /* If we read exactly the number of bytes we wanted, we're done.  */
2769   if (8 * nbytes == nbits)
2770     return;
2771
2772   if (gdbarch_bits_big_endian (arch))
2773     {
2774       /* On a bits-big-endian machine, we want the high-order
2775          NBITS.  */
2776       ax_const_l (expr, 8 * nbytes - nbits);
2777       ax_simple (expr, aop_rsh_unsigned);
2778     }
2779   else
2780     {
2781       /* On a bits-little-endian box, we want the low-order NBITS.  */
2782       ax_zero_ext (expr, nbits);
2783     }
2784 }
2785
2786 /* A helper function to return the frame's PC.  */
2787
2788 static CORE_ADDR
2789 get_ax_pc (void *baton)
2790 {
2791   struct agent_expr *expr = baton;
2792
2793   return expr->scope;
2794 }
2795
2796 /* Compile a DWARF location expression to an agent expression.
2797    
2798    EXPR is the agent expression we are building.
2799    LOC is the agent value we modify.
2800    ARCH is the architecture.
2801    ADDR_SIZE is the size of addresses, in bytes.
2802    OP_PTR is the start of the location expression.
2803    OP_END is one past the last byte of the location expression.
2804    
2805    This will throw an exception for various kinds of errors -- for
2806    example, if the expression cannot be compiled, or if the expression
2807    is invalid.  */
2808
2809 void
2810 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
2811                            struct gdbarch *arch, unsigned int addr_size,
2812                            const gdb_byte *op_ptr, const gdb_byte *op_end,
2813                            struct dwarf2_per_cu_data *per_cu)
2814 {
2815   struct cleanup *cleanups;
2816   int i, *offsets;
2817   VEC(int) *dw_labels = NULL, *patches = NULL;
2818   const gdb_byte * const base = op_ptr;
2819   const gdb_byte *previous_piece = op_ptr;
2820   enum bfd_endian byte_order = gdbarch_byte_order (arch);
2821   ULONGEST bits_collected = 0;
2822   unsigned int addr_size_bits = 8 * addr_size;
2823   int bits_big_endian = gdbarch_bits_big_endian (arch);
2824
2825   offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
2826   cleanups = make_cleanup (xfree, offsets);
2827
2828   for (i = 0; i < op_end - op_ptr; ++i)
2829     offsets[i] = -1;
2830
2831   make_cleanup (VEC_cleanup (int), &dw_labels);
2832   make_cleanup (VEC_cleanup (int), &patches);
2833
2834   /* By default we are making an address.  */
2835   loc->kind = axs_lvalue_memory;
2836
2837   while (op_ptr < op_end)
2838     {
2839       enum dwarf_location_atom op = *op_ptr;
2840       uint64_t uoffset, reg;
2841       int64_t offset;
2842       int i;
2843
2844       offsets[op_ptr - base] = expr->len;
2845       ++op_ptr;
2846
2847       /* Our basic approach to code generation is to map DWARF
2848          operations directly to AX operations.  However, there are
2849          some differences.
2850
2851          First, DWARF works on address-sized units, but AX always uses
2852          LONGEST.  For most operations we simply ignore this
2853          difference; instead we generate sign extensions as needed
2854          before division and comparison operations.  It would be nice
2855          to omit the sign extensions, but there is no way to determine
2856          the size of the target's LONGEST.  (This code uses the size
2857          of the host LONGEST in some cases -- that is a bug but it is
2858          difficult to fix.)
2859
2860          Second, some DWARF operations cannot be translated to AX.
2861          For these we simply fail.  See
2862          http://sourceware.org/bugzilla/show_bug.cgi?id=11662.  */
2863       switch (op)
2864         {
2865         case DW_OP_lit0:
2866         case DW_OP_lit1:
2867         case DW_OP_lit2:
2868         case DW_OP_lit3:
2869         case DW_OP_lit4:
2870         case DW_OP_lit5:
2871         case DW_OP_lit6:
2872         case DW_OP_lit7:
2873         case DW_OP_lit8:
2874         case DW_OP_lit9:
2875         case DW_OP_lit10:
2876         case DW_OP_lit11:
2877         case DW_OP_lit12:
2878         case DW_OP_lit13:
2879         case DW_OP_lit14:
2880         case DW_OP_lit15:
2881         case DW_OP_lit16:
2882         case DW_OP_lit17:
2883         case DW_OP_lit18:
2884         case DW_OP_lit19:
2885         case DW_OP_lit20:
2886         case DW_OP_lit21:
2887         case DW_OP_lit22:
2888         case DW_OP_lit23:
2889         case DW_OP_lit24:
2890         case DW_OP_lit25:
2891         case DW_OP_lit26:
2892         case DW_OP_lit27:
2893         case DW_OP_lit28:
2894         case DW_OP_lit29:
2895         case DW_OP_lit30:
2896         case DW_OP_lit31:
2897           ax_const_l (expr, op - DW_OP_lit0);
2898           break;
2899
2900         case DW_OP_addr:
2901           uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
2902           op_ptr += addr_size;
2903           /* Some versions of GCC emit DW_OP_addr before
2904              DW_OP_GNU_push_tls_address.  In this case the value is an
2905              index, not an address.  We don't support things like
2906              branching between the address and the TLS op.  */
2907           if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
2908             uoffset += dwarf2_per_cu_text_offset (per_cu);
2909           ax_const_l (expr, uoffset);
2910           break;
2911
2912         case DW_OP_const1u:
2913           ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
2914           op_ptr += 1;
2915           break;
2916         case DW_OP_const1s:
2917           ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
2918           op_ptr += 1;
2919           break;
2920         case DW_OP_const2u:
2921           ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
2922           op_ptr += 2;
2923           break;
2924         case DW_OP_const2s:
2925           ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
2926           op_ptr += 2;
2927           break;
2928         case DW_OP_const4u:
2929           ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
2930           op_ptr += 4;
2931           break;
2932         case DW_OP_const4s:
2933           ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
2934           op_ptr += 4;
2935           break;
2936         case DW_OP_const8u:
2937           ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
2938           op_ptr += 8;
2939           break;
2940         case DW_OP_const8s:
2941           ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
2942           op_ptr += 8;
2943           break;
2944         case DW_OP_constu:
2945           op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
2946           ax_const_l (expr, uoffset);
2947           break;
2948         case DW_OP_consts:
2949           op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
2950           ax_const_l (expr, offset);
2951           break;
2952
2953         case DW_OP_reg0:
2954         case DW_OP_reg1:
2955         case DW_OP_reg2:
2956         case DW_OP_reg3:
2957         case DW_OP_reg4:
2958         case DW_OP_reg5:
2959         case DW_OP_reg6:
2960         case DW_OP_reg7:
2961         case DW_OP_reg8:
2962         case DW_OP_reg9:
2963         case DW_OP_reg10:
2964         case DW_OP_reg11:
2965         case DW_OP_reg12:
2966         case DW_OP_reg13:
2967         case DW_OP_reg14:
2968         case DW_OP_reg15:
2969         case DW_OP_reg16:
2970         case DW_OP_reg17:
2971         case DW_OP_reg18:
2972         case DW_OP_reg19:
2973         case DW_OP_reg20:
2974         case DW_OP_reg21:
2975         case DW_OP_reg22:
2976         case DW_OP_reg23:
2977         case DW_OP_reg24:
2978         case DW_OP_reg25:
2979         case DW_OP_reg26:
2980         case DW_OP_reg27:
2981         case DW_OP_reg28:
2982         case DW_OP_reg29:
2983         case DW_OP_reg30:
2984         case DW_OP_reg31:
2985           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
2986           loc->u.reg = translate_register (arch, op - DW_OP_reg0);
2987           loc->kind = axs_lvalue_register;
2988           break;
2989
2990         case DW_OP_regx:
2991           op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
2992           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
2993           loc->u.reg = translate_register (arch, reg);
2994           loc->kind = axs_lvalue_register;
2995           break;
2996
2997         case DW_OP_implicit_value:
2998           {
2999             uint64_t len;
3000
3001             op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
3002             if (op_ptr + len > op_end)
3003               error (_("DW_OP_implicit_value: too few bytes available."));
3004             if (len > sizeof (ULONGEST))
3005               error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
3006                      (int) len);
3007
3008             ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
3009                                                         byte_order));
3010             op_ptr += len;
3011             dwarf_expr_require_composition (op_ptr, op_end,
3012                                             "DW_OP_implicit_value");
3013
3014             loc->kind = axs_rvalue;
3015           }
3016           break;
3017
3018         case DW_OP_stack_value:
3019           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
3020           loc->kind = axs_rvalue;
3021           break;
3022
3023         case DW_OP_breg0:
3024         case DW_OP_breg1:
3025         case DW_OP_breg2:
3026         case DW_OP_breg3:
3027         case DW_OP_breg4:
3028         case DW_OP_breg5:
3029         case DW_OP_breg6:
3030         case DW_OP_breg7:
3031         case DW_OP_breg8:
3032         case DW_OP_breg9:
3033         case DW_OP_breg10:
3034         case DW_OP_breg11:
3035         case DW_OP_breg12:
3036         case DW_OP_breg13:
3037         case DW_OP_breg14:
3038         case DW_OP_breg15:
3039         case DW_OP_breg16:
3040         case DW_OP_breg17:
3041         case DW_OP_breg18:
3042         case DW_OP_breg19:
3043         case DW_OP_breg20:
3044         case DW_OP_breg21:
3045         case DW_OP_breg22:
3046         case DW_OP_breg23:
3047         case DW_OP_breg24:
3048         case DW_OP_breg25:
3049         case DW_OP_breg26:
3050         case DW_OP_breg27:
3051         case DW_OP_breg28:
3052         case DW_OP_breg29:
3053         case DW_OP_breg30:
3054         case DW_OP_breg31:
3055           op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3056           i = translate_register (arch, op - DW_OP_breg0);
3057           ax_reg (expr, i);
3058           if (offset != 0)
3059             {
3060               ax_const_l (expr, offset);
3061               ax_simple (expr, aop_add);
3062             }
3063           break;
3064         case DW_OP_bregx:
3065           {
3066             op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3067             op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3068             i = translate_register (arch, reg);
3069             ax_reg (expr, i);
3070             if (offset != 0)
3071               {
3072                 ax_const_l (expr, offset);
3073                 ax_simple (expr, aop_add);
3074               }
3075           }
3076           break;
3077         case DW_OP_fbreg:
3078           {
3079             const gdb_byte *datastart;
3080             size_t datalen;
3081             const struct block *b;
3082             struct symbol *framefunc;
3083
3084             b = block_for_pc (expr->scope);
3085
3086             if (!b)
3087               error (_("No block found for address"));
3088
3089             framefunc = block_linkage_function (b);
3090
3091             if (!framefunc)
3092               error (_("No function found for block"));
3093
3094             dwarf_expr_frame_base_1 (framefunc, expr->scope,
3095                                      &datastart, &datalen);
3096
3097             op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3098             dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
3099                                        datastart + datalen, per_cu);
3100             if (loc->kind == axs_lvalue_register)
3101               require_rvalue (expr, loc);
3102
3103             if (offset != 0)
3104               {
3105                 ax_const_l (expr, offset);
3106                 ax_simple (expr, aop_add);
3107               }
3108
3109             loc->kind = axs_lvalue_memory;
3110           }
3111           break;
3112
3113         case DW_OP_dup:
3114           ax_simple (expr, aop_dup);
3115           break;
3116
3117         case DW_OP_drop:
3118           ax_simple (expr, aop_pop);
3119           break;
3120
3121         case DW_OP_pick:
3122           offset = *op_ptr++;
3123           ax_pick (expr, offset);
3124           break;
3125           
3126         case DW_OP_swap:
3127           ax_simple (expr, aop_swap);
3128           break;
3129
3130         case DW_OP_over:
3131           ax_pick (expr, 1);
3132           break;
3133
3134         case DW_OP_rot:
3135           ax_simple (expr, aop_rot);
3136           break;
3137
3138         case DW_OP_deref:
3139         case DW_OP_deref_size:
3140           {
3141             int size;
3142
3143             if (op == DW_OP_deref_size)
3144               size = *op_ptr++;
3145             else
3146               size = addr_size;
3147
3148             if (size != 1 && size != 2 && size != 4 && size != 8)
3149               error (_("Unsupported size %d in %s"),
3150                      size, get_DW_OP_name (op));
3151             access_memory (arch, expr, size * TARGET_CHAR_BIT);
3152           }
3153           break;
3154
3155         case DW_OP_abs:
3156           /* Sign extend the operand.  */
3157           ax_ext (expr, addr_size_bits);
3158           ax_simple (expr, aop_dup);
3159           ax_const_l (expr, 0);
3160           ax_simple (expr, aop_less_signed);
3161           ax_simple (expr, aop_log_not);
3162           i = ax_goto (expr, aop_if_goto);
3163           /* We have to emit 0 - X.  */
3164           ax_const_l (expr, 0);
3165           ax_simple (expr, aop_swap);
3166           ax_simple (expr, aop_sub);
3167           ax_label (expr, i, expr->len);
3168           break;
3169
3170         case DW_OP_neg:
3171           /* No need to sign extend here.  */
3172           ax_const_l (expr, 0);
3173           ax_simple (expr, aop_swap);
3174           ax_simple (expr, aop_sub);
3175           break;
3176
3177         case DW_OP_not:
3178           /* Sign extend the operand.  */
3179           ax_ext (expr, addr_size_bits);
3180           ax_simple (expr, aop_bit_not);
3181           break;
3182
3183         case DW_OP_plus_uconst:
3184           op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3185           /* It would be really weird to emit `DW_OP_plus_uconst 0',
3186              but we micro-optimize anyhow.  */
3187           if (reg != 0)
3188             {
3189               ax_const_l (expr, reg);
3190               ax_simple (expr, aop_add);
3191             }
3192           break;
3193
3194         case DW_OP_and:
3195           ax_simple (expr, aop_bit_and);
3196           break;
3197
3198         case DW_OP_div:
3199           /* Sign extend the operands.  */
3200           ax_ext (expr, addr_size_bits);
3201           ax_simple (expr, aop_swap);
3202           ax_ext (expr, addr_size_bits);
3203           ax_simple (expr, aop_swap);
3204           ax_simple (expr, aop_div_signed);
3205           break;
3206
3207         case DW_OP_minus:
3208           ax_simple (expr, aop_sub);
3209           break;
3210
3211         case DW_OP_mod:
3212           ax_simple (expr, aop_rem_unsigned);
3213           break;
3214
3215         case DW_OP_mul:
3216           ax_simple (expr, aop_mul);
3217           break;
3218
3219         case DW_OP_or:
3220           ax_simple (expr, aop_bit_or);
3221           break;
3222
3223         case DW_OP_plus:
3224           ax_simple (expr, aop_add);
3225           break;
3226
3227         case DW_OP_shl:
3228           ax_simple (expr, aop_lsh);
3229           break;
3230
3231         case DW_OP_shr:
3232           ax_simple (expr, aop_rsh_unsigned);
3233           break;
3234
3235         case DW_OP_shra:
3236           ax_simple (expr, aop_rsh_signed);
3237           break;
3238
3239         case DW_OP_xor:
3240           ax_simple (expr, aop_bit_xor);
3241           break;
3242
3243         case DW_OP_le:
3244           /* Sign extend the operands.  */
3245           ax_ext (expr, addr_size_bits);
3246           ax_simple (expr, aop_swap);
3247           ax_ext (expr, addr_size_bits);
3248           /* Note no swap here: A <= B is !(B < A).  */
3249           ax_simple (expr, aop_less_signed);
3250           ax_simple (expr, aop_log_not);
3251           break;
3252
3253         case DW_OP_ge:
3254           /* Sign extend the operands.  */
3255           ax_ext (expr, addr_size_bits);
3256           ax_simple (expr, aop_swap);
3257           ax_ext (expr, addr_size_bits);
3258           ax_simple (expr, aop_swap);
3259           /* A >= B is !(A < B).  */
3260           ax_simple (expr, aop_less_signed);
3261           ax_simple (expr, aop_log_not);
3262           break;
3263
3264         case DW_OP_eq:
3265           /* Sign extend the operands.  */
3266           ax_ext (expr, addr_size_bits);
3267           ax_simple (expr, aop_swap);
3268           ax_ext (expr, addr_size_bits);
3269           /* No need for a second swap here.  */
3270           ax_simple (expr, aop_equal);
3271           break;
3272
3273         case DW_OP_lt:
3274           /* Sign extend the operands.  */
3275           ax_ext (expr, addr_size_bits);
3276           ax_simple (expr, aop_swap);
3277           ax_ext (expr, addr_size_bits);
3278           ax_simple (expr, aop_swap);
3279           ax_simple (expr, aop_less_signed);
3280           break;
3281
3282         case DW_OP_gt:
3283           /* Sign extend the operands.  */
3284           ax_ext (expr, addr_size_bits);
3285           ax_simple (expr, aop_swap);
3286           ax_ext (expr, addr_size_bits);
3287           /* Note no swap here: A > B is B < A.  */
3288           ax_simple (expr, aop_less_signed);
3289           break;
3290
3291         case DW_OP_ne:
3292           /* Sign extend the operands.  */
3293           ax_ext (expr, addr_size_bits);
3294           ax_simple (expr, aop_swap);
3295           ax_ext (expr, addr_size_bits);
3296           /* No need for a swap here.  */
3297           ax_simple (expr, aop_equal);
3298           ax_simple (expr, aop_log_not);
3299           break;
3300
3301         case DW_OP_call_frame_cfa:
3302           dwarf2_compile_cfa_to_ax (expr, loc, arch, expr->scope, per_cu);
3303           loc->kind = axs_lvalue_memory;
3304           break;
3305
3306         case DW_OP_GNU_push_tls_address:
3307           unimplemented (op);
3308           break;
3309
3310         case DW_OP_skip:
3311           offset = extract_signed_integer (op_ptr, 2, byte_order);
3312           op_ptr += 2;
3313           i = ax_goto (expr, aop_goto);
3314           VEC_safe_push (int, dw_labels, op_ptr + offset - base);
3315           VEC_safe_push (int, patches, i);
3316           break;
3317
3318         case DW_OP_bra:
3319           offset = extract_signed_integer (op_ptr, 2, byte_order);
3320           op_ptr += 2;
3321           /* Zero extend the operand.  */
3322           ax_zero_ext (expr, addr_size_bits);
3323           i = ax_goto (expr, aop_if_goto);
3324           VEC_safe_push (int, dw_labels, op_ptr + offset - base);
3325           VEC_safe_push (int, patches, i);
3326           break;
3327
3328         case DW_OP_nop:
3329           break;
3330
3331         case DW_OP_piece:
3332         case DW_OP_bit_piece:
3333           {
3334             uint64_t size, offset;
3335
3336             if (op_ptr - 1 == previous_piece)
3337               error (_("Cannot translate empty pieces to agent expressions"));
3338             previous_piece = op_ptr - 1;
3339
3340             op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
3341             if (op == DW_OP_piece)
3342               {
3343                 size *= 8;
3344                 offset = 0;
3345               }
3346             else
3347               op_ptr = safe_read_uleb128 (op_ptr, op_end, &offset);
3348
3349             if (bits_collected + size > 8 * sizeof (LONGEST))
3350               error (_("Expression pieces exceed word size"));
3351
3352             /* Access the bits.  */
3353             switch (loc->kind)
3354               {
3355               case axs_lvalue_register:
3356                 ax_reg (expr, loc->u.reg);
3357                 break;
3358
3359               case axs_lvalue_memory:
3360                 /* Offset the pointer, if needed.  */
3361                 if (offset > 8)
3362                   {
3363                     ax_const_l (expr, offset / 8);
3364                     ax_simple (expr, aop_add);
3365                     offset %= 8;
3366                   }
3367                 access_memory (arch, expr, size);
3368                 break;
3369               }
3370
3371             /* For a bits-big-endian target, shift up what we already
3372                have.  For a bits-little-endian target, shift up the
3373                new data.  Note that there is a potential bug here if
3374                the DWARF expression leaves multiple values on the
3375                stack.  */
3376             if (bits_collected > 0)
3377               {
3378                 if (bits_big_endian)
3379                   {
3380                     ax_simple (expr, aop_swap);
3381                     ax_const_l (expr, size);
3382                     ax_simple (expr, aop_lsh);
3383                     /* We don't need a second swap here, because
3384                        aop_bit_or is symmetric.  */
3385                   }
3386                 else
3387                   {
3388                     ax_const_l (expr, size);
3389                     ax_simple (expr, aop_lsh);
3390                   }
3391                 ax_simple (expr, aop_bit_or);
3392               }
3393
3394             bits_collected += size;
3395             loc->kind = axs_rvalue;
3396           }
3397           break;
3398
3399         case DW_OP_GNU_uninit:
3400           unimplemented (op);
3401
3402         case DW_OP_call2:
3403         case DW_OP_call4:
3404           {
3405             struct dwarf2_locexpr_baton block;
3406             int size = (op == DW_OP_call2 ? 2 : 4);
3407             cu_offset offset;
3408
3409             uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
3410             op_ptr += size;
3411
3412             offset.cu_off = uoffset;
3413             block = dwarf2_fetch_die_loc_cu_off (offset, per_cu,
3414                                                  get_ax_pc, expr);
3415
3416             /* DW_OP_call_ref is currently not supported.  */
3417             gdb_assert (block.per_cu == per_cu);
3418
3419             dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size,
3420                                        block.data, block.data + block.size,
3421                                        per_cu);
3422           }
3423           break;
3424
3425         case DW_OP_call_ref:
3426           unimplemented (op);
3427
3428         default:
3429           unimplemented (op);
3430         }
3431     }
3432
3433   /* Patch all the branches we emitted.  */
3434   for (i = 0; i < VEC_length (int, patches); ++i)
3435     {
3436       int targ = offsets[VEC_index (int, dw_labels, i)];
3437       if (targ == -1)
3438         internal_error (__FILE__, __LINE__, _("invalid label"));
3439       ax_label (expr, VEC_index (int, patches, i), targ);
3440     }
3441
3442   do_cleanups (cleanups);
3443 }
3444
3445 \f
3446 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3447    evaluator to calculate the location.  */
3448 static struct value *
3449 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
3450 {
3451   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3452   struct value *val;
3453
3454   val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3455                                   dlbaton->size, dlbaton->per_cu);
3456
3457   return val;
3458 }
3459
3460 /* Return the value of SYMBOL in FRAME at (callee) FRAME's function
3461    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3462    will be thrown.  */
3463
3464 static struct value *
3465 locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
3466 {
3467   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3468
3469   return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3470                                      dlbaton->size);
3471 }
3472
3473 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
3474 static int
3475 locexpr_read_needs_frame (struct symbol *symbol)
3476 {
3477   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3478
3479   return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
3480                                       dlbaton->per_cu);
3481 }
3482
3483 /* Return true if DATA points to the end of a piece.  END is one past
3484    the last byte in the expression.  */
3485
3486 static int
3487 piece_end_p (const gdb_byte *data, const gdb_byte *end)
3488 {
3489   return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
3490 }
3491
3492 /* Helper for locexpr_describe_location_piece that finds the name of a
3493    DWARF register.  */
3494
3495 static const char *
3496 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
3497 {
3498   int regnum;
3499
3500   regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
3501   return gdbarch_register_name (gdbarch, regnum);
3502 }
3503
3504 /* Nicely describe a single piece of a location, returning an updated
3505    position in the bytecode sequence.  This function cannot recognize
3506    all locations; if a location is not recognized, it simply returns
3507    DATA.  If there is an error during reading, e.g. we run off the end
3508    of the buffer, an error is thrown.  */
3509
3510 static const gdb_byte *
3511 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
3512                                  CORE_ADDR addr, struct objfile *objfile,
3513                                  struct dwarf2_per_cu_data *per_cu,
3514                                  const gdb_byte *data, const gdb_byte *end,
3515                                  unsigned int addr_size)
3516 {
3517   struct gdbarch *gdbarch = get_objfile_arch (objfile);
3518   size_t leb128_size;
3519
3520   if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
3521     {
3522       fprintf_filtered (stream, _("a variable in $%s"),
3523                         locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
3524       data += 1;
3525     }
3526   else if (data[0] == DW_OP_regx)
3527     {
3528       uint64_t reg;
3529
3530       data = safe_read_uleb128 (data + 1, end, &reg);
3531       fprintf_filtered (stream, _("a variable in $%s"),
3532                         locexpr_regname (gdbarch, reg));
3533     }
3534   else if (data[0] == DW_OP_fbreg)
3535     {
3536       const struct block *b;
3537       struct symbol *framefunc;
3538       int frame_reg = 0;
3539       int64_t frame_offset;
3540       const gdb_byte *base_data, *new_data, *save_data = data;
3541       size_t base_size;
3542       int64_t base_offset = 0;
3543
3544       new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
3545       if (!piece_end_p (new_data, end))
3546         return data;
3547       data = new_data;
3548
3549       b = block_for_pc (addr);
3550
3551       if (!b)
3552         error (_("No block found for address for symbol \"%s\"."),
3553                SYMBOL_PRINT_NAME (symbol));
3554
3555       framefunc = block_linkage_function (b);
3556
3557       if (!framefunc)
3558         error (_("No function found for block for symbol \"%s\"."),
3559                SYMBOL_PRINT_NAME (symbol));
3560
3561       dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
3562
3563       if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
3564         {
3565           const gdb_byte *buf_end;
3566           
3567           frame_reg = base_data[0] - DW_OP_breg0;
3568           buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
3569                                        &base_offset);
3570           if (buf_end != base_data + base_size)
3571             error (_("Unexpected opcode after "
3572                      "DW_OP_breg%u for symbol \"%s\"."),
3573                    frame_reg, SYMBOL_PRINT_NAME (symbol));
3574         }
3575       else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
3576         {
3577           /* The frame base is just the register, with no offset.  */
3578           frame_reg = base_data[0] - DW_OP_reg0;
3579           base_offset = 0;
3580         }
3581       else
3582         {
3583           /* We don't know what to do with the frame base expression,
3584              so we can't trace this variable; give up.  */
3585           return save_data;
3586         }
3587
3588       fprintf_filtered (stream,
3589                         _("a variable at frame base reg $%s offset %s+%s"),
3590                         locexpr_regname (gdbarch, frame_reg),
3591                         plongest (base_offset), plongest (frame_offset));
3592     }
3593   else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
3594            && piece_end_p (data, end))
3595     {
3596       int64_t offset;
3597
3598       data = safe_read_sleb128 (data + 1, end, &offset);
3599
3600       fprintf_filtered (stream,
3601                         _("a variable at offset %s from base reg $%s"),
3602                         plongest (offset),
3603                         locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
3604     }
3605
3606   /* The location expression for a TLS variable looks like this (on a
3607      64-bit LE machine):
3608
3609      DW_AT_location    : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
3610                         (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
3611
3612      0x3 is the encoding for DW_OP_addr, which has an operand as long
3613      as the size of an address on the target machine (here is 8
3614      bytes).  Note that more recent version of GCC emit DW_OP_const4u
3615      or DW_OP_const8u, depending on address size, rather than
3616      DW_OP_addr.  0xe0 is the encoding for DW_OP_GNU_push_tls_address.
3617      The operand represents the offset at which the variable is within
3618      the thread local storage.  */
3619
3620   else if (data + 1 + addr_size < end
3621            && (data[0] == DW_OP_addr
3622                || (addr_size == 4 && data[0] == DW_OP_const4u)
3623                || (addr_size == 8 && data[0] == DW_OP_const8u))
3624            && data[1 + addr_size] == DW_OP_GNU_push_tls_address
3625            && piece_end_p (data + 2 + addr_size, end))
3626     {
3627       ULONGEST offset;
3628       offset = extract_unsigned_integer (data + 1, addr_size,
3629                                          gdbarch_byte_order (gdbarch));
3630
3631       fprintf_filtered (stream, 
3632                         _("a thread-local variable at offset 0x%s "
3633                           "in the thread-local storage for `%s'"),
3634                         phex_nz (offset, addr_size), objfile_name (objfile));
3635
3636       data += 1 + addr_size + 1;
3637     }
3638
3639   /* With -gsplit-dwarf a TLS variable can also look like this:
3640      DW_AT_location    : 3 byte block: fc 4 e0
3641                         (DW_OP_GNU_const_index: 4;
3642                          DW_OP_GNU_push_tls_address)  */
3643   else if (data + 3 <= end
3644            && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
3645            && data[0] == DW_OP_GNU_const_index
3646            && leb128_size > 0
3647            && data[1 + leb128_size] == DW_OP_GNU_push_tls_address
3648            && piece_end_p (data + 2 + leb128_size, end))
3649     {
3650       uint64_t offset;
3651
3652       data = safe_read_uleb128 (data + 1, end, &offset);
3653       offset = dwarf2_read_addr_index (per_cu, offset);
3654       fprintf_filtered (stream, 
3655                         _("a thread-local variable at offset 0x%s "
3656                           "in the thread-local storage for `%s'"),
3657                         phex_nz (offset, addr_size), objfile_name (objfile));
3658       ++data;
3659     }
3660
3661   else if (data[0] >= DW_OP_lit0
3662            && data[0] <= DW_OP_lit31
3663            && data + 1 < end
3664            && data[1] == DW_OP_stack_value)
3665     {
3666       fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
3667       data += 2;
3668     }
3669
3670   return data;
3671 }
3672
3673 /* Disassemble an expression, stopping at the end of a piece or at the
3674    end of the expression.  Returns a pointer to the next unread byte
3675    in the input expression.  If ALL is nonzero, then this function
3676    will keep going until it reaches the end of the expression.
3677    If there is an error during reading, e.g. we run off the end
3678    of the buffer, an error is thrown.  */
3679
3680 static const gdb_byte *
3681 disassemble_dwarf_expression (struct ui_file *stream,
3682                               struct gdbarch *arch, unsigned int addr_size,
3683                               int offset_size, const gdb_byte *start,
3684                               const gdb_byte *data, const gdb_byte *end,
3685                               int indent, int all,
3686                               struct dwarf2_per_cu_data *per_cu)
3687 {
3688   while (data < end
3689          && (all
3690              || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
3691     {
3692       enum dwarf_location_atom op = *data++;
3693       uint64_t ul;
3694       int64_t l;
3695       const char *name;
3696
3697       name = get_DW_OP_name (op);
3698
3699       if (!name)
3700         error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
3701                op, (long) (data - 1 - start));
3702       fprintf_filtered (stream, "  %*ld: %s", indent + 4,
3703                         (long) (data - 1 - start), name);
3704
3705       switch (op)
3706         {
3707         case DW_OP_addr:
3708           ul = extract_unsigned_integer (data, addr_size,
3709                                          gdbarch_byte_order (arch));
3710           data += addr_size;
3711           fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
3712           break;
3713
3714         case DW_OP_const1u:
3715           ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
3716           data += 1;
3717           fprintf_filtered (stream, " %s", pulongest (ul));
3718           break;
3719         case DW_OP_const1s:
3720           l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
3721           data += 1;
3722           fprintf_filtered (stream, " %s", plongest (l));
3723           break;
3724         case DW_OP_const2u:
3725           ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3726           data += 2;
3727           fprintf_filtered (stream, " %s", pulongest (ul));
3728           break;
3729         case DW_OP_const2s:
3730           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3731           data += 2;
3732           fprintf_filtered (stream, " %s", plongest (l));
3733           break;
3734         case DW_OP_const4u:
3735           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3736           data += 4;
3737           fprintf_filtered (stream, " %s", pulongest (ul));
3738           break;
3739         case DW_OP_const4s:
3740           l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
3741           data += 4;
3742           fprintf_filtered (stream, " %s", plongest (l));
3743           break;
3744         case DW_OP_const8u:
3745           ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
3746           data += 8;
3747           fprintf_filtered (stream, " %s", pulongest (ul));
3748           break;
3749         case DW_OP_const8s:
3750           l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
3751           data += 8;
3752           fprintf_filtered (stream, " %s", plongest (l));
3753           break;
3754         case DW_OP_constu:
3755           data = safe_read_uleb128 (data, end, &ul);
3756           fprintf_filtered (stream, " %s", pulongest (ul));
3757           break;
3758         case DW_OP_consts:
3759           data = safe_read_sleb128 (data, end, &l);
3760           fprintf_filtered (stream, " %s", plongest (l));
3761           break;
3762
3763         case DW_OP_reg0:
3764         case DW_OP_reg1:
3765         case DW_OP_reg2:
3766         case DW_OP_reg3:
3767         case DW_OP_reg4:
3768         case DW_OP_reg5:
3769         case DW_OP_reg6:
3770         case DW_OP_reg7:
3771         case DW_OP_reg8:
3772         case DW_OP_reg9:
3773         case DW_OP_reg10:
3774         case DW_OP_reg11:
3775         case DW_OP_reg12:
3776         case DW_OP_reg13:
3777         case DW_OP_reg14:
3778         case DW_OP_reg15:
3779         case DW_OP_reg16:
3780         case DW_OP_reg17:
3781         case DW_OP_reg18:
3782         case DW_OP_reg19:
3783         case DW_OP_reg20:
3784         case DW_OP_reg21:
3785         case DW_OP_reg22:
3786         case DW_OP_reg23:
3787         case DW_OP_reg24:
3788         case DW_OP_reg25:
3789         case DW_OP_reg26:
3790         case DW_OP_reg27:
3791         case DW_OP_reg28:
3792         case DW_OP_reg29:
3793         case DW_OP_reg30:
3794         case DW_OP_reg31:
3795           fprintf_filtered (stream, " [$%s]",
3796                             locexpr_regname (arch, op - DW_OP_reg0));
3797           break;
3798
3799         case DW_OP_regx:
3800           data = safe_read_uleb128 (data, end, &ul);
3801           fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
3802                             locexpr_regname (arch, (int) ul));
3803           break;
3804
3805         case DW_OP_implicit_value:
3806           data = safe_read_uleb128 (data, end, &ul);
3807           data += ul;
3808           fprintf_filtered (stream, " %s", pulongest (ul));
3809           break;
3810
3811         case DW_OP_breg0:
3812         case DW_OP_breg1:
3813         case DW_OP_breg2:
3814         case DW_OP_breg3:
3815         case DW_OP_breg4:
3816         case DW_OP_breg5:
3817         case DW_OP_breg6:
3818         case DW_OP_breg7:
3819         case DW_OP_breg8:
3820         case DW_OP_breg9:
3821         case DW_OP_breg10:
3822         case DW_OP_breg11:
3823         case DW_OP_breg12:
3824         case DW_OP_breg13:
3825         case DW_OP_breg14:
3826         case DW_OP_breg15:
3827         case DW_OP_breg16:
3828         case DW_OP_breg17:
3829         case DW_OP_breg18:
3830         case DW_OP_breg19:
3831         case DW_OP_breg20:
3832         case DW_OP_breg21:
3833         case DW_OP_breg22:
3834         case DW_OP_breg23:
3835         case DW_OP_breg24:
3836         case DW_OP_breg25:
3837         case DW_OP_breg26:
3838         case DW_OP_breg27:
3839         case DW_OP_breg28:
3840         case DW_OP_breg29:
3841         case DW_OP_breg30:
3842         case DW_OP_breg31:
3843           data = safe_read_sleb128 (data, end, &l);
3844           fprintf_filtered (stream, " %s [$%s]", plongest (l),
3845                             locexpr_regname (arch, op - DW_OP_breg0));
3846           break;
3847
3848         case DW_OP_bregx:
3849           data = safe_read_uleb128 (data, end, &ul);
3850           data = safe_read_sleb128 (data, end, &l);
3851           fprintf_filtered (stream, " register %s [$%s] offset %s",
3852                             pulongest (ul),
3853                             locexpr_regname (arch, (int) ul),
3854                             plongest (l));
3855           break;
3856
3857         case DW_OP_fbreg:
3858           data = safe_read_sleb128 (data, end, &l);
3859           fprintf_filtered (stream, " %s", plongest (l));
3860           break;
3861
3862         case DW_OP_xderef_size:
3863         case DW_OP_deref_size:
3864         case DW_OP_pick:
3865           fprintf_filtered (stream, " %d", *data);
3866           ++data;
3867           break;
3868
3869         case DW_OP_plus_uconst:
3870           data = safe_read_uleb128 (data, end, &ul);
3871           fprintf_filtered (stream, " %s", pulongest (ul));
3872           break;
3873
3874         case DW_OP_skip:
3875           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3876           data += 2;
3877           fprintf_filtered (stream, " to %ld",
3878                             (long) (data + l - start));
3879           break;
3880
3881         case DW_OP_bra:
3882           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3883           data += 2;
3884           fprintf_filtered (stream, " %ld",
3885                             (long) (data + l - start));
3886           break;
3887
3888         case DW_OP_call2:
3889           ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3890           data += 2;
3891           fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
3892           break;
3893
3894         case DW_OP_call4:
3895           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3896           data += 4;
3897           fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
3898           break;
3899
3900         case DW_OP_call_ref:
3901           ul = extract_unsigned_integer (data, offset_size,
3902                                          gdbarch_byte_order (arch));
3903           data += offset_size;
3904           fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
3905           break;
3906
3907         case DW_OP_piece:
3908           data = safe_read_uleb128 (data, end, &ul);
3909           fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
3910           break;
3911
3912         case DW_OP_bit_piece:
3913           {
3914             uint64_t offset;
3915
3916             data = safe_read_uleb128 (data, end, &ul);
3917             data = safe_read_uleb128 (data, end, &offset);
3918             fprintf_filtered (stream, " size %s offset %s (bits)",
3919                               pulongest (ul), pulongest (offset));
3920           }
3921           break;
3922
3923         case DW_OP_GNU_implicit_pointer:
3924           {
3925             ul = extract_unsigned_integer (data, offset_size,
3926                                            gdbarch_byte_order (arch));
3927             data += offset_size;
3928
3929             data = safe_read_sleb128 (data, end, &l);
3930
3931             fprintf_filtered (stream, " DIE %s offset %s",
3932                               phex_nz (ul, offset_size),
3933                               plongest (l));
3934           }
3935           break;
3936
3937         case DW_OP_GNU_deref_type:
3938           {
3939             int addr_size = *data++;
3940             cu_offset offset;
3941             struct type *type;
3942
3943             data = safe_read_uleb128 (data, end, &ul);
3944             offset.cu_off = ul;
3945             type = dwarf2_get_die_type (offset, per_cu);
3946             fprintf_filtered (stream, "<");
3947             type_print (type, "", stream, -1);
3948             fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset.cu_off, 0),
3949                               addr_size);
3950           }
3951           break;
3952
3953         case DW_OP_GNU_const_type:
3954           {
3955             cu_offset type_die;
3956             struct type *type;
3957
3958             data = safe_read_uleb128 (data, end, &ul);
3959             type_die.cu_off = ul;
3960             type = dwarf2_get_die_type (type_die, per_cu);
3961             fprintf_filtered (stream, "<");
3962             type_print (type, "", stream, -1);
3963             fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
3964           }
3965           break;
3966
3967         case DW_OP_GNU_regval_type:
3968           {
3969             uint64_t reg;
3970             cu_offset type_die;
3971             struct type *type;
3972
3973             data = safe_read_uleb128 (data, end, &reg);
3974             data = safe_read_uleb128 (data, end, &ul);
3975             type_die.cu_off = ul;
3976
3977             type = dwarf2_get_die_type (type_die, per_cu);
3978             fprintf_filtered (stream, "<");
3979             type_print (type, "", stream, -1);
3980             fprintf_filtered (stream, " [0x%s]> [$%s]",
3981                               phex_nz (type_die.cu_off, 0),
3982                               locexpr_regname (arch, reg));
3983           }
3984           break;
3985
3986         case DW_OP_GNU_convert:
3987         case DW_OP_GNU_reinterpret:
3988           {
3989             cu_offset type_die;
3990
3991             data = safe_read_uleb128 (data, end, &ul);
3992             type_die.cu_off = ul;
3993
3994             if (type_die.cu_off == 0)
3995               fprintf_filtered (stream, "<0>");
3996             else
3997               {
3998                 struct type *type;
3999
4000                 type = dwarf2_get_die_type (type_die, per_cu);
4001                 fprintf_filtered (stream, "<");
4002                 type_print (type, "", stream, -1);
4003                 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
4004               }
4005           }
4006           break;
4007
4008         case DW_OP_GNU_entry_value:
4009           data = safe_read_uleb128 (data, end, &ul);
4010           fputc_filtered ('\n', stream);
4011           disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
4012                                         start, data, data + ul, indent + 2,
4013                                         all, per_cu);
4014           data += ul;
4015           continue;
4016
4017         case DW_OP_GNU_parameter_ref:
4018           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
4019           data += 4;
4020           fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
4021           break;
4022
4023         case DW_OP_GNU_addr_index:
4024           data = safe_read_uleb128 (data, end, &ul);
4025           ul = dwarf2_read_addr_index (per_cu, ul);
4026           fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
4027           break;
4028         case DW_OP_GNU_const_index:
4029           data = safe_read_uleb128 (data, end, &ul);
4030           ul = dwarf2_read_addr_index (per_cu, ul);
4031           fprintf_filtered (stream, " %s", pulongest (ul));
4032           break;
4033         }
4034
4035       fprintf_filtered (stream, "\n");
4036     }
4037
4038   return data;
4039 }
4040
4041 /* Describe a single location, which may in turn consist of multiple
4042    pieces.  */
4043
4044 static void
4045 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
4046                              struct ui_file *stream,
4047                              const gdb_byte *data, size_t size,
4048                              struct objfile *objfile, unsigned int addr_size,
4049                              int offset_size, struct dwarf2_per_cu_data *per_cu)
4050 {
4051   const gdb_byte *end = data + size;
4052   int first_piece = 1, bad = 0;
4053
4054   while (data < end)
4055     {
4056       const gdb_byte *here = data;
4057       int disassemble = 1;
4058
4059       if (first_piece)
4060         first_piece = 0;
4061       else
4062         fprintf_filtered (stream, _(", and "));
4063
4064       if (!dwarf2_always_disassemble)
4065         {
4066           data = locexpr_describe_location_piece (symbol, stream,
4067                                                   addr, objfile, per_cu,
4068                                                   data, end, addr_size);
4069           /* If we printed anything, or if we have an empty piece,
4070              then don't disassemble.  */
4071           if (data != here
4072               || data[0] == DW_OP_piece
4073               || data[0] == DW_OP_bit_piece)
4074             disassemble = 0;
4075         }
4076       if (disassemble)
4077         {
4078           fprintf_filtered (stream, _("a complex DWARF expression:\n"));
4079           data = disassemble_dwarf_expression (stream,
4080                                                get_objfile_arch (objfile),
4081                                                addr_size, offset_size, data,
4082                                                data, end, 0,
4083                                                dwarf2_always_disassemble,
4084                                                per_cu);
4085         }
4086
4087       if (data < end)
4088         {
4089           int empty = data == here;
4090               
4091           if (disassemble)
4092             fprintf_filtered (stream, "   ");
4093           if (data[0] == DW_OP_piece)
4094             {
4095               uint64_t bytes;
4096
4097               data = safe_read_uleb128 (data + 1, end, &bytes);
4098
4099               if (empty)
4100                 fprintf_filtered (stream, _("an empty %s-byte piece"),
4101                                   pulongest (bytes));
4102               else
4103                 fprintf_filtered (stream, _(" [%s-byte piece]"),
4104                                   pulongest (bytes));
4105             }
4106           else if (data[0] == DW_OP_bit_piece)
4107             {
4108               uint64_t bits, offset;
4109
4110               data = safe_read_uleb128 (data + 1, end, &bits);
4111               data = safe_read_uleb128 (data, end, &offset);
4112
4113               if (empty)
4114                 fprintf_filtered (stream,
4115                                   _("an empty %s-bit piece"),
4116                                   pulongest (bits));
4117               else
4118                 fprintf_filtered (stream,
4119                                   _(" [%s-bit piece, offset %s bits]"),
4120                                   pulongest (bits), pulongest (offset));
4121             }
4122           else
4123             {
4124               bad = 1;
4125               break;
4126             }
4127         }
4128     }
4129
4130   if (bad || data > end)
4131     error (_("Corrupted DWARF2 expression for \"%s\"."),
4132            SYMBOL_PRINT_NAME (symbol));
4133 }
4134
4135 /* Print a natural-language description of SYMBOL to STREAM.  This
4136    version is for a symbol with a single location.  */
4137
4138 static void
4139 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
4140                            struct ui_file *stream)
4141 {
4142   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4143   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
4144   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4145   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
4146
4147   locexpr_describe_location_1 (symbol, addr, stream,
4148                                dlbaton->data, dlbaton->size,
4149                                objfile, addr_size, offset_size,
4150                                dlbaton->per_cu);
4151 }
4152
4153 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4154    any necessary bytecode in AX.  */
4155
4156 static void
4157 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
4158                             struct agent_expr *ax, struct axs_value *value)
4159 {
4160   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4161   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4162
4163   if (dlbaton->size == 0)
4164     value->optimized_out = 1;
4165   else
4166     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size,
4167                                dlbaton->data, dlbaton->data + dlbaton->size,
4168                                dlbaton->per_cu);
4169 }
4170
4171 /* The set of location functions used with the DWARF-2 expression
4172    evaluator.  */
4173 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
4174   locexpr_read_variable,
4175   locexpr_read_variable_at_entry,
4176   locexpr_read_needs_frame,
4177   locexpr_describe_location,
4178   0,    /* location_has_loclist */
4179   locexpr_tracepoint_var_ref
4180 };
4181
4182
4183 /* Wrapper functions for location lists.  These generally find
4184    the appropriate location expression and call something above.  */
4185
4186 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
4187    evaluator to calculate the location.  */
4188 static struct value *
4189 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
4190 {
4191   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4192   struct value *val;
4193   const gdb_byte *data;
4194   size_t size;
4195   CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
4196
4197   data = dwarf2_find_location_expression (dlbaton, &size, pc);
4198   val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
4199                                   dlbaton->per_cu);
4200
4201   return val;
4202 }
4203
4204 /* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
4205    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
4206    will be thrown.
4207
4208    Function always returns non-NULL value, it may be marked optimized out if
4209    inferior frame information is not available.  It throws NO_ENTRY_VALUE_ERROR
4210    if it cannot resolve the parameter for any reason.  */
4211
4212 static struct value *
4213 loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
4214 {
4215   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4216   const gdb_byte *data;
4217   size_t size;
4218   CORE_ADDR pc;
4219
4220   if (frame == NULL || !get_frame_func_if_available (frame, &pc))
4221     return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4222
4223   data = dwarf2_find_location_expression (dlbaton, &size, pc);
4224   if (data == NULL)
4225     return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4226
4227   return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
4228 }
4229
4230 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
4231 static int
4232 loclist_read_needs_frame (struct symbol *symbol)
4233 {
4234   /* If there's a location list, then assume we need to have a frame
4235      to choose the appropriate location expression.  With tracking of
4236      global variables this is not necessarily true, but such tracking
4237      is disabled in GCC at the moment until we figure out how to
4238      represent it.  */
4239
4240   return 1;
4241 }
4242
4243 /* Print a natural-language description of SYMBOL to STREAM.  This
4244    version applies when there is a list of different locations, each
4245    with a specified address range.  */
4246
4247 static void
4248 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
4249                            struct ui_file *stream)
4250 {
4251   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4252   const gdb_byte *loc_ptr, *buf_end;
4253   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
4254   struct gdbarch *gdbarch = get_objfile_arch (objfile);
4255   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4256   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4257   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
4258   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
4259   /* Adjust base_address for relocatable objects.  */
4260   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
4261   CORE_ADDR base_address = dlbaton->base_address + base_offset;
4262   int done = 0;
4263
4264   loc_ptr = dlbaton->data;
4265   buf_end = dlbaton->data + dlbaton->size;
4266
4267   fprintf_filtered (stream, _("multi-location:\n"));
4268
4269   /* Iterate through locations until we run out.  */
4270   while (!done)
4271     {
4272       CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
4273       int length;
4274       enum debug_loc_kind kind;
4275       const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
4276
4277       if (dlbaton->from_dwo)
4278         kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
4279                                                loc_ptr, buf_end, &new_ptr,
4280                                                &low, &high, byte_order);
4281       else
4282         kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
4283                                            &low, &high,
4284                                            byte_order, addr_size,
4285                                            signed_addr_p);
4286       loc_ptr = new_ptr;
4287       switch (kind)
4288         {
4289         case DEBUG_LOC_END_OF_LIST:
4290           done = 1;
4291           continue;
4292         case DEBUG_LOC_BASE_ADDRESS:
4293           base_address = high + base_offset;
4294           fprintf_filtered (stream, _("  Base address %s"),
4295                             paddress (gdbarch, base_address));
4296           continue;
4297         case DEBUG_LOC_START_END:
4298         case DEBUG_LOC_START_LENGTH:
4299           break;
4300         case DEBUG_LOC_BUFFER_OVERFLOW:
4301         case DEBUG_LOC_INVALID_ENTRY:
4302           error (_("Corrupted DWARF expression for symbol \"%s\"."),
4303                  SYMBOL_PRINT_NAME (symbol));
4304         default:
4305           gdb_assert_not_reached ("bad debug_loc_kind");
4306         }
4307
4308       /* Otherwise, a location expression entry.  */
4309       low += base_address;
4310       high += base_address;
4311
4312       length = extract_unsigned_integer (loc_ptr, 2, byte_order);
4313       loc_ptr += 2;
4314
4315       /* (It would improve readability to print only the minimum
4316          necessary digits of the second number of the range.)  */
4317       fprintf_filtered (stream, _("  Range %s-%s: "),
4318                         paddress (gdbarch, low), paddress (gdbarch, high));
4319
4320       /* Now describe this particular location.  */
4321       locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
4322                                    objfile, addr_size, offset_size,
4323                                    dlbaton->per_cu);
4324
4325       fprintf_filtered (stream, "\n");
4326
4327       loc_ptr += length;
4328     }
4329 }
4330
4331 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4332    any necessary bytecode in AX.  */
4333 static void
4334 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
4335                             struct agent_expr *ax, struct axs_value *value)
4336 {
4337   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4338   const gdb_byte *data;
4339   size_t size;
4340   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4341
4342   data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
4343   if (size == 0)
4344     value->optimized_out = 1;
4345   else
4346     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size, data, data + size,
4347                                dlbaton->per_cu);
4348 }
4349
4350 /* The set of location functions used with the DWARF-2 expression
4351    evaluator and location lists.  */
4352 const struct symbol_computed_ops dwarf2_loclist_funcs = {
4353   loclist_read_variable,
4354   loclist_read_variable_at_entry,
4355   loclist_read_needs_frame,
4356   loclist_describe_location,
4357   1,    /* location_has_loclist */
4358   loclist_tracepoint_var_ref
4359 };
4360
4361 /* Provide a prototype to silence -Wmissing-prototypes.  */
4362 extern initialize_file_ftype _initialize_dwarf2loc;
4363
4364 void
4365 _initialize_dwarf2loc (void)
4366 {
4367   add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
4368                              &entry_values_debug,
4369                              _("Set entry values and tail call frames "
4370                                "debugging."),
4371                              _("Show entry values and tail call frames "
4372                                "debugging."),
4373                              _("When non-zero, the process of determining "
4374                                "parameter values from function entry point "
4375                                "and tail call frames will be printed."),
4376                              NULL,
4377                              show_entry_values_debug,
4378                              &setdebuglist, &showdebuglist);
4379 }