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