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