1 /* DWARF 2 location expression support for GDB.
3 Copyright (C) 2003, 2005, 2007-2012 Free Software Foundation, Inc.
5 Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
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.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
33 #include "exceptions.h"
38 #include "dwarf2expr.h"
39 #include "dwarf2loc.h"
40 #include "dwarf2-frame.h"
42 #include "gdb_string.h"
43 #include "gdb_assert.h"
47 extern int dwarf2_always_disassemble
;
49 static void dwarf_expr_frame_base_1 (struct symbol
*framefunc
, CORE_ADDR pc
,
50 const gdb_byte
**start
, size_t *length
);
52 static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs
;
54 static struct value
*dwarf2_evaluate_loc_desc_full (struct type
*type
,
55 struct frame_info
*frame
,
58 struct dwarf2_per_cu_data
*per_cu
,
61 /* Until these have formal names, we define these here.
62 ref: http://gcc.gnu.org/wiki/DebugFission
63 Each entry in .debug_loc.dwo begins with a byte that describes the entry,
64 and is then followed by data specific to that entry. */
68 /* Indicates the end of the list of entries. */
69 DEBUG_LOC_END_OF_LIST
= 0,
71 /* This is followed by an unsigned LEB128 number that is an index into
72 .debug_addr and specifies the base address for all following entries. */
73 DEBUG_LOC_BASE_ADDRESS
= 1,
75 /* This is followed by two unsigned LEB128 numbers that are indices into
76 .debug_addr and specify the beginning and ending addresses, and then
77 a normal location expression as in .debug_loc. */
78 DEBUG_LOC_START_END
= 2,
80 /* This is followed by an unsigned LEB128 number that is an index into
81 .debug_addr and specifies the beginning address, and a 4 byte unsigned
82 number that specifies the length, and then a normal location expression
84 DEBUG_LOC_START_LENGTH
= 3,
86 /* An internal value indicating there is insufficient data. */
87 DEBUG_LOC_BUFFER_OVERFLOW
= -1,
89 /* An internal value indicating an invalid kind of entry was found. */
90 DEBUG_LOC_INVALID_ENTRY
= -2
93 /* Decode the addresses in a non-dwo .debug_loc entry.
94 A pointer to the next byte to examine is returned in *NEW_PTR.
95 The encoded low,high addresses are return in *LOW,*HIGH.
96 The result indicates the kind of entry found. */
98 static enum debug_loc_kind
99 decode_debug_loc_addresses (const gdb_byte
*loc_ptr
, const gdb_byte
*buf_end
,
100 const gdb_byte
**new_ptr
,
101 CORE_ADDR
*low
, CORE_ADDR
*high
,
102 enum bfd_endian byte_order
,
103 unsigned int addr_size
,
106 CORE_ADDR base_mask
= ~(~(CORE_ADDR
)1 << (addr_size
* 8 - 1));
108 if (buf_end
- loc_ptr
< 2 * addr_size
)
109 return DEBUG_LOC_BUFFER_OVERFLOW
;
112 *low
= extract_signed_integer (loc_ptr
, addr_size
, byte_order
);
114 *low
= extract_unsigned_integer (loc_ptr
, addr_size
, byte_order
);
115 loc_ptr
+= addr_size
;
118 *high
= extract_signed_integer (loc_ptr
, addr_size
, byte_order
);
120 *high
= extract_unsigned_integer (loc_ptr
, addr_size
, byte_order
);
121 loc_ptr
+= addr_size
;
125 /* A base-address-selection entry. */
126 if ((*low
& base_mask
) == base_mask
)
127 return DEBUG_LOC_BASE_ADDRESS
;
129 /* An end-of-list entry. */
130 if (*low
== 0 && *high
== 0)
131 return DEBUG_LOC_END_OF_LIST
;
133 return DEBUG_LOC_START_END
;
136 /* Decode the addresses in .debug_loc.dwo entry.
137 A pointer to the next byte to examine is returned in *NEW_PTR.
138 The encoded low,high addresses are return in *LOW,*HIGH.
139 The result indicates the kind of entry found. */
141 static enum debug_loc_kind
142 decode_debug_loc_dwo_addresses (struct dwarf2_per_cu_data
*per_cu
,
143 const gdb_byte
*loc_ptr
,
144 const gdb_byte
*buf_end
,
145 const gdb_byte
**new_ptr
,
146 CORE_ADDR
*low
, CORE_ADDR
*high
,
147 enum bfd_endian byte_order
)
149 uint64_t low_index
, high_index
;
151 if (loc_ptr
== buf_end
)
152 return DEBUG_LOC_BUFFER_OVERFLOW
;
156 case DEBUG_LOC_END_OF_LIST
:
158 return DEBUG_LOC_END_OF_LIST
;
159 case DEBUG_LOC_BASE_ADDRESS
:
161 loc_ptr
= gdb_read_uleb128 (loc_ptr
, buf_end
, &high_index
);
163 return DEBUG_LOC_BUFFER_OVERFLOW
;
164 *high
= dwarf2_read_addr_index (per_cu
, high_index
);
166 return DEBUG_LOC_BASE_ADDRESS
;
167 case DEBUG_LOC_START_END
:
168 loc_ptr
= gdb_read_uleb128 (loc_ptr
, buf_end
, &low_index
);
170 return DEBUG_LOC_BUFFER_OVERFLOW
;
171 *low
= dwarf2_read_addr_index (per_cu
, low_index
);
172 loc_ptr
= gdb_read_uleb128 (loc_ptr
, buf_end
, &high_index
);
174 return DEBUG_LOC_BUFFER_OVERFLOW
;
175 *high
= dwarf2_read_addr_index (per_cu
, high_index
);
177 return DEBUG_LOC_START_END
;
178 case DEBUG_LOC_START_LENGTH
:
179 loc_ptr
= gdb_read_uleb128 (loc_ptr
, buf_end
, &low_index
);
181 return DEBUG_LOC_BUFFER_OVERFLOW
;
182 *low
= dwarf2_read_addr_index (per_cu
, low_index
);
183 if (loc_ptr
+ 4 > buf_end
)
184 return DEBUG_LOC_BUFFER_OVERFLOW
;
186 *high
+= extract_unsigned_integer (loc_ptr
, 4, byte_order
);
187 *new_ptr
= loc_ptr
+ 4;
188 return DEBUG_LOC_START_LENGTH
;
190 return DEBUG_LOC_INVALID_ENTRY
;
194 /* A function for dealing with location lists. Given a
195 symbol baton (BATON) and a pc value (PC), find the appropriate
196 location expression, set *LOCEXPR_LENGTH, and return a pointer
197 to the beginning of the expression. Returns NULL on failure.
199 For now, only return the first matching location expression; there
200 can be more than one in the list. */
203 dwarf2_find_location_expression (struct dwarf2_loclist_baton
*baton
,
204 size_t *locexpr_length
, CORE_ADDR pc
)
206 struct objfile
*objfile
= dwarf2_per_cu_objfile (baton
->per_cu
);
207 struct gdbarch
*gdbarch
= get_objfile_arch (objfile
);
208 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
209 unsigned int addr_size
= dwarf2_per_cu_addr_size (baton
->per_cu
);
210 int signed_addr_p
= bfd_get_sign_extend_vma (objfile
->obfd
);
211 /* Adjust base_address for relocatable objects. */
212 CORE_ADDR base_offset
= dwarf2_per_cu_text_offset (baton
->per_cu
);
213 CORE_ADDR base_address
= baton
->base_address
+ base_offset
;
214 const gdb_byte
*loc_ptr
, *buf_end
;
216 loc_ptr
= baton
->data
;
217 buf_end
= baton
->data
+ baton
->size
;
221 CORE_ADDR low
= 0, high
= 0; /* init for gcc -Wall */
223 enum debug_loc_kind kind
;
224 const gdb_byte
*new_ptr
= NULL
; /* init for gcc -Wall */
227 kind
= decode_debug_loc_dwo_addresses (baton
->per_cu
,
228 loc_ptr
, buf_end
, &new_ptr
,
229 &low
, &high
, byte_order
);
231 kind
= decode_debug_loc_addresses (loc_ptr
, buf_end
, &new_ptr
,
233 byte_order
, addr_size
,
238 case DEBUG_LOC_END_OF_LIST
:
241 case DEBUG_LOC_BASE_ADDRESS
:
242 base_address
= high
+ base_offset
;
244 case DEBUG_LOC_START_END
:
245 case DEBUG_LOC_START_LENGTH
:
247 case DEBUG_LOC_BUFFER_OVERFLOW
:
248 case DEBUG_LOC_INVALID_ENTRY
:
249 error (_("dwarf2_find_location_expression: "
250 "Corrupted DWARF expression."));
252 gdb_assert_not_reached ("bad debug_loc_kind");
255 /* Otherwise, a location expression entry. */
257 high
+= base_address
;
259 length
= extract_unsigned_integer (loc_ptr
, 2, byte_order
);
262 if (low
== high
&& pc
== low
)
264 /* This is entry PC record present only at entry point
265 of a function. Verify it is really the function entry point. */
267 struct block
*pc_block
= block_for_pc (pc
);
268 struct symbol
*pc_func
= NULL
;
271 pc_func
= block_linkage_function (pc_block
);
273 if (pc_func
&& pc
== BLOCK_START (SYMBOL_BLOCK_VALUE (pc_func
)))
275 *locexpr_length
= length
;
280 if (pc
>= low
&& pc
< high
)
282 *locexpr_length
= length
;
290 /* This is the baton used when performing dwarf2 expression
292 struct dwarf_expr_baton
294 struct frame_info
*frame
;
295 struct dwarf2_per_cu_data
*per_cu
;
298 /* Helper functions for dwarf2_evaluate_loc_desc. */
300 /* Using the frame specified in BATON, return the value of register
301 REGNUM, treated as a pointer. */
303 dwarf_expr_read_reg (void *baton
, int dwarf_regnum
)
305 struct dwarf_expr_baton
*debaton
= (struct dwarf_expr_baton
*) baton
;
306 struct gdbarch
*gdbarch
= get_frame_arch (debaton
->frame
);
310 regnum
= gdbarch_dwarf2_reg_to_regnum (gdbarch
, dwarf_regnum
);
311 result
= address_from_register (builtin_type (gdbarch
)->builtin_data_ptr
,
312 regnum
, debaton
->frame
);
316 /* Read memory at ADDR (length LEN) into BUF. */
319 dwarf_expr_read_mem (void *baton
, gdb_byte
*buf
, CORE_ADDR addr
, size_t len
)
321 read_memory (addr
, buf
, len
);
324 /* Using the frame specified in BATON, find the location expression
325 describing the frame base. Return a pointer to it in START and
326 its length in LENGTH. */
328 dwarf_expr_frame_base (void *baton
, const gdb_byte
**start
, size_t * length
)
330 /* FIXME: cagney/2003-03-26: This code should be using
331 get_frame_base_address(), and then implement a dwarf2 specific
333 struct symbol
*framefunc
;
334 struct dwarf_expr_baton
*debaton
= (struct dwarf_expr_baton
*) baton
;
336 /* Use block_linkage_function, which returns a real (not inlined)
337 function, instead of get_frame_function, which may return an
339 framefunc
= block_linkage_function (get_frame_block (debaton
->frame
, NULL
));
341 /* If we found a frame-relative symbol then it was certainly within
342 some function associated with a frame. If we can't find the frame,
343 something has gone wrong. */
344 gdb_assert (framefunc
!= NULL
);
346 dwarf_expr_frame_base_1 (framefunc
,
347 get_frame_address_in_block (debaton
->frame
),
352 dwarf_expr_frame_base_1 (struct symbol
*framefunc
, CORE_ADDR pc
,
353 const gdb_byte
**start
, size_t *length
)
355 if (SYMBOL_LOCATION_BATON (framefunc
) == NULL
)
357 else if (SYMBOL_COMPUTED_OPS (framefunc
) == &dwarf2_loclist_funcs
)
359 struct dwarf2_loclist_baton
*symbaton
;
361 symbaton
= SYMBOL_LOCATION_BATON (framefunc
);
362 *start
= dwarf2_find_location_expression (symbaton
, length
, pc
);
366 struct dwarf2_locexpr_baton
*symbaton
;
368 symbaton
= SYMBOL_LOCATION_BATON (framefunc
);
369 if (symbaton
!= NULL
)
371 *length
= symbaton
->size
;
372 *start
= symbaton
->data
;
379 error (_("Could not find the frame base for \"%s\"."),
380 SYMBOL_NATURAL_NAME (framefunc
));
383 /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for
384 the frame in BATON. */
387 dwarf_expr_frame_cfa (void *baton
)
389 struct dwarf_expr_baton
*debaton
= (struct dwarf_expr_baton
*) baton
;
391 return dwarf2_frame_cfa (debaton
->frame
);
394 /* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for
395 the frame in BATON. */
398 dwarf_expr_frame_pc (void *baton
)
400 struct dwarf_expr_baton
*debaton
= (struct dwarf_expr_baton
*) baton
;
402 return get_frame_address_in_block (debaton
->frame
);
405 /* Using the objfile specified in BATON, find the address for the
406 current thread's thread-local storage with offset OFFSET. */
408 dwarf_expr_tls_address (void *baton
, CORE_ADDR offset
)
410 struct dwarf_expr_baton
*debaton
= (struct dwarf_expr_baton
*) baton
;
411 struct objfile
*objfile
= dwarf2_per_cu_objfile (debaton
->per_cu
);
413 return target_translate_tls_address (objfile
, offset
);
416 /* Call DWARF subroutine from DW_AT_location of DIE at DIE_OFFSET in
417 current CU (as is PER_CU). State of the CTX is not affected by the
421 per_cu_dwarf_call (struct dwarf_expr_context
*ctx
, cu_offset die_offset
,
422 struct dwarf2_per_cu_data
*per_cu
,
423 CORE_ADDR (*get_frame_pc
) (void *baton
),
426 struct dwarf2_locexpr_baton block
;
428 block
= dwarf2_fetch_die_location_block (die_offset
, per_cu
,
429 get_frame_pc
, baton
);
431 /* DW_OP_call_ref is currently not supported. */
432 gdb_assert (block
.per_cu
== per_cu
);
434 dwarf_expr_eval (ctx
, block
.data
, block
.size
);
437 /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc. */
440 dwarf_expr_dwarf_call (struct dwarf_expr_context
*ctx
, cu_offset die_offset
)
442 struct dwarf_expr_baton
*debaton
= ctx
->baton
;
444 per_cu_dwarf_call (ctx
, die_offset
, debaton
->per_cu
,
445 ctx
->funcs
->get_frame_pc
, ctx
->baton
);
448 /* Callback function for dwarf2_evaluate_loc_desc. */
451 dwarf_expr_get_base_type (struct dwarf_expr_context
*ctx
,
452 cu_offset die_offset
)
454 struct dwarf_expr_baton
*debaton
= ctx
->baton
;
456 return dwarf2_get_die_type (die_offset
, debaton
->per_cu
);
459 /* See dwarf2loc.h. */
461 unsigned int entry_values_debug
= 0;
463 /* Helper to set entry_values_debug. */
466 show_entry_values_debug (struct ui_file
*file
, int from_tty
,
467 struct cmd_list_element
*c
, const char *value
)
469 fprintf_filtered (file
,
470 _("Entry values and tail call frames debugging is %s.\n"),
474 /* Find DW_TAG_GNU_call_site's DW_AT_GNU_call_site_target address.
475 CALLER_FRAME (for registers) can be NULL if it is not known. This function
476 always returns valid address or it throws NO_ENTRY_VALUE_ERROR. */
479 call_site_to_target_addr (struct gdbarch
*call_site_gdbarch
,
480 struct call_site
*call_site
,
481 struct frame_info
*caller_frame
)
483 switch (FIELD_LOC_KIND (call_site
->target
))
485 case FIELD_LOC_KIND_DWARF_BLOCK
:
487 struct dwarf2_locexpr_baton
*dwarf_block
;
489 struct type
*caller_core_addr_type
;
490 struct gdbarch
*caller_arch
;
492 dwarf_block
= FIELD_DWARF_BLOCK (call_site
->target
);
493 if (dwarf_block
== NULL
)
495 struct minimal_symbol
*msym
;
497 msym
= lookup_minimal_symbol_by_pc (call_site
->pc
- 1);
498 throw_error (NO_ENTRY_VALUE_ERROR
,
499 _("DW_AT_GNU_call_site_target is not specified "
501 paddress (call_site_gdbarch
, call_site
->pc
),
502 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
));
505 if (caller_frame
== NULL
)
507 struct minimal_symbol
*msym
;
509 msym
= lookup_minimal_symbol_by_pc (call_site
->pc
- 1);
510 throw_error (NO_ENTRY_VALUE_ERROR
,
511 _("DW_AT_GNU_call_site_target DWARF block resolving "
512 "requires known frame which is currently not "
513 "available at %s in %s"),
514 paddress (call_site_gdbarch
, call_site
->pc
),
515 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
));
518 caller_arch
= get_frame_arch (caller_frame
);
519 caller_core_addr_type
= builtin_type (caller_arch
)->builtin_func_ptr
;
520 val
= dwarf2_evaluate_loc_desc (caller_core_addr_type
, caller_frame
,
521 dwarf_block
->data
, dwarf_block
->size
,
522 dwarf_block
->per_cu
);
523 /* DW_AT_GNU_call_site_target is a DWARF expression, not a DWARF
525 if (VALUE_LVAL (val
) == lval_memory
)
526 return value_address (val
);
528 return value_as_address (val
);
531 case FIELD_LOC_KIND_PHYSNAME
:
533 const char *physname
;
534 struct minimal_symbol
*msym
;
536 physname
= FIELD_STATIC_PHYSNAME (call_site
->target
);
537 msym
= lookup_minimal_symbol_text (physname
, NULL
);
540 msym
= lookup_minimal_symbol_by_pc (call_site
->pc
- 1);
541 throw_error (NO_ENTRY_VALUE_ERROR
,
542 _("Cannot find function \"%s\" for a call site target "
544 physname
, paddress (call_site_gdbarch
, call_site
->pc
),
545 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
));
548 return SYMBOL_VALUE_ADDRESS (msym
);
551 case FIELD_LOC_KIND_PHYSADDR
:
552 return FIELD_STATIC_PHYSADDR (call_site
->target
);
555 internal_error (__FILE__
, __LINE__
, _("invalid call site target kind"));
559 /* Convert function entry point exact address ADDR to the function which is
560 compliant with TAIL_CALL_LIST_COMPLETE condition. Throw
561 NO_ENTRY_VALUE_ERROR otherwise. */
563 static struct symbol
*
564 func_addr_to_tail_call_list (struct gdbarch
*gdbarch
, CORE_ADDR addr
)
566 struct symbol
*sym
= find_pc_function (addr
);
569 if (sym
== NULL
|| BLOCK_START (SYMBOL_BLOCK_VALUE (sym
)) != addr
)
570 throw_error (NO_ENTRY_VALUE_ERROR
,
571 _("DW_TAG_GNU_call_site resolving failed to find function "
572 "name for address %s"),
573 paddress (gdbarch
, addr
));
575 type
= SYMBOL_TYPE (sym
);
576 gdb_assert (TYPE_CODE (type
) == TYPE_CODE_FUNC
);
577 gdb_assert (TYPE_SPECIFIC_FIELD (type
) == TYPE_SPECIFIC_FUNC
);
582 /* Verify function with entry point exact address ADDR can never call itself
583 via its tail calls (incl. transitively). Throw NO_ENTRY_VALUE_ERROR if it
584 can call itself via tail calls.
586 If a funtion can tail call itself its entry value based parameters are
587 unreliable. There is no verification whether the value of some/all
588 parameters is unchanged through the self tail call, we expect if there is
589 a self tail call all the parameters can be modified. */
592 func_verify_no_selftailcall (struct gdbarch
*gdbarch
, CORE_ADDR verify_addr
)
594 struct obstack addr_obstack
;
595 struct cleanup
*old_chain
;
598 /* Track here CORE_ADDRs which were already visited. */
601 /* The verification is completely unordered. Track here function addresses
602 which still need to be iterated. */
603 VEC (CORE_ADDR
) *todo
= NULL
;
605 obstack_init (&addr_obstack
);
606 old_chain
= make_cleanup_obstack_free (&addr_obstack
);
607 addr_hash
= htab_create_alloc_ex (64, core_addr_hash
, core_addr_eq
, NULL
,
608 &addr_obstack
, hashtab_obstack_allocate
,
610 make_cleanup_htab_delete (addr_hash
);
612 make_cleanup (VEC_cleanup (CORE_ADDR
), &todo
);
614 VEC_safe_push (CORE_ADDR
, todo
, verify_addr
);
615 while (!VEC_empty (CORE_ADDR
, todo
))
617 struct symbol
*func_sym
;
618 struct call_site
*call_site
;
620 addr
= VEC_pop (CORE_ADDR
, todo
);
622 func_sym
= func_addr_to_tail_call_list (gdbarch
, addr
);
624 for (call_site
= TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (func_sym
));
625 call_site
; call_site
= call_site
->tail_call_next
)
627 CORE_ADDR target_addr
;
630 /* CALLER_FRAME with registers is not available for tail-call jumped
632 target_addr
= call_site_to_target_addr (gdbarch
, call_site
, NULL
);
634 if (target_addr
== verify_addr
)
636 struct minimal_symbol
*msym
;
638 msym
= lookup_minimal_symbol_by_pc (verify_addr
);
639 throw_error (NO_ENTRY_VALUE_ERROR
,
640 _("DW_OP_GNU_entry_value resolving has found "
641 "function \"%s\" at %s can call itself via tail "
643 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
),
644 paddress (gdbarch
, verify_addr
));
647 slot
= htab_find_slot (addr_hash
, &target_addr
, INSERT
);
650 *slot
= obstack_copy (&addr_obstack
, &target_addr
,
651 sizeof (target_addr
));
652 VEC_safe_push (CORE_ADDR
, todo
, target_addr
);
657 do_cleanups (old_chain
);
660 /* Print user readable form of CALL_SITE->PC to gdb_stdlog. Used only for
661 ENTRY_VALUES_DEBUG. */
664 tailcall_dump (struct gdbarch
*gdbarch
, const struct call_site
*call_site
)
666 CORE_ADDR addr
= call_site
->pc
;
667 struct minimal_symbol
*msym
= lookup_minimal_symbol_by_pc (addr
- 1);
669 fprintf_unfiltered (gdb_stdlog
, " %s(%s)", paddress (gdbarch
, addr
),
670 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
));
674 /* vec.h needs single word type name, typedef it. */
675 typedef struct call_site
*call_sitep
;
677 /* Define VEC (call_sitep) functions. */
678 DEF_VEC_P (call_sitep
);
680 /* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP
681 only top callers and bottom callees which are present in both. GDBARCH is
682 used only for ENTRY_VALUES_DEBUG. RESULTP is NULL after return if there are
683 no remaining possibilities to provide unambiguous non-trivial result.
684 RESULTP should point to NULL on the first (initialization) call. Caller is
685 responsible for xfree of any RESULTP data. */
688 chain_candidate (struct gdbarch
*gdbarch
, struct call_site_chain
**resultp
,
689 VEC (call_sitep
) *chain
)
691 struct call_site_chain
*result
= *resultp
;
692 long length
= VEC_length (call_sitep
, chain
);
693 int callers
, callees
, idx
;
697 /* Create the initial chain containing all the passed PCs. */
699 result
= xmalloc (sizeof (*result
) + sizeof (*result
->call_site
)
701 result
->length
= length
;
702 result
->callers
= result
->callees
= length
;
703 memcpy (result
->call_site
, VEC_address (call_sitep
, chain
),
704 sizeof (*result
->call_site
) * length
);
707 if (entry_values_debug
)
709 fprintf_unfiltered (gdb_stdlog
, "tailcall: initial:");
710 for (idx
= 0; idx
< length
; idx
++)
711 tailcall_dump (gdbarch
, result
->call_site
[idx
]);
712 fputc_unfiltered ('\n', gdb_stdlog
);
718 if (entry_values_debug
)
720 fprintf_unfiltered (gdb_stdlog
, "tailcall: compare:");
721 for (idx
= 0; idx
< length
; idx
++)
722 tailcall_dump (gdbarch
, VEC_index (call_sitep
, chain
, idx
));
723 fputc_unfiltered ('\n', gdb_stdlog
);
726 /* Intersect callers. */
728 callers
= min (result
->callers
, length
);
729 for (idx
= 0; idx
< callers
; idx
++)
730 if (result
->call_site
[idx
] != VEC_index (call_sitep
, chain
, idx
))
732 result
->callers
= idx
;
736 /* Intersect callees. */
738 callees
= min (result
->callees
, length
);
739 for (idx
= 0; idx
< callees
; idx
++)
740 if (result
->call_site
[result
->length
- 1 - idx
]
741 != VEC_index (call_sitep
, chain
, length
- 1 - idx
))
743 result
->callees
= idx
;
747 if (entry_values_debug
)
749 fprintf_unfiltered (gdb_stdlog
, "tailcall: reduced:");
750 for (idx
= 0; idx
< result
->callers
; idx
++)
751 tailcall_dump (gdbarch
, result
->call_site
[idx
]);
752 fputs_unfiltered (" |", gdb_stdlog
);
753 for (idx
= 0; idx
< result
->callees
; idx
++)
754 tailcall_dump (gdbarch
, result
->call_site
[result
->length
755 - result
->callees
+ idx
]);
756 fputc_unfiltered ('\n', gdb_stdlog
);
759 if (result
->callers
== 0 && result
->callees
== 0)
761 /* There are no common callers or callees. It could be also a direct
762 call (which has length 0) with ambiguous possibility of an indirect
763 call - CALLERS == CALLEES == 0 is valid during the first allocation
764 but any subsequence processing of such entry means ambiguity. */
770 /* See call_site_find_chain_1 why there is no way to reach the bottom callee
771 PC again. In such case there must be two different code paths to reach
772 it, therefore some of the former determined intermediate PCs must differ
773 and the unambiguous chain gets shortened. */
774 gdb_assert (result
->callers
+ result
->callees
< result
->length
);
777 /* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the
778 assumed frames between them use GDBARCH. Use depth first search so we can
779 keep single CHAIN of call_site's back to CALLER_PC. Function recursion
780 would have needless GDB stack overhead. Caller is responsible for xfree of
781 the returned result. Any unreliability results in thrown
782 NO_ENTRY_VALUE_ERROR. */
784 static struct call_site_chain
*
785 call_site_find_chain_1 (struct gdbarch
*gdbarch
, CORE_ADDR caller_pc
,
788 struct obstack addr_obstack
;
789 struct cleanup
*back_to_retval
, *back_to_workdata
;
790 struct call_site_chain
*retval
= NULL
;
791 struct call_site
*call_site
;
793 /* Mark CALL_SITEs so we do not visit the same ones twice. */
796 /* CHAIN contains only the intermediate CALL_SITEs. Neither CALLER_PC's
797 call_site nor any possible call_site at CALLEE_PC's function is there.
798 Any CALL_SITE in CHAIN will be iterated to its siblings - via
799 TAIL_CALL_NEXT. This is inappropriate for CALLER_PC's call_site. */
800 VEC (call_sitep
) *chain
= NULL
;
802 /* We are not interested in the specific PC inside the callee function. */
803 callee_pc
= get_pc_function_start (callee_pc
);
805 throw_error (NO_ENTRY_VALUE_ERROR
, _("Unable to find function for PC %s"),
806 paddress (gdbarch
, callee_pc
));
808 back_to_retval
= make_cleanup (free_current_contents
, &retval
);
810 obstack_init (&addr_obstack
);
811 back_to_workdata
= make_cleanup_obstack_free (&addr_obstack
);
812 addr_hash
= htab_create_alloc_ex (64, core_addr_hash
, core_addr_eq
, NULL
,
813 &addr_obstack
, hashtab_obstack_allocate
,
815 make_cleanup_htab_delete (addr_hash
);
817 make_cleanup (VEC_cleanup (call_sitep
), &chain
);
819 /* Do not push CALL_SITE to CHAIN. Push there only the first tail call site
820 at the target's function. All the possible tail call sites in the
821 target's function will get iterated as already pushed into CHAIN via their
823 call_site
= call_site_for_pc (gdbarch
, caller_pc
);
827 CORE_ADDR target_func_addr
;
828 struct call_site
*target_call_site
;
830 /* CALLER_FRAME with registers is not available for tail-call jumped
832 target_func_addr
= call_site_to_target_addr (gdbarch
, call_site
, NULL
);
834 if (target_func_addr
== callee_pc
)
836 chain_candidate (gdbarch
, &retval
, chain
);
840 /* There is no way to reach CALLEE_PC again as we would prevent
841 entering it twice as being already marked in ADDR_HASH. */
842 target_call_site
= NULL
;
846 struct symbol
*target_func
;
848 target_func
= func_addr_to_tail_call_list (gdbarch
, target_func_addr
);
849 target_call_site
= TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (target_func
));
854 /* Attempt to visit TARGET_CALL_SITE. */
856 if (target_call_site
)
860 slot
= htab_find_slot (addr_hash
, &target_call_site
->pc
, INSERT
);
863 /* Successfully entered TARGET_CALL_SITE. */
865 *slot
= &target_call_site
->pc
;
866 VEC_safe_push (call_sitep
, chain
, target_call_site
);
871 /* Backtrack (without revisiting the originating call_site). Try the
872 callers's sibling; if there isn't any try the callers's callers's
875 target_call_site
= NULL
;
876 while (!VEC_empty (call_sitep
, chain
))
878 call_site
= VEC_pop (call_sitep
, chain
);
880 gdb_assert (htab_find_slot (addr_hash
, &call_site
->pc
,
882 htab_remove_elt (addr_hash
, &call_site
->pc
);
884 target_call_site
= call_site
->tail_call_next
;
885 if (target_call_site
)
889 while (target_call_site
);
891 if (VEC_empty (call_sitep
, chain
))
894 call_site
= VEC_last (call_sitep
, chain
);
899 struct minimal_symbol
*msym_caller
, *msym_callee
;
901 msym_caller
= lookup_minimal_symbol_by_pc (caller_pc
);
902 msym_callee
= lookup_minimal_symbol_by_pc (callee_pc
);
903 throw_error (NO_ENTRY_VALUE_ERROR
,
904 _("There are no unambiguously determinable intermediate "
905 "callers or callees between caller function \"%s\" at %s "
906 "and callee function \"%s\" at %s"),
908 ? "???" : SYMBOL_PRINT_NAME (msym_caller
)),
909 paddress (gdbarch
, caller_pc
),
911 ? "???" : SYMBOL_PRINT_NAME (msym_callee
)),
912 paddress (gdbarch
, callee_pc
));
915 do_cleanups (back_to_workdata
);
916 discard_cleanups (back_to_retval
);
920 /* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the
921 assumed frames between them use GDBARCH. If valid call_site_chain cannot be
922 constructed return NULL. Caller is responsible for xfree of the returned
925 struct call_site_chain
*
926 call_site_find_chain (struct gdbarch
*gdbarch
, CORE_ADDR caller_pc
,
929 volatile struct gdb_exception e
;
930 struct call_site_chain
*retval
= NULL
;
932 TRY_CATCH (e
, RETURN_MASK_ERROR
)
934 retval
= call_site_find_chain_1 (gdbarch
, caller_pc
, callee_pc
);
938 if (e
.error
== NO_ENTRY_VALUE_ERROR
)
940 if (entry_values_debug
)
941 exception_print (gdb_stdout
, e
);
951 /* Return 1 if KIND and KIND_U match PARAMETER. Return 0 otherwise. */
954 call_site_parameter_matches (struct call_site_parameter
*parameter
,
955 enum call_site_parameter_kind kind
,
956 union call_site_parameter_u kind_u
)
958 if (kind
== parameter
->kind
)
961 case CALL_SITE_PARAMETER_DWARF_REG
:
962 return kind_u
.dwarf_reg
== parameter
->u
.dwarf_reg
;
963 case CALL_SITE_PARAMETER_FB_OFFSET
:
964 return kind_u
.fb_offset
== parameter
->u
.fb_offset
;
965 case CALL_SITE_PARAMETER_PARAM_OFFSET
:
966 return kind_u
.param_offset
.cu_off
== parameter
->u
.param_offset
.cu_off
;
971 /* Fetch call_site_parameter from caller matching KIND and KIND_U.
974 Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR
977 static struct call_site_parameter
*
978 dwarf_expr_reg_to_entry_parameter (struct frame_info
*frame
,
979 enum call_site_parameter_kind kind
,
980 union call_site_parameter_u kind_u
,
981 struct dwarf2_per_cu_data
**per_cu_return
)
983 CORE_ADDR func_addr
= get_frame_func (frame
);
985 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
986 struct frame_info
*caller_frame
= get_prev_frame (frame
);
987 struct call_site
*call_site
;
989 /* Initialize it just to avoid a GCC false warning. */
990 struct call_site_parameter
*parameter
= NULL
;
991 CORE_ADDR target_addr
;
993 if (gdbarch
!= frame_unwind_arch (frame
))
995 struct minimal_symbol
*msym
= lookup_minimal_symbol_by_pc (func_addr
);
996 struct gdbarch
*caller_gdbarch
= frame_unwind_arch (frame
);
998 throw_error (NO_ENTRY_VALUE_ERROR
,
999 _("DW_OP_GNU_entry_value resolving callee gdbarch %s "
1000 "(of %s (%s)) does not match caller gdbarch %s"),
1001 gdbarch_bfd_arch_info (gdbarch
)->printable_name
,
1002 paddress (gdbarch
, func_addr
),
1003 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
),
1004 gdbarch_bfd_arch_info (caller_gdbarch
)->printable_name
);
1007 if (caller_frame
== NULL
)
1009 struct minimal_symbol
*msym
= lookup_minimal_symbol_by_pc (func_addr
);
1011 throw_error (NO_ENTRY_VALUE_ERROR
, _("DW_OP_GNU_entry_value resolving "
1012 "requires caller of %s (%s)"),
1013 paddress (gdbarch
, func_addr
),
1014 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
));
1016 caller_pc
= get_frame_pc (caller_frame
);
1017 call_site
= call_site_for_pc (gdbarch
, caller_pc
);
1019 target_addr
= call_site_to_target_addr (gdbarch
, call_site
, caller_frame
);
1020 if (target_addr
!= func_addr
)
1022 struct minimal_symbol
*target_msym
, *func_msym
;
1024 target_msym
= lookup_minimal_symbol_by_pc (target_addr
);
1025 func_msym
= lookup_minimal_symbol_by_pc (func_addr
);
1026 throw_error (NO_ENTRY_VALUE_ERROR
,
1027 _("DW_OP_GNU_entry_value resolving expects callee %s at %s "
1028 "but the called frame is for %s at %s"),
1029 (target_msym
== NULL
? "???"
1030 : SYMBOL_PRINT_NAME (target_msym
)),
1031 paddress (gdbarch
, target_addr
),
1032 func_msym
== NULL
? "???" : SYMBOL_PRINT_NAME (func_msym
),
1033 paddress (gdbarch
, func_addr
));
1036 /* No entry value based parameters would be reliable if this function can
1037 call itself via tail calls. */
1038 func_verify_no_selftailcall (gdbarch
, func_addr
);
1040 for (iparams
= 0; iparams
< call_site
->parameter_count
; iparams
++)
1042 parameter
= &call_site
->parameter
[iparams
];
1043 if (call_site_parameter_matches (parameter
, kind
, kind_u
))
1046 if (iparams
== call_site
->parameter_count
)
1048 struct minimal_symbol
*msym
= lookup_minimal_symbol_by_pc (caller_pc
);
1050 /* DW_TAG_GNU_call_site_parameter will be missing just if GCC could not
1051 determine its value. */
1052 throw_error (NO_ENTRY_VALUE_ERROR
, _("Cannot find matching parameter "
1053 "at DW_TAG_GNU_call_site %s at %s"),
1054 paddress (gdbarch
, caller_pc
),
1055 msym
== NULL
? "???" : SYMBOL_PRINT_NAME (msym
));
1058 *per_cu_return
= call_site
->per_cu
;
1062 /* Return value for PARAMETER matching DEREF_SIZE. If DEREF_SIZE is -1, return
1063 the normal DW_AT_GNU_call_site_value block. Otherwise return the
1064 DW_AT_GNU_call_site_data_value (dereferenced) block.
1066 TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned
1069 Function always returns non-NULL, non-optimized out value. It throws
1070 NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason. */
1072 static struct value
*
1073 dwarf_entry_parameter_to_value (struct call_site_parameter
*parameter
,
1074 CORE_ADDR deref_size
, struct type
*type
,
1075 struct frame_info
*caller_frame
,
1076 struct dwarf2_per_cu_data
*per_cu
)
1078 const gdb_byte
*data_src
;
1082 data_src
= deref_size
== -1 ? parameter
->value
: parameter
->data_value
;
1083 size
= deref_size
== -1 ? parameter
->value_size
: parameter
->data_value_size
;
1085 /* DEREF_SIZE size is not verified here. */
1086 if (data_src
== NULL
)
1087 throw_error (NO_ENTRY_VALUE_ERROR
,
1088 _("Cannot resolve DW_AT_GNU_call_site_data_value"));
1090 /* DW_AT_GNU_call_site_value is a DWARF expression, not a DWARF
1091 location. Postprocessing of DWARF_VALUE_MEMORY would lose the type from
1093 data
= alloca (size
+ 1);
1094 memcpy (data
, data_src
, size
);
1095 data
[size
] = DW_OP_stack_value
;
1097 return dwarf2_evaluate_loc_desc (type
, caller_frame
, data
, size
+ 1, per_cu
);
1100 /* Execute DWARF block of call_site_parameter which matches KIND and KIND_U.
1101 Choose DEREF_SIZE value of that parameter. Search caller of the CTX's
1102 frame. CTX must be of dwarf_expr_ctx_funcs kind.
1104 The CTX caller can be from a different CU - per_cu_dwarf_call implementation
1105 can be more simple as it does not support cross-CU DWARF executions. */
1108 dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context
*ctx
,
1109 enum call_site_parameter_kind kind
,
1110 union call_site_parameter_u kind_u
,
1113 struct dwarf_expr_baton
*debaton
;
1114 struct frame_info
*frame
, *caller_frame
;
1115 struct dwarf2_per_cu_data
*caller_per_cu
;
1116 struct dwarf_expr_baton baton_local
;
1117 struct dwarf_expr_context saved_ctx
;
1118 struct call_site_parameter
*parameter
;
1119 const gdb_byte
*data_src
;
1122 gdb_assert (ctx
->funcs
== &dwarf_expr_ctx_funcs
);
1123 debaton
= ctx
->baton
;
1124 frame
= debaton
->frame
;
1125 caller_frame
= get_prev_frame (frame
);
1127 parameter
= dwarf_expr_reg_to_entry_parameter (frame
, kind
, kind_u
,
1129 data_src
= deref_size
== -1 ? parameter
->value
: parameter
->data_value
;
1130 size
= deref_size
== -1 ? parameter
->value_size
: parameter
->data_value_size
;
1132 /* DEREF_SIZE size is not verified here. */
1133 if (data_src
== NULL
)
1134 throw_error (NO_ENTRY_VALUE_ERROR
,
1135 _("Cannot resolve DW_AT_GNU_call_site_data_value"));
1137 baton_local
.frame
= caller_frame
;
1138 baton_local
.per_cu
= caller_per_cu
;
1140 saved_ctx
.gdbarch
= ctx
->gdbarch
;
1141 saved_ctx
.addr_size
= ctx
->addr_size
;
1142 saved_ctx
.offset
= ctx
->offset
;
1143 saved_ctx
.baton
= ctx
->baton
;
1144 ctx
->gdbarch
= get_objfile_arch (dwarf2_per_cu_objfile (baton_local
.per_cu
));
1145 ctx
->addr_size
= dwarf2_per_cu_addr_size (baton_local
.per_cu
);
1146 ctx
->offset
= dwarf2_per_cu_text_offset (baton_local
.per_cu
);
1147 ctx
->baton
= &baton_local
;
1149 dwarf_expr_eval (ctx
, data_src
, size
);
1151 ctx
->gdbarch
= saved_ctx
.gdbarch
;
1152 ctx
->addr_size
= saved_ctx
.addr_size
;
1153 ctx
->offset
= saved_ctx
.offset
;
1154 ctx
->baton
= saved_ctx
.baton
;
1157 /* Callback function for dwarf2_evaluate_loc_desc.
1158 Fetch the address indexed by DW_OP_GNU_addr_index. */
1161 dwarf_expr_get_addr_index (void *baton
, unsigned int index
)
1163 struct dwarf_expr_baton
*debaton
= (struct dwarf_expr_baton
*) baton
;
1165 return dwarf2_read_addr_index (debaton
->per_cu
, index
);
1168 /* VALUE must be of type lval_computed with entry_data_value_funcs. Perform
1169 the indirect method on it, that is use its stored target value, the sole
1170 purpose of entry_data_value_funcs.. */
1172 static struct value
*
1173 entry_data_value_coerce_ref (const struct value
*value
)
1175 struct type
*checked_type
= check_typedef (value_type (value
));
1176 struct value
*target_val
;
1178 if (TYPE_CODE (checked_type
) != TYPE_CODE_REF
)
1181 target_val
= value_computed_closure (value
);
1182 value_incref (target_val
);
1186 /* Implement copy_closure. */
1189 entry_data_value_copy_closure (const struct value
*v
)
1191 struct value
*target_val
= value_computed_closure (v
);
1193 value_incref (target_val
);
1197 /* Implement free_closure. */
1200 entry_data_value_free_closure (struct value
*v
)
1202 struct value
*target_val
= value_computed_closure (v
);
1204 value_free (target_val
);
1207 /* Vector for methods for an entry value reference where the referenced value
1208 is stored in the caller. On the first dereference use
1209 DW_AT_GNU_call_site_data_value in the caller. */
1211 static const struct lval_funcs entry_data_value_funcs
=
1215 NULL
, /* check_validity */
1216 NULL
, /* check_any_valid */
1217 NULL
, /* indirect */
1218 entry_data_value_coerce_ref
,
1219 NULL
, /* check_synthetic_pointer */
1220 entry_data_value_copy_closure
,
1221 entry_data_value_free_closure
1224 /* Read parameter of TYPE at (callee) FRAME's function entry. KIND and KIND_U
1225 are used to match DW_AT_location at the caller's
1226 DW_TAG_GNU_call_site_parameter.
1228 Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it
1229 cannot resolve the parameter for any reason. */
1231 static struct value
*
1232 value_of_dwarf_reg_entry (struct type
*type
, struct frame_info
*frame
,
1233 enum call_site_parameter_kind kind
,
1234 union call_site_parameter_u kind_u
)
1236 struct type
*checked_type
= check_typedef (type
);
1237 struct type
*target_type
= TYPE_TARGET_TYPE (checked_type
);
1238 struct frame_info
*caller_frame
= get_prev_frame (frame
);
1239 struct value
*outer_val
, *target_val
, *val
;
1240 struct call_site_parameter
*parameter
;
1241 struct dwarf2_per_cu_data
*caller_per_cu
;
1244 parameter
= dwarf_expr_reg_to_entry_parameter (frame
, kind
, kind_u
,
1247 outer_val
= dwarf_entry_parameter_to_value (parameter
, -1 /* deref_size */,
1251 /* Check if DW_AT_GNU_call_site_data_value cannot be used. If it should be
1252 used and it is not available do not fall back to OUTER_VAL - dereferencing
1253 TYPE_CODE_REF with non-entry data value would give current value - not the
1256 if (TYPE_CODE (checked_type
) != TYPE_CODE_REF
1257 || TYPE_TARGET_TYPE (checked_type
) == NULL
)
1260 target_val
= dwarf_entry_parameter_to_value (parameter
,
1261 TYPE_LENGTH (target_type
),
1262 target_type
, caller_frame
,
1265 /* value_as_address dereferences TYPE_CODE_REF. */
1266 addr
= extract_typed_address (value_contents (outer_val
), checked_type
);
1268 /* The target entry value has artificial address of the entry value
1270 VALUE_LVAL (target_val
) = lval_memory
;
1271 set_value_address (target_val
, addr
);
1273 release_value (target_val
);
1274 val
= allocate_computed_value (type
, &entry_data_value_funcs
,
1275 target_val
/* closure */);
1277 /* Copy the referencing pointer to the new computed value. */
1278 memcpy (value_contents_raw (val
), value_contents_raw (outer_val
),
1279 TYPE_LENGTH (checked_type
));
1280 set_value_lazy (val
, 0);
1285 /* Read parameter of TYPE at (callee) FRAME's function entry. DATA and
1286 SIZE are DWARF block used to match DW_AT_location at the caller's
1287 DW_TAG_GNU_call_site_parameter.
1289 Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it
1290 cannot resolve the parameter for any reason. */
1292 static struct value
*
1293 value_of_dwarf_block_entry (struct type
*type
, struct frame_info
*frame
,
1294 const gdb_byte
*block
, size_t block_len
)
1296 union call_site_parameter_u kind_u
;
1298 kind_u
.dwarf_reg
= dwarf_block_to_dwarf_reg (block
, block
+ block_len
);
1299 if (kind_u
.dwarf_reg
!= -1)
1300 return value_of_dwarf_reg_entry (type
, frame
, CALL_SITE_PARAMETER_DWARF_REG
,
1303 if (dwarf_block_to_fb_offset (block
, block
+ block_len
, &kind_u
.fb_offset
))
1304 return value_of_dwarf_reg_entry (type
, frame
, CALL_SITE_PARAMETER_FB_OFFSET
,
1307 /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
1308 suppressed during normal operation. The expression can be arbitrary if
1309 there is no caller-callee entry value binding expected. */
1310 throw_error (NO_ENTRY_VALUE_ERROR
,
1311 _("DWARF-2 expression error: DW_OP_GNU_entry_value is supported "
1312 "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
1315 struct piece_closure
1317 /* Reference count. */
1320 /* The CU from which this closure's expression came. */
1321 struct dwarf2_per_cu_data
*per_cu
;
1323 /* The number of pieces used to describe this variable. */
1326 /* The target address size, used only for DWARF_VALUE_STACK. */
1329 /* The pieces themselves. */
1330 struct dwarf_expr_piece
*pieces
;
1333 /* Allocate a closure for a value formed from separately-described
1336 static struct piece_closure
*
1337 allocate_piece_closure (struct dwarf2_per_cu_data
*per_cu
,
1338 int n_pieces
, struct dwarf_expr_piece
*pieces
,
1341 struct piece_closure
*c
= XZALLOC (struct piece_closure
);
1346 c
->n_pieces
= n_pieces
;
1347 c
->addr_size
= addr_size
;
1348 c
->pieces
= XCALLOC (n_pieces
, struct dwarf_expr_piece
);
1350 memcpy (c
->pieces
, pieces
, n_pieces
* sizeof (struct dwarf_expr_piece
));
1351 for (i
= 0; i
< n_pieces
; ++i
)
1352 if (c
->pieces
[i
].location
== DWARF_VALUE_STACK
)
1353 value_incref (c
->pieces
[i
].v
.value
);
1358 /* The lowest-level function to extract bits from a byte buffer.
1359 SOURCE is the buffer. It is updated if we read to the end of a
1361 SOURCE_OFFSET_BITS is the offset of the first bit to read. It is
1362 updated to reflect the number of bits actually read.
1363 NBITS is the number of bits we want to read. It is updated to
1364 reflect the number of bits actually read. This function may read
1366 BITS_BIG_ENDIAN is taken directly from gdbarch.
1367 This function returns the extracted bits. */
1370 extract_bits_primitive (const gdb_byte
**source
,
1371 unsigned int *source_offset_bits
,
1372 int *nbits
, int bits_big_endian
)
1374 unsigned int avail
, mask
, datum
;
1376 gdb_assert (*source_offset_bits
< 8);
1378 avail
= 8 - *source_offset_bits
;
1382 mask
= (1 << avail
) - 1;
1384 if (bits_big_endian
)
1385 datum
>>= 8 - (*source_offset_bits
+ *nbits
);
1387 datum
>>= *source_offset_bits
;
1391 *source_offset_bits
+= avail
;
1392 if (*source_offset_bits
>= 8)
1394 *source_offset_bits
-= 8;
1401 /* Extract some bits from a source buffer and move forward in the
1404 SOURCE is the source buffer. It is updated as bytes are read.
1405 SOURCE_OFFSET_BITS is the offset into SOURCE. It is updated as
1407 NBITS is the number of bits to read.
1408 BITS_BIG_ENDIAN is taken directly from gdbarch.
1410 This function returns the bits that were read. */
1413 extract_bits (const gdb_byte
**source
, unsigned int *source_offset_bits
,
1414 int nbits
, int bits_big_endian
)
1418 gdb_assert (nbits
> 0 && nbits
<= 8);
1420 datum
= extract_bits_primitive (source
, source_offset_bits
, &nbits
,
1426 more
= extract_bits_primitive (source
, source_offset_bits
, &nbits
,
1428 if (bits_big_endian
)
1438 /* Write some bits into a buffer and move forward in the buffer.
1440 DATUM is the bits to write. The low-order bits of DATUM are used.
1441 DEST is the destination buffer. It is updated as bytes are
1443 DEST_OFFSET_BITS is the bit offset in DEST at which writing is
1445 NBITS is the number of valid bits in DATUM.
1446 BITS_BIG_ENDIAN is taken directly from gdbarch. */
1449 insert_bits (unsigned int datum
,
1450 gdb_byte
*dest
, unsigned int dest_offset_bits
,
1451 int nbits
, int bits_big_endian
)
1455 gdb_assert (dest_offset_bits
+ nbits
<= 8);
1457 mask
= (1 << nbits
) - 1;
1458 if (bits_big_endian
)
1460 datum
<<= 8 - (dest_offset_bits
+ nbits
);
1461 mask
<<= 8 - (dest_offset_bits
+ nbits
);
1465 datum
<<= dest_offset_bits
;
1466 mask
<<= dest_offset_bits
;
1469 gdb_assert ((datum
& ~mask
) == 0);
1471 *dest
= (*dest
& ~mask
) | datum
;
1474 /* Copy bits from a source to a destination.
1476 DEST is where the bits should be written.
1477 DEST_OFFSET_BITS is the bit offset into DEST.
1478 SOURCE is the source of bits.
1479 SOURCE_OFFSET_BITS is the bit offset into SOURCE.
1480 BIT_COUNT is the number of bits to copy.
1481 BITS_BIG_ENDIAN is taken directly from gdbarch. */
1484 copy_bitwise (gdb_byte
*dest
, unsigned int dest_offset_bits
,
1485 const gdb_byte
*source
, unsigned int source_offset_bits
,
1486 unsigned int bit_count
,
1487 int bits_big_endian
)
1489 unsigned int dest_avail
;
1492 /* Reduce everything to byte-size pieces. */
1493 dest
+= dest_offset_bits
/ 8;
1494 dest_offset_bits
%= 8;
1495 source
+= source_offset_bits
/ 8;
1496 source_offset_bits
%= 8;
1498 dest_avail
= 8 - dest_offset_bits
% 8;
1500 /* See if we can fill the first destination byte. */
1501 if (dest_avail
< bit_count
)
1503 datum
= extract_bits (&source
, &source_offset_bits
, dest_avail
,
1505 insert_bits (datum
, dest
, dest_offset_bits
, dest_avail
, bits_big_endian
);
1507 dest_offset_bits
= 0;
1508 bit_count
-= dest_avail
;
1511 /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
1512 than 8 bits remaining. */
1513 gdb_assert (dest_offset_bits
% 8 == 0 || bit_count
< 8);
1514 for (; bit_count
>= 8; bit_count
-= 8)
1516 datum
= extract_bits (&source
, &source_offset_bits
, 8, bits_big_endian
);
1517 *dest
++ = (gdb_byte
) datum
;
1520 /* Finally, we may have a few leftover bits. */
1521 gdb_assert (bit_count
<= 8 - dest_offset_bits
% 8);
1524 datum
= extract_bits (&source
, &source_offset_bits
, bit_count
,
1526 insert_bits (datum
, dest
, dest_offset_bits
, bit_count
, bits_big_endian
);
1531 read_pieced_value (struct value
*v
)
1535 ULONGEST bits_to_skip
;
1537 struct piece_closure
*c
1538 = (struct piece_closure
*) value_computed_closure (v
);
1539 struct frame_info
*frame
= frame_find_by_id (VALUE_FRAME_ID (v
));
1541 size_t buffer_size
= 0;
1542 char *buffer
= NULL
;
1543 struct cleanup
*cleanup
;
1545 = gdbarch_bits_big_endian (get_type_arch (value_type (v
)));
1547 if (value_type (v
) != value_enclosing_type (v
))
1548 internal_error (__FILE__
, __LINE__
,
1549 _("Should not be able to create a lazy value with "
1550 "an enclosing type"));
1552 cleanup
= make_cleanup (free_current_contents
, &buffer
);
1554 contents
= value_contents_raw (v
);
1555 bits_to_skip
= 8 * value_offset (v
);
1556 if (value_bitsize (v
))
1558 bits_to_skip
+= value_bitpos (v
);
1559 type_len
= value_bitsize (v
);
1562 type_len
= 8 * TYPE_LENGTH (value_type (v
));
1564 for (i
= 0; i
< c
->n_pieces
&& offset
< type_len
; i
++)
1566 struct dwarf_expr_piece
*p
= &c
->pieces
[i
];
1567 size_t this_size
, this_size_bits
;
1568 long dest_offset_bits
, source_offset_bits
, source_offset
;
1569 const gdb_byte
*intermediate_buffer
;
1571 /* Compute size, source, and destination offsets for copying, in
1573 this_size_bits
= p
->size
;
1574 if (bits_to_skip
> 0 && bits_to_skip
>= this_size_bits
)
1576 bits_to_skip
-= this_size_bits
;
1579 if (this_size_bits
> type_len
- offset
)
1580 this_size_bits
= type_len
- offset
;
1581 if (bits_to_skip
> 0)
1583 dest_offset_bits
= 0;
1584 source_offset_bits
= bits_to_skip
;
1585 this_size_bits
-= bits_to_skip
;
1590 dest_offset_bits
= offset
;
1591 source_offset_bits
= 0;
1594 this_size
= (this_size_bits
+ source_offset_bits
% 8 + 7) / 8;
1595 source_offset
= source_offset_bits
/ 8;
1596 if (buffer_size
< this_size
)
1598 buffer_size
= this_size
;
1599 buffer
= xrealloc (buffer
, buffer_size
);
1601 intermediate_buffer
= buffer
;
1603 /* Copy from the source to DEST_BUFFER. */
1604 switch (p
->location
)
1606 case DWARF_VALUE_REGISTER
:
1608 struct gdbarch
*arch
= get_frame_arch (frame
);
1609 int gdb_regnum
= gdbarch_dwarf2_reg_to_regnum (arch
, p
->v
.regno
);
1610 int reg_offset
= source_offset
;
1612 if (gdbarch_byte_order (arch
) == BFD_ENDIAN_BIG
1613 && this_size
< register_size (arch
, gdb_regnum
))
1615 /* Big-endian, and we want less than full size. */
1616 reg_offset
= register_size (arch
, gdb_regnum
) - this_size
;
1617 /* We want the lower-order THIS_SIZE_BITS of the bytes
1618 we extract from the register. */
1619 source_offset_bits
+= 8 * this_size
- this_size_bits
;
1622 if (gdb_regnum
!= -1)
1626 if (!get_frame_register_bytes (frame
, gdb_regnum
, reg_offset
,
1630 /* Just so garbage doesn't ever shine through. */
1631 memset (buffer
, 0, this_size
);
1634 set_value_optimized_out (v
, 1);
1636 mark_value_bytes_unavailable (v
, offset
, this_size
);
1641 error (_("Unable to access DWARF register number %s"),
1642 paddress (arch
, p
->v
.regno
));
1647 case DWARF_VALUE_MEMORY
:
1648 read_value_memory (v
, offset
,
1649 p
->v
.mem
.in_stack_memory
,
1650 p
->v
.mem
.addr
+ source_offset
,
1654 case DWARF_VALUE_STACK
:
1656 size_t n
= this_size
;
1658 if (n
> c
->addr_size
- source_offset
)
1659 n
= (c
->addr_size
>= source_offset
1660 ? c
->addr_size
- source_offset
1668 const gdb_byte
*val_bytes
= value_contents_all (p
->v
.value
);
1670 intermediate_buffer
= val_bytes
+ source_offset
;
1675 case DWARF_VALUE_LITERAL
:
1677 size_t n
= this_size
;
1679 if (n
> p
->v
.literal
.length
- source_offset
)
1680 n
= (p
->v
.literal
.length
>= source_offset
1681 ? p
->v
.literal
.length
- source_offset
1684 intermediate_buffer
= p
->v
.literal
.data
+ source_offset
;
1688 /* These bits show up as zeros -- but do not cause the value
1689 to be considered optimized-out. */
1690 case DWARF_VALUE_IMPLICIT_POINTER
:
1693 case DWARF_VALUE_OPTIMIZED_OUT
:
1694 set_value_optimized_out (v
, 1);
1698 internal_error (__FILE__
, __LINE__
, _("invalid location type"));
1701 if (p
->location
!= DWARF_VALUE_OPTIMIZED_OUT
1702 && p
->location
!= DWARF_VALUE_IMPLICIT_POINTER
)
1703 copy_bitwise (contents
, dest_offset_bits
,
1704 intermediate_buffer
, source_offset_bits
% 8,
1705 this_size_bits
, bits_big_endian
);
1707 offset
+= this_size_bits
;
1710 do_cleanups (cleanup
);
1714 write_pieced_value (struct value
*to
, struct value
*from
)
1718 ULONGEST bits_to_skip
;
1719 const gdb_byte
*contents
;
1720 struct piece_closure
*c
1721 = (struct piece_closure
*) value_computed_closure (to
);
1722 struct frame_info
*frame
= frame_find_by_id (VALUE_FRAME_ID (to
));
1724 size_t buffer_size
= 0;
1725 char *buffer
= NULL
;
1726 struct cleanup
*cleanup
;
1728 = gdbarch_bits_big_endian (get_type_arch (value_type (to
)));
1732 set_value_optimized_out (to
, 1);
1736 cleanup
= make_cleanup (free_current_contents
, &buffer
);
1738 contents
= value_contents (from
);
1739 bits_to_skip
= 8 * value_offset (to
);
1740 if (value_bitsize (to
))
1742 bits_to_skip
+= value_bitpos (to
);
1743 type_len
= value_bitsize (to
);
1746 type_len
= 8 * TYPE_LENGTH (value_type (to
));
1748 for (i
= 0; i
< c
->n_pieces
&& offset
< type_len
; i
++)
1750 struct dwarf_expr_piece
*p
= &c
->pieces
[i
];
1751 size_t this_size_bits
, this_size
;
1752 long dest_offset_bits
, source_offset_bits
, dest_offset
, source_offset
;
1754 const gdb_byte
*source_buffer
;
1756 this_size_bits
= p
->size
;
1757 if (bits_to_skip
> 0 && bits_to_skip
>= this_size_bits
)
1759 bits_to_skip
-= this_size_bits
;
1762 if (this_size_bits
> type_len
- offset
)
1763 this_size_bits
= type_len
- offset
;
1764 if (bits_to_skip
> 0)
1766 dest_offset_bits
= bits_to_skip
;
1767 source_offset_bits
= 0;
1768 this_size_bits
-= bits_to_skip
;
1773 dest_offset_bits
= 0;
1774 source_offset_bits
= offset
;
1777 this_size
= (this_size_bits
+ source_offset_bits
% 8 + 7) / 8;
1778 source_offset
= source_offset_bits
/ 8;
1779 dest_offset
= dest_offset_bits
/ 8;
1780 if (dest_offset_bits
% 8 == 0 && source_offset_bits
% 8 == 0)
1782 source_buffer
= contents
+ source_offset
;
1787 if (buffer_size
< this_size
)
1789 buffer_size
= this_size
;
1790 buffer
= xrealloc (buffer
, buffer_size
);
1792 source_buffer
= buffer
;
1796 switch (p
->location
)
1798 case DWARF_VALUE_REGISTER
:
1800 struct gdbarch
*arch
= get_frame_arch (frame
);
1801 int gdb_regnum
= gdbarch_dwarf2_reg_to_regnum (arch
, p
->v
.regno
);
1802 int reg_offset
= dest_offset
;
1804 if (gdbarch_byte_order (arch
) == BFD_ENDIAN_BIG
1805 && this_size
<= register_size (arch
, gdb_regnum
))
1806 /* Big-endian, and we want less than full size. */
1807 reg_offset
= register_size (arch
, gdb_regnum
) - this_size
;
1809 if (gdb_regnum
!= -1)
1815 if (!get_frame_register_bytes (frame
, gdb_regnum
, reg_offset
,
1820 error (_("Can't do read-modify-write to "
1821 "update bitfield; containing word has been "
1824 throw_error (NOT_AVAILABLE_ERROR
,
1825 _("Can't do read-modify-write to update "
1826 "bitfield; containing word "
1829 copy_bitwise (buffer
, dest_offset_bits
,
1830 contents
, source_offset_bits
,
1835 put_frame_register_bytes (frame
, gdb_regnum
, reg_offset
,
1836 this_size
, source_buffer
);
1840 error (_("Unable to write to DWARF register number %s"),
1841 paddress (arch
, p
->v
.regno
));
1845 case DWARF_VALUE_MEMORY
:
1848 /* Only the first and last bytes can possibly have any
1850 read_memory (p
->v
.mem
.addr
+ dest_offset
, buffer
, 1);
1851 read_memory (p
->v
.mem
.addr
+ dest_offset
+ this_size
- 1,
1852 buffer
+ this_size
- 1, 1);
1853 copy_bitwise (buffer
, dest_offset_bits
,
1854 contents
, source_offset_bits
,
1859 write_memory (p
->v
.mem
.addr
+ dest_offset
,
1860 source_buffer
, this_size
);
1863 set_value_optimized_out (to
, 1);
1866 offset
+= this_size_bits
;
1869 do_cleanups (cleanup
);
1872 /* A helper function that checks bit validity in a pieced value.
1873 CHECK_FOR indicates the kind of validity checking.
1874 DWARF_VALUE_MEMORY means to check whether any bit is valid.
1875 DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is
1877 DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
1878 implicit pointer. */
1881 check_pieced_value_bits (const struct value
*value
, int bit_offset
,
1883 enum dwarf_value_location check_for
)
1885 struct piece_closure
*c
1886 = (struct piece_closure
*) value_computed_closure (value
);
1888 int validity
= (check_for
== DWARF_VALUE_MEMORY
1889 || check_for
== DWARF_VALUE_IMPLICIT_POINTER
);
1891 bit_offset
+= 8 * value_offset (value
);
1892 if (value_bitsize (value
))
1893 bit_offset
+= value_bitpos (value
);
1895 for (i
= 0; i
< c
->n_pieces
&& bit_length
> 0; i
++)
1897 struct dwarf_expr_piece
*p
= &c
->pieces
[i
];
1898 size_t this_size_bits
= p
->size
;
1902 if (bit_offset
>= this_size_bits
)
1904 bit_offset
-= this_size_bits
;
1908 bit_length
-= this_size_bits
- bit_offset
;
1912 bit_length
-= this_size_bits
;
1914 if (check_for
== DWARF_VALUE_IMPLICIT_POINTER
)
1916 if (p
->location
!= DWARF_VALUE_IMPLICIT_POINTER
)
1919 else if (p
->location
== DWARF_VALUE_OPTIMIZED_OUT
1920 || p
->location
== DWARF_VALUE_IMPLICIT_POINTER
)
1936 check_pieced_value_validity (const struct value
*value
, int bit_offset
,
1939 return check_pieced_value_bits (value
, bit_offset
, bit_length
,
1940 DWARF_VALUE_MEMORY
);
1944 check_pieced_value_invalid (const struct value
*value
)
1946 return check_pieced_value_bits (value
, 0,
1947 8 * TYPE_LENGTH (value_type (value
)),
1948 DWARF_VALUE_OPTIMIZED_OUT
);
1951 /* An implementation of an lval_funcs method to see whether a value is
1952 a synthetic pointer. */
1955 check_pieced_synthetic_pointer (const struct value
*value
, int bit_offset
,
1958 return check_pieced_value_bits (value
, bit_offset
, bit_length
,
1959 DWARF_VALUE_IMPLICIT_POINTER
);
1962 /* A wrapper function for get_frame_address_in_block. */
1965 get_frame_address_in_block_wrapper (void *baton
)
1967 return get_frame_address_in_block (baton
);
1970 /* An implementation of an lval_funcs method to indirect through a
1971 pointer. This handles the synthetic pointer case when needed. */
1973 static struct value
*
1974 indirect_pieced_value (struct value
*value
)
1976 struct piece_closure
*c
1977 = (struct piece_closure
*) value_computed_closure (value
);
1979 struct frame_info
*frame
;
1980 struct dwarf2_locexpr_baton baton
;
1981 int i
, bit_offset
, bit_length
;
1982 struct dwarf_expr_piece
*piece
= NULL
;
1983 LONGEST byte_offset
;
1985 type
= check_typedef (value_type (value
));
1986 if (TYPE_CODE (type
) != TYPE_CODE_PTR
)
1989 bit_length
= 8 * TYPE_LENGTH (type
);
1990 bit_offset
= 8 * value_offset (value
);
1991 if (value_bitsize (value
))
1992 bit_offset
+= value_bitpos (value
);
1994 for (i
= 0; i
< c
->n_pieces
&& bit_length
> 0; i
++)
1996 struct dwarf_expr_piece
*p
= &c
->pieces
[i
];
1997 size_t this_size_bits
= p
->size
;
2001 if (bit_offset
>= this_size_bits
)
2003 bit_offset
-= this_size_bits
;
2007 bit_length
-= this_size_bits
- bit_offset
;
2011 bit_length
-= this_size_bits
;
2013 if (p
->location
!= DWARF_VALUE_IMPLICIT_POINTER
)
2016 if (bit_length
!= 0)
2017 error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
2023 frame
= get_selected_frame (_("No frame selected."));
2025 /* This is an offset requested by GDB, such as value subcripts. */
2026 byte_offset
= value_as_address (value
);
2029 baton
= dwarf2_fetch_die_location_block (piece
->v
.ptr
.die
, c
->per_cu
,
2030 get_frame_address_in_block_wrapper
,
2033 return dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type
), frame
,
2034 baton
.data
, baton
.size
, baton
.per_cu
,
2035 piece
->v
.ptr
.offset
+ byte_offset
);
2039 copy_pieced_value_closure (const struct value
*v
)
2041 struct piece_closure
*c
2042 = (struct piece_closure
*) value_computed_closure (v
);
2049 free_pieced_value_closure (struct value
*v
)
2051 struct piece_closure
*c
2052 = (struct piece_closure
*) value_computed_closure (v
);
2059 for (i
= 0; i
< c
->n_pieces
; ++i
)
2060 if (c
->pieces
[i
].location
== DWARF_VALUE_STACK
)
2061 value_free (c
->pieces
[i
].v
.value
);
2068 /* Functions for accessing a variable described by DW_OP_piece. */
2069 static const struct lval_funcs pieced_value_funcs
= {
2072 check_pieced_value_validity
,
2073 check_pieced_value_invalid
,
2074 indirect_pieced_value
,
2075 NULL
, /* coerce_ref */
2076 check_pieced_synthetic_pointer
,
2077 copy_pieced_value_closure
,
2078 free_pieced_value_closure
2081 /* Helper function which throws an error if a synthetic pointer is
2085 invalid_synthetic_pointer (void)
2087 error (_("access outside bounds of object "
2088 "referenced via synthetic pointer"));
2091 /* Virtual method table for dwarf2_evaluate_loc_desc_full below. */
2093 static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs
=
2095 dwarf_expr_read_reg
,
2096 dwarf_expr_read_mem
,
2097 dwarf_expr_frame_base
,
2098 dwarf_expr_frame_cfa
,
2099 dwarf_expr_frame_pc
,
2100 dwarf_expr_tls_address
,
2101 dwarf_expr_dwarf_call
,
2102 dwarf_expr_get_base_type
,
2103 dwarf_expr_push_dwarf_reg_entry_value
,
2104 dwarf_expr_get_addr_index
2107 /* Evaluate a location description, starting at DATA and with length
2108 SIZE, to find the current location of variable of TYPE in the
2109 context of FRAME. BYTE_OFFSET is applied after the contents are
2112 static struct value
*
2113 dwarf2_evaluate_loc_desc_full (struct type
*type
, struct frame_info
*frame
,
2114 const gdb_byte
*data
, size_t size
,
2115 struct dwarf2_per_cu_data
*per_cu
,
2116 LONGEST byte_offset
)
2118 struct value
*retval
;
2119 struct dwarf_expr_baton baton
;
2120 struct dwarf_expr_context
*ctx
;
2121 struct cleanup
*old_chain
, *value_chain
;
2122 struct objfile
*objfile
= dwarf2_per_cu_objfile (per_cu
);
2123 volatile struct gdb_exception ex
;
2125 if (byte_offset
< 0)
2126 invalid_synthetic_pointer ();
2129 return allocate_optimized_out_value (type
);
2131 baton
.frame
= frame
;
2132 baton
.per_cu
= per_cu
;
2134 ctx
= new_dwarf_expr_context ();
2135 old_chain
= make_cleanup_free_dwarf_expr_context (ctx
);
2136 value_chain
= make_cleanup_value_free_to_mark (value_mark ());
2138 ctx
->gdbarch
= get_objfile_arch (objfile
);
2139 ctx
->addr_size
= dwarf2_per_cu_addr_size (per_cu
);
2140 ctx
->ref_addr_size
= dwarf2_per_cu_ref_addr_size (per_cu
);
2141 ctx
->offset
= dwarf2_per_cu_text_offset (per_cu
);
2142 ctx
->baton
= &baton
;
2143 ctx
->funcs
= &dwarf_expr_ctx_funcs
;
2145 TRY_CATCH (ex
, RETURN_MASK_ERROR
)
2147 dwarf_expr_eval (ctx
, data
, size
);
2151 if (ex
.error
== NOT_AVAILABLE_ERROR
)
2153 do_cleanups (old_chain
);
2154 retval
= allocate_value (type
);
2155 mark_value_bytes_unavailable (retval
, 0, TYPE_LENGTH (type
));
2158 else if (ex
.error
== NO_ENTRY_VALUE_ERROR
)
2160 if (entry_values_debug
)
2161 exception_print (gdb_stdout
, ex
);
2162 do_cleanups (old_chain
);
2163 return allocate_optimized_out_value (type
);
2166 throw_exception (ex
);
2169 if (ctx
->num_pieces
> 0)
2171 struct piece_closure
*c
;
2172 struct frame_id frame_id
= get_frame_id (frame
);
2173 ULONGEST bit_size
= 0;
2176 for (i
= 0; i
< ctx
->num_pieces
; ++i
)
2177 bit_size
+= ctx
->pieces
[i
].size
;
2178 if (8 * (byte_offset
+ TYPE_LENGTH (type
)) > bit_size
)
2179 invalid_synthetic_pointer ();
2181 c
= allocate_piece_closure (per_cu
, ctx
->num_pieces
, ctx
->pieces
,
2183 /* We must clean up the value chain after creating the piece
2184 closure but before allocating the result. */
2185 do_cleanups (value_chain
);
2186 retval
= allocate_computed_value (type
, &pieced_value_funcs
, c
);
2187 VALUE_FRAME_ID (retval
) = frame_id
;
2188 set_value_offset (retval
, byte_offset
);
2192 switch (ctx
->location
)
2194 case DWARF_VALUE_REGISTER
:
2196 struct gdbarch
*arch
= get_frame_arch (frame
);
2197 ULONGEST dwarf_regnum
= value_as_long (dwarf_expr_fetch (ctx
, 0));
2198 int gdb_regnum
= gdbarch_dwarf2_reg_to_regnum (arch
, dwarf_regnum
);
2200 if (byte_offset
!= 0)
2201 error (_("cannot use offset on synthetic pointer to register"));
2202 do_cleanups (value_chain
);
2203 if (gdb_regnum
!= -1)
2204 retval
= value_from_register (type
, gdb_regnum
, frame
);
2206 error (_("Unable to access DWARF register number %s"),
2207 paddress (arch
, dwarf_regnum
));
2211 case DWARF_VALUE_MEMORY
:
2213 CORE_ADDR address
= dwarf_expr_fetch_address (ctx
, 0);
2214 int in_stack_memory
= dwarf_expr_fetch_in_stack_memory (ctx
, 0);
2216 do_cleanups (value_chain
);
2217 retval
= allocate_value_lazy (type
);
2218 VALUE_LVAL (retval
) = lval_memory
;
2219 if (in_stack_memory
)
2220 set_value_stack (retval
, 1);
2221 set_value_address (retval
, address
+ byte_offset
);
2225 case DWARF_VALUE_STACK
:
2227 struct value
*value
= dwarf_expr_fetch (ctx
, 0);
2229 const gdb_byte
*val_bytes
;
2230 size_t n
= TYPE_LENGTH (value_type (value
));
2232 if (byte_offset
+ TYPE_LENGTH (type
) > n
)
2233 invalid_synthetic_pointer ();
2235 val_bytes
= value_contents_all (value
);
2236 val_bytes
+= byte_offset
;
2239 /* Preserve VALUE because we are going to free values back
2240 to the mark, but we still need the value contents
2242 value_incref (value
);
2243 do_cleanups (value_chain
);
2244 make_cleanup_value_free (value
);
2246 retval
= allocate_value (type
);
2247 contents
= value_contents_raw (retval
);
2248 if (n
> TYPE_LENGTH (type
))
2250 struct gdbarch
*objfile_gdbarch
= get_objfile_arch (objfile
);
2252 if (gdbarch_byte_order (objfile_gdbarch
) == BFD_ENDIAN_BIG
)
2253 val_bytes
+= n
- TYPE_LENGTH (type
);
2254 n
= TYPE_LENGTH (type
);
2256 memcpy (contents
, val_bytes
, n
);
2260 case DWARF_VALUE_LITERAL
:
2263 const bfd_byte
*ldata
;
2264 size_t n
= ctx
->len
;
2266 if (byte_offset
+ TYPE_LENGTH (type
) > n
)
2267 invalid_synthetic_pointer ();
2269 do_cleanups (value_chain
);
2270 retval
= allocate_value (type
);
2271 contents
= value_contents_raw (retval
);
2273 ldata
= ctx
->data
+ byte_offset
;
2276 if (n
> TYPE_LENGTH (type
))
2278 struct gdbarch
*objfile_gdbarch
= get_objfile_arch (objfile
);
2280 if (gdbarch_byte_order (objfile_gdbarch
) == BFD_ENDIAN_BIG
)
2281 ldata
+= n
- TYPE_LENGTH (type
);
2282 n
= TYPE_LENGTH (type
);
2284 memcpy (contents
, ldata
, n
);
2288 case DWARF_VALUE_OPTIMIZED_OUT
:
2289 do_cleanups (value_chain
);
2290 retval
= allocate_optimized_out_value (type
);
2293 /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
2294 operation by execute_stack_op. */
2295 case DWARF_VALUE_IMPLICIT_POINTER
:
2296 /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
2297 it can only be encountered when making a piece. */
2299 internal_error (__FILE__
, __LINE__
, _("invalid location type"));
2303 set_value_initialized (retval
, ctx
->initialized
);
2305 do_cleanups (old_chain
);
2310 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
2311 passes 0 as the byte_offset. */
2314 dwarf2_evaluate_loc_desc (struct type
*type
, struct frame_info
*frame
,
2315 const gdb_byte
*data
, size_t size
,
2316 struct dwarf2_per_cu_data
*per_cu
)
2318 return dwarf2_evaluate_loc_desc_full (type
, frame
, data
, size
, per_cu
, 0);
2322 /* Helper functions and baton for dwarf2_loc_desc_needs_frame. */
2324 struct needs_frame_baton
2327 struct dwarf2_per_cu_data
*per_cu
;
2330 /* Reads from registers do require a frame. */
2332 needs_frame_read_reg (void *baton
, int regnum
)
2334 struct needs_frame_baton
*nf_baton
= baton
;
2336 nf_baton
->needs_frame
= 1;
2340 /* Reads from memory do not require a frame. */
2342 needs_frame_read_mem (void *baton
, gdb_byte
*buf
, CORE_ADDR addr
, size_t len
)
2344 memset (buf
, 0, len
);
2347 /* Frame-relative accesses do require a frame. */
2349 needs_frame_frame_base (void *baton
, const gdb_byte
**start
, size_t * length
)
2351 static gdb_byte lit0
= DW_OP_lit0
;
2352 struct needs_frame_baton
*nf_baton
= baton
;
2357 nf_baton
->needs_frame
= 1;
2360 /* CFA accesses require a frame. */
2363 needs_frame_frame_cfa (void *baton
)
2365 struct needs_frame_baton
*nf_baton
= baton
;
2367 nf_baton
->needs_frame
= 1;
2371 /* Thread-local accesses do require a frame. */
2373 needs_frame_tls_address (void *baton
, CORE_ADDR offset
)
2375 struct needs_frame_baton
*nf_baton
= baton
;
2377 nf_baton
->needs_frame
= 1;
2381 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame. */
2384 needs_frame_dwarf_call (struct dwarf_expr_context
*ctx
, cu_offset die_offset
)
2386 struct needs_frame_baton
*nf_baton
= ctx
->baton
;
2388 per_cu_dwarf_call (ctx
, die_offset
, nf_baton
->per_cu
,
2389 ctx
->funcs
->get_frame_pc
, ctx
->baton
);
2392 /* DW_OP_GNU_entry_value accesses require a caller, therefore a frame. */
2395 needs_dwarf_reg_entry_value (struct dwarf_expr_context
*ctx
,
2396 enum call_site_parameter_kind kind
,
2397 union call_site_parameter_u kind_u
, int deref_size
)
2399 struct needs_frame_baton
*nf_baton
= ctx
->baton
;
2401 nf_baton
->needs_frame
= 1;
2403 /* The expression may require some stub values on DWARF stack. */
2404 dwarf_expr_push_address (ctx
, 0, 0);
2407 /* DW_OP_GNU_addr_index doesn't require a frame. */
2410 needs_get_addr_index (void *baton
, unsigned int index
)
2412 /* Nothing to do. */
2416 /* Virtual method table for dwarf2_loc_desc_needs_frame below. */
2418 static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs
=
2420 needs_frame_read_reg
,
2421 needs_frame_read_mem
,
2422 needs_frame_frame_base
,
2423 needs_frame_frame_cfa
,
2424 needs_frame_frame_cfa
, /* get_frame_pc */
2425 needs_frame_tls_address
,
2426 needs_frame_dwarf_call
,
2427 NULL
, /* get_base_type */
2428 needs_dwarf_reg_entry_value
,
2429 needs_get_addr_index
2432 /* Return non-zero iff the location expression at DATA (length SIZE)
2433 requires a frame to evaluate. */
2436 dwarf2_loc_desc_needs_frame (const gdb_byte
*data
, size_t size
,
2437 struct dwarf2_per_cu_data
*per_cu
)
2439 struct needs_frame_baton baton
;
2440 struct dwarf_expr_context
*ctx
;
2442 struct cleanup
*old_chain
;
2443 struct objfile
*objfile
= dwarf2_per_cu_objfile (per_cu
);
2445 baton
.needs_frame
= 0;
2446 baton
.per_cu
= per_cu
;
2448 ctx
= new_dwarf_expr_context ();
2449 old_chain
= make_cleanup_free_dwarf_expr_context (ctx
);
2450 make_cleanup_value_free_to_mark (value_mark ());
2452 ctx
->gdbarch
= get_objfile_arch (objfile
);
2453 ctx
->addr_size
= dwarf2_per_cu_addr_size (per_cu
);
2454 ctx
->ref_addr_size
= dwarf2_per_cu_ref_addr_size (per_cu
);
2455 ctx
->offset
= dwarf2_per_cu_text_offset (per_cu
);
2456 ctx
->baton
= &baton
;
2457 ctx
->funcs
= &needs_frame_ctx_funcs
;
2459 dwarf_expr_eval (ctx
, data
, size
);
2461 in_reg
= ctx
->location
== DWARF_VALUE_REGISTER
;
2463 if (ctx
->num_pieces
> 0)
2467 /* If the location has several pieces, and any of them are in
2468 registers, then we will need a frame to fetch them from. */
2469 for (i
= 0; i
< ctx
->num_pieces
; i
++)
2470 if (ctx
->pieces
[i
].location
== DWARF_VALUE_REGISTER
)
2474 do_cleanups (old_chain
);
2476 return baton
.needs_frame
|| in_reg
;
2479 /* A helper function that throws an unimplemented error mentioning a
2480 given DWARF operator. */
2483 unimplemented (unsigned int op
)
2485 const char *name
= get_DW_OP_name (op
);
2488 error (_("DWARF operator %s cannot be translated to an agent expression"),
2491 error (_("Unknown DWARF operator 0x%02x cannot be translated "
2492 "to an agent expression"),
2496 /* A helper function to convert a DWARF register to an arch register.
2497 ARCH is the architecture.
2498 DWARF_REG is the register.
2499 This will throw an exception if the DWARF register cannot be
2500 translated to an architecture register. */
2503 translate_register (struct gdbarch
*arch
, int dwarf_reg
)
2505 int reg
= gdbarch_dwarf2_reg_to_regnum (arch
, dwarf_reg
);
2507 error (_("Unable to access DWARF register number %d"), dwarf_reg
);
2511 /* A helper function that emits an access to memory. ARCH is the
2512 target architecture. EXPR is the expression which we are building.
2513 NBITS is the number of bits we want to read. This emits the
2514 opcodes needed to read the memory and then extract the desired
2518 access_memory (struct gdbarch
*arch
, struct agent_expr
*expr
, ULONGEST nbits
)
2520 ULONGEST nbytes
= (nbits
+ 7) / 8;
2522 gdb_assert (nbits
> 0 && nbits
<= sizeof (LONGEST
));
2525 ax_trace_quick (expr
, nbytes
);
2528 ax_simple (expr
, aop_ref8
);
2529 else if (nbits
<= 16)
2530 ax_simple (expr
, aop_ref16
);
2531 else if (nbits
<= 32)
2532 ax_simple (expr
, aop_ref32
);
2534 ax_simple (expr
, aop_ref64
);
2536 /* If we read exactly the number of bytes we wanted, we're done. */
2537 if (8 * nbytes
== nbits
)
2540 if (gdbarch_bits_big_endian (arch
))
2542 /* On a bits-big-endian machine, we want the high-order
2544 ax_const_l (expr
, 8 * nbytes
- nbits
);
2545 ax_simple (expr
, aop_rsh_unsigned
);
2549 /* On a bits-little-endian box, we want the low-order NBITS. */
2550 ax_zero_ext (expr
, nbits
);
2554 /* A helper function to return the frame's PC. */
2557 get_ax_pc (void *baton
)
2559 struct agent_expr
*expr
= baton
;
2564 /* Compile a DWARF location expression to an agent expression.
2566 EXPR is the agent expression we are building.
2567 LOC is the agent value we modify.
2568 ARCH is the architecture.
2569 ADDR_SIZE is the size of addresses, in bytes.
2570 OP_PTR is the start of the location expression.
2571 OP_END is one past the last byte of the location expression.
2573 This will throw an exception for various kinds of errors -- for
2574 example, if the expression cannot be compiled, or if the expression
2578 dwarf2_compile_expr_to_ax (struct agent_expr
*expr
, struct axs_value
*loc
,
2579 struct gdbarch
*arch
, unsigned int addr_size
,
2580 const gdb_byte
*op_ptr
, const gdb_byte
*op_end
,
2581 struct dwarf2_per_cu_data
*per_cu
)
2583 struct cleanup
*cleanups
;
2585 VEC(int) *dw_labels
= NULL
, *patches
= NULL
;
2586 const gdb_byte
* const base
= op_ptr
;
2587 const gdb_byte
*previous_piece
= op_ptr
;
2588 enum bfd_endian byte_order
= gdbarch_byte_order (arch
);
2589 ULONGEST bits_collected
= 0;
2590 unsigned int addr_size_bits
= 8 * addr_size
;
2591 int bits_big_endian
= gdbarch_bits_big_endian (arch
);
2593 offsets
= xmalloc ((op_end
- op_ptr
) * sizeof (int));
2594 cleanups
= make_cleanup (xfree
, offsets
);
2596 for (i
= 0; i
< op_end
- op_ptr
; ++i
)
2599 make_cleanup (VEC_cleanup (int), &dw_labels
);
2600 make_cleanup (VEC_cleanup (int), &patches
);
2602 /* By default we are making an address. */
2603 loc
->kind
= axs_lvalue_memory
;
2605 while (op_ptr
< op_end
)
2607 enum dwarf_location_atom op
= *op_ptr
;
2608 uint64_t uoffset
, reg
;
2612 offsets
[op_ptr
- base
] = expr
->len
;
2615 /* Our basic approach to code generation is to map DWARF
2616 operations directly to AX operations. However, there are
2619 First, DWARF works on address-sized units, but AX always uses
2620 LONGEST. For most operations we simply ignore this
2621 difference; instead we generate sign extensions as needed
2622 before division and comparison operations. It would be nice
2623 to omit the sign extensions, but there is no way to determine
2624 the size of the target's LONGEST. (This code uses the size
2625 of the host LONGEST in some cases -- that is a bug but it is
2628 Second, some DWARF operations cannot be translated to AX.
2629 For these we simply fail. See
2630 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
2665 ax_const_l (expr
, op
- DW_OP_lit0
);
2669 uoffset
= extract_unsigned_integer (op_ptr
, addr_size
, byte_order
);
2670 op_ptr
+= addr_size
;
2671 /* Some versions of GCC emit DW_OP_addr before
2672 DW_OP_GNU_push_tls_address. In this case the value is an
2673 index, not an address. We don't support things like
2674 branching between the address and the TLS op. */
2675 if (op_ptr
>= op_end
|| *op_ptr
!= DW_OP_GNU_push_tls_address
)
2676 uoffset
+= dwarf2_per_cu_text_offset (per_cu
);
2677 ax_const_l (expr
, uoffset
);
2681 ax_const_l (expr
, extract_unsigned_integer (op_ptr
, 1, byte_order
));
2685 ax_const_l (expr
, extract_signed_integer (op_ptr
, 1, byte_order
));
2689 ax_const_l (expr
, extract_unsigned_integer (op_ptr
, 2, byte_order
));
2693 ax_const_l (expr
, extract_signed_integer (op_ptr
, 2, byte_order
));
2697 ax_const_l (expr
, extract_unsigned_integer (op_ptr
, 4, byte_order
));
2701 ax_const_l (expr
, extract_signed_integer (op_ptr
, 4, byte_order
));
2705 ax_const_l (expr
, extract_unsigned_integer (op_ptr
, 8, byte_order
));
2709 ax_const_l (expr
, extract_signed_integer (op_ptr
, 8, byte_order
));
2713 op_ptr
= safe_read_uleb128 (op_ptr
, op_end
, &uoffset
);
2714 ax_const_l (expr
, uoffset
);
2717 op_ptr
= safe_read_sleb128 (op_ptr
, op_end
, &offset
);
2718 ax_const_l (expr
, offset
);
2753 dwarf_expr_require_composition (op_ptr
, op_end
, "DW_OP_regx");
2754 loc
->u
.reg
= translate_register (arch
, op
- DW_OP_reg0
);
2755 loc
->kind
= axs_lvalue_register
;
2759 op_ptr
= safe_read_uleb128 (op_ptr
, op_end
, ®
);
2760 dwarf_expr_require_composition (op_ptr
, op_end
, "DW_OP_regx");
2761 loc
->u
.reg
= translate_register (arch
, reg
);
2762 loc
->kind
= axs_lvalue_register
;
2765 case DW_OP_implicit_value
:
2769 op_ptr
= safe_read_uleb128 (op_ptr
, op_end
, &len
);
2770 if (op_ptr
+ len
> op_end
)
2771 error (_("DW_OP_implicit_value: too few bytes available."));
2772 if (len
> sizeof (ULONGEST
))
2773 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
2776 ax_const_l (expr
, extract_unsigned_integer (op_ptr
, len
,
2779 dwarf_expr_require_composition (op_ptr
, op_end
,
2780 "DW_OP_implicit_value");
2782 loc
->kind
= axs_rvalue
;
2786 case DW_OP_stack_value
:
2787 dwarf_expr_require_composition (op_ptr
, op_end
, "DW_OP_stack_value");
2788 loc
->kind
= axs_rvalue
;
2823 op_ptr
= safe_read_sleb128 (op_ptr
, op_end
, &offset
);
2824 i
= translate_register (arch
, op
- DW_OP_breg0
);
2828 ax_const_l (expr
, offset
);
2829 ax_simple (expr
, aop_add
);
2834 op_ptr
= safe_read_uleb128 (op_ptr
, op_end
, ®
);
2835 op_ptr
= safe_read_sleb128 (op_ptr
, op_end
, &offset
);
2836 i
= translate_register (arch
, reg
);
2840 ax_const_l (expr
, offset
);
2841 ax_simple (expr
, aop_add
);
2847 const gdb_byte
*datastart
;
2850 struct symbol
*framefunc
;
2851 LONGEST base_offset
= 0;
2853 b
= block_for_pc (expr
->scope
);
2856 error (_("No block found for address"));
2858 framefunc
= block_linkage_function (b
);
2861 error (_("No function found for block"));
2863 dwarf_expr_frame_base_1 (framefunc
, expr
->scope
,
2864 &datastart
, &datalen
);
2866 op_ptr
= safe_read_sleb128 (op_ptr
, op_end
, &offset
);
2867 dwarf2_compile_expr_to_ax (expr
, loc
, arch
, addr_size
, datastart
,
2868 datastart
+ datalen
, per_cu
);
2872 ax_const_l (expr
, offset
);
2873 ax_simple (expr
, aop_add
);
2876 loc
->kind
= axs_lvalue_memory
;
2881 ax_simple (expr
, aop_dup
);
2885 ax_simple (expr
, aop_pop
);
2890 ax_pick (expr
, offset
);
2894 ax_simple (expr
, aop_swap
);
2902 ax_simple (expr
, aop_rot
);
2906 case DW_OP_deref_size
:
2910 if (op
== DW_OP_deref_size
)
2918 ax_simple (expr
, aop_ref8
);
2921 ax_simple (expr
, aop_ref16
);
2924 ax_simple (expr
, aop_ref32
);
2927 ax_simple (expr
, aop_ref64
);
2930 /* Note that get_DW_OP_name will never return
2932 error (_("Unsupported size %d in %s"),
2933 size
, get_DW_OP_name (op
));
2939 /* Sign extend the operand. */
2940 ax_ext (expr
, addr_size_bits
);
2941 ax_simple (expr
, aop_dup
);
2942 ax_const_l (expr
, 0);
2943 ax_simple (expr
, aop_less_signed
);
2944 ax_simple (expr
, aop_log_not
);
2945 i
= ax_goto (expr
, aop_if_goto
);
2946 /* We have to emit 0 - X. */
2947 ax_const_l (expr
, 0);
2948 ax_simple (expr
, aop_swap
);
2949 ax_simple (expr
, aop_sub
);
2950 ax_label (expr
, i
, expr
->len
);
2954 /* No need to sign extend here. */
2955 ax_const_l (expr
, 0);
2956 ax_simple (expr
, aop_swap
);
2957 ax_simple (expr
, aop_sub
);
2961 /* Sign extend the operand. */
2962 ax_ext (expr
, addr_size_bits
);
2963 ax_simple (expr
, aop_bit_not
);
2966 case DW_OP_plus_uconst
:
2967 op_ptr
= safe_read_uleb128 (op_ptr
, op_end
, ®
);
2968 /* It would be really weird to emit `DW_OP_plus_uconst 0',
2969 but we micro-optimize anyhow. */
2972 ax_const_l (expr
, reg
);
2973 ax_simple (expr
, aop_add
);
2978 ax_simple (expr
, aop_bit_and
);
2982 /* Sign extend the operands. */
2983 ax_ext (expr
, addr_size_bits
);
2984 ax_simple (expr
, aop_swap
);
2985 ax_ext (expr
, addr_size_bits
);
2986 ax_simple (expr
, aop_swap
);
2987 ax_simple (expr
, aop_div_signed
);
2991 ax_simple (expr
, aop_sub
);
2995 ax_simple (expr
, aop_rem_unsigned
);
2999 ax_simple (expr
, aop_mul
);
3003 ax_simple (expr
, aop_bit_or
);
3007 ax_simple (expr
, aop_add
);
3011 ax_simple (expr
, aop_lsh
);
3015 ax_simple (expr
, aop_rsh_unsigned
);
3019 ax_simple (expr
, aop_rsh_signed
);
3023 ax_simple (expr
, aop_bit_xor
);
3027 /* Sign extend the operands. */
3028 ax_ext (expr
, addr_size_bits
);
3029 ax_simple (expr
, aop_swap
);
3030 ax_ext (expr
, addr_size_bits
);
3031 /* Note no swap here: A <= B is !(B < A). */
3032 ax_simple (expr
, aop_less_signed
);
3033 ax_simple (expr
, aop_log_not
);
3037 /* Sign extend the operands. */
3038 ax_ext (expr
, addr_size_bits
);
3039 ax_simple (expr
, aop_swap
);
3040 ax_ext (expr
, addr_size_bits
);
3041 ax_simple (expr
, aop_swap
);
3042 /* A >= B is !(A < B). */
3043 ax_simple (expr
, aop_less_signed
);
3044 ax_simple (expr
, aop_log_not
);
3048 /* Sign extend the operands. */
3049 ax_ext (expr
, addr_size_bits
);
3050 ax_simple (expr
, aop_swap
);
3051 ax_ext (expr
, addr_size_bits
);
3052 /* No need for a second swap here. */
3053 ax_simple (expr
, aop_equal
);
3057 /* Sign extend the operands. */
3058 ax_ext (expr
, addr_size_bits
);
3059 ax_simple (expr
, aop_swap
);
3060 ax_ext (expr
, addr_size_bits
);
3061 ax_simple (expr
, aop_swap
);
3062 ax_simple (expr
, aop_less_signed
);
3066 /* Sign extend the operands. */
3067 ax_ext (expr
, addr_size_bits
);
3068 ax_simple (expr
, aop_swap
);
3069 ax_ext (expr
, addr_size_bits
);
3070 /* Note no swap here: A > B is B < A. */
3071 ax_simple (expr
, aop_less_signed
);
3075 /* Sign extend the operands. */
3076 ax_ext (expr
, addr_size_bits
);
3077 ax_simple (expr
, aop_swap
);
3078 ax_ext (expr
, addr_size_bits
);
3079 /* No need for a swap here. */
3080 ax_simple (expr
, aop_equal
);
3081 ax_simple (expr
, aop_log_not
);
3084 case DW_OP_call_frame_cfa
:
3085 dwarf2_compile_cfa_to_ax (expr
, loc
, arch
, expr
->scope
, per_cu
);
3086 loc
->kind
= axs_lvalue_memory
;
3089 case DW_OP_GNU_push_tls_address
:
3094 offset
= extract_signed_integer (op_ptr
, 2, byte_order
);
3096 i
= ax_goto (expr
, aop_goto
);
3097 VEC_safe_push (int, dw_labels
, op_ptr
+ offset
- base
);
3098 VEC_safe_push (int, patches
, i
);
3102 offset
= extract_signed_integer (op_ptr
, 2, byte_order
);
3104 /* Zero extend the operand. */
3105 ax_zero_ext (expr
, addr_size_bits
);
3106 i
= ax_goto (expr
, aop_if_goto
);
3107 VEC_safe_push (int, dw_labels
, op_ptr
+ offset
- base
);
3108 VEC_safe_push (int, patches
, i
);
3115 case DW_OP_bit_piece
:
3117 uint64_t size
, offset
;
3119 if (op_ptr
- 1 == previous_piece
)
3120 error (_("Cannot translate empty pieces to agent expressions"));
3121 previous_piece
= op_ptr
- 1;
3123 op_ptr
= safe_read_uleb128 (op_ptr
, op_end
, &size
);
3124 if (op
== DW_OP_piece
)
3130 op_ptr
= safe_read_uleb128 (op_ptr
, op_end
, &offset
);
3132 if (bits_collected
+ size
> 8 * sizeof (LONGEST
))
3133 error (_("Expression pieces exceed word size"));
3135 /* Access the bits. */
3138 case axs_lvalue_register
:
3139 ax_reg (expr
, loc
->u
.reg
);
3142 case axs_lvalue_memory
:
3143 /* Offset the pointer, if needed. */
3146 ax_const_l (expr
, offset
/ 8);
3147 ax_simple (expr
, aop_add
);
3150 access_memory (arch
, expr
, size
);
3154 /* For a bits-big-endian target, shift up what we already
3155 have. For a bits-little-endian target, shift up the
3156 new data. Note that there is a potential bug here if
3157 the DWARF expression leaves multiple values on the
3159 if (bits_collected
> 0)
3161 if (bits_big_endian
)
3163 ax_simple (expr
, aop_swap
);
3164 ax_const_l (expr
, size
);
3165 ax_simple (expr
, aop_lsh
);
3166 /* We don't need a second swap here, because
3167 aop_bit_or is symmetric. */
3171 ax_const_l (expr
, size
);
3172 ax_simple (expr
, aop_lsh
);
3174 ax_simple (expr
, aop_bit_or
);
3177 bits_collected
+= size
;
3178 loc
->kind
= axs_rvalue
;
3182 case DW_OP_GNU_uninit
:
3188 struct dwarf2_locexpr_baton block
;
3189 int size
= (op
== DW_OP_call2
? 2 : 4);
3192 uoffset
= extract_unsigned_integer (op_ptr
, size
, byte_order
);
3195 offset
.cu_off
= uoffset
;
3196 block
= dwarf2_fetch_die_location_block (offset
, per_cu
,
3199 /* DW_OP_call_ref is currently not supported. */
3200 gdb_assert (block
.per_cu
== per_cu
);
3202 dwarf2_compile_expr_to_ax (expr
, loc
, arch
, addr_size
,
3203 block
.data
, block
.data
+ block
.size
,
3208 case DW_OP_call_ref
:
3216 /* Patch all the branches we emitted. */
3217 for (i
= 0; i
< VEC_length (int, patches
); ++i
)
3219 int targ
= offsets
[VEC_index (int, dw_labels
, i
)];
3221 internal_error (__FILE__
, __LINE__
, _("invalid label"));
3222 ax_label (expr
, VEC_index (int, patches
, i
), targ
);
3225 do_cleanups (cleanups
);
3229 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3230 evaluator to calculate the location. */
3231 static struct value
*
3232 locexpr_read_variable (struct symbol
*symbol
, struct frame_info
*frame
)
3234 struct dwarf2_locexpr_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
3237 val
= dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol
), frame
, dlbaton
->data
,
3238 dlbaton
->size
, dlbaton
->per_cu
);
3243 /* Return the value of SYMBOL in FRAME at (callee) FRAME's function
3244 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3247 static struct value
*
3248 locexpr_read_variable_at_entry (struct symbol
*symbol
, struct frame_info
*frame
)
3250 struct dwarf2_locexpr_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
3252 return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol
), frame
, dlbaton
->data
,
3256 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
3258 locexpr_read_needs_frame (struct symbol
*symbol
)
3260 struct dwarf2_locexpr_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
3262 return dwarf2_loc_desc_needs_frame (dlbaton
->data
, dlbaton
->size
,
3266 /* Return true if DATA points to the end of a piece. END is one past
3267 the last byte in the expression. */
3270 piece_end_p (const gdb_byte
*data
, const gdb_byte
*end
)
3272 return data
== end
|| data
[0] == DW_OP_piece
|| data
[0] == DW_OP_bit_piece
;
3275 /* Helper for locexpr_describe_location_piece that finds the name of a
3279 locexpr_regname (struct gdbarch
*gdbarch
, int dwarf_regnum
)
3283 regnum
= gdbarch_dwarf2_reg_to_regnum (gdbarch
, dwarf_regnum
);
3284 return gdbarch_register_name (gdbarch
, regnum
);
3287 /* Nicely describe a single piece of a location, returning an updated
3288 position in the bytecode sequence. This function cannot recognize
3289 all locations; if a location is not recognized, it simply returns
3290 DATA. If there is an error during reading, e.g. we run off the end
3291 of the buffer, an error is thrown. */
3293 static const gdb_byte
*
3294 locexpr_describe_location_piece (struct symbol
*symbol
, struct ui_file
*stream
,
3295 CORE_ADDR addr
, struct objfile
*objfile
,
3296 struct dwarf2_per_cu_data
*per_cu
,
3297 const gdb_byte
*data
, const gdb_byte
*end
,
3298 unsigned int addr_size
)
3300 struct gdbarch
*gdbarch
= get_objfile_arch (objfile
);
3303 if (data
[0] >= DW_OP_reg0
&& data
[0] <= DW_OP_reg31
)
3305 fprintf_filtered (stream
, _("a variable in $%s"),
3306 locexpr_regname (gdbarch
, data
[0] - DW_OP_reg0
));
3309 else if (data
[0] == DW_OP_regx
)
3313 data
= safe_read_uleb128 (data
+ 1, end
, ®
);
3314 fprintf_filtered (stream
, _("a variable in $%s"),
3315 locexpr_regname (gdbarch
, reg
));
3317 else if (data
[0] == DW_OP_fbreg
)
3320 struct symbol
*framefunc
;
3322 int64_t frame_offset
;
3323 const gdb_byte
*base_data
, *new_data
, *save_data
= data
;
3325 int64_t base_offset
= 0;
3327 new_data
= safe_read_sleb128 (data
+ 1, end
, &frame_offset
);
3328 if (!piece_end_p (new_data
, end
))
3332 b
= block_for_pc (addr
);
3335 error (_("No block found for address for symbol \"%s\"."),
3336 SYMBOL_PRINT_NAME (symbol
));
3338 framefunc
= block_linkage_function (b
);
3341 error (_("No function found for block for symbol \"%s\"."),
3342 SYMBOL_PRINT_NAME (symbol
));
3344 dwarf_expr_frame_base_1 (framefunc
, addr
, &base_data
, &base_size
);
3346 if (base_data
[0] >= DW_OP_breg0
&& base_data
[0] <= DW_OP_breg31
)
3348 const gdb_byte
*buf_end
;
3350 frame_reg
= base_data
[0] - DW_OP_breg0
;
3351 buf_end
= safe_read_sleb128 (base_data
+ 1, base_data
+ base_size
,
3353 if (buf_end
!= base_data
+ base_size
)
3354 error (_("Unexpected opcode after "
3355 "DW_OP_breg%u for symbol \"%s\"."),
3356 frame_reg
, SYMBOL_PRINT_NAME (symbol
));
3358 else if (base_data
[0] >= DW_OP_reg0
&& base_data
[0] <= DW_OP_reg31
)
3360 /* The frame base is just the register, with no offset. */
3361 frame_reg
= base_data
[0] - DW_OP_reg0
;
3366 /* We don't know what to do with the frame base expression,
3367 so we can't trace this variable; give up. */
3371 fprintf_filtered (stream
,
3372 _("a variable at frame base reg $%s offset %s+%s"),
3373 locexpr_regname (gdbarch
, frame_reg
),
3374 plongest (base_offset
), plongest (frame_offset
));
3376 else if (data
[0] >= DW_OP_breg0
&& data
[0] <= DW_OP_breg31
3377 && piece_end_p (data
, end
))
3381 data
= safe_read_sleb128 (data
+ 1, end
, &offset
);
3383 fprintf_filtered (stream
,
3384 _("a variable at offset %s from base reg $%s"),
3386 locexpr_regname (gdbarch
, data
[0] - DW_OP_breg0
));
3389 /* The location expression for a TLS variable looks like this (on a
3392 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
3393 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
3395 0x3 is the encoding for DW_OP_addr, which has an operand as long
3396 as the size of an address on the target machine (here is 8
3397 bytes). Note that more recent version of GCC emit DW_OP_const4u
3398 or DW_OP_const8u, depending on address size, rather than
3399 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
3400 The operand represents the offset at which the variable is within
3401 the thread local storage. */
3403 else if (data
+ 1 + addr_size
< end
3404 && (data
[0] == DW_OP_addr
3405 || (addr_size
== 4 && data
[0] == DW_OP_const4u
)
3406 || (addr_size
== 8 && data
[0] == DW_OP_const8u
))
3407 && data
[1 + addr_size
] == DW_OP_GNU_push_tls_address
3408 && piece_end_p (data
+ 2 + addr_size
, end
))
3411 offset
= extract_unsigned_integer (data
+ 1, addr_size
,
3412 gdbarch_byte_order (gdbarch
));
3414 fprintf_filtered (stream
,
3415 _("a thread-local variable at offset 0x%s "
3416 "in the thread-local storage for `%s'"),
3417 phex_nz (offset
, addr_size
), objfile
->name
);
3419 data
+= 1 + addr_size
+ 1;
3422 /* With -gsplit-dwarf a TLS variable can also look like this:
3423 DW_AT_location : 3 byte block: fc 4 e0
3424 (DW_OP_GNU_const_index: 4;
3425 DW_OP_GNU_push_tls_address) */
3426 else if (data
+ 3 <= end
3427 && data
+ 1 + (leb128_size
= skip_leb128 (data
+ 1, end
)) < end
3428 && data
[0] == DW_OP_GNU_const_index
3430 && data
[1 + leb128_size
] == DW_OP_GNU_push_tls_address
3431 && piece_end_p (data
+ 2 + leb128_size
, end
))
3435 data
= safe_read_uleb128 (data
+ 1, end
, &offset
);
3436 offset
= dwarf2_read_addr_index (per_cu
, offset
);
3437 fprintf_filtered (stream
,
3438 _("a thread-local variable at offset 0x%s "
3439 "in the thread-local storage for `%s'"),
3440 phex_nz (offset
, addr_size
), objfile
->name
);
3444 else if (data
[0] >= DW_OP_lit0
3445 && data
[0] <= DW_OP_lit31
3447 && data
[1] == DW_OP_stack_value
)
3449 fprintf_filtered (stream
, _("the constant %d"), data
[0] - DW_OP_lit0
);
3456 /* Disassemble an expression, stopping at the end of a piece or at the
3457 end of the expression. Returns a pointer to the next unread byte
3458 in the input expression. If ALL is nonzero, then this function
3459 will keep going until it reaches the end of the expression.
3460 If there is an error during reading, e.g. we run off the end
3461 of the buffer, an error is thrown. */
3463 static const gdb_byte
*
3464 disassemble_dwarf_expression (struct ui_file
*stream
,
3465 struct gdbarch
*arch
, unsigned int addr_size
,
3466 int offset_size
, const gdb_byte
*start
,
3467 const gdb_byte
*data
, const gdb_byte
*end
,
3468 int indent
, int all
,
3469 struct dwarf2_per_cu_data
*per_cu
)
3473 || (data
[0] != DW_OP_piece
&& data
[0] != DW_OP_bit_piece
)))
3475 enum dwarf_location_atom op
= *data
++;
3480 name
= get_DW_OP_name (op
);
3483 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
3484 op
, (long) (data
- 1 - start
));
3485 fprintf_filtered (stream
, " %*ld: %s", indent
+ 4,
3486 (long) (data
- 1 - start
), name
);
3491 ul
= extract_unsigned_integer (data
, addr_size
,
3492 gdbarch_byte_order (arch
));
3494 fprintf_filtered (stream
, " 0x%s", phex_nz (ul
, addr_size
));
3498 ul
= extract_unsigned_integer (data
, 1, gdbarch_byte_order (arch
));
3500 fprintf_filtered (stream
, " %s", pulongest (ul
));
3503 l
= extract_signed_integer (data
, 1, gdbarch_byte_order (arch
));
3505 fprintf_filtered (stream
, " %s", plongest (l
));
3508 ul
= extract_unsigned_integer (data
, 2, gdbarch_byte_order (arch
));
3510 fprintf_filtered (stream
, " %s", pulongest (ul
));
3513 l
= extract_signed_integer (data
, 2, gdbarch_byte_order (arch
));
3515 fprintf_filtered (stream
, " %s", plongest (l
));
3518 ul
= extract_unsigned_integer (data
, 4, gdbarch_byte_order (arch
));
3520 fprintf_filtered (stream
, " %s", pulongest (ul
));
3523 l
= extract_signed_integer (data
, 4, gdbarch_byte_order (arch
));
3525 fprintf_filtered (stream
, " %s", plongest (l
));
3528 ul
= extract_unsigned_integer (data
, 8, gdbarch_byte_order (arch
));
3530 fprintf_filtered (stream
, " %s", pulongest (ul
));
3533 l
= extract_signed_integer (data
, 8, gdbarch_byte_order (arch
));
3535 fprintf_filtered (stream
, " %s", plongest (l
));
3538 data
= safe_read_uleb128 (data
, end
, &ul
);
3539 fprintf_filtered (stream
, " %s", pulongest (ul
));
3542 data
= safe_read_sleb128 (data
, end
, &l
);
3543 fprintf_filtered (stream
, " %s", plongest (l
));
3578 fprintf_filtered (stream
, " [$%s]",
3579 locexpr_regname (arch
, op
- DW_OP_reg0
));
3583 data
= safe_read_uleb128 (data
, end
, &ul
);
3584 fprintf_filtered (stream
, " %s [$%s]", pulongest (ul
),
3585 locexpr_regname (arch
, (int) ul
));
3588 case DW_OP_implicit_value
:
3589 data
= safe_read_uleb128 (data
, end
, &ul
);
3591 fprintf_filtered (stream
, " %s", pulongest (ul
));
3626 data
= safe_read_sleb128 (data
, end
, &l
);
3627 fprintf_filtered (stream
, " %s [$%s]", plongest (l
),
3628 locexpr_regname (arch
, op
- DW_OP_breg0
));
3632 data
= safe_read_uleb128 (data
, end
, &ul
);
3633 data
= safe_read_sleb128 (data
, end
, &l
);
3634 fprintf_filtered (stream
, " register %s [$%s] offset %s",
3636 locexpr_regname (arch
, (int) ul
),
3641 data
= safe_read_sleb128 (data
, end
, &l
);
3642 fprintf_filtered (stream
, " %s", plongest (l
));
3645 case DW_OP_xderef_size
:
3646 case DW_OP_deref_size
:
3648 fprintf_filtered (stream
, " %d", *data
);
3652 case DW_OP_plus_uconst
:
3653 data
= safe_read_uleb128 (data
, end
, &ul
);
3654 fprintf_filtered (stream
, " %s", pulongest (ul
));
3658 l
= extract_signed_integer (data
, 2, gdbarch_byte_order (arch
));
3660 fprintf_filtered (stream
, " to %ld",
3661 (long) (data
+ l
- start
));
3665 l
= extract_signed_integer (data
, 2, gdbarch_byte_order (arch
));
3667 fprintf_filtered (stream
, " %ld",
3668 (long) (data
+ l
- start
));
3672 ul
= extract_unsigned_integer (data
, 2, gdbarch_byte_order (arch
));
3674 fprintf_filtered (stream
, " offset %s", phex_nz (ul
, 2));
3678 ul
= extract_unsigned_integer (data
, 4, gdbarch_byte_order (arch
));
3680 fprintf_filtered (stream
, " offset %s", phex_nz (ul
, 4));
3683 case DW_OP_call_ref
:
3684 ul
= extract_unsigned_integer (data
, offset_size
,
3685 gdbarch_byte_order (arch
));
3686 data
+= offset_size
;
3687 fprintf_filtered (stream
, " offset %s", phex_nz (ul
, offset_size
));
3691 data
= safe_read_uleb128 (data
, end
, &ul
);
3692 fprintf_filtered (stream
, " %s (bytes)", pulongest (ul
));
3695 case DW_OP_bit_piece
:
3699 data
= safe_read_uleb128 (data
, end
, &ul
);
3700 data
= safe_read_uleb128 (data
, end
, &offset
);
3701 fprintf_filtered (stream
, " size %s offset %s (bits)",
3702 pulongest (ul
), pulongest (offset
));
3706 case DW_OP_GNU_implicit_pointer
:
3708 ul
= extract_unsigned_integer (data
, offset_size
,
3709 gdbarch_byte_order (arch
));
3710 data
+= offset_size
;
3712 data
= safe_read_sleb128 (data
, end
, &l
);
3714 fprintf_filtered (stream
, " DIE %s offset %s",
3715 phex_nz (ul
, offset_size
),
3720 case DW_OP_GNU_deref_type
:
3722 int addr_size
= *data
++;
3726 data
= safe_read_uleb128 (data
, end
, &ul
);
3728 type
= dwarf2_get_die_type (offset
, per_cu
);
3729 fprintf_filtered (stream
, "<");
3730 type_print (type
, "", stream
, -1);
3731 fprintf_filtered (stream
, " [0x%s]> %d", phex_nz (offset
.cu_off
, 0),
3736 case DW_OP_GNU_const_type
:
3741 data
= safe_read_uleb128 (data
, end
, &ul
);
3742 type_die
.cu_off
= ul
;
3743 type
= dwarf2_get_die_type (type_die
, per_cu
);
3744 fprintf_filtered (stream
, "<");
3745 type_print (type
, "", stream
, -1);
3746 fprintf_filtered (stream
, " [0x%s]>", phex_nz (type_die
.cu_off
, 0));
3750 case DW_OP_GNU_regval_type
:
3756 data
= safe_read_uleb128 (data
, end
, ®
);
3757 data
= safe_read_uleb128 (data
, end
, &ul
);
3758 type_die
.cu_off
= ul
;
3760 type
= dwarf2_get_die_type (type_die
, per_cu
);
3761 fprintf_filtered (stream
, "<");
3762 type_print (type
, "", stream
, -1);
3763 fprintf_filtered (stream
, " [0x%s]> [$%s]",
3764 phex_nz (type_die
.cu_off
, 0),
3765 locexpr_regname (arch
, reg
));
3769 case DW_OP_GNU_convert
:
3770 case DW_OP_GNU_reinterpret
:
3774 data
= safe_read_uleb128 (data
, end
, &ul
);
3775 type_die
.cu_off
= ul
;
3777 if (type_die
.cu_off
== 0)
3778 fprintf_filtered (stream
, "<0>");
3783 type
= dwarf2_get_die_type (type_die
, per_cu
);
3784 fprintf_filtered (stream
, "<");
3785 type_print (type
, "", stream
, -1);
3786 fprintf_filtered (stream
, " [0x%s]>", phex_nz (type_die
.cu_off
, 0));
3791 case DW_OP_GNU_entry_value
:
3792 data
= safe_read_uleb128 (data
, end
, &ul
);
3793 fputc_filtered ('\n', stream
);
3794 disassemble_dwarf_expression (stream
, arch
, addr_size
, offset_size
,
3795 start
, data
, data
+ ul
, indent
+ 2,
3800 case DW_OP_GNU_parameter_ref
:
3801 ul
= extract_unsigned_integer (data
, 4, gdbarch_byte_order (arch
));
3803 fprintf_filtered (stream
, " offset %s", phex_nz (ul
, 4));
3806 case DW_OP_GNU_addr_index
:
3807 data
= safe_read_uleb128 (data
, end
, &ul
);
3808 ul
= dwarf2_read_addr_index (per_cu
, ul
);
3809 fprintf_filtered (stream
, " 0x%s", phex_nz (ul
, addr_size
));
3811 case DW_OP_GNU_const_index
:
3812 data
= safe_read_uleb128 (data
, end
, &ul
);
3813 ul
= dwarf2_read_addr_index (per_cu
, ul
);
3814 fprintf_filtered (stream
, " %s", pulongest (ul
));
3818 fprintf_filtered (stream
, "\n");
3824 /* Describe a single location, which may in turn consist of multiple
3828 locexpr_describe_location_1 (struct symbol
*symbol
, CORE_ADDR addr
,
3829 struct ui_file
*stream
,
3830 const gdb_byte
*data
, size_t size
,
3831 struct objfile
*objfile
, unsigned int addr_size
,
3832 int offset_size
, struct dwarf2_per_cu_data
*per_cu
)
3834 const gdb_byte
*end
= data
+ size
;
3835 int first_piece
= 1, bad
= 0;
3839 const gdb_byte
*here
= data
;
3840 int disassemble
= 1;
3845 fprintf_filtered (stream
, _(", and "));
3847 if (!dwarf2_always_disassemble
)
3849 data
= locexpr_describe_location_piece (symbol
, stream
,
3850 addr
, objfile
, per_cu
,
3851 data
, end
, addr_size
);
3852 /* If we printed anything, or if we have an empty piece,
3853 then don't disassemble. */
3855 || data
[0] == DW_OP_piece
3856 || data
[0] == DW_OP_bit_piece
)
3861 fprintf_filtered (stream
, _("a complex DWARF expression:\n"));
3862 data
= disassemble_dwarf_expression (stream
,
3863 get_objfile_arch (objfile
),
3864 addr_size
, offset_size
, data
,
3866 dwarf2_always_disassemble
,
3872 int empty
= data
== here
;
3875 fprintf_filtered (stream
, " ");
3876 if (data
[0] == DW_OP_piece
)
3880 data
= safe_read_uleb128 (data
+ 1, end
, &bytes
);
3883 fprintf_filtered (stream
, _("an empty %s-byte piece"),
3886 fprintf_filtered (stream
, _(" [%s-byte piece]"),
3889 else if (data
[0] == DW_OP_bit_piece
)
3891 uint64_t bits
, offset
;
3893 data
= safe_read_uleb128 (data
+ 1, end
, &bits
);
3894 data
= safe_read_uleb128 (data
, end
, &offset
);
3897 fprintf_filtered (stream
,
3898 _("an empty %s-bit piece"),
3901 fprintf_filtered (stream
,
3902 _(" [%s-bit piece, offset %s bits]"),
3903 pulongest (bits
), pulongest (offset
));
3913 if (bad
|| data
> end
)
3914 error (_("Corrupted DWARF2 expression for \"%s\"."),
3915 SYMBOL_PRINT_NAME (symbol
));
3918 /* Print a natural-language description of SYMBOL to STREAM. This
3919 version is for a symbol with a single location. */
3922 locexpr_describe_location (struct symbol
*symbol
, CORE_ADDR addr
,
3923 struct ui_file
*stream
)
3925 struct dwarf2_locexpr_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
3926 struct objfile
*objfile
= dwarf2_per_cu_objfile (dlbaton
->per_cu
);
3927 unsigned int addr_size
= dwarf2_per_cu_addr_size (dlbaton
->per_cu
);
3928 int offset_size
= dwarf2_per_cu_offset_size (dlbaton
->per_cu
);
3930 locexpr_describe_location_1 (symbol
, addr
, stream
,
3931 dlbaton
->data
, dlbaton
->size
,
3932 objfile
, addr_size
, offset_size
,
3936 /* Describe the location of SYMBOL as an agent value in VALUE, generating
3937 any necessary bytecode in AX. */
3940 locexpr_tracepoint_var_ref (struct symbol
*symbol
, struct gdbarch
*gdbarch
,
3941 struct agent_expr
*ax
, struct axs_value
*value
)
3943 struct dwarf2_locexpr_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
3944 unsigned int addr_size
= dwarf2_per_cu_addr_size (dlbaton
->per_cu
);
3946 if (dlbaton
->size
== 0)
3947 value
->optimized_out
= 1;
3949 dwarf2_compile_expr_to_ax (ax
, value
, gdbarch
, addr_size
,
3950 dlbaton
->data
, dlbaton
->data
+ dlbaton
->size
,
3954 /* The set of location functions used with the DWARF-2 expression
3956 const struct symbol_computed_ops dwarf2_locexpr_funcs
= {
3957 locexpr_read_variable
,
3958 locexpr_read_variable_at_entry
,
3959 locexpr_read_needs_frame
,
3960 locexpr_describe_location
,
3961 locexpr_tracepoint_var_ref
3965 /* Wrapper functions for location lists. These generally find
3966 the appropriate location expression and call something above. */
3968 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3969 evaluator to calculate the location. */
3970 static struct value
*
3971 loclist_read_variable (struct symbol
*symbol
, struct frame_info
*frame
)
3973 struct dwarf2_loclist_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
3975 const gdb_byte
*data
;
3977 CORE_ADDR pc
= frame
? get_frame_address_in_block (frame
) : 0;
3979 data
= dwarf2_find_location_expression (dlbaton
, &size
, pc
);
3980 val
= dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol
), frame
, data
, size
,
3986 /* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
3987 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3990 Function always returns non-NULL value, it may be marked optimized out if
3991 inferior frame information is not available. It throws NO_ENTRY_VALUE_ERROR
3992 if it cannot resolve the parameter for any reason. */
3994 static struct value
*
3995 loclist_read_variable_at_entry (struct symbol
*symbol
, struct frame_info
*frame
)
3997 struct dwarf2_loclist_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
3998 const gdb_byte
*data
;
4002 if (frame
== NULL
|| !get_frame_func_if_available (frame
, &pc
))
4003 return allocate_optimized_out_value (SYMBOL_TYPE (symbol
));
4005 data
= dwarf2_find_location_expression (dlbaton
, &size
, pc
);
4007 return allocate_optimized_out_value (SYMBOL_TYPE (symbol
));
4009 return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol
), frame
, data
, size
);
4012 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
4014 loclist_read_needs_frame (struct symbol
*symbol
)
4016 /* If there's a location list, then assume we need to have a frame
4017 to choose the appropriate location expression. With tracking of
4018 global variables this is not necessarily true, but such tracking
4019 is disabled in GCC at the moment until we figure out how to
4025 /* Print a natural-language description of SYMBOL to STREAM. This
4026 version applies when there is a list of different locations, each
4027 with a specified address range. */
4030 loclist_describe_location (struct symbol
*symbol
, CORE_ADDR addr
,
4031 struct ui_file
*stream
)
4033 struct dwarf2_loclist_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
4034 const gdb_byte
*loc_ptr
, *buf_end
;
4036 struct objfile
*objfile
= dwarf2_per_cu_objfile (dlbaton
->per_cu
);
4037 struct gdbarch
*gdbarch
= get_objfile_arch (objfile
);
4038 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
4039 unsigned int addr_size
= dwarf2_per_cu_addr_size (dlbaton
->per_cu
);
4040 int offset_size
= dwarf2_per_cu_offset_size (dlbaton
->per_cu
);
4041 int signed_addr_p
= bfd_get_sign_extend_vma (objfile
->obfd
);
4042 /* Adjust base_address for relocatable objects. */
4043 CORE_ADDR base_offset
= dwarf2_per_cu_text_offset (dlbaton
->per_cu
);
4044 CORE_ADDR base_address
= dlbaton
->base_address
+ base_offset
;
4047 loc_ptr
= dlbaton
->data
;
4048 buf_end
= dlbaton
->data
+ dlbaton
->size
;
4050 fprintf_filtered (stream
, _("multi-location:\n"));
4052 /* Iterate through locations until we run out. */
4055 CORE_ADDR low
= 0, high
= 0; /* init for gcc -Wall */
4057 enum debug_loc_kind kind
;
4058 const gdb_byte
*new_ptr
= NULL
; /* init for gcc -Wall */
4060 if (dlbaton
->from_dwo
)
4061 kind
= decode_debug_loc_dwo_addresses (dlbaton
->per_cu
,
4062 loc_ptr
, buf_end
, &new_ptr
,
4063 &low
, &high
, byte_order
);
4065 kind
= decode_debug_loc_addresses (loc_ptr
, buf_end
, &new_ptr
,
4067 byte_order
, addr_size
,
4072 case DEBUG_LOC_END_OF_LIST
:
4075 case DEBUG_LOC_BASE_ADDRESS
:
4076 base_address
= high
+ base_offset
;
4077 fprintf_filtered (stream
, _(" Base address %s"),
4078 paddress (gdbarch
, base_address
));
4080 case DEBUG_LOC_START_END
:
4081 case DEBUG_LOC_START_LENGTH
:
4083 case DEBUG_LOC_BUFFER_OVERFLOW
:
4084 case DEBUG_LOC_INVALID_ENTRY
:
4085 error (_("Corrupted DWARF expression for symbol \"%s\"."),
4086 SYMBOL_PRINT_NAME (symbol
));
4088 gdb_assert_not_reached ("bad debug_loc_kind");
4091 /* Otherwise, a location expression entry. */
4092 low
+= base_address
;
4093 high
+= base_address
;
4095 length
= extract_unsigned_integer (loc_ptr
, 2, byte_order
);
4098 /* (It would improve readability to print only the minimum
4099 necessary digits of the second number of the range.) */
4100 fprintf_filtered (stream
, _(" Range %s-%s: "),
4101 paddress (gdbarch
, low
), paddress (gdbarch
, high
));
4103 /* Now describe this particular location. */
4104 locexpr_describe_location_1 (symbol
, low
, stream
, loc_ptr
, length
,
4105 objfile
, addr_size
, offset_size
,
4108 fprintf_filtered (stream
, "\n");
4114 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4115 any necessary bytecode in AX. */
4117 loclist_tracepoint_var_ref (struct symbol
*symbol
, struct gdbarch
*gdbarch
,
4118 struct agent_expr
*ax
, struct axs_value
*value
)
4120 struct dwarf2_loclist_baton
*dlbaton
= SYMBOL_LOCATION_BATON (symbol
);
4121 const gdb_byte
*data
;
4123 unsigned int addr_size
= dwarf2_per_cu_addr_size (dlbaton
->per_cu
);
4125 data
= dwarf2_find_location_expression (dlbaton
, &size
, ax
->scope
);
4127 value
->optimized_out
= 1;
4129 dwarf2_compile_expr_to_ax (ax
, value
, gdbarch
, addr_size
, data
, data
+ size
,
4133 /* The set of location functions used with the DWARF-2 expression
4134 evaluator and location lists. */
4135 const struct symbol_computed_ops dwarf2_loclist_funcs
= {
4136 loclist_read_variable
,
4137 loclist_read_variable_at_entry
,
4138 loclist_read_needs_frame
,
4139 loclist_describe_location
,
4140 loclist_tracepoint_var_ref
4143 /* Provide a prototype to silence -Wmissing-prototypes. */
4144 extern initialize_file_ftype _initialize_dwarf2loc
;
4147 _initialize_dwarf2loc (void)
4149 add_setshow_zuinteger_cmd ("entry-values", class_maintenance
,
4150 &entry_values_debug
,
4151 _("Set entry values and tail call frames "
4153 _("Show entry values and tail call frames "
4155 _("When non-zero, the process of determining "
4156 "parameter values from function entry point "
4157 "and tail call frames will be printed."),
4159 show_entry_values_debug
,
4160 &setdebuglist
, &showdebuglist
);