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