Code cleanup: Add objfile_name accessor
[platform/upstream/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             int dwarf_regnum
2287               = longest_to_int (value_as_long (dwarf_expr_fetch (ctx, 0)));
2288             int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
2289
2290             if (byte_offset != 0)
2291               error (_("cannot use offset on synthetic pointer to register"));
2292             do_cleanups (value_chain);
2293             if (gdb_regnum != -1)
2294               retval = value_from_register (type, gdb_regnum, frame);
2295             else
2296               error (_("Unable to access DWARF register number %d"),
2297                      dwarf_regnum);
2298           }
2299           break;
2300
2301         case DWARF_VALUE_MEMORY:
2302           {
2303             CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
2304             int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
2305
2306             do_cleanups (value_chain);
2307             retval = value_at_lazy (type, address + byte_offset);
2308             if (in_stack_memory)
2309               set_value_stack (retval, 1);
2310           }
2311           break;
2312
2313         case DWARF_VALUE_STACK:
2314           {
2315             struct value *value = dwarf_expr_fetch (ctx, 0);
2316             gdb_byte *contents;
2317             const gdb_byte *val_bytes;
2318             size_t n = TYPE_LENGTH (value_type (value));
2319
2320             if (byte_offset + TYPE_LENGTH (type) > n)
2321               invalid_synthetic_pointer ();
2322
2323             val_bytes = value_contents_all (value);
2324             val_bytes += byte_offset;
2325             n -= byte_offset;
2326
2327             /* Preserve VALUE because we are going to free values back
2328                to the mark, but we still need the value contents
2329                below.  */
2330             value_incref (value);
2331             do_cleanups (value_chain);
2332             make_cleanup_value_free (value);
2333
2334             retval = allocate_value (type);
2335             contents = value_contents_raw (retval);
2336             if (n > TYPE_LENGTH (type))
2337               {
2338                 struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
2339
2340                 if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
2341                   val_bytes += n - TYPE_LENGTH (type);
2342                 n = TYPE_LENGTH (type);
2343               }
2344             memcpy (contents, val_bytes, n);
2345           }
2346           break;
2347
2348         case DWARF_VALUE_LITERAL:
2349           {
2350             bfd_byte *contents;
2351             const bfd_byte *ldata;
2352             size_t n = ctx->len;
2353
2354             if (byte_offset + TYPE_LENGTH (type) > n)
2355               invalid_synthetic_pointer ();
2356
2357             do_cleanups (value_chain);
2358             retval = allocate_value (type);
2359             contents = value_contents_raw (retval);
2360
2361             ldata = ctx->data + byte_offset;
2362             n -= byte_offset;
2363
2364             if (n > TYPE_LENGTH (type))
2365               {
2366                 struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
2367
2368                 if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
2369                   ldata += n - TYPE_LENGTH (type);
2370                 n = TYPE_LENGTH (type);
2371               }
2372             memcpy (contents, ldata, n);
2373           }
2374           break;
2375
2376         case DWARF_VALUE_OPTIMIZED_OUT:
2377           do_cleanups (value_chain);
2378           retval = allocate_optimized_out_value (type);
2379           break;
2380
2381           /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
2382              operation by execute_stack_op.  */
2383         case DWARF_VALUE_IMPLICIT_POINTER:
2384           /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
2385              it can only be encountered when making a piece.  */
2386         default:
2387           internal_error (__FILE__, __LINE__, _("invalid location type"));
2388         }
2389     }
2390
2391   set_value_initialized (retval, ctx->initialized);
2392
2393   do_cleanups (old_chain);
2394
2395   return retval;
2396 }
2397
2398 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
2399    passes 0 as the byte_offset.  */
2400
2401 struct value *
2402 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
2403                           const gdb_byte *data, size_t size,
2404                           struct dwarf2_per_cu_data *per_cu)
2405 {
2406   return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
2407 }
2408
2409 \f
2410 /* Helper functions and baton for dwarf2_loc_desc_needs_frame.  */
2411
2412 struct needs_frame_baton
2413 {
2414   int needs_frame;
2415   struct dwarf2_per_cu_data *per_cu;
2416 };
2417
2418 /* Reads from registers do require a frame.  */
2419 static CORE_ADDR
2420 needs_frame_read_reg (void *baton, int regnum)
2421 {
2422   struct needs_frame_baton *nf_baton = baton;
2423
2424   nf_baton->needs_frame = 1;
2425   return 1;
2426 }
2427
2428 /* Reads from memory do not require a frame.  */
2429 static void
2430 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
2431 {
2432   memset (buf, 0, len);
2433 }
2434
2435 /* Frame-relative accesses do require a frame.  */
2436 static void
2437 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
2438 {
2439   static gdb_byte lit0 = DW_OP_lit0;
2440   struct needs_frame_baton *nf_baton = baton;
2441
2442   *start = &lit0;
2443   *length = 1;
2444
2445   nf_baton->needs_frame = 1;
2446 }
2447
2448 /* CFA accesses require a frame.  */
2449
2450 static CORE_ADDR
2451 needs_frame_frame_cfa (void *baton)
2452 {
2453   struct needs_frame_baton *nf_baton = baton;
2454
2455   nf_baton->needs_frame = 1;
2456   return 1;
2457 }
2458
2459 /* Thread-local accesses do require a frame.  */
2460 static CORE_ADDR
2461 needs_frame_tls_address (void *baton, CORE_ADDR offset)
2462 {
2463   struct needs_frame_baton *nf_baton = baton;
2464
2465   nf_baton->needs_frame = 1;
2466   return 1;
2467 }
2468
2469 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame.  */
2470
2471 static void
2472 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
2473 {
2474   struct needs_frame_baton *nf_baton = ctx->baton;
2475
2476   per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
2477                      ctx->funcs->get_frame_pc, ctx->baton);
2478 }
2479
2480 /* DW_OP_GNU_entry_value accesses require a caller, therefore a frame.  */
2481
2482 static void
2483 needs_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
2484                              enum call_site_parameter_kind kind,
2485                              union call_site_parameter_u kind_u, int deref_size)
2486 {
2487   struct needs_frame_baton *nf_baton = ctx->baton;
2488
2489   nf_baton->needs_frame = 1;
2490
2491   /* The expression may require some stub values on DWARF stack.  */
2492   dwarf_expr_push_address (ctx, 0, 0);
2493 }
2494
2495 /* DW_OP_GNU_addr_index doesn't require a frame.  */
2496
2497 static CORE_ADDR
2498 needs_get_addr_index (void *baton, unsigned int index)
2499 {
2500   /* Nothing to do.  */
2501   return 1;
2502 }
2503
2504 /* Virtual method table for dwarf2_loc_desc_needs_frame below.  */
2505
2506 static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs =
2507 {
2508   needs_frame_read_reg,
2509   needs_frame_read_mem,
2510   needs_frame_frame_base,
2511   needs_frame_frame_cfa,
2512   needs_frame_frame_cfa,        /* get_frame_pc */
2513   needs_frame_tls_address,
2514   needs_frame_dwarf_call,
2515   NULL,                         /* get_base_type */
2516   needs_dwarf_reg_entry_value,
2517   needs_get_addr_index
2518 };
2519
2520 /* Return non-zero iff the location expression at DATA (length SIZE)
2521    requires a frame to evaluate.  */
2522
2523 static int
2524 dwarf2_loc_desc_needs_frame (const gdb_byte *data, size_t size,
2525                              struct dwarf2_per_cu_data *per_cu)
2526 {
2527   struct needs_frame_baton baton;
2528   struct dwarf_expr_context *ctx;
2529   int in_reg;
2530   struct cleanup *old_chain;
2531   struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
2532
2533   baton.needs_frame = 0;
2534   baton.per_cu = per_cu;
2535
2536   ctx = new_dwarf_expr_context ();
2537   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
2538   make_cleanup_value_free_to_mark (value_mark ());
2539
2540   ctx->gdbarch = get_objfile_arch (objfile);
2541   ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
2542   ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu);
2543   ctx->offset = dwarf2_per_cu_text_offset (per_cu);
2544   ctx->baton = &baton;
2545   ctx->funcs = &needs_frame_ctx_funcs;
2546
2547   dwarf_expr_eval (ctx, data, size);
2548
2549   in_reg = ctx->location == DWARF_VALUE_REGISTER;
2550
2551   if (ctx->num_pieces > 0)
2552     {
2553       int i;
2554
2555       /* If the location has several pieces, and any of them are in
2556          registers, then we will need a frame to fetch them from.  */
2557       for (i = 0; i < ctx->num_pieces; i++)
2558         if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
2559           in_reg = 1;
2560     }
2561
2562   do_cleanups (old_chain);
2563
2564   return baton.needs_frame || in_reg;
2565 }
2566
2567 /* A helper function that throws an unimplemented error mentioning a
2568    given DWARF operator.  */
2569
2570 static void
2571 unimplemented (unsigned int op)
2572 {
2573   const char *name = get_DW_OP_name (op);
2574
2575   if (name)
2576     error (_("DWARF operator %s cannot be translated to an agent expression"),
2577            name);
2578   else
2579     error (_("Unknown DWARF operator 0x%02x cannot be translated "
2580              "to an agent expression"),
2581            op);
2582 }
2583
2584 /* A helper function to convert a DWARF register to an arch register.
2585    ARCH is the architecture.
2586    DWARF_REG is the register.
2587    This will throw an exception if the DWARF register cannot be
2588    translated to an architecture register.  */
2589
2590 static int
2591 translate_register (struct gdbarch *arch, int dwarf_reg)
2592 {
2593   int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
2594   if (reg == -1)
2595     error (_("Unable to access DWARF register number %d"), dwarf_reg);
2596   return reg;
2597 }
2598
2599 /* A helper function that emits an access to memory.  ARCH is the
2600    target architecture.  EXPR is the expression which we are building.
2601    NBITS is the number of bits we want to read.  This emits the
2602    opcodes needed to read the memory and then extract the desired
2603    bits.  */
2604
2605 static void
2606 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
2607 {
2608   ULONGEST nbytes = (nbits + 7) / 8;
2609
2610   gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
2611
2612   if (expr->tracing)
2613     ax_trace_quick (expr, nbytes);
2614
2615   if (nbits <= 8)
2616     ax_simple (expr, aop_ref8);
2617   else if (nbits <= 16)
2618     ax_simple (expr, aop_ref16);
2619   else if (nbits <= 32)
2620     ax_simple (expr, aop_ref32);
2621   else
2622     ax_simple (expr, aop_ref64);
2623
2624   /* If we read exactly the number of bytes we wanted, we're done.  */
2625   if (8 * nbytes == nbits)
2626     return;
2627
2628   if (gdbarch_bits_big_endian (arch))
2629     {
2630       /* On a bits-big-endian machine, we want the high-order
2631          NBITS.  */
2632       ax_const_l (expr, 8 * nbytes - nbits);
2633       ax_simple (expr, aop_rsh_unsigned);
2634     }
2635   else
2636     {
2637       /* On a bits-little-endian box, we want the low-order NBITS.  */
2638       ax_zero_ext (expr, nbits);
2639     }
2640 }
2641
2642 /* A helper function to return the frame's PC.  */
2643
2644 static CORE_ADDR
2645 get_ax_pc (void *baton)
2646 {
2647   struct agent_expr *expr = baton;
2648
2649   return expr->scope;
2650 }
2651
2652 /* Compile a DWARF location expression to an agent expression.
2653    
2654    EXPR is the agent expression we are building.
2655    LOC is the agent value we modify.
2656    ARCH is the architecture.
2657    ADDR_SIZE is the size of addresses, in bytes.
2658    OP_PTR is the start of the location expression.
2659    OP_END is one past the last byte of the location expression.
2660    
2661    This will throw an exception for various kinds of errors -- for
2662    example, if the expression cannot be compiled, or if the expression
2663    is invalid.  */
2664
2665 void
2666 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
2667                            struct gdbarch *arch, unsigned int addr_size,
2668                            const gdb_byte *op_ptr, const gdb_byte *op_end,
2669                            struct dwarf2_per_cu_data *per_cu)
2670 {
2671   struct cleanup *cleanups;
2672   int i, *offsets;
2673   VEC(int) *dw_labels = NULL, *patches = NULL;
2674   const gdb_byte * const base = op_ptr;
2675   const gdb_byte *previous_piece = op_ptr;
2676   enum bfd_endian byte_order = gdbarch_byte_order (arch);
2677   ULONGEST bits_collected = 0;
2678   unsigned int addr_size_bits = 8 * addr_size;
2679   int bits_big_endian = gdbarch_bits_big_endian (arch);
2680
2681   offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
2682   cleanups = make_cleanup (xfree, offsets);
2683
2684   for (i = 0; i < op_end - op_ptr; ++i)
2685     offsets[i] = -1;
2686
2687   make_cleanup (VEC_cleanup (int), &dw_labels);
2688   make_cleanup (VEC_cleanup (int), &patches);
2689
2690   /* By default we are making an address.  */
2691   loc->kind = axs_lvalue_memory;
2692
2693   while (op_ptr < op_end)
2694     {
2695       enum dwarf_location_atom op = *op_ptr;
2696       uint64_t uoffset, reg;
2697       int64_t offset;
2698       int i;
2699
2700       offsets[op_ptr - base] = expr->len;
2701       ++op_ptr;
2702
2703       /* Our basic approach to code generation is to map DWARF
2704          operations directly to AX operations.  However, there are
2705          some differences.
2706
2707          First, DWARF works on address-sized units, but AX always uses
2708          LONGEST.  For most operations we simply ignore this
2709          difference; instead we generate sign extensions as needed
2710          before division and comparison operations.  It would be nice
2711          to omit the sign extensions, but there is no way to determine
2712          the size of the target's LONGEST.  (This code uses the size
2713          of the host LONGEST in some cases -- that is a bug but it is
2714          difficult to fix.)
2715
2716          Second, some DWARF operations cannot be translated to AX.
2717          For these we simply fail.  See
2718          http://sourceware.org/bugzilla/show_bug.cgi?id=11662.  */
2719       switch (op)
2720         {
2721         case DW_OP_lit0:
2722         case DW_OP_lit1:
2723         case DW_OP_lit2:
2724         case DW_OP_lit3:
2725         case DW_OP_lit4:
2726         case DW_OP_lit5:
2727         case DW_OP_lit6:
2728         case DW_OP_lit7:
2729         case DW_OP_lit8:
2730         case DW_OP_lit9:
2731         case DW_OP_lit10:
2732         case DW_OP_lit11:
2733         case DW_OP_lit12:
2734         case DW_OP_lit13:
2735         case DW_OP_lit14:
2736         case DW_OP_lit15:
2737         case DW_OP_lit16:
2738         case DW_OP_lit17:
2739         case DW_OP_lit18:
2740         case DW_OP_lit19:
2741         case DW_OP_lit20:
2742         case DW_OP_lit21:
2743         case DW_OP_lit22:
2744         case DW_OP_lit23:
2745         case DW_OP_lit24:
2746         case DW_OP_lit25:
2747         case DW_OP_lit26:
2748         case DW_OP_lit27:
2749         case DW_OP_lit28:
2750         case DW_OP_lit29:
2751         case DW_OP_lit30:
2752         case DW_OP_lit31:
2753           ax_const_l (expr, op - DW_OP_lit0);
2754           break;
2755
2756         case DW_OP_addr:
2757           uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
2758           op_ptr += addr_size;
2759           /* Some versions of GCC emit DW_OP_addr before
2760              DW_OP_GNU_push_tls_address.  In this case the value is an
2761              index, not an address.  We don't support things like
2762              branching between the address and the TLS op.  */
2763           if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
2764             uoffset += dwarf2_per_cu_text_offset (per_cu);
2765           ax_const_l (expr, uoffset);
2766           break;
2767
2768         case DW_OP_const1u:
2769           ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
2770           op_ptr += 1;
2771           break;
2772         case DW_OP_const1s:
2773           ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
2774           op_ptr += 1;
2775           break;
2776         case DW_OP_const2u:
2777           ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
2778           op_ptr += 2;
2779           break;
2780         case DW_OP_const2s:
2781           ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
2782           op_ptr += 2;
2783           break;
2784         case DW_OP_const4u:
2785           ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
2786           op_ptr += 4;
2787           break;
2788         case DW_OP_const4s:
2789           ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
2790           op_ptr += 4;
2791           break;
2792         case DW_OP_const8u:
2793           ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
2794           op_ptr += 8;
2795           break;
2796         case DW_OP_const8s:
2797           ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
2798           op_ptr += 8;
2799           break;
2800         case DW_OP_constu:
2801           op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
2802           ax_const_l (expr, uoffset);
2803           break;
2804         case DW_OP_consts:
2805           op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
2806           ax_const_l (expr, offset);
2807           break;
2808
2809         case DW_OP_reg0:
2810         case DW_OP_reg1:
2811         case DW_OP_reg2:
2812         case DW_OP_reg3:
2813         case DW_OP_reg4:
2814         case DW_OP_reg5:
2815         case DW_OP_reg6:
2816         case DW_OP_reg7:
2817         case DW_OP_reg8:
2818         case DW_OP_reg9:
2819         case DW_OP_reg10:
2820         case DW_OP_reg11:
2821         case DW_OP_reg12:
2822         case DW_OP_reg13:
2823         case DW_OP_reg14:
2824         case DW_OP_reg15:
2825         case DW_OP_reg16:
2826         case DW_OP_reg17:
2827         case DW_OP_reg18:
2828         case DW_OP_reg19:
2829         case DW_OP_reg20:
2830         case DW_OP_reg21:
2831         case DW_OP_reg22:
2832         case DW_OP_reg23:
2833         case DW_OP_reg24:
2834         case DW_OP_reg25:
2835         case DW_OP_reg26:
2836         case DW_OP_reg27:
2837         case DW_OP_reg28:
2838         case DW_OP_reg29:
2839         case DW_OP_reg30:
2840         case DW_OP_reg31:
2841           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
2842           loc->u.reg = translate_register (arch, op - DW_OP_reg0);
2843           loc->kind = axs_lvalue_register;
2844           break;
2845
2846         case DW_OP_regx:
2847           op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
2848           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
2849           loc->u.reg = translate_register (arch, reg);
2850           loc->kind = axs_lvalue_register;
2851           break;
2852
2853         case DW_OP_implicit_value:
2854           {
2855             uint64_t len;
2856
2857             op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
2858             if (op_ptr + len > op_end)
2859               error (_("DW_OP_implicit_value: too few bytes available."));
2860             if (len > sizeof (ULONGEST))
2861               error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
2862                      (int) len);
2863
2864             ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
2865                                                         byte_order));
2866             op_ptr += len;
2867             dwarf_expr_require_composition (op_ptr, op_end,
2868                                             "DW_OP_implicit_value");
2869
2870             loc->kind = axs_rvalue;
2871           }
2872           break;
2873
2874         case DW_OP_stack_value:
2875           dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
2876           loc->kind = axs_rvalue;
2877           break;
2878
2879         case DW_OP_breg0:
2880         case DW_OP_breg1:
2881         case DW_OP_breg2:
2882         case DW_OP_breg3:
2883         case DW_OP_breg4:
2884         case DW_OP_breg5:
2885         case DW_OP_breg6:
2886         case DW_OP_breg7:
2887         case DW_OP_breg8:
2888         case DW_OP_breg9:
2889         case DW_OP_breg10:
2890         case DW_OP_breg11:
2891         case DW_OP_breg12:
2892         case DW_OP_breg13:
2893         case DW_OP_breg14:
2894         case DW_OP_breg15:
2895         case DW_OP_breg16:
2896         case DW_OP_breg17:
2897         case DW_OP_breg18:
2898         case DW_OP_breg19:
2899         case DW_OP_breg20:
2900         case DW_OP_breg21:
2901         case DW_OP_breg22:
2902         case DW_OP_breg23:
2903         case DW_OP_breg24:
2904         case DW_OP_breg25:
2905         case DW_OP_breg26:
2906         case DW_OP_breg27:
2907         case DW_OP_breg28:
2908         case DW_OP_breg29:
2909         case DW_OP_breg30:
2910         case DW_OP_breg31:
2911           op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
2912           i = translate_register (arch, op - DW_OP_breg0);
2913           ax_reg (expr, i);
2914           if (offset != 0)
2915             {
2916               ax_const_l (expr, offset);
2917               ax_simple (expr, aop_add);
2918             }
2919           break;
2920         case DW_OP_bregx:
2921           {
2922             op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
2923             op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
2924             i = translate_register (arch, reg);
2925             ax_reg (expr, i);
2926             if (offset != 0)
2927               {
2928                 ax_const_l (expr, offset);
2929                 ax_simple (expr, aop_add);
2930               }
2931           }
2932           break;
2933         case DW_OP_fbreg:
2934           {
2935             const gdb_byte *datastart;
2936             size_t datalen;
2937             struct block *b;
2938             struct symbol *framefunc;
2939
2940             b = block_for_pc (expr->scope);
2941
2942             if (!b)
2943               error (_("No block found for address"));
2944
2945             framefunc = block_linkage_function (b);
2946
2947             if (!framefunc)
2948               error (_("No function found for block"));
2949
2950             dwarf_expr_frame_base_1 (framefunc, expr->scope,
2951                                      &datastart, &datalen);
2952
2953             op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
2954             dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
2955                                        datastart + datalen, per_cu);
2956             if (loc->kind == axs_lvalue_register)
2957               require_rvalue (expr, loc);
2958
2959             if (offset != 0)
2960               {
2961                 ax_const_l (expr, offset);
2962                 ax_simple (expr, aop_add);
2963               }
2964
2965             loc->kind = axs_lvalue_memory;
2966           }
2967           break;
2968
2969         case DW_OP_dup:
2970           ax_simple (expr, aop_dup);
2971           break;
2972
2973         case DW_OP_drop:
2974           ax_simple (expr, aop_pop);
2975           break;
2976
2977         case DW_OP_pick:
2978           offset = *op_ptr++;
2979           ax_pick (expr, offset);
2980           break;
2981           
2982         case DW_OP_swap:
2983           ax_simple (expr, aop_swap);
2984           break;
2985
2986         case DW_OP_over:
2987           ax_pick (expr, 1);
2988           break;
2989
2990         case DW_OP_rot:
2991           ax_simple (expr, aop_rot);
2992           break;
2993
2994         case DW_OP_deref:
2995         case DW_OP_deref_size:
2996           {
2997             int size;
2998
2999             if (op == DW_OP_deref_size)
3000               size = *op_ptr++;
3001             else
3002               size = addr_size;
3003
3004             if (size != 1 && size != 2 && size != 4 && size != 8)
3005               error (_("Unsupported size %d in %s"),
3006                      size, get_DW_OP_name (op));
3007             access_memory (arch, expr, size * TARGET_CHAR_BIT);
3008           }
3009           break;
3010
3011         case DW_OP_abs:
3012           /* Sign extend the operand.  */
3013           ax_ext (expr, addr_size_bits);
3014           ax_simple (expr, aop_dup);
3015           ax_const_l (expr, 0);
3016           ax_simple (expr, aop_less_signed);
3017           ax_simple (expr, aop_log_not);
3018           i = ax_goto (expr, aop_if_goto);
3019           /* We have to emit 0 - X.  */
3020           ax_const_l (expr, 0);
3021           ax_simple (expr, aop_swap);
3022           ax_simple (expr, aop_sub);
3023           ax_label (expr, i, expr->len);
3024           break;
3025
3026         case DW_OP_neg:
3027           /* No need to sign extend here.  */
3028           ax_const_l (expr, 0);
3029           ax_simple (expr, aop_swap);
3030           ax_simple (expr, aop_sub);
3031           break;
3032
3033         case DW_OP_not:
3034           /* Sign extend the operand.  */
3035           ax_ext (expr, addr_size_bits);
3036           ax_simple (expr, aop_bit_not);
3037           break;
3038
3039         case DW_OP_plus_uconst:
3040           op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3041           /* It would be really weird to emit `DW_OP_plus_uconst 0',
3042              but we micro-optimize anyhow.  */
3043           if (reg != 0)
3044             {
3045               ax_const_l (expr, reg);
3046               ax_simple (expr, aop_add);
3047             }
3048           break;
3049
3050         case DW_OP_and:
3051           ax_simple (expr, aop_bit_and);
3052           break;
3053
3054         case DW_OP_div:
3055           /* Sign extend the operands.  */
3056           ax_ext (expr, addr_size_bits);
3057           ax_simple (expr, aop_swap);
3058           ax_ext (expr, addr_size_bits);
3059           ax_simple (expr, aop_swap);
3060           ax_simple (expr, aop_div_signed);
3061           break;
3062
3063         case DW_OP_minus:
3064           ax_simple (expr, aop_sub);
3065           break;
3066
3067         case DW_OP_mod:
3068           ax_simple (expr, aop_rem_unsigned);
3069           break;
3070
3071         case DW_OP_mul:
3072           ax_simple (expr, aop_mul);
3073           break;
3074
3075         case DW_OP_or:
3076           ax_simple (expr, aop_bit_or);
3077           break;
3078
3079         case DW_OP_plus:
3080           ax_simple (expr, aop_add);
3081           break;
3082
3083         case DW_OP_shl:
3084           ax_simple (expr, aop_lsh);
3085           break;
3086
3087         case DW_OP_shr:
3088           ax_simple (expr, aop_rsh_unsigned);
3089           break;
3090
3091         case DW_OP_shra:
3092           ax_simple (expr, aop_rsh_signed);
3093           break;
3094
3095         case DW_OP_xor:
3096           ax_simple (expr, aop_bit_xor);
3097           break;
3098
3099         case DW_OP_le:
3100           /* Sign extend the operands.  */
3101           ax_ext (expr, addr_size_bits);
3102           ax_simple (expr, aop_swap);
3103           ax_ext (expr, addr_size_bits);
3104           /* Note no swap here: A <= B is !(B < A).  */
3105           ax_simple (expr, aop_less_signed);
3106           ax_simple (expr, aop_log_not);
3107           break;
3108
3109         case DW_OP_ge:
3110           /* Sign extend the operands.  */
3111           ax_ext (expr, addr_size_bits);
3112           ax_simple (expr, aop_swap);
3113           ax_ext (expr, addr_size_bits);
3114           ax_simple (expr, aop_swap);
3115           /* A >= B is !(A < B).  */
3116           ax_simple (expr, aop_less_signed);
3117           ax_simple (expr, aop_log_not);
3118           break;
3119
3120         case DW_OP_eq:
3121           /* Sign extend the operands.  */
3122           ax_ext (expr, addr_size_bits);
3123           ax_simple (expr, aop_swap);
3124           ax_ext (expr, addr_size_bits);
3125           /* No need for a second swap here.  */
3126           ax_simple (expr, aop_equal);
3127           break;
3128
3129         case DW_OP_lt:
3130           /* Sign extend the operands.  */
3131           ax_ext (expr, addr_size_bits);
3132           ax_simple (expr, aop_swap);
3133           ax_ext (expr, addr_size_bits);
3134           ax_simple (expr, aop_swap);
3135           ax_simple (expr, aop_less_signed);
3136           break;
3137
3138         case DW_OP_gt:
3139           /* Sign extend the operands.  */
3140           ax_ext (expr, addr_size_bits);
3141           ax_simple (expr, aop_swap);
3142           ax_ext (expr, addr_size_bits);
3143           /* Note no swap here: A > B is B < A.  */
3144           ax_simple (expr, aop_less_signed);
3145           break;
3146
3147         case DW_OP_ne:
3148           /* Sign extend the operands.  */
3149           ax_ext (expr, addr_size_bits);
3150           ax_simple (expr, aop_swap);
3151           ax_ext (expr, addr_size_bits);
3152           /* No need for a swap here.  */
3153           ax_simple (expr, aop_equal);
3154           ax_simple (expr, aop_log_not);
3155           break;
3156
3157         case DW_OP_call_frame_cfa:
3158           dwarf2_compile_cfa_to_ax (expr, loc, arch, expr->scope, per_cu);
3159           loc->kind = axs_lvalue_memory;
3160           break;
3161
3162         case DW_OP_GNU_push_tls_address:
3163           unimplemented (op);
3164           break;
3165
3166         case DW_OP_skip:
3167           offset = extract_signed_integer (op_ptr, 2, byte_order);
3168           op_ptr += 2;
3169           i = ax_goto (expr, aop_goto);
3170           VEC_safe_push (int, dw_labels, op_ptr + offset - base);
3171           VEC_safe_push (int, patches, i);
3172           break;
3173
3174         case DW_OP_bra:
3175           offset = extract_signed_integer (op_ptr, 2, byte_order);
3176           op_ptr += 2;
3177           /* Zero extend the operand.  */
3178           ax_zero_ext (expr, addr_size_bits);
3179           i = ax_goto (expr, aop_if_goto);
3180           VEC_safe_push (int, dw_labels, op_ptr + offset - base);
3181           VEC_safe_push (int, patches, i);
3182           break;
3183
3184         case DW_OP_nop:
3185           break;
3186
3187         case DW_OP_piece:
3188         case DW_OP_bit_piece:
3189           {
3190             uint64_t size, offset;
3191
3192             if (op_ptr - 1 == previous_piece)
3193               error (_("Cannot translate empty pieces to agent expressions"));
3194             previous_piece = op_ptr - 1;
3195
3196             op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
3197             if (op == DW_OP_piece)
3198               {
3199                 size *= 8;
3200                 offset = 0;
3201               }
3202             else
3203               op_ptr = safe_read_uleb128 (op_ptr, op_end, &offset);
3204
3205             if (bits_collected + size > 8 * sizeof (LONGEST))
3206               error (_("Expression pieces exceed word size"));
3207
3208             /* Access the bits.  */
3209             switch (loc->kind)
3210               {
3211               case axs_lvalue_register:
3212                 ax_reg (expr, loc->u.reg);
3213                 break;
3214
3215               case axs_lvalue_memory:
3216                 /* Offset the pointer, if needed.  */
3217                 if (offset > 8)
3218                   {
3219                     ax_const_l (expr, offset / 8);
3220                     ax_simple (expr, aop_add);
3221                     offset %= 8;
3222                   }
3223                 access_memory (arch, expr, size);
3224                 break;
3225               }
3226
3227             /* For a bits-big-endian target, shift up what we already
3228                have.  For a bits-little-endian target, shift up the
3229                new data.  Note that there is a potential bug here if
3230                the DWARF expression leaves multiple values on the
3231                stack.  */
3232             if (bits_collected > 0)
3233               {
3234                 if (bits_big_endian)
3235                   {
3236                     ax_simple (expr, aop_swap);
3237                     ax_const_l (expr, size);
3238                     ax_simple (expr, aop_lsh);
3239                     /* We don't need a second swap here, because
3240                        aop_bit_or is symmetric.  */
3241                   }
3242                 else
3243                   {
3244                     ax_const_l (expr, size);
3245                     ax_simple (expr, aop_lsh);
3246                   }
3247                 ax_simple (expr, aop_bit_or);
3248               }
3249
3250             bits_collected += size;
3251             loc->kind = axs_rvalue;
3252           }
3253           break;
3254
3255         case DW_OP_GNU_uninit:
3256           unimplemented (op);
3257
3258         case DW_OP_call2:
3259         case DW_OP_call4:
3260           {
3261             struct dwarf2_locexpr_baton block;
3262             int size = (op == DW_OP_call2 ? 2 : 4);
3263             cu_offset offset;
3264
3265             uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
3266             op_ptr += size;
3267
3268             offset.cu_off = uoffset;
3269             block = dwarf2_fetch_die_loc_cu_off (offset, per_cu,
3270                                                  get_ax_pc, expr);
3271
3272             /* DW_OP_call_ref is currently not supported.  */
3273             gdb_assert (block.per_cu == per_cu);
3274
3275             dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size,
3276                                        block.data, block.data + block.size,
3277                                        per_cu);
3278           }
3279           break;
3280
3281         case DW_OP_call_ref:
3282           unimplemented (op);
3283
3284         default:
3285           unimplemented (op);
3286         }
3287     }
3288
3289   /* Patch all the branches we emitted.  */
3290   for (i = 0; i < VEC_length (int, patches); ++i)
3291     {
3292       int targ = offsets[VEC_index (int, dw_labels, i)];
3293       if (targ == -1)
3294         internal_error (__FILE__, __LINE__, _("invalid label"));
3295       ax_label (expr, VEC_index (int, patches, i), targ);
3296     }
3297
3298   do_cleanups (cleanups);
3299 }
3300
3301 \f
3302 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3303    evaluator to calculate the location.  */
3304 static struct value *
3305 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
3306 {
3307   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3308   struct value *val;
3309
3310   val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3311                                   dlbaton->size, dlbaton->per_cu);
3312
3313   return val;
3314 }
3315
3316 /* Return the value of SYMBOL in FRAME at (callee) FRAME's function
3317    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3318    will be thrown.  */
3319
3320 static struct value *
3321 locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
3322 {
3323   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3324
3325   return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3326                                      dlbaton->size);
3327 }
3328
3329 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
3330 static int
3331 locexpr_read_needs_frame (struct symbol *symbol)
3332 {
3333   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3334
3335   return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
3336                                       dlbaton->per_cu);
3337 }
3338
3339 /* Return true if DATA points to the end of a piece.  END is one past
3340    the last byte in the expression.  */
3341
3342 static int
3343 piece_end_p (const gdb_byte *data, const gdb_byte *end)
3344 {
3345   return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
3346 }
3347
3348 /* Helper for locexpr_describe_location_piece that finds the name of a
3349    DWARF register.  */
3350
3351 static const char *
3352 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
3353 {
3354   int regnum;
3355
3356   regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
3357   return gdbarch_register_name (gdbarch, regnum);
3358 }
3359
3360 /* Nicely describe a single piece of a location, returning an updated
3361    position in the bytecode sequence.  This function cannot recognize
3362    all locations; if a location is not recognized, it simply returns
3363    DATA.  If there is an error during reading, e.g. we run off the end
3364    of the buffer, an error is thrown.  */
3365
3366 static const gdb_byte *
3367 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
3368                                  CORE_ADDR addr, struct objfile *objfile,
3369                                  struct dwarf2_per_cu_data *per_cu,
3370                                  const gdb_byte *data, const gdb_byte *end,
3371                                  unsigned int addr_size)
3372 {
3373   struct gdbarch *gdbarch = get_objfile_arch (objfile);
3374   size_t leb128_size;
3375
3376   if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
3377     {
3378       fprintf_filtered (stream, _("a variable in $%s"),
3379                         locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
3380       data += 1;
3381     }
3382   else if (data[0] == DW_OP_regx)
3383     {
3384       uint64_t reg;
3385
3386       data = safe_read_uleb128 (data + 1, end, &reg);
3387       fprintf_filtered (stream, _("a variable in $%s"),
3388                         locexpr_regname (gdbarch, reg));
3389     }
3390   else if (data[0] == DW_OP_fbreg)
3391     {
3392       struct block *b;
3393       struct symbol *framefunc;
3394       int frame_reg = 0;
3395       int64_t frame_offset;
3396       const gdb_byte *base_data, *new_data, *save_data = data;
3397       size_t base_size;
3398       int64_t base_offset = 0;
3399
3400       new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
3401       if (!piece_end_p (new_data, end))
3402         return data;
3403       data = new_data;
3404
3405       b = block_for_pc (addr);
3406
3407       if (!b)
3408         error (_("No block found for address for symbol \"%s\"."),
3409                SYMBOL_PRINT_NAME (symbol));
3410
3411       framefunc = block_linkage_function (b);
3412
3413       if (!framefunc)
3414         error (_("No function found for block for symbol \"%s\"."),
3415                SYMBOL_PRINT_NAME (symbol));
3416
3417       dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
3418
3419       if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
3420         {
3421           const gdb_byte *buf_end;
3422           
3423           frame_reg = base_data[0] - DW_OP_breg0;
3424           buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
3425                                        &base_offset);
3426           if (buf_end != base_data + base_size)
3427             error (_("Unexpected opcode after "
3428                      "DW_OP_breg%u for symbol \"%s\"."),
3429                    frame_reg, SYMBOL_PRINT_NAME (symbol));
3430         }
3431       else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
3432         {
3433           /* The frame base is just the register, with no offset.  */
3434           frame_reg = base_data[0] - DW_OP_reg0;
3435           base_offset = 0;
3436         }
3437       else
3438         {
3439           /* We don't know what to do with the frame base expression,
3440              so we can't trace this variable; give up.  */
3441           return save_data;
3442         }
3443
3444       fprintf_filtered (stream,
3445                         _("a variable at frame base reg $%s offset %s+%s"),
3446                         locexpr_regname (gdbarch, frame_reg),
3447                         plongest (base_offset), plongest (frame_offset));
3448     }
3449   else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
3450            && piece_end_p (data, end))
3451     {
3452       int64_t offset;
3453
3454       data = safe_read_sleb128 (data + 1, end, &offset);
3455
3456       fprintf_filtered (stream,
3457                         _("a variable at offset %s from base reg $%s"),
3458                         plongest (offset),
3459                         locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
3460     }
3461
3462   /* The location expression for a TLS variable looks like this (on a
3463      64-bit LE machine):
3464
3465      DW_AT_location    : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
3466                         (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
3467
3468      0x3 is the encoding for DW_OP_addr, which has an operand as long
3469      as the size of an address on the target machine (here is 8
3470      bytes).  Note that more recent version of GCC emit DW_OP_const4u
3471      or DW_OP_const8u, depending on address size, rather than
3472      DW_OP_addr.  0xe0 is the encoding for DW_OP_GNU_push_tls_address.
3473      The operand represents the offset at which the variable is within
3474      the thread local storage.  */
3475
3476   else if (data + 1 + addr_size < end
3477            && (data[0] == DW_OP_addr
3478                || (addr_size == 4 && data[0] == DW_OP_const4u)
3479                || (addr_size == 8 && data[0] == DW_OP_const8u))
3480            && data[1 + addr_size] == DW_OP_GNU_push_tls_address
3481            && piece_end_p (data + 2 + addr_size, end))
3482     {
3483       ULONGEST offset;
3484       offset = extract_unsigned_integer (data + 1, addr_size,
3485                                          gdbarch_byte_order (gdbarch));
3486
3487       fprintf_filtered (stream, 
3488                         _("a thread-local variable at offset 0x%s "
3489                           "in the thread-local storage for `%s'"),
3490                         phex_nz (offset, addr_size), objfile_name (objfile));
3491
3492       data += 1 + addr_size + 1;
3493     }
3494
3495   /* With -gsplit-dwarf a TLS variable can also look like this:
3496      DW_AT_location    : 3 byte block: fc 4 e0
3497                         (DW_OP_GNU_const_index: 4;
3498                          DW_OP_GNU_push_tls_address)  */
3499   else if (data + 3 <= end
3500            && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
3501            && data[0] == DW_OP_GNU_const_index
3502            && leb128_size > 0
3503            && data[1 + leb128_size] == DW_OP_GNU_push_tls_address
3504            && piece_end_p (data + 2 + leb128_size, end))
3505     {
3506       uint64_t offset;
3507
3508       data = safe_read_uleb128 (data + 1, end, &offset);
3509       offset = dwarf2_read_addr_index (per_cu, offset);
3510       fprintf_filtered (stream, 
3511                         _("a thread-local variable at offset 0x%s "
3512                           "in the thread-local storage for `%s'"),
3513                         phex_nz (offset, addr_size), objfile_name (objfile));
3514       ++data;
3515     }
3516
3517   else if (data[0] >= DW_OP_lit0
3518            && data[0] <= DW_OP_lit31
3519            && data + 1 < end
3520            && data[1] == DW_OP_stack_value)
3521     {
3522       fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
3523       data += 2;
3524     }
3525
3526   return data;
3527 }
3528
3529 /* Disassemble an expression, stopping at the end of a piece or at the
3530    end of the expression.  Returns a pointer to the next unread byte
3531    in the input expression.  If ALL is nonzero, then this function
3532    will keep going until it reaches the end of the expression.
3533    If there is an error during reading, e.g. we run off the end
3534    of the buffer, an error is thrown.  */
3535
3536 static const gdb_byte *
3537 disassemble_dwarf_expression (struct ui_file *stream,
3538                               struct gdbarch *arch, unsigned int addr_size,
3539                               int offset_size, const gdb_byte *start,
3540                               const gdb_byte *data, const gdb_byte *end,
3541                               int indent, int all,
3542                               struct dwarf2_per_cu_data *per_cu)
3543 {
3544   while (data < end
3545          && (all
3546              || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
3547     {
3548       enum dwarf_location_atom op = *data++;
3549       uint64_t ul;
3550       int64_t l;
3551       const char *name;
3552
3553       name = get_DW_OP_name (op);
3554
3555       if (!name)
3556         error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
3557                op, (long) (data - 1 - start));
3558       fprintf_filtered (stream, "  %*ld: %s", indent + 4,
3559                         (long) (data - 1 - start), name);
3560
3561       switch (op)
3562         {
3563         case DW_OP_addr:
3564           ul = extract_unsigned_integer (data, addr_size,
3565                                          gdbarch_byte_order (arch));
3566           data += addr_size;
3567           fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
3568           break;
3569
3570         case DW_OP_const1u:
3571           ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
3572           data += 1;
3573           fprintf_filtered (stream, " %s", pulongest (ul));
3574           break;
3575         case DW_OP_const1s:
3576           l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
3577           data += 1;
3578           fprintf_filtered (stream, " %s", plongest (l));
3579           break;
3580         case DW_OP_const2u:
3581           ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3582           data += 2;
3583           fprintf_filtered (stream, " %s", pulongest (ul));
3584           break;
3585         case DW_OP_const2s:
3586           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3587           data += 2;
3588           fprintf_filtered (stream, " %s", plongest (l));
3589           break;
3590         case DW_OP_const4u:
3591           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3592           data += 4;
3593           fprintf_filtered (stream, " %s", pulongest (ul));
3594           break;
3595         case DW_OP_const4s:
3596           l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
3597           data += 4;
3598           fprintf_filtered (stream, " %s", plongest (l));
3599           break;
3600         case DW_OP_const8u:
3601           ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
3602           data += 8;
3603           fprintf_filtered (stream, " %s", pulongest (ul));
3604           break;
3605         case DW_OP_const8s:
3606           l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
3607           data += 8;
3608           fprintf_filtered (stream, " %s", plongest (l));
3609           break;
3610         case DW_OP_constu:
3611           data = safe_read_uleb128 (data, end, &ul);
3612           fprintf_filtered (stream, " %s", pulongest (ul));
3613           break;
3614         case DW_OP_consts:
3615           data = safe_read_sleb128 (data, end, &l);
3616           fprintf_filtered (stream, " %s", plongest (l));
3617           break;
3618
3619         case DW_OP_reg0:
3620         case DW_OP_reg1:
3621         case DW_OP_reg2:
3622         case DW_OP_reg3:
3623         case DW_OP_reg4:
3624         case DW_OP_reg5:
3625         case DW_OP_reg6:
3626         case DW_OP_reg7:
3627         case DW_OP_reg8:
3628         case DW_OP_reg9:
3629         case DW_OP_reg10:
3630         case DW_OP_reg11:
3631         case DW_OP_reg12:
3632         case DW_OP_reg13:
3633         case DW_OP_reg14:
3634         case DW_OP_reg15:
3635         case DW_OP_reg16:
3636         case DW_OP_reg17:
3637         case DW_OP_reg18:
3638         case DW_OP_reg19:
3639         case DW_OP_reg20:
3640         case DW_OP_reg21:
3641         case DW_OP_reg22:
3642         case DW_OP_reg23:
3643         case DW_OP_reg24:
3644         case DW_OP_reg25:
3645         case DW_OP_reg26:
3646         case DW_OP_reg27:
3647         case DW_OP_reg28:
3648         case DW_OP_reg29:
3649         case DW_OP_reg30:
3650         case DW_OP_reg31:
3651           fprintf_filtered (stream, " [$%s]",
3652                             locexpr_regname (arch, op - DW_OP_reg0));
3653           break;
3654
3655         case DW_OP_regx:
3656           data = safe_read_uleb128 (data, end, &ul);
3657           fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
3658                             locexpr_regname (arch, (int) ul));
3659           break;
3660
3661         case DW_OP_implicit_value:
3662           data = safe_read_uleb128 (data, end, &ul);
3663           data += ul;
3664           fprintf_filtered (stream, " %s", pulongest (ul));
3665           break;
3666
3667         case DW_OP_breg0:
3668         case DW_OP_breg1:
3669         case DW_OP_breg2:
3670         case DW_OP_breg3:
3671         case DW_OP_breg4:
3672         case DW_OP_breg5:
3673         case DW_OP_breg6:
3674         case DW_OP_breg7:
3675         case DW_OP_breg8:
3676         case DW_OP_breg9:
3677         case DW_OP_breg10:
3678         case DW_OP_breg11:
3679         case DW_OP_breg12:
3680         case DW_OP_breg13:
3681         case DW_OP_breg14:
3682         case DW_OP_breg15:
3683         case DW_OP_breg16:
3684         case DW_OP_breg17:
3685         case DW_OP_breg18:
3686         case DW_OP_breg19:
3687         case DW_OP_breg20:
3688         case DW_OP_breg21:
3689         case DW_OP_breg22:
3690         case DW_OP_breg23:
3691         case DW_OP_breg24:
3692         case DW_OP_breg25:
3693         case DW_OP_breg26:
3694         case DW_OP_breg27:
3695         case DW_OP_breg28:
3696         case DW_OP_breg29:
3697         case DW_OP_breg30:
3698         case DW_OP_breg31:
3699           data = safe_read_sleb128 (data, end, &l);
3700           fprintf_filtered (stream, " %s [$%s]", plongest (l),
3701                             locexpr_regname (arch, op - DW_OP_breg0));
3702           break;
3703
3704         case DW_OP_bregx:
3705           data = safe_read_uleb128 (data, end, &ul);
3706           data = safe_read_sleb128 (data, end, &l);
3707           fprintf_filtered (stream, " register %s [$%s] offset %s",
3708                             pulongest (ul),
3709                             locexpr_regname (arch, (int) ul),
3710                             plongest (l));
3711           break;
3712
3713         case DW_OP_fbreg:
3714           data = safe_read_sleb128 (data, end, &l);
3715           fprintf_filtered (stream, " %s", plongest (l));
3716           break;
3717
3718         case DW_OP_xderef_size:
3719         case DW_OP_deref_size:
3720         case DW_OP_pick:
3721           fprintf_filtered (stream, " %d", *data);
3722           ++data;
3723           break;
3724
3725         case DW_OP_plus_uconst:
3726           data = safe_read_uleb128 (data, end, &ul);
3727           fprintf_filtered (stream, " %s", pulongest (ul));
3728           break;
3729
3730         case DW_OP_skip:
3731           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3732           data += 2;
3733           fprintf_filtered (stream, " to %ld",
3734                             (long) (data + l - start));
3735           break;
3736
3737         case DW_OP_bra:
3738           l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3739           data += 2;
3740           fprintf_filtered (stream, " %ld",
3741                             (long) (data + l - start));
3742           break;
3743
3744         case DW_OP_call2:
3745           ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3746           data += 2;
3747           fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
3748           break;
3749
3750         case DW_OP_call4:
3751           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3752           data += 4;
3753           fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
3754           break;
3755
3756         case DW_OP_call_ref:
3757           ul = extract_unsigned_integer (data, offset_size,
3758                                          gdbarch_byte_order (arch));
3759           data += offset_size;
3760           fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
3761           break;
3762
3763         case DW_OP_piece:
3764           data = safe_read_uleb128 (data, end, &ul);
3765           fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
3766           break;
3767
3768         case DW_OP_bit_piece:
3769           {
3770             uint64_t offset;
3771
3772             data = safe_read_uleb128 (data, end, &ul);
3773             data = safe_read_uleb128 (data, end, &offset);
3774             fprintf_filtered (stream, " size %s offset %s (bits)",
3775                               pulongest (ul), pulongest (offset));
3776           }
3777           break;
3778
3779         case DW_OP_GNU_implicit_pointer:
3780           {
3781             ul = extract_unsigned_integer (data, offset_size,
3782                                            gdbarch_byte_order (arch));
3783             data += offset_size;
3784
3785             data = safe_read_sleb128 (data, end, &l);
3786
3787             fprintf_filtered (stream, " DIE %s offset %s",
3788                               phex_nz (ul, offset_size),
3789                               plongest (l));
3790           }
3791           break;
3792
3793         case DW_OP_GNU_deref_type:
3794           {
3795             int addr_size = *data++;
3796             cu_offset offset;
3797             struct type *type;
3798
3799             data = safe_read_uleb128 (data, end, &ul);
3800             offset.cu_off = ul;
3801             type = dwarf2_get_die_type (offset, per_cu);
3802             fprintf_filtered (stream, "<");
3803             type_print (type, "", stream, -1);
3804             fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset.cu_off, 0),
3805                               addr_size);
3806           }
3807           break;
3808
3809         case DW_OP_GNU_const_type:
3810           {
3811             cu_offset type_die;
3812             struct type *type;
3813
3814             data = safe_read_uleb128 (data, end, &ul);
3815             type_die.cu_off = ul;
3816             type = dwarf2_get_die_type (type_die, per_cu);
3817             fprintf_filtered (stream, "<");
3818             type_print (type, "", stream, -1);
3819             fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
3820           }
3821           break;
3822
3823         case DW_OP_GNU_regval_type:
3824           {
3825             uint64_t reg;
3826             cu_offset type_die;
3827             struct type *type;
3828
3829             data = safe_read_uleb128 (data, end, &reg);
3830             data = safe_read_uleb128 (data, end, &ul);
3831             type_die.cu_off = ul;
3832
3833             type = dwarf2_get_die_type (type_die, per_cu);
3834             fprintf_filtered (stream, "<");
3835             type_print (type, "", stream, -1);
3836             fprintf_filtered (stream, " [0x%s]> [$%s]",
3837                               phex_nz (type_die.cu_off, 0),
3838                               locexpr_regname (arch, reg));
3839           }
3840           break;
3841
3842         case DW_OP_GNU_convert:
3843         case DW_OP_GNU_reinterpret:
3844           {
3845             cu_offset type_die;
3846
3847             data = safe_read_uleb128 (data, end, &ul);
3848             type_die.cu_off = ul;
3849
3850             if (type_die.cu_off == 0)
3851               fprintf_filtered (stream, "<0>");
3852             else
3853               {
3854                 struct type *type;
3855
3856                 type = dwarf2_get_die_type (type_die, per_cu);
3857                 fprintf_filtered (stream, "<");
3858                 type_print (type, "", stream, -1);
3859                 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
3860               }
3861           }
3862           break;
3863
3864         case DW_OP_GNU_entry_value:
3865           data = safe_read_uleb128 (data, end, &ul);
3866           fputc_filtered ('\n', stream);
3867           disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
3868                                         start, data, data + ul, indent + 2,
3869                                         all, per_cu);
3870           data += ul;
3871           continue;
3872
3873         case DW_OP_GNU_parameter_ref:
3874           ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3875           data += 4;
3876           fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
3877           break;
3878
3879         case DW_OP_GNU_addr_index:
3880           data = safe_read_uleb128 (data, end, &ul);
3881           ul = dwarf2_read_addr_index (per_cu, ul);
3882           fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
3883           break;
3884         case DW_OP_GNU_const_index:
3885           data = safe_read_uleb128 (data, end, &ul);
3886           ul = dwarf2_read_addr_index (per_cu, ul);
3887           fprintf_filtered (stream, " %s", pulongest (ul));
3888           break;
3889         }
3890
3891       fprintf_filtered (stream, "\n");
3892     }
3893
3894   return data;
3895 }
3896
3897 /* Describe a single location, which may in turn consist of multiple
3898    pieces.  */
3899
3900 static void
3901 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
3902                              struct ui_file *stream,
3903                              const gdb_byte *data, size_t size,
3904                              struct objfile *objfile, unsigned int addr_size,
3905                              int offset_size, struct dwarf2_per_cu_data *per_cu)
3906 {
3907   const gdb_byte *end = data + size;
3908   int first_piece = 1, bad = 0;
3909
3910   while (data < end)
3911     {
3912       const gdb_byte *here = data;
3913       int disassemble = 1;
3914
3915       if (first_piece)
3916         first_piece = 0;
3917       else
3918         fprintf_filtered (stream, _(", and "));
3919
3920       if (!dwarf2_always_disassemble)
3921         {
3922           data = locexpr_describe_location_piece (symbol, stream,
3923                                                   addr, objfile, per_cu,
3924                                                   data, end, addr_size);
3925           /* If we printed anything, or if we have an empty piece,
3926              then don't disassemble.  */
3927           if (data != here
3928               || data[0] == DW_OP_piece
3929               || data[0] == DW_OP_bit_piece)
3930             disassemble = 0;
3931         }
3932       if (disassemble)
3933         {
3934           fprintf_filtered (stream, _("a complex DWARF expression:\n"));
3935           data = disassemble_dwarf_expression (stream,
3936                                                get_objfile_arch (objfile),
3937                                                addr_size, offset_size, data,
3938                                                data, end, 0,
3939                                                dwarf2_always_disassemble,
3940                                                per_cu);
3941         }
3942
3943       if (data < end)
3944         {
3945           int empty = data == here;
3946               
3947           if (disassemble)
3948             fprintf_filtered (stream, "   ");
3949           if (data[0] == DW_OP_piece)
3950             {
3951               uint64_t bytes;
3952
3953               data = safe_read_uleb128 (data + 1, end, &bytes);
3954
3955               if (empty)
3956                 fprintf_filtered (stream, _("an empty %s-byte piece"),
3957                                   pulongest (bytes));
3958               else
3959                 fprintf_filtered (stream, _(" [%s-byte piece]"),
3960                                   pulongest (bytes));
3961             }
3962           else if (data[0] == DW_OP_bit_piece)
3963             {
3964               uint64_t bits, offset;
3965
3966               data = safe_read_uleb128 (data + 1, end, &bits);
3967               data = safe_read_uleb128 (data, end, &offset);
3968
3969               if (empty)
3970                 fprintf_filtered (stream,
3971                                   _("an empty %s-bit piece"),
3972                                   pulongest (bits));
3973               else
3974                 fprintf_filtered (stream,
3975                                   _(" [%s-bit piece, offset %s bits]"),
3976                                   pulongest (bits), pulongest (offset));
3977             }
3978           else
3979             {
3980               bad = 1;
3981               break;
3982             }
3983         }
3984     }
3985
3986   if (bad || data > end)
3987     error (_("Corrupted DWARF2 expression for \"%s\"."),
3988            SYMBOL_PRINT_NAME (symbol));
3989 }
3990
3991 /* Print a natural-language description of SYMBOL to STREAM.  This
3992    version is for a symbol with a single location.  */
3993
3994 static void
3995 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
3996                            struct ui_file *stream)
3997 {
3998   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
3999   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
4000   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4001   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
4002
4003   locexpr_describe_location_1 (symbol, addr, stream,
4004                                dlbaton->data, dlbaton->size,
4005                                objfile, addr_size, offset_size,
4006                                dlbaton->per_cu);
4007 }
4008
4009 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4010    any necessary bytecode in AX.  */
4011
4012 static void
4013 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
4014                             struct agent_expr *ax, struct axs_value *value)
4015 {
4016   struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4017   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4018
4019   if (dlbaton->size == 0)
4020     value->optimized_out = 1;
4021   else
4022     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size,
4023                                dlbaton->data, dlbaton->data + dlbaton->size,
4024                                dlbaton->per_cu);
4025 }
4026
4027 /* The set of location functions used with the DWARF-2 expression
4028    evaluator.  */
4029 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
4030   locexpr_read_variable,
4031   locexpr_read_variable_at_entry,
4032   locexpr_read_needs_frame,
4033   locexpr_describe_location,
4034   0,    /* location_has_loclist */
4035   locexpr_tracepoint_var_ref
4036 };
4037
4038
4039 /* Wrapper functions for location lists.  These generally find
4040    the appropriate location expression and call something above.  */
4041
4042 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
4043    evaluator to calculate the location.  */
4044 static struct value *
4045 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
4046 {
4047   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4048   struct value *val;
4049   const gdb_byte *data;
4050   size_t size;
4051   CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
4052
4053   data = dwarf2_find_location_expression (dlbaton, &size, pc);
4054   val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
4055                                   dlbaton->per_cu);
4056
4057   return val;
4058 }
4059
4060 /* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
4061    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
4062    will be thrown.
4063
4064    Function always returns non-NULL value, it may be marked optimized out if
4065    inferior frame information is not available.  It throws NO_ENTRY_VALUE_ERROR
4066    if it cannot resolve the parameter for any reason.  */
4067
4068 static struct value *
4069 loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
4070 {
4071   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4072   const gdb_byte *data;
4073   size_t size;
4074   CORE_ADDR pc;
4075
4076   if (frame == NULL || !get_frame_func_if_available (frame, &pc))
4077     return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4078
4079   data = dwarf2_find_location_expression (dlbaton, &size, pc);
4080   if (data == NULL)
4081     return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4082
4083   return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
4084 }
4085
4086 /* Return non-zero iff we need a frame to evaluate SYMBOL.  */
4087 static int
4088 loclist_read_needs_frame (struct symbol *symbol)
4089 {
4090   /* If there's a location list, then assume we need to have a frame
4091      to choose the appropriate location expression.  With tracking of
4092      global variables this is not necessarily true, but such tracking
4093      is disabled in GCC at the moment until we figure out how to
4094      represent it.  */
4095
4096   return 1;
4097 }
4098
4099 /* Print a natural-language description of SYMBOL to STREAM.  This
4100    version applies when there is a list of different locations, each
4101    with a specified address range.  */
4102
4103 static void
4104 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
4105                            struct ui_file *stream)
4106 {
4107   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4108   const gdb_byte *loc_ptr, *buf_end;
4109   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
4110   struct gdbarch *gdbarch = get_objfile_arch (objfile);
4111   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4112   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4113   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
4114   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
4115   /* Adjust base_address for relocatable objects.  */
4116   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
4117   CORE_ADDR base_address = dlbaton->base_address + base_offset;
4118   int done = 0;
4119
4120   loc_ptr = dlbaton->data;
4121   buf_end = dlbaton->data + dlbaton->size;
4122
4123   fprintf_filtered (stream, _("multi-location:\n"));
4124
4125   /* Iterate through locations until we run out.  */
4126   while (!done)
4127     {
4128       CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
4129       int length;
4130       enum debug_loc_kind kind;
4131       const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
4132
4133       if (dlbaton->from_dwo)
4134         kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
4135                                                loc_ptr, buf_end, &new_ptr,
4136                                                &low, &high, byte_order);
4137       else
4138         kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
4139                                            &low, &high,
4140                                            byte_order, addr_size,
4141                                            signed_addr_p);
4142       loc_ptr = new_ptr;
4143       switch (kind)
4144         {
4145         case DEBUG_LOC_END_OF_LIST:
4146           done = 1;
4147           continue;
4148         case DEBUG_LOC_BASE_ADDRESS:
4149           base_address = high + base_offset;
4150           fprintf_filtered (stream, _("  Base address %s"),
4151                             paddress (gdbarch, base_address));
4152           continue;
4153         case DEBUG_LOC_START_END:
4154         case DEBUG_LOC_START_LENGTH:
4155           break;
4156         case DEBUG_LOC_BUFFER_OVERFLOW:
4157         case DEBUG_LOC_INVALID_ENTRY:
4158           error (_("Corrupted DWARF expression for symbol \"%s\"."),
4159                  SYMBOL_PRINT_NAME (symbol));
4160         default:
4161           gdb_assert_not_reached ("bad debug_loc_kind");
4162         }
4163
4164       /* Otherwise, a location expression entry.  */
4165       low += base_address;
4166       high += base_address;
4167
4168       length = extract_unsigned_integer (loc_ptr, 2, byte_order);
4169       loc_ptr += 2;
4170
4171       /* (It would improve readability to print only the minimum
4172          necessary digits of the second number of the range.)  */
4173       fprintf_filtered (stream, _("  Range %s-%s: "),
4174                         paddress (gdbarch, low), paddress (gdbarch, high));
4175
4176       /* Now describe this particular location.  */
4177       locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
4178                                    objfile, addr_size, offset_size,
4179                                    dlbaton->per_cu);
4180
4181       fprintf_filtered (stream, "\n");
4182
4183       loc_ptr += length;
4184     }
4185 }
4186
4187 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4188    any necessary bytecode in AX.  */
4189 static void
4190 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
4191                             struct agent_expr *ax, struct axs_value *value)
4192 {
4193   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
4194   const gdb_byte *data;
4195   size_t size;
4196   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
4197
4198   data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
4199   if (size == 0)
4200     value->optimized_out = 1;
4201   else
4202     dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size, data, data + size,
4203                                dlbaton->per_cu);
4204 }
4205
4206 /* The set of location functions used with the DWARF-2 expression
4207    evaluator and location lists.  */
4208 const struct symbol_computed_ops dwarf2_loclist_funcs = {
4209   loclist_read_variable,
4210   loclist_read_variable_at_entry,
4211   loclist_read_needs_frame,
4212   loclist_describe_location,
4213   1,    /* location_has_loclist */
4214   loclist_tracepoint_var_ref
4215 };
4216
4217 /* Provide a prototype to silence -Wmissing-prototypes.  */
4218 extern initialize_file_ftype _initialize_dwarf2loc;
4219
4220 void
4221 _initialize_dwarf2loc (void)
4222 {
4223   add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
4224                              &entry_values_debug,
4225                              _("Set entry values and tail call frames "
4226                                "debugging."),
4227                              _("Show entry values and tail call frames "
4228                                "debugging."),
4229                              _("When non-zero, the process of determining "
4230                                "parameter values from function entry point "
4231                                "and tail call frames will be printed."),
4232                              NULL,
4233                              show_entry_values_debug,
4234                              &setdebuglist, &showdebuglist);
4235 }