diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-10-12 22:04:12 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-10-12 22:04:12 +0000 |
commit | 1d6edc3c37dc30e5fe46f25fa4d4974c78b60e5b (patch) | |
tree | b22379c4a6713e9b18cadfe2f42f05a4871cb0b6 /gdb/dwarf2read.c | |
parent | 6885131b49b28d67e4dc4758edb7e765b8b9f8b7 (diff) | |
download | gdb-1d6edc3c37dc30e5fe46f25fa4d4974c78b60e5b.zip gdb-1d6edc3c37dc30e5fe46f25fa4d4974c78b60e5b.tar.gz gdb-1d6edc3c37dc30e5fe46f25fa4d4974c78b60e5b.tar.bz2 |
gdb/
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.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 0b16ef8..5fa6c5b 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -722,6 +722,8 @@ struct function_range struct dwarf_block { unsigned int size; + + /* Valid only if SIZE is not zero. */ gdb_byte *data; }; @@ -14217,7 +14219,6 @@ dwarf2_fetch_die_location_block (unsigned int offset, { /* DWARF: "If there is no such attribute, then there is no effect.". */ - retval.data = NULL; retval.size = 0; } else if (attr_form_is_section_offset (attr)) @@ -15495,7 +15496,6 @@ dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym, dwarf2_invalid_attrib_class_complaint ("location description", SYMBOL_NATURAL_NAME (sym)); baton->size = 0; - baton->data = NULL; } SYMBOL_COMPUTED_OPS (sym) = &dwarf2_locexpr_funcs; |