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