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