Fix empty DWARF expressions DATA vs. SIZE conditionals.
	* dwarf2loc.c (dwarf2_find_location_expression): Clear *LOCEXPR_LENGTH.
	(dwarf_expr_frame_base_1): Indicate unavailability via zero *LENGTH.
	(locexpr_tracepoint_var_ref): Check only zero SIZE, not zero DATA.
	(loclist_read_variable, loclist_tracepoint_var_ref): Do not check for
	zero DATA.
	* dwarf2loc.h (struct dwarf2_locexpr_baton): Comment DATA vs. SIZE
	validity.
	* dwarf2read.c (struct dwarf_block): Comment DATA validity.
	(dwarf2_fetch_die_location_block, dwarf2_symbol_mark_computed): Do not
	clear DATA on zero SIZE.

gdb/testsuite/
	Fix empty DWARF expressions DATA vs. SIZE conditionals.
	* gdb.dwarf2/dw2-op-call.S (arraycallnoloc, arraynoloc): New DIEs.
	(loclist): New.
	(4): New abbrev.
	* gdb.dwarf2/dw2-op-call.exp: Remove variable srcfile and executable.
	Use prepare_for_testing, remove clean_restart.
	(p arraynoloc, p arraycallnoloc): New tests.
This commit is contained in:
Jan Kratochvil
2011-10-12 22:04:12 +00:00
parent 6885131b49
commit 1d6edc3c37
7 changed files with 81 additions and 21 deletions

View File

@ -87,10 +87,12 @@ struct value *dwarf2_evaluate_loc_desc (struct type *type,
struct dwarf2_locexpr_baton
{
/* Pointer to the start of the location expression. */
/* Pointer to the start of the location expression. Valid only if SIZE is
not zero. */
const gdb_byte *data;
/* Length of the location expression. */
/* Length of the location expression. For optimized out expressions it is
zero. */
unsigned long size;
/* The compilation unit containing the symbol whose location