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