Use address_from_register in dwarf2-frame.c:read_addr_from_reg
[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           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   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   CORE_ADDR addr;
1316
1317   parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
1318                                                  &caller_per_cu);
1319
1320   outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
1321                                               type, caller_frame,
1322                                               caller_per_cu);
1323
1324   /* Check if DW_AT_GNU_call_site_data_value cannot be used.  If it should be
1325      used and it is not available do not fall back to OUTER_VAL - dereferencing
1326      TYPE_CODE_REF with non-entry data value would give current value - not the
1327      entry value.  */
1328
1329   if (TYPE_CODE (checked_type) != TYPE_CODE_REF
1330       || TYPE_TARGET_TYPE (checked_type) == NULL)
1331     return outer_val;
1332
1333   target_val = dwarf_entry_parameter_to_value (parameter,
1334                                                TYPE_LENGTH (target_type),
1335                                                target_type, caller_frame,
1336                                                caller_per_cu);
1337
1338   /* value_as_address dereferences TYPE_CODE_REF.  */
1339   addr = extract_typed_address (value_contents (outer_val), checked_type);
1340
1341   /* The target entry value has artificial address of the entry value
1342      reference.  */
1343   VALUE_LVAL (target_val) = lval_memory;
1344   set_value_address (target_val, addr);
1345
1346   release_value (target_val);
1347   val = allocate_computed_value (type, &entry_data_value_funcs,
1348                                  target_val /* closure */);
1349
1350   /* Copy the referencing pointer to the new computed value.  */
1351   memcpy (value_contents_raw (val), value_contents_raw (outer_val),
1352           TYPE_LENGTH (checked_type));
1353   set_value_lazy (val, 0);
1354
1355   return val;
1356 }
1357
1358 /* Read parameter of TYPE at (callee) FRAME's function entry.  DATA and
1359    SIZE are DWARF block used to match DW_AT_location at the caller's
1360    DW_TAG_GNU_call_site_parameter.
1361
1362    Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
1363    cannot resolve the parameter for any reason.  */
1364
1365 static struct value *
1366 value_of_dwarf_block_entry (struct type *type, struct frame_info *frame,
1367                             const gdb_byte *block, size_t block_len)
1368 {
1369   union call_site_parameter_u kind_u;
1370
1371   kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
1372   if (kind_u.dwarf_reg != -1)
1373     return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG,
1374                                      kind_u);
1375
1376   if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset))
1377     return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET,
1378                                      kind_u);
1379
1380   /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
1381      suppressed during normal operation.  The expression can be arbitrary if
1382      there is no caller-callee entry value binding expected.  */
1383   throw_error (NO_ENTRY_VALUE_ERROR,
1384                _("DWARF-2 expression error: DW_OP_GNU_entry_value is supported "
1385                  "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
1386 }
1387
1388 struct piece_closure
1389 {
1390   /* Reference count.  */
1391   int refc;
1392
1393   /* The CU from which this closure's expression came.  */
1394   struct dwarf2_per_cu_data *per_cu;
1395
1396   /* The number of pieces used to describe this variable.  */
1397   int n_pieces;
1398
1399   /* The target address size, used only for DWARF_VALUE_STACK.  */
1400   int addr_size;
1401
1402   /* The pieces themselves.  */
1403   struct dwarf_expr_piece *pieces;
1404 };
1405
1406 /* Allocate a closure for a value formed from separately-described
1407    PIECES.  */
1408
1409 static struct piece_closure *
1410 allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
1411                         int n_pieces, struct dwarf_expr_piece *pieces,
1412                         int addr_size)
1413 {
1414   struct piece_closure *c = XCNEW (struct piece_closure);
1415   int i;
1416
1417   c->refc = 1;
1418   c->per_cu = per_cu;
1419   c->n_pieces = n_pieces;
1420   c->addr_size = addr_size;
1421   c->pieces = XCNEWVEC (struct dwarf_expr_piece, n_pieces);
1422
1423   memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
1424   for (i = 0; i < n_pieces; ++i)
1425     if (c->pieces[i].location == DWARF_VALUE_STACK)
1426       value_incref (c->pieces[i].v.value);
1427
1428   return c;
1429 }
1430
1431 /* The lowest-level function to extract bits from a byte buffer.
1432    SOURCE is the buffer.  It is updated if we read to the end of a
1433    byte.
1434    SOURCE_OFFSET_BITS is the offset of the first bit to read.  It is
1435    updated to reflect the number of bits actually read.
1436    NBITS is the number of bits we want to read.  It is updated to
1437    reflect the number of bits actually read.  This function may read
1438    fewer bits.
1439    BITS_BIG_ENDIAN is taken directly from gdbarch.
1440    This function returns the extracted bits.  */
1441
1442 static unsigned int
1443 extract_bits_primitive (const gdb_byte **source,
1444                         unsigned int *source_offset_bits,
1445                         int *nbits, int bits_big_endian)
1446 {
1447   unsigned int avail, mask, datum;
1448
1449   gdb_assert (*source_offset_bits < 8);
1450
1451   avail = 8 - *source_offset_bits;
1452   if (avail > *nbits)
1453     avail = *nbits;
1454
1455   mask = (1 << avail) - 1;
1456   datum = **source;
1457   if (bits_big_endian)
1458     datum >>= 8 - (*source_offset_bits + *nbits);
1459   else
1460     datum >>= *source_offset_bits;
1461   datum &= mask;
1462
1463   *nbits -= avail;
1464   *source_offset_bits += avail;
1465   if (*source_offset_bits >= 8)
1466     {
1467       *source_offset_bits -= 8;
1468       ++*source;
1469     }
1470
1471   return datum;
1472 }
1473
1474 /* Extract some bits from a source buffer and move forward in the
1475    buffer.
1476    
1477    SOURCE is the source buffer.  It is updated as bytes are read.
1478    SOURCE_OFFSET_BITS is the offset into SOURCE.  It is updated as
1479    bits are read.
1480    NBITS is the number of bits to read.
1481    BITS_BIG_ENDIAN is taken directly from gdbarch.
1482    
1483    This function returns the bits that were read.  */
1484
1485 static unsigned int
1486 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
1487               int nbits, int bits_big_endian)
1488 {
1489   unsigned int datum;
1490
1491   gdb_assert (nbits > 0 && nbits <= 8);
1492
1493   datum = extract_bits_primitive (source, source_offset_bits, &nbits,
1494                                   bits_big_endian);
1495   if (nbits > 0)
1496     {
1497       unsigned int more;
1498
1499       more = extract_bits_primitive (source, source_offset_bits, &nbits,
1500                                      bits_big_endian);
1501       if (bits_big_endian)
1502         datum <<= nbits;
1503       else
1504         more <<= nbits;
1505       datum |= more;
1506     }
1507
1508   return datum;
1509 }
1510
1511 /* Write some bits into a buffer and move forward in the buffer.
1512    
1513    DATUM is the bits to write.  The low-order bits of DATUM are used.
1514    DEST is the destination buffer.  It is updated as bytes are
1515    written.
1516    DEST_OFFSET_BITS is the bit offset in DEST at which writing is
1517    done.
1518    NBITS is the number of valid bits in DATUM.
1519    BITS_BIG_ENDIAN is taken directly from gdbarch.  */
1520
1521 static void
1522 insert_bits (unsigned int datum,
1523              gdb_byte *dest, unsigned int dest_offset_bits,
1524              int nbits, int bits_big_endian)
1525 {
1526   unsigned int mask;
1527
1528   gdb_assert (dest_offset_bits + nbits <= 8);
1529
1530   mask = (1 << nbits) - 1;
1531   if (bits_big_endian)
1532     {
1533       datum <<= 8 - (dest_offset_bits + nbits);
1534       mask <<= 8 - (dest_offset_bits + nbits);
1535     }
1536   else
1537     {
1538       datum <<= dest_offset_bits;
1539       mask <<= dest_offset_bits;
1540     }
1541
1542   gdb_assert ((datum & ~mask) == 0);
1543
1544   *dest = (*dest & ~mask) | datum;
1545 }
1546
1547 /* Copy bits from a source to a destination.
1548    
1549    DEST is where the bits should be written.
1550    DEST_OFFSET_BITS is the bit offset into DEST.
1551    SOURCE is the source of bits.
1552    SOURCE_OFFSET_BITS is the bit offset into SOURCE.
1553    BIT_COUNT is the number of bits to copy.
1554    BITS_BIG_ENDIAN is taken directly from gdbarch.  */
1555
1556 static void
1557 copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
1558               const gdb_byte *source, unsigned int source_offset_bits,
1559               unsigned int bit_count,
1560               int bits_big_endian)
1561 {
1562   unsigned int dest_avail;
1563   int datum;
1564
1565   /* Reduce everything to byte-size pieces.  */
1566   dest += dest_offset_bits / 8;
1567   dest_offset_bits %= 8;
1568   source += source_offset_bits / 8;
1569   source_offset_bits %= 8;
1570
1571   dest_avail = 8 - dest_offset_bits % 8;
1572
1573   /* See if we can fill the first destination byte.  */
1574   if (dest_avail < bit_count)
1575     {
1576       datum = extract_bits (&source, &source_offset_bits, dest_avail,
1577                             bits_big_endian);
1578       insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
1579       ++dest;
1580       dest_offset_bits = 0;
1581       bit_count -= dest_avail;
1582     }
1583
1584   /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
1585      than 8 bits remaining.  */
1586   gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
1587   for (; bit_count >= 8; bit_count -= 8)
1588     {
1589       datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
1590       *dest++ = (gdb_byte) datum;
1591     }
1592
1593   /* Finally, we may have a few leftover bits.  */
1594   gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
1595   if (bit_count > 0)
1596     {
1597       datum = extract_bits (&source, &source_offset_bits, bit_count,
1598                             bits_big_endian);
1599       insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
1600     }
1601 }
1602
1603 static void
1604 read_pieced_value (struct value *v)
1605 {
1606   int i;
1607   long offset = 0;
1608   ULONGEST bits_to_skip;
1609   gdb_byte *contents;
1610   struct piece_closure *c
1611     = (struct piece_closure *) value_computed_closure (v);
1612   struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
1613   size_t type_len;
1614   size_t buffer_size = 0;
1615   gdb_byte *buffer = NULL;
1616   struct cleanup *cleanup;
1617   int bits_big_endian
1618     = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
1619
1620   if (value_type (v) != value_enclosing_type (v))
1621     internal_error (__FILE__, __LINE__,
1622                     _("Should not be able to create a lazy value with "
1623                       "an enclosing type"));
1624
1625   cleanup = make_cleanup (free_current_contents, &buffer);
1626
1627   contents = value_contents_raw (v);
1628   bits_to_skip = 8 * value_offset (v);
1629   if (value_bitsize (v))
1630     {
1631       bits_to_skip += value_bitpos (v);
1632       type_len = value_bitsize (v);
1633     }
1634   else
1635     type_len = 8 * TYPE_LENGTH (value_type (v));
1636
1637   for (i = 0; i < c->n_pieces && offset < type_len; i++)
1638     {
1639       struct dwarf_expr_piece *p = &c->pieces[i];
1640       size_t this_size, this_size_bits;
1641       long dest_offset_bits, source_offset_bits, source_offset;
1642       const gdb_byte *intermediate_buffer;
1643
1644       /* Compute size, source, and destination offsets for copying, in
1645          bits.  */
1646       this_size_bits = p->size;
1647       if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
1648         {
1649           bits_to_skip -= this_size_bits;
1650           continue;
1651         }
1652       if (bits_to_skip > 0)
1653         {
1654           dest_offset_bits = 0;
1655           source_offset_bits = bits_to_skip;
1656           this_size_bits -= bits_to_skip;
1657           bits_to_skip = 0;
1658         }
1659       else
1660         {
1661           dest_offset_bits = offset;
1662           source_offset_bits = 0;
1663         }
1664       if (this_size_bits > type_len - offset)
1665         this_size_bits = type_len - offset;
1666
1667       this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
1668       source_offset = source_offset_bits / 8;
1669       if (buffer_size < this_size)
1670         {
1671           buffer_size = this_size;
1672           buffer = xrealloc (buffer, buffer_size);
1673         }
1674       intermediate_buffer = buffer;
1675
1676       /* Copy from the source to DEST_BUFFER.  */
1677       switch (p->location)
1678         {
1679         case DWARF_VALUE_REGISTER:
1680           {
1681             struct gdbarch *arch = get_frame_arch (frame);
1682             int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
1683             int reg_offset = source_offset;
1684
1685             if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
1686                 && this_size < register_size (arch, gdb_regnum))
1687               {
1688                 /* Big-endian, and we want less than full size.  */
1689                 reg_offset = register_size (arch, gdb_regnum) - this_size;
1690                 /* We want the lower-order THIS_SIZE_BITS of the bytes
1691                    we extract from the register.  */
1692                 source_offset_bits += 8 * this_size - this_size_bits;
1693               }
1694
1695             if (gdb_regnum != -1)
1696               {
1697                 int optim, unavail;
1698
1699                 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
1700                                                this_size, buffer,
1701                                                &optim, &unavail))
1702                   {
1703                     /* Just so garbage doesn't ever shine through.  */
1704                     memset (buffer, 0, this_size);
1705
1706                     if (optim)
1707                       set_value_optimized_out (v, 1);
1708                     if (unavail)
1709                       mark_value_bits_unavailable (v, offset, this_size_bits);
1710                   }
1711               }
1712             else
1713               {
1714                 error (_("Unable to access DWARF register number %s"),
1715                        paddress (arch, p->v.regno));
1716               }
1717           }
1718           break;
1719
1720         case DWARF_VALUE_MEMORY:
1721           read_value_memory (v, offset,
1722                              p->v.mem.in_stack_memory,
1723                              p->v.mem.addr + source_offset,
1724                              buffer, this_size);
1725           break;
1726
1727         case DWARF_VALUE_STACK:
1728           {
1729             size_t n = this_size;
1730
1731             if (n > c->addr_size - source_offset)
1732               n = (c->addr_size >= source_offset
1733                    ? c->addr_size - source_offset
1734                    : 0);
1735             if (n == 0)
1736               {
1737                 /* Nothing.  */
1738               }
1739             else
1740               {
1741                 const gdb_byte *val_bytes = value_contents_all (p->v.value);
1742
1743                 intermediate_buffer = val_bytes + source_offset;
1744               }
1745           }
1746           break;
1747
1748         case DWARF_VALUE_LITERAL:
1749           {
1750             size_t n = this_size;
1751
1752             if (n > p->v.literal.length - source_offset)
1753               n = (p->v.literal.length >= source_offset
1754                    ? p->v.literal.length - source_offset
1755                    : 0);
1756             if (n != 0)
1757               intermediate_buffer = p->v.literal.data + source_offset;
1758           }
1759           break;
1760
1761           /* These bits show up as zeros -- but do not cause the value
1762              to be considered optimized-out.  */
1763         case DWARF_VALUE_IMPLICIT_POINTER:
1764           break;
1765
1766         case DWARF_VALUE_OPTIMIZED_OUT:
1767           set_value_optimized_out (v, 1);
1768           break;
1769
1770         default:
1771           internal_error (__FILE__, __LINE__, _("invalid location type"));
1772         }
1773
1774       if (p->location != DWARF_VALUE_OPTIMIZED_OUT
1775           && p->location != DWARF_VALUE_IMPLICIT_POINTER)
1776         copy_bitwise (contents, dest_offset_bits,
1777                       intermediate_buffer, source_offset_bits % 8,
1778                       this_size_bits, bits_big_endian);
1779
1780       offset += this_size_bits;
1781     }
1782
1783   do_cleanups (cleanup);
1784 }
1785
1786 static void
1787 write_pieced_value (struct value *to, struct value *from)
1788 {
1789   int i;
1790   long offset = 0;
1791   ULONGEST bits_to_skip;
1792   const gdb_byte *contents;
1793   struct piece_closure *c
1794     = (struct piece_closure *) value_computed_closure (to);
1795   struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
1796   size_t type_len;
1797   size_t buffer_size = 0;
1798   gdb_byte *buffer = NULL;
1799   struct cleanup *cleanup;
1800   int bits_big_endian
1801     = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
1802
1803   if (frame == NULL)
1804     {
1805       set_value_optimized_out (to, 1);
1806       return;
1807     }
1808
1809   cleanup = make_cleanup (free_current_contents, &buffer);
1810
1811   contents = value_contents (from);
1812   bits_to_skip = 8 * value_offset (to);
1813   if (value_bitsize (to))
1814     {
1815       bits_to_skip += value_bitpos (to);
1816       type_len = value_bitsize (to);
1817     }
1818   else
1819     type_len = 8 * TYPE_LENGTH (value_type (to));
1820
1821   for (i = 0; i < c->n_pieces && offset < type_len; i++)
1822     {
1823       struct dwarf_expr_piece *p = &c->pieces[i];
1824       size_t this_size_bits, this_size;
1825       long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
1826       int need_bitwise;
1827       const gdb_byte *source_buffer;
1828
1829       this_size_bits = p->size;
1830       if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
1831         {
1832           bits_to_skip -= this_size_bits;
1833           continue;
1834         }
1835       if (this_size_bits > type_len - offset)
1836         this_size_bits = type_len - offset;
1837       if (bits_to_skip > 0)
1838         {
1839           dest_offset_bits = bits_to_skip;
1840           source_offset_bits = 0;
1841           this_size_bits -= bits_to_skip;
1842           bits_to_skip = 0;
1843         }
1844       else
1845         {
1846           dest_offset_bits = 0;
1847           source_offset_bits = offset;
1848         }
1849
1850       this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
1851       source_offset = source_offset_bits / 8;
1852       dest_offset = dest_offset_bits / 8;
1853       if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
1854         {
1855           source_buffer = contents + source_offset;
1856           need_bitwise = 0;
1857         }
1858       else
1859         {
1860           if (buffer_size < this_size)
1861             {
1862               buffer_size = this_size;
1863               buffer = xrealloc (buffer, buffer_size);
1864             }
1865           source_buffer = buffer;
1866           need_bitwise = 1;
1867         }
1868
1869       switch (p->location)
1870         {
1871         case DWARF_VALUE_REGISTER:
1872           {
1873             struct gdbarch *arch = get_frame_arch (frame);
1874             int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
1875             int reg_offset = dest_offset;
1876
1877             if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
1878                 && this_size <= register_size (arch, gdb_regnum))
1879               /* Big-endian, and we want less than full size.  */
1880               reg_offset = register_size (arch, gdb_regnum) - this_size;
1881
1882             if (gdb_regnum != -1)
1883               {
1884                 if (need_bitwise)
1885                   {
1886                     int optim, unavail;
1887
1888                     if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
1889                                                    this_size, buffer,
1890                                                    &optim, &unavail))
1891                       {
1892                         if (optim)
1893                           throw_error (OPTIMIZED_OUT_ERROR,
1894                                        _("Can't do read-modify-write to "
1895                                          "update bitfield; containing word "
1896                                          "has been optimized out"));
1897                         if (unavail)
1898                           throw_error (NOT_AVAILABLE_ERROR,
1899                                        _("Can't do read-modify-write to update "
1900                                          "bitfield; containing word "
1901                                          "is unavailable"));
1902                       }
1903                     copy_bitwise (buffer, dest_offset_bits,
1904                                   contents, source_offset_bits,
1905                                   this_size_bits,
1906                                   bits_big_endian);
1907                   }
1908
1909                 put_frame_register_bytes (frame, gdb_regnum, reg_offset, 
1910                                           this_size, source_buffer);
1911               }
1912             else
1913               {
1914                 error (_("Unable to write to DWARF register number %s"),
1915                        paddress (arch, p->v.regno));
1916               }
1917           }
1918           break;
1919         case DWARF_VALUE_MEMORY:
1920           if (need_bitwise)
1921             {
1922               /* Only the first and last bytes can possibly have any
1923                  bits reused.  */
1924               read_memory (p->v.mem.addr + dest_offset, buffer, 1);
1925               read_memory (p->v.mem.addr + dest_offset + this_size - 1,
1926                            buffer + this_size - 1, 1);
1927               copy_bitwise (buffer, dest_offset_bits,
1928                             contents, source_offset_bits,
1929                             this_size_bits,
1930                             bits_big_endian);
1931             }
1932
1933           write_memory (p->v.mem.addr + dest_offset,
1934                         source_buffer, this_size);
1935           break;
1936         default:
1937           set_value_optimized_out (to, 1);
1938           break;
1939         }
1940       offset += this_size_bits;
1941     }
1942
1943   do_cleanups (cleanup);
1944 }
1945
1946 /* A helper function that checks bit validity in a pieced value.
1947    CHECK_FOR indicates the kind of validity checking.
1948    DWARF_VALUE_MEMORY means to check whether any bit is valid.
1949    DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is
1950    optimized out.
1951    DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
1952    implicit pointer.  */
1953
1954 static int
1955 check_pieced_value_bits (const struct value *value, int bit_offset,
1956                          int bit_length,
1957                          enum dwarf_value_location check_for)
1958 {
1959   struct piece_closure *c
1960     = (struct piece_closure *) value_computed_closure (value);
1961   int i;
1962   int validity = (check_for == DWARF_VALUE_MEMORY
1963                   || check_for == DWARF_VALUE_IMPLICIT_POINTER);
1964
1965   bit_offset += 8 * value_offset (value);
1966   if (value_bitsize (value))
1967     bit_offset += value_bitpos (value);
1968
1969   for (i = 0; i < c->n_pieces && bit_length > 0; i++)
1970     {
1971       struct dwarf_expr_piece *p = &c->pieces[i];
1972       size_t this_size_bits = p->size;
1973
1974       if (bit_offset > 0)
1975         {
1976           if (bit_offset >= this_size_bits)
1977             {
1978               bit_offset -= this_size_bits;
1979               continue;
1980             }
1981
1982           bit_length -= this_size_bits - bit_offset;
1983           bit_offset = 0;
1984         }
1985       else
1986         bit_length -= this_size_bits;
1987
1988       if (check_for == DWARF_VALUE_IMPLICIT_POINTER)
1989         {
1990           if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
1991             return 0;
1992         }
1993       else if (p->location == DWARF_VALUE_OPTIMIZED_OUT
1994                || p->location == DWARF_VALUE_IMPLICIT_POINTER)
1995         {
1996           if (validity)
1997             return 0;
1998         }
1999       else
2000         {
2001           if (!validity)
2002             return 1;
2003         }
2004     }
2005
2006   return validity;
2007 }
2008
2009 static int
2010 check_pieced_value_validity (const struct value *value, int bit_offset,
2011                              int bit_length)
2012 {
2013   return check_pieced_value_bits (value, bit_offset, bit_length,
2014                                   DWARF_VALUE_MEMORY);
2015 }
2016
2017 static int
2018 check_pieced_value_invalid (const struct value *value)
2019 {
2020   return check_pieced_value_bits (value, 0,
2021                                   8 * TYPE_LENGTH (value_type (value)),
2022                                   DWARF_VALUE_OPTIMIZED_OUT);
2023 }
2024
2025 /* An implementation of an lval_funcs method to see whether a value is
2026    a synthetic pointer.  */
2027
2028 static int
2029 check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
2030                                 int bit_length)
2031 {
2032   return check_pieced_value_bits (value, bit_offset, bit_length,
2033                                   DWARF_VALUE_IMPLICIT_POINTER);
2034 }
2035
2036 /* A wrapper function for get_frame_address_in_block.  */
2037
2038 static CORE_ADDR
2039 get_frame_address_in_block_wrapper (void *baton)
2040 {
2041   return get_frame_address_in_block (baton);
2042 }
2043
2044 /* An implementation of an lval_funcs method to indirect through a
2045    pointer.  This handles the synthetic pointer case when needed.  */
2046
2047 static struct value *
2048 indirect_pieced_value (struct value *value)
2049 {
2050   struct piece_closure *c
2051     = (struct piece_closure *) value_computed_closure (value);
2052   struct type *type;
2053   struct frame_info *frame;
2054   struct dwarf2_locexpr_baton baton;
2055   int i, bit_offset, bit_length;
2056   struct dwarf_expr_piece *piece = NULL;
2057   LONGEST byte_offset;
2058
2059   type = check_typedef (value_type (value));
2060   if (TYPE_CODE (type) != TYPE_CODE_PTR)
2061     return NULL;
2062
2063   bit_length = 8 * TYPE_LENGTH (type);
2064   bit_offset = 8 * value_offset (value);
2065   if (value_bitsize (value))
2066     bit_offset += value_bitpos (value);
2067
2068   for (i = 0; i < c->n_pieces && bit_length > 0; i++)
2069     {
2070       struct dwarf_expr_piece *p = &c->pieces[i];
2071       size_t this_size_bits = p->size;
2072
2073       if (bit_offset > 0)
2074         {
2075           if (bit_offset >= this_size_bits)
2076             {
2077               bit_offset -= this_size_bits;
2078               continue;
2079             }
2080
2081           bit_length -= this_size_bits - bit_offset;
2082           bit_offset = 0;
2083         }
2084       else
2085         bit_length -= this_size_bits;
2086
2087       if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
2088         return NULL;
2089
2090       if (bit_length != 0)
2091         error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
2092
2093       piece = p;
2094       break;
2095     }
2096
2097   frame = get_selected_frame (_("No frame selected."));
2098
2099   /* This is an offset requested by GDB, such as value subscripts.
2100      However, due to how synthetic pointers are implemented, this is
2101      always presented to us as a pointer type.  This means we have to
2102      sign-extend it manually as appropriate.  */
2103   byte_offset = value_as_address (value);
2104   if (TYPE_LENGTH (value_type (value)) < sizeof (LONGEST))
2105     byte_offset = gdb_sign_extend (byte_offset,
2106                                    8 * TYPE_LENGTH (value_type (value)));
2107   byte_offset += piece->v.ptr.offset;
2108
2109   gdb_assert (piece);
2110   baton
2111     = dwarf2_fetch_die_loc_sect_off (piece->v.ptr.die, c->per_cu,
2112                                      get_frame_address_in_block_wrapper,
2113                                      frame);
2114
2115   if (baton.data != NULL)
2116     return dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
2117                                           baton.data, baton.size, baton.per_cu,
2118                                           byte_offset);
2119
2120   {
2121     struct obstack temp_obstack;
2122     struct cleanup *cleanup;
2123     const gdb_byte *bytes;
2124     LONGEST len;
2125     struct value *result;
2126
2127     obstack_init (&temp_obstack);
2128     cleanup = make_cleanup_obstack_free (&temp_obstack);
2129
2130     bytes = dwarf2_fetch_constant_bytes (piece->v.ptr.die, c->per_cu,
2131                                          &temp_obstack, &len);
2132     if (bytes == NULL)
2133       result = allocate_optimized_out_value (TYPE_TARGET_TYPE (type));
2134     else
2135       {
2136         if (byte_offset < 0
2137             || byte_offset + TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > len)
2138           invalid_synthetic_pointer ();
2139         bytes += byte_offset;
2140         result = value_from_contents (TYPE_TARGET_TYPE (type), bytes);
2141       }
2142
2143     do_cleanups (cleanup);
2144     return result;
2145   }
2146 }
2147
2148 static void *
2149 copy_pieced_value_closure (const struct value *v)
2150 {
2151   struct piece_closure *c
2152     = (struct piece_closure *) value_computed_closure (v);
2153   
2154   ++c->refc;
2155   return c;
2156 }
2157
2158 static void
2159 free_pieced_value_closure (struct value *v)
2160 {
2161   struct piece_closure *c
2162     = (struct piece_closure *) value_computed_closure (v);
2163
2164   --c->refc;
2165   if (c->refc == 0)
2166     {
2167       int i;
2168
2169       for (i = 0; i < c->n_pieces; ++i)
2170         if (c->pieces[i].location == DWARF_VALUE_STACK)
2171           value_free (c->pieces[i].v.value);
2172
2173       xfree (c->pieces);
2174       xfree (c);
2175     }
2176 }
2177
2178 /* Functions for accessing a variable described by DW_OP_piece.  */
2179 static const struct lval_funcs pieced_value_funcs = {
2180   read_pieced_value,
2181   write_pieced_value,
2182   check_pieced_value_validity,
2183   check_pieced_value_invalid,
2184   indirect_pieced_value,
2185   NULL, /* coerce_ref */
2186   check_pieced_synthetic_pointer,
2187   copy_pieced_value_closure,
2188   free_pieced_value_closure
2189 };
2190
2191 /* Virtual method table for dwarf2_evaluate_loc_desc_full below.  */
2192
2193 static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
2194 {
2195   dwarf_expr_read_addr_from_reg,
2196   dwarf_expr_get_reg_value,
2197   dwarf_expr_read_mem,
2198   dwarf_expr_frame_base,
2199   dwarf_expr_frame_cfa,
2200   dwarf_expr_frame_pc,
2201   dwarf_expr_tls_address,
2202   dwarf_expr_dwarf_call,
2203   dwarf_expr_get_base_type,
2204   dwarf_expr_push_dwarf_reg_entry_value,
2205   dwarf_expr_get_addr_index
2206 };
2207
2208 /* Evaluate a location description, starting at DATA and with length
2209    SIZE, to find the current location of variable of TYPE in the
2210    context of FRAME.  BYTE_OFFSET is applied after the contents are
2211    computed.  */
2212
2213 static struct value *
2214 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
2215                                const gdb_byte *data, size_t size,
2216                                struct dwarf2_per_cu_data *per_cu,
2217                                LONGEST byte_offset)
2218 {
2219   struct value *retval;
2220   struct dwarf_expr_baton baton;
2221   struct dwarf_expr_context *ctx;
2222   struct cleanup *old_chain, *value_chain;
2223   struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
2224   volatile struct gdb_exception ex;
2225
2226   if (byte_offset < 0)
2227     invalid_synthetic_pointer ();
2228
2229   if (size == 0)
2230     return allocate_optimized_out_value (type);
2231
2232   baton.frame = frame;
2233   baton.per_cu = per_cu;
2234
2235   ctx = new_dwarf_expr_context ();
2236   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
2237   value_chain = make_cleanup_value_free_to_mark (value_mark ());
2238
2239   ctx->gdbarch = get_objfile_arch (objfile);
2240   ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
2241   ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu);
2242   ctx->offset = dwarf2_per_cu_text_offset (per_cu);
2243   ctx->baton = &baton;
2244   ctx->funcs = &dwarf_expr_ctx_funcs;
2245
2246   TRY_CATCH (ex, RETURN_MASK_ERROR)
2247     {
2248       dwarf_expr_eval (ctx, data, size);
2249     }
2250   if (ex.reason < 0)
2251     {
2252       if (ex.error == NOT_AVAILABLE_ERROR)
2253         {
2254           do_cleanups (old_chain);
2255           retval = allocate_value (type);
2256           mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
2257           return retval;
2258         }
2259       else if (ex.error == NO_ENTRY_VALUE_ERROR)
2260         {
2261           if (entry_values_debug)
2262             exception_print (gdb_stdout, ex);
2263           do_cleanups (old_chain);
2264           return allocate_optimized_out_value (type);
2265         }
2266       else
2267         throw_exception (ex);
2268     }
2269
2270   if (ctx->num_pieces > 0)
2271     {
2272       struct piece_closure *c;
2273       struct frame_id frame_id = get_frame_id (frame);
2274       ULONGEST bit_size = 0;
2275       int i;
2276
2277       for (i = 0; i < ctx->num_pieces; ++i)
2278         bit_size += ctx->pieces[i].size;
2279       if (8 * (byte_offset + TYPE_LENGTH (type)) > bit_size)
2280         invalid_synthetic_pointer ();
2281
2282       c = allocate_piece_closure (per_cu, ctx->num_pieces, ctx->pieces,
2283                                   ctx->addr_size);
2284       /* We must clean up the value chain after creating the piece
2285          closure but before allocating the result.  */
2286       do_cleanups (value_chain);
2287       retval = allocate_computed_value (type, &pieced_value_funcs, c);
2288       VALUE_FRAME_ID (retval) = frame_id;
2289       set_value_offset (retval, byte_offset);
2290     }
2291   else
2292     {
2293       switch (ctx->location)
2294         {
2295         case DWARF_VALUE_REGISTER:
2296           {
2297             struct gdbarch *arch = get_frame_arch (frame);
2298             int dwarf_regnum
2299               = longest_to_int (value_as_long (dwarf_expr_fetch (ctx, 0)));
2300             int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
2301
2302             if (byte_offset != 0)
2303               error (_("cannot use offset on synthetic pointer to register"));
2304             do_cleanups (value_chain);
2305            if (gdb_regnum == -1)
2306               error (_("Unable to access DWARF register number %d"),
2307                      dwarf_regnum);
2308            retval = value_from_register (type, gdb_regnum, frame);
2309            if (value_optimized_out (retval))
2310              {
2311                /* This means the register has undefined value / was
2312                   not saved.  As we're computing the location of some
2313                   variable etc. in the program, not a value for
2314                   inspecting a register ($pc, $sp, etc.), return a
2315                   generic optimized out value instead, so that we show
2316                   <optimized out> instead of <not saved>.  */
2317                do_cleanups (value_chain);
2318                retval = allocate_optimized_out_value (type);
2319              }
2320           }
2321           break;
2322
2323         case DWARF_VALUE_MEMORY:
2324           {
2325             CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
2326             int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
2327
2328             do_cleanups (value_chain);
2329             retval = value_at_lazy (type, address + byte_offset);
2330             if (in_stack_memory)
2331               set_value_stack (retval, 1);
2332           }
2333           break;
2334
2335         case DWARF_VALUE_STACK:
2336           {
2337             struct value *value = dwarf_expr_fetch (ctx, 0);
2338             gdb_byte *contents;
2339             const gdb_byte *val_bytes;
2340             size_t n = TYPE_LENGTH (value_type (value));
2341
2342             if (byte_offset + TYPE_LENGTH (type) > n)
2343               invalid_synthetic_pointer ();
2344
2345             val_bytes = value_contents_all (value);
2346             val_bytes += byte_offset;
2347             n -= byte_offset;
2348
2349             /* Preserve VALUE because we are going to free values back
2350                to the mark, but we still need the value contents
2351                below.  */
2352             value_incref (value);
2353             do_cleanups (value_chain);
2354             make_cleanup_value_free (value);
2355
2356             retval = allocate_value (type);
2357             contents = value_contents_raw (retval);
2358             if (n > TYPE_LENGTH (type))
2359               {
2360                 struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
2361
2362                 if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
2363                   val_bytes += n - TYPE_LENGTH (type);
2364                 n = TYPE_LENGTH (type);
2365               }
2366             memcpy (contents, val_bytes, n);
2367           }
2368           break;
2369
2370         case DWARF_VALUE_LITERAL:
2371           {
2372             bfd_byte *contents;
2373             const bfd_byte *ldata;
2374             size_t n = ctx->len;
2375
2376             if (byte_offset + TYPE_LENGTH (type) > n)
2377               invalid_synthetic_pointer ();
2378
2379             do_cleanups (value_chain);
2380             retval = allocate_value (type);
2381             contents = value_contents_raw (retval);
2382
2383             ldata = ctx->data + byte_offset;
2384             n -= byte_offset;
2385
2386             if (n > TYPE_LENGTH (type))
2387               {
2388                 struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
2389
2390                 if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
2391                   ldata += n - TYPE_LENGTH (type);
2392                 n = TYPE_LENGTH (type);
2393               }
2394             memcpy (contents, ldata, n);
2395           }
2396           break;
2397
2398         case DWARF_VALUE_OPTIMIZED_OUT:
2399           do_cleanups (value_chain);
2400           retval = allocate_optimized_out_value (type);
2401           break;
2402
2403           /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
2404              operation by execute_stack_op.  */
2405         case DWARF_VALUE_IMPLICIT_POINTER:
2406           /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
2407              it can only be encountered when making a piece.  */
2408         default:
2409           internal_error (__FILE__, __LINE__, _("invalid location type"));
2410         }
2411     }
2412
2413   set_value_initialized (retval, ctx->initialized);
2414
2415   do_cleanups (old_chain);
2416
2417   return retval;
2418 }
2419
2420 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
2421    passes 0 as the byte_offset.  */
2422
2423 struct value *
2424 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
2425                           const gdb_byte *data, size_t size,
2426                           struct dwarf2_per_cu_data *per_cu)
2427 {
2428   return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
2429 }
2430
2431 /* Evaluates a dwarf expression and stores the result in VAL, expecting
2432    that the dwarf expression only produces a single CORE_ADDR.  ADDR is a
2433    context (location of a variable) and might be needed to evaluate the
2434    location expression.
2435    Returns 1 on success, 0 otherwise.   */
2436
2437 static int
2438 dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
2439                            CORE_ADDR addr, CORE_ADDR *valp)
2440 {
2441   struct dwarf_expr_context *ctx;
2442   struct dwarf_expr_baton baton;
2443   struct objfile *objfile;
2444   struct cleanup *cleanup;
2445
2446   if (dlbaton == NULL || dlbaton->size == 0)
2447     return 0;
2448
2449   ctx = new_dwarf_expr_context ();
2450   cleanup = make_cleanup_free_dwarf_expr_context (ctx);
2451
2452   baton.frame = get_selected_frame (NULL);
2453   baton.per_cu = dlbaton->per_cu;
2454
2455   objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2456
2457   ctx->gdbarch = get_objfile_arch (objfile);
2458   ctx->addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2459   ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (dlbaton->per_cu);
2460   ctx->offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
2461   ctx->funcs = &dwarf_expr_ctx_funcs;
2462   ctx->baton = &baton;
2463
2464   dwarf_expr_eval (ctx, dlbaton->data, dlbaton->size);
2465
2466   switch (ctx->location)
2467     {
2468     case DWARF_VALUE_REGISTER:
2469     case DWARF_VALUE_MEMORY:
2470     case DWARF_VALUE_STACK:
2471       *valp = dwarf_expr_fetch_address (ctx, 0);
2472       if (ctx->location == DWARF_VALUE_REGISTER)
2473         *valp = dwarf_expr_read_addr_from_reg (&baton, *valp);
2474       do_cleanups (cleanup);
2475       return 1;
2476     case DWARF_VALUE_LITERAL:
2477       *valp = extract_signed_integer (ctx->data, ctx->len,
2478                                       gdbarch_byte_order (ctx->gdbarch));
2479       do_cleanups (cleanup);
2480       return 1;
2481       /* Unsupported dwarf values.  */
2482     case DWARF_VALUE_OPTIMIZED_OUT:
2483     case DWARF_VALUE_IMPLICIT_POINTER:
2484       break;
2485     }
2486
2487   do_cleanups (cleanup);
2488   return 0;
2489 }
2490
2491 /* See dwarf2loc.h.  */
2492
2493 int
2494 dwarf2_evaluate_property (const struct dynamic_prop *prop, CORE_ADDR address,
2495                           CORE_ADDR *value)
2496 {
2497   if (prop == NULL)
2498     return 0;
2499
2500   switch (prop->kind)
2501     {
2502     case PROP_LOCEXPR:
2503       {
2504         const struct dwarf2_property_baton *baton = prop->data.baton;
2505
2506         if (dwarf2_locexpr_baton_eval (&baton->locexpr, address, value))
2507           {
2508             if (baton->referenced_type)
2509               {
2510                 struct value *val = value_at (baton->referenced_type, *value);
2511
2512                 *value = value_as_address (val);
2513               }
2514             return 1;
2515           }
2516       }
2517       break;
2518
2519     case PROP_LOCLIST:
2520       {
2521         struct dwarf2_property_baton *baton = prop->data.baton;
2522         struct frame_info *frame = get_selected_frame (NULL);
2523         CORE_ADDR pc = get_frame_address_in_block (frame);
2524         const gdb_byte *data;
2525         struct value *val;
2526         size_t size;
2527
2528         data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
2529         if (data != NULL)
2530           {
2531             val = dwarf2_evaluate_loc_desc (baton->referenced_type, frame, data,
2532                                             size, baton->loclist.per_cu);
2533             if (!value_optimized_out (val))
2534               {
2535                 *value = value_as_address (val);
2536                 return 1;
2537               }
2538           }
2539       }
2540       break;
2541
2542     case PROP_CONST:
2543       *value = prop->data.const_val;
2544       return 1;
2545     }
2546
2547   return 0;
2548 }
2549
2550 \f
2551 /* Helper functions and baton for dwarf2_loc_desc_needs_frame.  */
2552
2553 struct needs_frame_baton
2554 {
2555   int needs_frame;
2556   struct dwarf2_per_cu_data *per_cu;
2557 };
2558
2559 /* Reads from registers do require a frame.  */
2560 static CORE_ADDR
2561 needs_frame_read_addr_from_reg (void *baton, int regnum)
2562 {
2563   struct needs_frame_baton *nf_baton = baton;
2564
2565   nf_baton->needs_frame = 1;
2566   return 1;
2567 }
2568
2569 /* struct dwarf_expr_context_funcs' "get_reg_value" callback:
2570    Reads from registers do require a frame.  */
2571
2572 static struct value *
2573 needs_frame_get_reg_value (void *baton, struct type *type, int regnum)
2574 {
2575   struct needs_frame_baton *nf_baton = baton;
2576
2577   nf_baton->needs_frame = 1;
2578   return value_zero (type, not_lval);
2579 }
2580
2581 /* Reads from memory do not require a frame.  */
2582 static void
2583 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
2584 {
2585   memset (buf, 0, len);
2586 }
2587
2588 /* Frame-relative accesses do require a frame.  */
2589 static void
2590 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
2591 {
2592   static gdb_byte lit0 = DW_OP_lit0;
2593   struct needs_frame_baton *nf_baton = baton;
2594
2595   *start = &lit0;
2596   *length = 1;
2597
2598   nf_baton->needs_frame = 1;
2599 }
2600
2601 /* CFA accesses require a frame.  */
2602
2603 static CORE_ADDR
2604 needs_frame_frame_cfa (void *baton)
2605 {
2606   struct needs_frame_baton *nf_baton = baton;
2607
2608   nf_baton->needs_frame = 1;
2609   return 1;
2610 }
2611
2612 /* Thread-local accesses do require a frame.  */
2613 static CORE_ADDR
2614 needs_frame_tls_address (void *baton, CORE_ADDR offset)
2615 {
2616   struct needs_frame_baton *nf_baton = baton;
2617
2618   nf_baton->needs_frame = 1;
2619   return 1;
2620 }
2621
2622 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame.  */
2623
2624 static void
2625 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
2626 {
2627   struct needs_frame_baton *nf_baton = ctx->baton;
2628
2629   per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
2630                      ctx->funcs->get_frame_pc, ctx->baton);
2631 }
2632
2633 /* DW_OP_GNU_entry_value accesses require a caller, therefore a frame.  */
2634
2635 static void
2636 needs_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
2637                              enum call_site_parameter_kind kind,
2638                              union call_site_parameter_u kind_u, int deref_size)
2639 {
2640   struct needs_frame_baton *nf_baton = ctx->baton;
2641
2642   nf_baton->needs_frame = 1;
2643
2644   /* The expression may require some stub values on DWARF stack.  */
2645   dwarf_expr_push_address (ctx, 0, 0);
2646 }
2647
2648 /* DW_OP_GNU_addr_index doesn't require a frame.  */
2649
2650 static CORE_ADDR
2651 needs_get_addr_index (void *baton, unsigned int index)
2652 {
2653   /* Nothing to do.  */
2654   return 1;
2655 }
2656
2657 /* Virtual method table for dwarf2_loc_desc_needs_frame below.  */
2658
2659 static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs =
2660 {
2661   needs_frame_read_addr_from_reg,
2662   needs_frame_get_reg_value,
2663   needs_frame_read_mem,
2664   needs_frame_frame_base,
2665   needs_frame_frame_cfa,
2666   needs_frame_frame_cfa,        /* get_frame_pc */
2667   needs_frame_tls_address,
2668   needs_frame_dwarf_call,
2669   NULL,                         /* get_base_type */
2670   needs_dwarf_reg_entry_value,
2671   needs_get_addr_index
2672 };
2673
2674 /* Return non-zero iff the location expression at DATA (length SIZE)
2675    requires a frame to evaluate.  */
2676
2677 static int
2678 dwarf2_loc_desc_needs_frame (const gdb_byte *data, size_t size,
2679                              struct dwarf2_per_cu_data *per_cu)
2680 {
2681   struct needs_frame_baton baton;
2682   struct dwarf_expr_context *ctx;
2683   int in_reg;
2684   struct cleanup *old_chain;
2685   struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
2686
2687   baton.needs_frame = 0;
2688   baton.per_cu = per_cu;
2689
2690   ctx = new_dwarf_expr_context ();
2691   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
2692   make_cleanup_value_free_to_mark (value_mark ());
2693
2694   ctx->gdbarch = get_objfile_arch (objfile);
2695   ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
2696   ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu);
2697   ctx->offset = dwarf2_per_cu_text_offset (per_cu);
2698   ctx->baton = &baton;
2699   ctx->funcs = &needs_frame_ctx_funcs;
2700
2701   dwarf_expr_eval (ctx, data, size);
2702
2703   in_reg = ctx->location == DWARF_VALUE_REGISTER;
2704
2705   if (ctx->num_pieces > 0)
2706     {
2707       int i;
2708
2709       /* If the location has several pieces, and any of them are in
2710          registers, then we will need a frame to fetch them from.  */
2711       for (i = 0; i < ctx->num_pieces; i++)
2712         if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
2713           in_reg = 1;
2714     }
2715
2716   do_cleanups (old_chain);
2717
2718   return baton.needs_frame || in_reg;
2719 }
2720
2721 /* A helper function that throws an unimplemented error mentioning a
2722    given DWARF operator.  */
2723
2724 static void
2725 unimplemented (unsigned int op)
2726 {
2727   const char *name = get_DW_OP_name (op);
2728
2729   if (name)
2730     error (_("DWARF operator %s cannot be translated to an agent expression"),
2731            name);
2732   else
2733     error (_("Unknown DWARF operator 0x%02x cannot be translated "
2734              "to an agent expression"),
2735            op);
2736 }
2737
2738 /* A helper function to convert a DWARF register to an arch register.
2739    ARCH is the architecture.
2740    DWARF_REG is the register.
2741    This will throw an exception if the DWARF register cannot be
2742    translated to an architecture register.  */
2743
2744 static int
2745 translate_register (struct gdbarch *arch, int dwarf_reg)
2746 {
2747   int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
2748   if (reg == -1)
2749     error (_("Unable to access DWARF register number %d"), dwarf_reg);
2750   return reg;
2751 }
2752
2753 /* A helper function that emits an access to memory.  ARCH is the
2754    target architecture.  EXPR is the expression which we are building.
2755    NBITS is the number of bits we want to read.  This emits the
2756    opcodes needed to read the memory and then extract the desired
2757    bits.  */
2758
2759 static void
2760 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
2761 {
2762   ULONGEST nbytes = (nbits + 7) / 8;
2763
2764   gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
2765
2766   if (expr->tracing)
2767     ax_trace_quick (expr, nbytes);
2768
2769   if (nbits <= 8)
2770     ax_simple (expr, aop_ref8);
2771   else if (nbits <= 16)
2772     ax_simple (expr, aop_ref16);
2773   else if (nbits <= 32)
2774     ax_simple (expr, aop_ref32);
2775   else
2776     ax_simple (expr, aop_ref64);
2777
2778   /* If we read exactly the number of bytes we wanted, we're done.  */
2779   if (8 * nbytes == nbits)
2780     return;
2781
2782   if (gdbarch_bits_big_endian (arch))
2783     {
2784       /* On a bits-big-endian machine, we want the high-order
2785          NBITS.  */
2786       ax_const_l (expr, 8 * nbytes - nbits);
2787       ax_simple (expr, aop_rsh_unsigned);
2788     }
2789   else
2790     {
2791       /* On a bits-little-endian box, we want the low-order NBITS.  */
2792       ax_zero_ext (expr, nbits);
2793     }
2794 }
2795
2796 /* A helper function to return the frame's PC.  */
2797
2798 static CORE_ADDR
2799 get_ax_pc (void *baton)
2800 {
2801   struct agent_expr *expr = baton;
2802
2803   return expr->scope;
2804 }
2805
2806 /* Compile a DWARF location expression to an agent expression.
2807    
2808    EXPR is the agent expression we are building.
2809    LOC is the agent value we modify.
2810    ARCH is the architecture.
2811    ADDR_SIZE is the size of addresses, in bytes.
2812    OP_PTR is the start of the location expression.
2813    OP_END is one past the last byte of the location expression.
2814    
2815    This will throw an exception for various kinds of errors -- for
2816    example, if the expression cannot be compiled, or if the expression
2817    is invalid.  */
2818
2819 void
2820 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
2821                            struct gdbarch *arch, unsigned int addr_size,
2822                            const gdb_byte *op_ptr, const gdb_byte *op_end,
2823                            struct dwarf2_per_cu_data *per_cu)
2824 {
2825   struct cleanup *cleanups;
2826   int i, *offsets;
2827   VEC(int) *dw_labels = NULL, *patches = NULL;
2828   const gdb_byte * const base = op_ptr;
2829   const gdb_byte *previous_piece = op_ptr;
2830   enum bfd_endian byte_order = gdbarch_byte_order (arch);
2831   ULONGEST bits_collected = 0;
2832   unsigned int addr_size_bits = 8 * addr_size;
2833   int bits_big_endian = gdbarch_bits_big_endian (arch);
2834
2835   offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
2836   cleanups = make_cleanup (xfree, offsets);
2837
2838   for (i = 0; i < op_end - op_ptr; ++i)
2839     offsets[i] = -1;
2840
2841   make_cleanup (VEC_cleanup (int), &dw_labels);
2842   make_cleanup (VEC_cleanup (int), &patches);
2843
2844   /* By default we are making an address.  */
2845   loc->kind = axs_lvalue_memory;
2846
2847   while (op_ptr < op_end)
2848     {
2849       enum dwarf_location_atom op = *op_ptr;
2850       uint64_t uoffset, reg;
2851       int64_t offset;
2852       int i;
2853
2854       offsets[op_ptr - base] = expr->len;
2855       ++op_ptr;
2856
2857       /* Our basic approach to code generation is to map DWARF
2858          operations directly to AX operations.  However, there are
2859          some differences.
2860
2861          First, DWARF works on address-sized units, but AX always uses
2862          LONGEST.  For most operations we simply ignore this
2863          difference; instead we generate sign extensions as needed
2864          before division and comparison operations.  It would be nice
2865          to omit the sign extensions, but there is no way to determine
2866          the size of the target's LONGEST.  (This code uses the size
2867          of the host LONGEST in some cases -- that is a bug but it is
2868          difficult to fix.)
2869
2870          Second, some DWARF operations cannot be translated to AX.
2871          For these we simply fail.  See
2872          http://sourceware.org/bugzilla/show_bug.cgi?id=11662.  */
2873       switch (op)
2874         {
2875         case DW_OP_lit0:
2876         case DW_OP_lit1:
2877         case DW_OP_lit2:
2878         case DW_OP_lit3:
2879         case DW_OP_lit4:
2880         case DW_OP_lit5:
2881         case DW_OP_lit6:
2882         case DW_OP_lit7:
2883         case DW_OP_lit8:
2884         case DW_OP_lit9:
2885         case DW_OP_lit10:
2886         case DW_OP_lit11:
2887         case DW_OP_lit12:
2888         case DW_OP_lit13:
2889         case DW_OP_lit14:
2890         case DW_OP_lit15:
2891         case DW_OP_lit16:
2892         case DW_OP_lit17:
2893         case DW_OP_lit18:
2894         case DW_OP_lit19:
2895         case DW_OP_lit20:
2896         case DW_OP_lit21:
2897         case DW_OP_lit22:
2898         case DW_OP_lit23:
2899         case DW_OP_lit24:
2900         case DW_OP_lit25:
2901         case DW_OP_lit26:
2902         case DW_OP_lit27:
2903         case DW_OP_lit28:
2904         case DW_OP_lit29:
2905         case DW_OP_lit30:
2906         case DW_OP_lit31:
2907           ax_const_l (expr, op - DW_OP_lit0);
2908           break;
2909
2910         case DW_OP_addr:
2911           uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
2912           op_ptr += addr_size;
2913           /* Some versions of GCC emit DW_OP_addr before
2914              DW_OP_GNU_push_tls_address.  In this case the value is an
2915              index, not an address.  We don't support things like
2916              branching between the address and the TLS op.  */
2917           if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
2918             uoffset += dwarf2_per_cu_text_offset (per_cu);
2919           ax_const_l (expr, uoffset);
2920           break;
2921
2922         case DW_OP_const1u:
2923           ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
2924           op_ptr += 1;
2925           break;
2926         case DW_OP_const1s:
2927           ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
2928           op_ptr += 1;
2929           break;
2930         case DW_OP_const2u:
2931           ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
2932           op_ptr += 2;
2933           break;
2934         case DW_OP_const2s:
2935           ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
2936           op_ptr += 2;
2937           break;
2938         case DW_OP_const4u:
2939           ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
2940           op_ptr += 4;
2941           break;
2942         case DW_OP_const4s:
2943           ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
2944           op_ptr += 4;
2945           break;
2946         case DW_OP_const8u:
2947           ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
2948           op_ptr += 8;
2949           break;
2950         case DW_OP_const8s:
2951           ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
2952           op_ptr += 8;
2953           break;
2954         case DW_OP_constu:
2955           op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
2956           ax_const_l (expr, uoffset);
2957           break;
2958         case DW_OP_consts:
2959           op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
2960           ax_const_l (expr, offset);
2961           break;
2962
2963         case DW_OP_reg0:
2964         case DW_OP_reg1:
2965         case DW_OP_reg2:
2966         case DW_OP_reg3:
2967         case DW_OP_reg4:
2968         case DW_OP_reg5:
2969         case DW_OP_reg6:
2970         case DW_OP_reg7:
2971         case DW_OP_reg8:
2972         case DW_OP_reg9:
2973         case DW_OP_reg10:
2974         case DW_OP_reg11:
2975         case DW_OP_reg12:
2976         case DW_OP_reg13:
2977         case DW_OP_reg14:
2978         case DW_OP_reg15:
2979         case DW_OP_reg16:
2980         case DW_OP_reg17:
2981         case DW_OP_reg18:
2982         case DW_OP_reg19:
2983         case DW_OP_reg20:
2984         case DW_OP_reg21:
2985         case DW_OP_reg22:
2986         case DW_OP_reg23:
2987         case DW_OP_reg24:
2988         case DW_OP_reg25:
2989         case DW_OP_reg26:
2990         case DW_OP_reg27:
2991         case DW_OP_reg28:
2992         case DW_OP_reg29:
2993         case DW_OP_reg30:
2994         case DW_OP_reg31:
2995           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
2996           loc->u.reg = translate_register (arch, op - DW_OP_reg0);
2997           loc->kind = axs_lvalue_register;
2998           break;
2999
3000         case DW_OP_regx:
3001           op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3002           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
3003           loc->u.reg = translate_register (arch, reg);
3004           loc->kind = axs_lvalue_register;
3005           break;
3006
3007         case DW_OP_implicit_value:
3008           {
3009             uint64_t len;
3010
3011             op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
3012             if (op_ptr + len > op_end)
3013               error (_("DW_OP_implicit_value: too few bytes available."));
3014             if (len > sizeof (ULONGEST))
3015               error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
3016                      (int) len);
3017
3018             ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
3019                                                         byte_order));
3020             op_ptr += len;
3021             dwarf_expr_require_composition (op_ptr, op_end,
3022                                             "DW_OP_implicit_value");
3023
3024             loc->kind = axs_rvalue;
3025           }
3026           break;
3027
3028         case DW_OP_stack_value:
3029           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
3030           loc->kind = axs_rvalue;
3031           break;
3032
3033         case DW_OP_breg0:
3034         case DW_OP_breg1:
3035         case DW_OP_breg2:
3036         case DW_OP_breg3:
3037         case DW_OP_breg4:
3038         case DW_OP_breg5:
3039         case DW_OP_breg6:
3040         case DW_OP_breg7:
3041         case DW_OP_breg8:
3042         case DW_OP_breg9:
3043         case DW_OP_breg10:
3044         case DW_OP_breg11:
3045         case DW_OP_breg12:
3046         case DW_OP_breg13:
3047         case DW_OP_breg14:
3048         case DW_OP_breg15:
3049         case DW_OP_breg16:
3050         case DW_OP_breg17:
3051         case DW_OP_breg18:
3052         case DW_OP_breg19:
3053         case DW_OP_breg20:
3054         case DW_OP_breg21:
3055         case DW_OP_breg22:
3056         case DW_OP_breg23:
3057         case DW_OP_breg24:
3058         case DW_OP_breg25:
3059         case DW_OP_breg26:
3060         case DW_OP_breg27:
3061         case DW_OP_breg28:
3062         case DW_OP_breg29:
3063         case DW_OP_breg30:
3064         case DW_OP_breg31:
3065           op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3066           i = translate_register (arch, op - DW_OP_breg0);
3067           ax_reg (expr, i);
3068           if (offset != 0)
3069             {
3070               ax_const_l (expr, offset);
3071               ax_simple (expr, aop_add);
3072             }
3073           break;
3074         case DW_OP_bregx:
3075           {
3076             op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3077             op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3078             i = translate_register (arch, reg);
3079             ax_reg (expr, i);
3080             if (offset != 0)
3081               {
3082                 ax_const_l (expr, offset);
3083                 ax_simple (expr, aop_add);
3084               }
3085           }
3086           break;
3087         case DW_OP_fbreg:
3088           {
3089             const gdb_byte *datastart;
3090             size_t datalen;
3091             struct block *b;
3092             struct symbol *framefunc;
3093
3094             b = block_for_pc (expr->scope);
3095
3096             if (!b)
3097               error (_("No block found for address"));
3098
3099             framefunc = block_linkage_function (b);
3100
3101             if (!framefunc)
3102               error (_("No function found for block"));
3103
3104             dwarf_expr_frame_base_1 (framefunc, expr->scope,
3105                                      &datastart, &datalen);
3106
3107             op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3108             dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
3109                                        datastart + datalen, per_cu);
3110             if (loc->kind == axs_lvalue_register)
3111               require_rvalue (expr, loc);
3112
3113             if (offset != 0)
3114               {
3115                 ax_const_l (expr, offset);
3116                 ax_simple (expr, aop_add);
3117               }
3118
3119             loc->kind = axs_lvalue_memory;
3120           }
3121           break;
3122
3123         case DW_OP_dup:
3124           ax_simple (expr, aop_dup);
3125           break;
3126
3127         case DW_OP_drop:
3128           ax_simple (expr, aop_pop);
3129           break;
3130
3131         case DW_OP_pick:
3132           offset = *op_ptr++;
3133           ax_pick (expr, offset);
3134           break;
3135           
3136         case DW_OP_swap:
3137           ax_simple (expr, aop_swap);
3138           break;
3139
3140         case DW_OP_over:
3141           ax_pick (expr, 1);
3142           break;
3143
3144         case DW_OP_rot:
3145           ax_simple (expr, aop_rot);
3146           break;
3147
3148         case DW_OP_deref:
3149         case DW_OP_deref_size:
3150           {
3151             int size;
3152
3153             if (op == DW_OP_deref_size)
3154               size = *op_ptr++;
3155             else
3156               size = addr_size;
3157
3158             if (size != 1 && size != 2 && size != 4 && size != 8)
3159               error (_("Unsupported size %d in %s"),
3160                      size, get_DW_OP_name (op));
3161             access_memory (arch, expr, size * TARGET_CHAR_BIT);
3162           }
3163           break;
3164
3165         case DW_OP_abs:
3166           /* Sign extend the operand.  */
3167           ax_ext (expr, addr_size_bits);
3168           ax_simple (expr, aop_dup);
3169           ax_const_l (expr, 0);
3170           ax_simple (expr, aop_less_signed);
3171           ax_simple (expr, aop_log_not);
3172           i = ax_goto (expr, aop_if_goto);
3173           /* We have to emit 0 - X.  */
3174           ax_const_l (expr, 0);
3175           ax_simple (expr, aop_swap);
3176           ax_simple (expr, aop_sub);
3177           ax_label (expr, i, expr->len);
3178           break;
3179
3180         case DW_OP_neg:
3181           /* No need to sign extend here.  */
3182           ax_const_l (expr, 0);
3183           ax_simple (expr, aop_swap);
3184           ax_simple (expr, aop_sub);
3185           break;
3186
3187         case DW_OP_not:
3188           /* Sign extend the operand.  */
3189           ax_ext (expr, addr_size_bits);
3190           ax_simple (expr, aop_bit_not);
3191           break;
3192
3193         case DW_OP_plus_uconst:
3194           op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3195           /* It would be really weird to emit `DW_OP_plus_uconst 0',
3196              but we micro-optimize anyhow.  */
3197           if (reg != 0)
3198             {
3199               ax_const_l (expr, reg);
3200               ax_simple (expr, aop_add);
3201             }
3202           break;
3203
3204         case DW_OP_and:
3205           ax_simple (expr, aop_bit_and);
3206           break;
3207
3208         case DW_OP_div:
3209           /* Sign extend the operands.  */
3210           ax_ext (expr, addr_size_bits);
3211           ax_simple (expr, aop_swap);
3212           ax_ext (expr, addr_size_bits);
3213           ax_simple (expr, aop_swap);
3214           ax_simple (expr, aop_div_signed);
3215           break;
3216
3217         case DW_OP_minus:
3218           ax_simple (expr, aop_sub);
3219           break;
3220
3221         case DW_OP_mod:
3222           ax_simple (expr, aop_rem_unsigned);
3223           break;
3224
3225         case DW_OP_mul:
3226           ax_simple (expr, aop_mul);
3227           break;
3228
3229         case DW_OP_or:
3230           ax_simple (expr, aop_bit_or);
3231           break;
3232
3233         case DW_OP_plus:
3234           ax_simple (expr, aop_add);
3235           break;
3236
3237         case DW_OP_shl:
3238           ax_simple (expr, aop_lsh);
3239           break;
3240
3241         case DW_OP_shr:
3242           ax_simple (expr, aop_rsh_unsigned);
3243           break;
3244
3245         case DW_OP_shra:
3246           ax_simple (expr, aop_rsh_signed);
3247           break;
3248
3249         case DW_OP_xor:
3250           ax_simple (expr, aop_bit_xor);
3251           break;
3252
3253         case DW_OP_le:
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           /* Note no swap here: A <= B is !(B < A).  */
3259           ax_simple (expr, aop_less_signed);
3260           ax_simple (expr, aop_log_not);
3261           break;
3262
3263         case DW_OP_ge:
3264           /* Sign extend the operands.  */
3265           ax_ext (expr, addr_size_bits);
3266           ax_simple (expr, aop_swap);
3267           ax_ext (expr, addr_size_bits);
3268           ax_simple (expr, aop_swap);
3269           /* A >= B is !(A < B).  */
3270           ax_simple (expr, aop_less_signed);
3271           ax_simple (expr, aop_log_not);
3272           break;
3273
3274         case DW_OP_eq:
3275           /* Sign extend the operands.  */
3276           ax_ext (expr, addr_size_bits);
3277           ax_simple (expr, aop_swap);
3278           ax_ext (expr, addr_size_bits);
3279           /* No need for a second swap here.  */
3280           ax_simple (expr, aop_equal);
3281           break;
3282
3283         case DW_OP_lt:
3284           /* Sign extend the operands.  */
3285           ax_ext (expr, addr_size_bits);
3286           ax_simple (expr, aop_swap);
3287           ax_ext (expr, addr_size_bits);
3288           ax_simple (expr, aop_swap);
3289           ax_simple (expr, aop_less_signed);
3290           break;
3291
3292         case DW_OP_gt:
3293           /* Sign extend the operands.  */
3294           ax_ext (expr, addr_size_bits);
3295           ax_simple (expr, aop_swap);
3296           ax_ext (expr, addr_size_bits);
3297           /* Note no swap here: A > B is B < A.  */
3298           ax_simple (expr, aop_less_signed);
3299           break;
3300
3301         case DW_OP_ne:
3302           /* Sign extend the operands.  */
3303           ax_ext (expr, addr_size_bits);
3304           ax_simple (expr, aop_swap);
3305           ax_ext (expr, addr_size_bits);
3306           /* No need for a swap here.  */
3307           ax_simple (expr, aop_equal);
3308           ax_simple (expr, aop_log_not);
3309           break;
3310
3311         case DW_OP_call_frame_cfa:
3312           dwarf2_compile_cfa_to_ax (expr, loc, arch, expr->scope, per_cu);
3313           loc->kind = axs_lvalue_memory;
3314           break;
3315
3316         case DW_OP_GNU_push_tls_address:
3317           unimplemented (op);
3318           break;
3319
3320         case DW_OP_skip:
3321           offset = extract_signed_integer (op_ptr, 2, byte_order);
3322           op_ptr += 2;
3323           i = ax_goto (expr, aop_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_bra:
3329           offset = extract_signed_integer (op_ptr, 2, byte_order);
3330           op_ptr += 2;
3331           /* Zero extend the operand.  */
3332           ax_zero_ext (expr, addr_size_bits);
3333           i = ax_goto (expr, aop_if_goto);
3334           VEC_safe_push (int, dw_labels, op_ptr + offset - base);
3335           VEC_safe_push (int, patches, i);
3336           break;
3337
3338         case DW_OP_nop:
3339           break;
3340
3341         case DW_OP_piece:
3342         case DW_OP_bit_piece:
3343           {
3344             uint64_t size, offset;
3345
3346             if (op_ptr - 1 == previous_piece)
3347               error (_("Cannot translate empty pieces to agent expressions"));
3348             previous_piece = op_ptr - 1;
3349
3350             op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
3351             if (op == DW_OP_piece)
3352               {
3353                 size *= 8;
3354                 offset = 0;
3355               }
3356             else
3357               op_ptr = safe_read_uleb128 (op_ptr, op_end, &offset);
3358
3359             if (bits_collected + size > 8 * sizeof (LONGEST))
3360               error (_("Expression pieces exceed word size"));
3361
3362             /* Access the bits.  */
3363             switch (loc->kind)
3364               {
3365               case axs_lvalue_register:
3366                 ax_reg (expr, loc->u.reg);
3367                 break;
3368
3369               case axs_lvalue_memory:
3370                 /* Offset the pointer, if needed.  */
3371                 if (offset > 8)
3372                   {
3373                     ax_const_l (expr, offset / 8);
3374                     ax_simple (expr, aop_add);
3375                     offset %= 8;
3376                   }
3377                 access_memory (arch, expr, size);
3378                 break;
3379               }
3380
3381             /* For a bits-big-endian target, shift up what we already
3382                have.  For a bits-little-endian target, shift up the
3383                new data.  Note that there is a potential bug here if
3384                the DWARF expression leaves multiple values on the
3385                stack.  */
3386             if (bits_collected > 0)
3387               {
3388                 if (bits_big_endian)
3389                   {
3390                     ax_simple (expr, aop_swap);
3391                     ax_const_l (expr, size);
3392                     ax_simple (expr, aop_lsh);
3393                     /* We don't need a second swap here, because
3394                        aop_bit_or is symmetric.  */
3395                   }
3396                 else
3397                   {
3398                     ax_const_l (expr, size);
3399                     ax_simple (expr, aop_lsh);
3400                   }
3401                 ax_simple (expr, aop_bit_or);
3402               }
3403
3404             bits_collected += size;
3405             loc->kind = axs_rvalue;
3406           }
3407           break;
3408
3409         case DW_OP_GNU_uninit:
3410           unimplemented (op);
3411
3412         case DW_OP_call2:
3413         case DW_OP_call4:
3414           {
3415             struct dwarf2_locexpr_baton block;
3416             int size = (op == DW_OP_call2 ? 2 : 4);
3417             cu_offset offset;
3418
3419             uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
3420             op_ptr += size;
3421
3422             offset.cu_off = uoffset;
3423             block = dwarf2_fetch_die_loc_cu_off (offset, per_cu,
3424                                                  get_ax_pc, expr);
3425
3426             /* DW_OP_call_ref is currently not supported.  */
3427             gdb_assert (block.per_cu == per_cu);
3428
3429             dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size,
3430                                        block.data, block.data + block.size,
3431                                        per_cu);
3432           }
3433           break;
3434
3435         case DW_OP_call_ref:
3436           unimplemented (op);
3437
3438         default:
3439           unimplemented (op);
3440         }
3441     }
3442
3443   /* Patch all the branches we emitted.  */
3444   for (i = 0; i < VEC_length (int, patches); ++i)
3445     {
3446       int targ = offsets[VEC_index (int, dw_labels, i)];
3447       if (targ == -1)
3448         internal_error (__FILE__, __LINE__, _("invalid label"));
3449       ax_label (expr, VEC_index (int, patches, i), targ);
3450     }
3451
3452   do_cleanups (cleanups);
3453 }
3454
3455 \f
3456 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3457    evaluator to calculate the location.  */
3458 static struct value *
3459 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
3460 {
3461   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3462   struct value *val;
3463
3464   val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3465                                   dlbaton->size, dlbaton->per_cu);
3466
3467   return val;
3468 }
3469
3470 /* Return the value of SYMBOL in FRAME at (callee) FRAME's function
3471    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3472    will be thrown.  */
3473
3474 static struct value *
3475 locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
3476 {
3477   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3478
3479   return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3480                                      dlbaton->size);
3481 }
3482
3483 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
3484 static int
3485 locexpr_read_needs_frame (struct symbol *symbol)
3486 {
3487   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3488
3489   return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
3490                                       dlbaton->per_cu);
3491 }
3492
3493 /* Return true if DATA points to the end of a piece.  END is one past
3494    the last byte in the expression.  */
3495
3496 static int
3497 piece_end_p (const gdb_byte *data, const gdb_byte *end)
3498 {
3499   return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
3500 }
3501
3502 /* Helper for locexpr_describe_location_piece that finds the name of a
3503    DWARF register.  */
3504
3505 static const char *
3506 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
3507 {
3508   int regnum;
3509
3510   regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
3511   return gdbarch_register_name (gdbarch, regnum);
3512 }
3513
3514 /* Nicely describe a single piece of a location, returning an updated
3515    position in the bytecode sequence.  This function cannot recognize
3516    all locations; if a location is not recognized, it simply returns
3517    DATA.  If there is an error during reading, e.g. we run off the end
3518    of the buffer, an error is thrown.  */
3519
3520 static const gdb_byte *
3521 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
3522                                  CORE_ADDR addr, struct objfile *objfile,
3523                                  struct dwarf2_per_cu_data *per_cu,
3524                                  const gdb_byte *data, const gdb_byte *end,
3525                                  unsigned int addr_size)
3526 {
3527   struct gdbarch *gdbarch = get_objfile_arch (objfile);
3528   size_t leb128_size;
3529
3530   if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
3531     {
3532       fprintf_filtered (stream, _("a variable in $%s"),
3533                         locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
3534       data += 1;
3535     }
3536   else if (data[0] == DW_OP_regx)
3537     {
3538       uint64_t reg;
3539
3540       data = safe_read_uleb128 (data + 1, end, &reg);
3541       fprintf_filtered (stream, _("a variable in $%s"),
3542                         locexpr_regname (gdbarch, reg));
3543     }
3544   else if (data[0] == DW_OP_fbreg)
3545     {
3546       struct block *b;
3547       struct symbol *framefunc;
3548       int frame_reg = 0;
3549       int64_t frame_offset;
3550       const gdb_byte *base_data, *new_data, *save_data = data;
3551       size_t base_size;
3552       int64_t base_offset = 0;
3553
3554       new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
3555       if (!piece_end_p (new_data, end))
3556         return data;
3557       data = new_data;
3558
3559       b = block_for_pc (addr);
3560
3561       if (!b)
3562         error (_("No block found for address for symbol \"%s\"."),
3563                SYMBOL_PRINT_NAME (symbol));
3564
3565       framefunc = block_linkage_function (b);
3566
3567       if (!framefunc)
3568         error (_("No function found for block for symbol \"%s\"."),
3569                SYMBOL_PRINT_NAME (symbol));
3570
3571       dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
3572
3573       if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
3574         {
3575           const gdb_byte *buf_end;
3576           
3577           frame_reg = base_data[0] - DW_OP_breg0;
3578           buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
3579                                        &base_offset);
3580           if (buf_end != base_data + base_size)
3581             error (_("Unexpected opcode after "
3582                      "DW_OP_breg%u for symbol \"%s\"."),
3583                    frame_reg, SYMBOL_PRINT_NAME (symbol));
3584         }
3585       else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
3586         {
3587           /* The frame base is just the register, with no offset.  */
3588           frame_reg = base_data[0] - DW_OP_reg0;
3589           base_offset = 0;
3590         }
3591       else
3592         {
3593           /* We don't know what to do with the frame base expression,
3594              so we can't trace this variable; give up.  */
3595           return save_data;
3596         }
3597
3598       fprintf_filtered (stream,
3599                         _("a variable at frame base reg $%s offset %s+%s"),
3600                         locexpr_regname (gdbarch, frame_reg),
3601                         plongest (base_offset), plongest (frame_offset));
3602     }
3603   else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
3604            && piece_end_p (data, end))
3605     {
3606       int64_t offset;
3607
3608       data = safe_read_sleb128 (data + 1, end, &offset);
3609
3610       fprintf_filtered (stream,
3611                         _("a variable at offset %s from base reg $%s"),
3612                         plongest (offset),
3613                         locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
3614     }
3615
3616   /* The location expression for a TLS variable looks like this (on a
3617      64-bit LE machine):
3618
3619      DW_AT_location    : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
3620                         (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
3621
3622      0x3 is the encoding for DW_OP_addr, which has an operand as long
3623      as the size of an address on the target machine (here is 8
3624      bytes).  Note that more recent version of GCC emit DW_OP_const4u
3625      or DW_OP_const8u, depending on address size, rather than
3626      DW_OP_addr.  0xe0 is the encoding for DW_OP_GNU_push_tls_address.
3627      The operand represents the offset at which the variable is within
3628      the thread local storage.  */
3629
3630   else if (data + 1 + addr_size < end
3631            && (data[0] == DW_OP_addr
3632                || (addr_size == 4 && data[0] == DW_OP_const4u)
3633                || (addr_size == 8 && data[0] == DW_OP_const8u))
3634            && data[1 + addr_size] == DW_OP_GNU_push_tls_address
3635            && piece_end_p (data + 2 + addr_size, end))
3636     {
3637       ULONGEST offset;
3638       offset = extract_unsigned_integer (data + 1, addr_size,
3639                                          gdbarch_byte_order (gdbarch));
3640
3641       fprintf_filtered (stream, 
3642                         _("a thread-local variable at offset 0x%s "
3643                           "in the thread-local storage for `%s'"),
3644                         phex_nz (offset, addr_size), objfile_name (objfile));
3645
3646       data += 1 + addr_size + 1;
3647     }
3648
3649   /* With -gsplit-dwarf a TLS variable can also look like this:
3650      DW_AT_location    : 3 byte block: fc 4 e0
3651                         (DW_OP_GNU_const_index: 4;
3652                          DW_OP_GNU_push_tls_address)  */
3653   else if (data + 3 <= end
3654            && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
3655            && data[0] == DW_OP_GNU_const_index
3656            && leb128_size > 0
3657            && data[1 + leb128_size] == DW_OP_GNU_push_tls_address
3658            && piece_end_p (data + 2 + leb128_size, end))
3659     {
3660       uint64_t offset;
3661
3662       data = safe_read_uleb128 (data + 1, end, &offset);
3663       offset = dwarf2_read_addr_index (per_cu, offset);
3664       fprintf_filtered (stream, 
3665                         _("a thread-local variable at offset 0x%s "
3666                           "in the thread-local storage for `%s'"),
3667                         phex_nz (offset, addr_size), objfile_name (objfile));
3668       ++data;
3669     }
3670
3671   else if (data[0] >= DW_OP_lit0
3672            && data[0] <= DW_OP_lit31
3673            && data + 1 < end
3674            && data[1] == DW_OP_stack_value)
3675     {
3676       fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
3677       data += 2;
3678     }
3679
3680   return data;
3681 }
3682
3683 /* Disassemble an expression, stopping at the end of a piece or at the
3684    end of the expression.  Returns a pointer to the next unread byte
3685    in the input expression.  If ALL is nonzero, then this function
3686    will keep going until it reaches the end of the expression.
3687    If there is an error during reading, e.g. we run off the end
3688    of the buffer, an error is thrown.  */
3689
3690 static const gdb_byte *
3691 disassemble_dwarf_expression (struct ui_file *stream,
3692                               struct gdbarch *arch, unsigned int addr_size,
3693                               int offset_size, const gdb_byte *start,
3694                               const gdb_byte *data, const gdb_byte *end,
3695                               int indent, int all,
3696                               struct dwarf2_per_cu_data *per_cu)
3697 {
3698   while (data < end
3699          && (all
3700              || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
3701     {
3702       enum dwarf_location_atom op = *data++;
3703       uint64_t ul;
3704       int64_t l;
3705       const char *name;
3706
3707       name = get_DW_OP_name (op);
3708
3709       if (!name)
3710         error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
3711                op, (long) (data - 1 - start));
3712       fprintf_filtered (stream, "  %*ld: %s", indent + 4,
3713                         (long) (data - 1 - start), name);
3714
3715       switch (op)
3716         {
3717         case DW_OP_addr:
3718           ul = extract_unsigned_integer (data, addr_size,
3719                                          gdbarch_byte_order (arch));
3720           data += addr_size;
3721           fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
3722           break;
3723
3724         case DW_OP_const1u:
3725           ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
3726           data += 1;
3727           fprintf_filtered (stream, " %s", pulongest (ul));
3728           break;
3729         case DW_OP_const1s:
3730           l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
3731           data += 1;
3732           fprintf_filtered (stream, " %s", plongest (l));
3733           break;
3734         case DW_OP_const2u:
3735           ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3736           data += 2;
3737           fprintf_filtered (stream, " %s", pulongest (ul));
3738           break;
3739         case DW_OP_const2s:
3740           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3741           data += 2;
3742           fprintf_filtered (stream, " %s", plongest (l));
3743           break;
3744         case DW_OP_const4u:
3745           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3746           data += 4;
3747           fprintf_filtered (stream, " %s", pulongest (ul));
3748           break;
3749         case DW_OP_const4s:
3750           l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
3751           data += 4;
3752           fprintf_filtered (stream, " %s", plongest (l));
3753           break;
3754         case DW_OP_const8u:
3755           ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
3756           data += 8;
3757           fprintf_filtered (stream, " %s", pulongest (ul));
3758           break;
3759         case DW_OP_const8s:
3760           l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
3761           data += 8;
3762           fprintf_filtered (stream, " %s", plongest (l));
3763           break;
3764         case DW_OP_constu:
3765           data = safe_read_uleb128 (data, end, &ul);
3766           fprintf_filtered (stream, " %s", pulongest (ul));
3767           break;
3768         case DW_OP_consts:
3769           data = safe_read_sleb128 (data, end, &l);
3770           fprintf_filtered (stream, " %s", plongest (l));
3771           break;
3772
3773         case DW_OP_reg0:
3774         case DW_OP_reg1:
3775         case DW_OP_reg2:
3776         case DW_OP_reg3:
3777         case DW_OP_reg4:
3778         case DW_OP_reg5:
3779         case DW_OP_reg6:
3780         case DW_OP_reg7:
3781         case DW_OP_reg8:
3782         case DW_OP_reg9:
3783         case DW_OP_reg10:
3784         case DW_OP_reg11:
3785         case DW_OP_reg12:
3786         case DW_OP_reg13:
3787         case DW_OP_reg14:
3788         case DW_OP_reg15:
3789         case DW_OP_reg16:
3790         case DW_OP_reg17:
3791         case DW_OP_reg18:
3792         case DW_OP_reg19:
3793         case DW_OP_reg20:
3794         case DW_OP_reg21:
3795         case DW_OP_reg22:
3796         case DW_OP_reg23:
3797         case DW_OP_reg24:
3798         case DW_OP_reg25:
3799         case DW_OP_reg26:
3800         case DW_OP_reg27:
3801         case DW_OP_reg28:
3802         case DW_OP_reg29:
3803         case DW_OP_reg30:
3804         case DW_OP_reg31:
3805           fprintf_filtered (stream, " [$%s]",
3806                             locexpr_regname (arch, op - DW_OP_reg0));
3807           break;
3808
3809         case DW_OP_regx:
3810           data = safe_read_uleb128 (data, end, &ul);
3811           fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
3812                             locexpr_regname (arch, (int) ul));
3813           break;
3814
3815         case DW_OP_implicit_value:
3816           data = safe_read_uleb128 (data, end, &ul);
3817           data += ul;
3818           fprintf_filtered (stream, " %s", pulongest (ul));
3819           break;
3820
3821         case DW_OP_breg0:
3822         case DW_OP_breg1:
3823         case DW_OP_breg2:
3824         case DW_OP_breg3:
3825         case DW_OP_breg4:
3826         case DW_OP_breg5:
3827         case DW_OP_breg6:
3828         case DW_OP_breg7:
3829         case DW_OP_breg8:
3830         case DW_OP_breg9:
3831         case DW_OP_breg10:
3832         case DW_OP_breg11:
3833         case DW_OP_breg12:
3834         case DW_OP_breg13:
3835         case DW_OP_breg14:
3836         case DW_OP_breg15:
3837         case DW_OP_breg16:
3838         case DW_OP_breg17:
3839         case DW_OP_breg18:
3840         case DW_OP_breg19:
3841         case DW_OP_breg20:
3842         case DW_OP_breg21:
3843         case DW_OP_breg22:
3844         case DW_OP_breg23:
3845         case DW_OP_breg24:
3846         case DW_OP_breg25:
3847         case DW_OP_breg26:
3848         case DW_OP_breg27:
3849         case DW_OP_breg28:
3850         case DW_OP_breg29:
3851         case DW_OP_breg30:
3852         case DW_OP_breg31:
3853           data = safe_read_sleb128 (data, end, &l);
3854           fprintf_filtered (stream, " %s [$%s]", plongest (l),
3855                             locexpr_regname (arch, op - DW_OP_breg0));
3856           break;
3857
3858         case DW_OP_bregx:
3859           data = safe_read_uleb128 (data, end, &ul);
3860           data = safe_read_sleb128 (data, end, &l);
3861           fprintf_filtered (stream, " register %s [$%s] offset %s",
3862                             pulongest (ul),
3863                             locexpr_regname (arch, (int) ul),
3864                             plongest (l));
3865           break;
3866
3867         case DW_OP_fbreg:
3868           data = safe_read_sleb128 (data, end, &l);
3869           fprintf_filtered (stream, " %s", plongest (l));
3870           break;
3871
3872         case DW_OP_xderef_size:
3873         case DW_OP_deref_size:
3874         case DW_OP_pick:
3875           fprintf_filtered (stream, " %d", *data);
3876           ++data;
3877           break;
3878
3879         case DW_OP_plus_uconst:
3880           data = safe_read_uleb128 (data, end, &ul);
3881           fprintf_filtered (stream, " %s", pulongest (ul));
3882           break;
3883
3884         case DW_OP_skip:
3885           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3886           data += 2;
3887           fprintf_filtered (stream, " to %ld",
3888                             (long) (data + l - start));
3889           break;
3890
3891         case DW_OP_bra:
3892           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3893           data += 2;
3894           fprintf_filtered (stream, " %ld",
3895                             (long) (data + l - start));
3896           break;
3897
3898         case DW_OP_call2:
3899           ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3900           data += 2;
3901           fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
3902           break;
3903
3904         case DW_OP_call4:
3905           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3906           data += 4;
3907           fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
3908           break;
3909
3910         case DW_OP_call_ref:
3911           ul = extract_unsigned_integer (data, offset_size,
3912                                          gdbarch_byte_order (arch));
3913           data += offset_size;
3914           fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
3915           break;
3916
3917         case DW_OP_piece:
3918           data = safe_read_uleb128 (data, end, &ul);
3919           fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
3920           break;
3921
3922         case DW_OP_bit_piece:
3923           {
3924             uint64_t offset;
3925
3926             data = safe_read_uleb128 (data, end, &ul);
3927             data = safe_read_uleb128 (data, end, &offset);
3928             fprintf_filtered (stream, " size %s offset %s (bits)",
3929                               pulongest (ul), pulongest (offset));
3930           }
3931           break;
3932
3933         case DW_OP_GNU_implicit_pointer:
3934           {
3935             ul = extract_unsigned_integer (data, offset_size,
3936                                            gdbarch_byte_order (arch));
3937             data += offset_size;
3938
3939             data = safe_read_sleb128 (data, end, &l);
3940
3941             fprintf_filtered (stream, " DIE %s offset %s",
3942                               phex_nz (ul, offset_size),
3943                               plongest (l));
3944           }
3945           break;
3946
3947         case DW_OP_GNU_deref_type:
3948           {
3949             int addr_size = *data++;
3950             cu_offset offset;
3951             struct type *type;
3952
3953             data = safe_read_uleb128 (data, end, &ul);
3954             offset.cu_off = ul;
3955             type = dwarf2_get_die_type (offset, per_cu);
3956             fprintf_filtered (stream, "<");
3957             type_print (type, "", stream, -1);
3958             fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset.cu_off, 0),
3959                               addr_size);
3960           }
3961           break;
3962
3963         case DW_OP_GNU_const_type:
3964           {
3965             cu_offset type_die;
3966             struct type *type;
3967
3968             data = safe_read_uleb128 (data, end, &ul);
3969             type_die.cu_off = ul;
3970             type = dwarf2_get_die_type (type_die, per_cu);
3971             fprintf_filtered (stream, "<");
3972             type_print (type, "", stream, -1);
3973             fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
3974           }
3975           break;
3976
3977         case DW_OP_GNU_regval_type:
3978           {
3979             uint64_t reg;
3980             cu_offset type_die;
3981             struct type *type;
3982
3983             data = safe_read_uleb128 (data, end, &reg);
3984             data = safe_read_uleb128 (data, end, &ul);
3985             type_die.cu_off = ul;
3986
3987             type = dwarf2_get_die_type (type_die, per_cu);
3988             fprintf_filtered (stream, "<");
3989             type_print (type, "", stream, -1);
3990             fprintf_filtered (stream, " [0x%s]> [$%s]",
3991                               phex_nz (type_die.cu_off, 0),
3992                               locexpr_regname (arch, reg));
3993           }
3994           break;
3995
3996         case DW_OP_GNU_convert:
3997         case DW_OP_GNU_reinterpret:
3998           {
3999             cu_offset type_die;
4000
4001             data = safe_read_uleb128 (data, end, &ul);
4002             type_die.cu_off = ul;
4003
4004             if (type_die.cu_off == 0)
4005               fprintf_filtered (stream, "<0>");
4006             else
4007               {
4008                 struct type *type;
4009
4010                 type = dwarf2_get_die_type (type_die, per_cu);
4011                 fprintf_filtered (stream, "<");
4012                 type_print (type, "", stream, -1);
4013                 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
4014               }
4015           }
4016           break;
4017
4018         case DW_OP_GNU_entry_value:
4019           data = safe_read_uleb128 (data, end, &ul);
4020           fputc_filtered ('\n', stream);
4021           disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
4022                                         start, data, data + ul, indent + 2,
4023                                         all, per_cu);
4024           data += ul;
4025           continue;
4026
4027         case DW_OP_GNU_parameter_ref:
4028           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
4029           data += 4;
4030           fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
4031           break;
4032
4033         case DW_OP_GNU_addr_index:
4034           data = safe_read_uleb128 (data, end, &ul);
4035           ul = dwarf2_read_addr_index (per_cu, ul);
4036           fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
4037           break;
4038         case DW_OP_GNU_const_index:
4039           data = safe_read_uleb128 (data, end, &ul);
4040           ul = dwarf2_read_addr_index (per_cu, ul);
4041           fprintf_filtered (stream, " %s", pulongest (ul));
4042           break;
4043         }
4044
4045       fprintf_filtered (stream, "\n");
4046     }
4047
4048   return data;
4049 }
4050
4051 /* Describe a single location, which may in turn consist of multiple
4052    pieces.  */
4053
4054 static void
4055 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
4056                              struct ui_file *stream,
4057                              const gdb_byte *data, size_t size,
4058                              struct objfile *objfile, unsigned int addr_size,
4059                              int offset_size, struct dwarf2_per_cu_data *per_cu)
4060 {
4061   const gdb_byte *end = data + size;
4062   int first_piece = 1, bad = 0;
4063
4064   while (data < end)
4065     {
4066       const gdb_byte *here = data;
4067       int disassemble = 1;
4068
4069       if (first_piece)
4070         first_piece = 0;
4071       else
4072         fprintf_filtered (stream, _(", and "));
4073
4074       if (!dwarf2_always_disassemble)
4075         {
4076           data = locexpr_describe_location_piece (symbol, stream,
4077                                                   addr, objfile, per_cu,
4078                                                   data, end, addr_size);
4079           /* If we printed anything, or if we have an empty piece,
4080              then don't disassemble.  */
4081           if (data != here
4082               || data[0] == DW_OP_piece
4083               || data[0] == DW_OP_bit_piece)
4084             disassemble = 0;
4085         }
4086       if (disassemble)
4087         {
4088           fprintf_filtered (stream, _("a complex DWARF expression:\n"));
4089           data = disassemble_dwarf_expression (stream,
4090                                                get_objfile_arch (objfile),
4091                                                addr_size, offset_size, data,
4092                                                data, end, 0,
4093                                                dwarf2_always_disassemble,
4094                                                per_cu);
4095         }
4096
4097       if (data < end)
4098         {
4099           int empty = data == here;
4100               
4101           if (disassemble)
4102             fprintf_filtered (stream, "   ");
4103           if (data[0] == DW_OP_piece)
4104             {
4105               uint64_t bytes;
4106
4107               data = safe_read_uleb128 (data + 1, end, &bytes);
4108
4109               if (empty)
4110                 fprintf_filtered (stream, _("an empty %s-byte piece"),
4111                                   pulongest (bytes));
4112               else
4113                 fprintf_filtered (stream, _(" [%s-byte piece]"),
4114                                   pulongest (bytes));
4115             }
4116           else if (data[0] == DW_OP_bit_piece)
4117             {
4118               uint64_t bits, offset;
4119
4120               data = safe_read_uleb128 (data + 1, end, &bits);
4121               data = safe_read_uleb128 (data, end, &offset);
4122
4123               if (empty)
4124                 fprintf_filtered (stream,
4125                                   _("an empty %s-bit piece"),
4126                                   pulongest (bits));
4127               else
4128                 fprintf_filtered (stream,
4129                                   _(" [%s-bit piece, offset %s bits]"),
4130                                   pulongest (bits), pulongest (offset));
4131             }
4132           else
4133             {
4134               bad = 1;
4135               break;
4136             }
4137         }
4138     }
4139
4140   if (bad || data > end)
4141     error (_("Corrupted DWARF2 expression for \"%s\"."),
4142            SYMBOL_PRINT_NAME (symbol));
4143 }
4144
4145 /* Print a natural-language description of SYMBOL to STREAM.  This
4146    version is for a symbol with a single location.  */
4147
4148 static void
4149 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
4150                            struct ui_file *stream)
4151 {
4152   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4153   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
4154   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4155   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
4156
4157   locexpr_describe_location_1 (symbol, addr, stream,
4158                                dlbaton->data, dlbaton->size,
4159                                objfile, addr_size, offset_size,
4160                                dlbaton->per_cu);
4161 }
4162
4163 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4164    any necessary bytecode in AX.  */
4165
4166 static void
4167 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
4168                             struct agent_expr *ax, struct axs_value *value)
4169 {
4170   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4171   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4172
4173   if (dlbaton->size == 0)
4174     value->optimized_out = 1;
4175   else
4176     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size,
4177                                dlbaton->data, dlbaton->data + dlbaton->size,
4178                                dlbaton->per_cu);
4179 }
4180
4181 /* The set of location functions used with the DWARF-2 expression
4182    evaluator.  */
4183 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
4184   locexpr_read_variable,
4185   locexpr_read_variable_at_entry,
4186   locexpr_read_needs_frame,
4187   locexpr_describe_location,
4188   0,    /* location_has_loclist */
4189   locexpr_tracepoint_var_ref
4190 };
4191
4192
4193 /* Wrapper functions for location lists.  These generally find
4194    the appropriate location expression and call something above.  */
4195
4196 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
4197    evaluator to calculate the location.  */
4198 static struct value *
4199 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
4200 {
4201   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4202   struct value *val;
4203   const gdb_byte *data;
4204   size_t size;
4205   CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
4206
4207   data = dwarf2_find_location_expression (dlbaton, &size, pc);
4208   val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
4209                                   dlbaton->per_cu);
4210
4211   return val;
4212 }
4213
4214 /* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
4215    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
4216    will be thrown.
4217
4218    Function always returns non-NULL value, it may be marked optimized out if
4219    inferior frame information is not available.  It throws NO_ENTRY_VALUE_ERROR
4220    if it cannot resolve the parameter for any reason.  */
4221
4222 static struct value *
4223 loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
4224 {
4225   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4226   const gdb_byte *data;
4227   size_t size;
4228   CORE_ADDR pc;
4229
4230   if (frame == NULL || !get_frame_func_if_available (frame, &pc))
4231     return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4232
4233   data = dwarf2_find_location_expression (dlbaton, &size, pc);
4234   if (data == NULL)
4235     return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4236
4237   return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
4238 }
4239
4240 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
4241 static int
4242 loclist_read_needs_frame (struct symbol *symbol)
4243 {
4244   /* If there's a location list, then assume we need to have a frame
4245      to choose the appropriate location expression.  With tracking of
4246      global variables this is not necessarily true, but such tracking
4247      is disabled in GCC at the moment until we figure out how to
4248      represent it.  */
4249
4250   return 1;
4251 }
4252
4253 /* Print a natural-language description of SYMBOL to STREAM.  This
4254    version applies when there is a list of different locations, each
4255    with a specified address range.  */
4256
4257 static void
4258 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
4259                            struct ui_file *stream)
4260 {
4261   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4262   const gdb_byte *loc_ptr, *buf_end;
4263   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
4264   struct gdbarch *gdbarch = get_objfile_arch (objfile);
4265   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4266   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4267   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
4268   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
4269   /* Adjust base_address for relocatable objects.  */
4270   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
4271   CORE_ADDR base_address = dlbaton->base_address + base_offset;
4272   int done = 0;
4273
4274   loc_ptr = dlbaton->data;
4275   buf_end = dlbaton->data + dlbaton->size;
4276
4277   fprintf_filtered (stream, _("multi-location:\n"));
4278
4279   /* Iterate through locations until we run out.  */
4280   while (!done)
4281     {
4282       CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
4283       int length;
4284       enum debug_loc_kind kind;
4285       const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
4286
4287       if (dlbaton->from_dwo)
4288         kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
4289                                                loc_ptr, buf_end, &new_ptr,
4290                                                &low, &high, byte_order);
4291       else
4292         kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
4293                                            &low, &high,
4294                                            byte_order, addr_size,
4295                                            signed_addr_p);
4296       loc_ptr = new_ptr;
4297       switch (kind)
4298         {
4299         case DEBUG_LOC_END_OF_LIST:
4300           done = 1;
4301           continue;
4302         case DEBUG_LOC_BASE_ADDRESS:
4303           base_address = high + base_offset;
4304           fprintf_filtered (stream, _("  Base address %s"),
4305                             paddress (gdbarch, base_address));
4306           continue;
4307         case DEBUG_LOC_START_END:
4308         case DEBUG_LOC_START_LENGTH:
4309           break;
4310         case DEBUG_LOC_BUFFER_OVERFLOW:
4311         case DEBUG_LOC_INVALID_ENTRY:
4312           error (_("Corrupted DWARF expression for symbol \"%s\"."),
4313                  SYMBOL_PRINT_NAME (symbol));
4314         default:
4315           gdb_assert_not_reached ("bad debug_loc_kind");
4316         }
4317
4318       /* Otherwise, a location expression entry.  */
4319       low += base_address;
4320       high += base_address;
4321
4322       length = extract_unsigned_integer (loc_ptr, 2, byte_order);
4323       loc_ptr += 2;
4324
4325       /* (It would improve readability to print only the minimum
4326          necessary digits of the second number of the range.)  */
4327       fprintf_filtered (stream, _("  Range %s-%s: "),
4328                         paddress (gdbarch, low), paddress (gdbarch, high));
4329
4330       /* Now describe this particular location.  */
4331       locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
4332                                    objfile, addr_size, offset_size,
4333                                    dlbaton->per_cu);
4334
4335       fprintf_filtered (stream, "\n");
4336
4337       loc_ptr += length;
4338     }
4339 }
4340
4341 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4342    any necessary bytecode in AX.  */
4343 static void
4344 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
4345                             struct agent_expr *ax, struct axs_value *value)
4346 {
4347   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4348   const gdb_byte *data;
4349   size_t size;
4350   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4351
4352   data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
4353   if (size == 0)
4354     value->optimized_out = 1;
4355   else
4356     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size, data, data + size,
4357                                dlbaton->per_cu);
4358 }
4359
4360 /* The set of location functions used with the DWARF-2 expression
4361    evaluator and location lists.  */
4362 const struct symbol_computed_ops dwarf2_loclist_funcs = {
4363   loclist_read_variable,
4364   loclist_read_variable_at_entry,
4365   loclist_read_needs_frame,
4366   loclist_describe_location,
4367   1,    /* location_has_loclist */
4368   loclist_tracepoint_var_ref
4369 };
4370
4371 /* Provide a prototype to silence -Wmissing-prototypes.  */
4372 extern initialize_file_ftype _initialize_dwarf2loc;
4373
4374 void
4375 _initialize_dwarf2loc (void)
4376 {
4377   add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
4378                              &entry_values_debug,
4379                              _("Set entry values and tail call frames "
4380                                "debugging."),
4381                              _("Show entry values and tail call frames "
4382                                "debugging."),
4383                              _("When non-zero, the process of determining "
4384                                "parameter values from function entry point "
4385                                "and tail call frames will be printed."),
4386                              NULL,
4387                              show_entry_values_debug,
4388                              &setdebuglist, &showdebuglist);
4389 }