From: Petr Machata Date: Wed, 9 Mar 2011 20:33:31 +0000 (+0100) Subject: dwarflint: Check that CU DIE has stmt_list if children have decl_file X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a3cc16aa2dc34d36965b6f1ec525efb041ab670;p=thirdparty%2Felfutils.git dwarflint: Check that CU DIE has stmt_list if children have decl_file - Mark's test case attached --- diff --git a/dwarflint/check_debug_info.cc b/dwarflint/check_debug_info.cc index 7d7b293c5..c05e438a5 100644 --- a/dwarflint/check_debug_info.cc +++ b/dwarflint/check_debug_info.cc @@ -1234,9 +1234,13 @@ check_debug_info_refs::check_debug_info_refs (checkstack &stack, for (std::vector::iterator it = _m_info->cus.begin (); it != _m_info->cus.end (); ++it) { - if (it->stmt_list.addr != (uint64_t)-1 - && (_m_line == NULL - || !_m_line->has_line_table (it->stmt_list.addr))) + if (it->stmt_list.addr == (uint64_t)-1) + for (size_t i = 0; i < it->decl_file_refs.size; ++i) + wr_error (it->decl_file_refs.refs[i].who) + << "references .debug_line table, but CU DIE lacks DW_AT_stmt_list." + << std::endl; + else if (_m_line == NULL + || !_m_line->has_line_table (it->stmt_list.addr)) wr_error (it->stmt_list.who) << "unresolved reference to .debug_line table " << pri::hex (it->stmt_list.addr) << '.' << std::endl; diff --git a/dwarflint/tests/empty-1.bz2 b/dwarflint/tests/empty-1.bz2 new file mode 100644 index 000000000..25a7ada07 Binary files /dev/null and b/dwarflint/tests/empty-1.bz2 differ diff --git a/dwarflint/tests/run-bad.sh b/dwarflint/tests/run-bad.sh index 39fbdb5f4..a59b74ad7 100755 --- a/dwarflint/tests/run-bad.sh +++ b/dwarflint/tests/run-bad.sh @@ -27,7 +27,8 @@ srcdir=$srcdir/tests -testfiles hello.bad-1 hello.bad-3 garbage-1 garbage-2 garbage-3 garbage-4 \ +testfiles hello.bad-1 hello.bad-3 empty-1 \ + garbage-1 garbage-2 garbage-3 garbage-4 \ garbage-5 garbage-6 garbage-7 garbage-8 testrun_compare ./dwarflint hello.bad-1 <