From 25770c356d9b856858230c4e09f819cfa3525ef8 Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Thu, 30 Sep 2010 14:23:55 +0200 Subject: [PATCH] dwarflint: check_range_out_of_scope should run even on absent .debug_loc - the actual fix is removing the forced lint.check . The lowlevel_checks pass takes care of validating any present sections. In this case .debug_loc isn't there, yet the check needs to run. - and add a test case for this. --- dwarflint/Makefile.am | 13 ++++--- dwarflint/check_range_out_of_scope.cc | 11 +++--- .../tests/check_range_out_of_scope-1.bz2 | Bin 0 -> 2717 bytes .../tests/run-check_range_out_of_scope.sh | 35 ++++++++++++++++++ 4 files changed, 48 insertions(+), 11 deletions(-) create mode 100755 dwarflint/tests/check_range_out_of_scope-1.bz2 create mode 100755 dwarflint/tests/run-check_range_out_of_scope.sh diff --git a/dwarflint/Makefile.am b/dwarflint/Makefile.am index e69324b60..fff6906d9 100644 --- a/dwarflint/Makefile.am +++ b/dwarflint/Makefile.am @@ -80,12 +80,15 @@ dwarflint_SOURCES = \ TESTS = tests/run-debug_abbrev-duplicate-attribute.sh \ tests/run-check_duplicate_DW_tag_variable.sh \ tests/run-location-leaks.sh \ - tests/run-nodebug.sh + tests/run-nodebug.sh \ + tests/run-check_range_out_of_scope.sh -EXTRA_DIST = tests/run-debug_abbrev-duplicate-attribute.sh tests/debug_abbrev-duplicate-attribute.bz2 \ - tests/run-check_duplicate_DW_tag_variable.sh tests/crc7.ko.debug.bz2 \ - tests/run-location-leaks.sh tests/location-leaks.bz2 \ - tests/run-nodebug.sh tests/nodebug.bz2 +EXTRA_DIST = $(TESTS) \ + tests/debug_abbrev-duplicate-attribute.bz2 \ + tests/crc7.ko.debug.bz2 \ + tests/location-leaks.bz2 \ + tests/nodebug.bz2 \ + tests/check_range_out_of_scope-1.bz2 installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \ bindir=$(DESTDIR)$(bindir) \ diff --git a/dwarflint/check_range_out_of_scope.cc b/dwarflint/check_range_out_of_scope.cc index db774998b..7a1755988 100644 --- a/dwarflint/check_range_out_of_scope.cc +++ b/dwarflint/check_range_out_of_scope.cc @@ -63,13 +63,12 @@ namespace // Register the check. reg reg_range_out_of_scope; + const ::Dwarf_Addr noaddr = -1; } check_range_out_of_scope::check_range_out_of_scope (checkstack &stack, dwarflint &lint) : highlevel_check (stack, lint) { - lint.check (stack); - try { class dwarf::compile_units const &cus = dw.compile_units (); @@ -102,7 +101,7 @@ check_range_out_of_scope::recursively_validate where_reset_2 (&wh, die.offset ()); ::Dwarf_Addr low_pc = 0; - ::Dwarf_Addr high_pc = -1; + ::Dwarf_Addr high_pc = ::noaddr; ranges_t my_ranges; for (dwarf::debug_info_entry::attributes_type::const_iterator at = die.attributes ().begin (); @@ -121,7 +120,7 @@ check_range_out_of_scope::recursively_validate my_ranges.push_back (*it); } - if (low_pc != 0 || high_pc != (::Dwarf_Addr)-1) + if (low_pc != 0 || high_pc != ::noaddr) { // Simultaneous appearance of both low_pc/high_pc pair // and rangelist pointer is forbidden by 3.1.1 #1. @@ -130,12 +129,12 @@ check_range_out_of_scope::recursively_validate // purpose as low_pc/high_pc pair that covers one // address point. - if (high_pc == (::Dwarf_Addr)-1 + if (high_pc == ::noaddr && die.tag () != DW_TAG_compile_unit && die.tag () != DW_TAG_partial_unit) high_pc = low_pc + 1; - if (high_pc != (::Dwarf_Addr)-1) + if (high_pc != ::noaddr) { if (my_ranges.size () != 0) wr_message (wh, cat (mc_impact_4, mc_info, mc_error)) diff --git a/dwarflint/tests/check_range_out_of_scope-1.bz2 b/dwarflint/tests/check_range_out_of_scope-1.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..1ef81cb85d44a03ae7b5e66b126dfd770c14c790 GIT binary patch literal 2717 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 XqP15$A+j. + +. $srcdir/../tests/test-subr.sh + +srcdir=$srcdir/tests + +testfiles check_range_out_of_scope-1 + +testrun_compare ./dwarflint --check=check_range_out_of_scope check_range_out_of_scope-1 <