From: Petr Machata Date: Fri, 22 Oct 2010 14:25:18 +0000 (+0200) Subject: dwarflint: Fix how --check handles low-level checks X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=125ede943e5a4cdc84432316b0a0096e0cb401ec;p=thirdparty%2Felfutils.git dwarflint: Fix how --check handles low-level checks --- diff --git a/dwarflint/checkrule.cc b/dwarflint/checkrule.cc index 051d73777..0ebefe839 100644 --- a/dwarflint/checkrule.cc +++ b/dwarflint/checkrule.cc @@ -61,14 +61,6 @@ namespace bool checkrules::should_check (checkstack const &stack) const { -#if 0 - std::cout << "---\nstack" << std::endl; - for (checkstack::const_iterator jt = stack.begin (); - jt != stack.end (); ++jt) - std::cout << (*jt)->name << std::flush << " "; - std::cout << std::endl; -#endif - // We always allow scheduling hidden checks. Those are service // routines that the user doesn't even see it the list of checks. assert (!stack.empty ()); diff --git a/dwarflint/lowlevel_checks.cc b/dwarflint/lowlevel_checks.cc index c767a0a72..77e6bbbff 100644 --- a/dwarflint/lowlevel_checks.cc +++ b/dwarflint/lowlevel_checks.cc @@ -55,8 +55,8 @@ static reg reg_lowlevel_checks; namespace { template struct do_check { - static void check (checkstack &stack, dwarflint &lint) { - lint.check (stack); + static bool check (checkstack &stack, dwarflint &lint) { + return lint.toplev_check (stack); } }; @@ -65,8 +65,11 @@ namespace #define STUBBED_CHECK(NAME) \ struct check_debug_##NAME {}; \ template<> struct do_check { \ - static void check (__attribute__ ((unused)) checkstack &stack, \ - __attribute__ ((unused)) dwarflint &lint) {} \ + static bool check (__attribute__ ((unused)) checkstack &stack, \ + __attribute__ ((unused)) dwarflint &lint) \ + { \ + return true; \ + } \ } STUBBED_CHECK(str); STUBBED_CHECK(mac); @@ -78,13 +81,20 @@ lowlevel_checks::lowlevel_checks (checkstack &stack, dwarflint &lint) // Then check all the debug sections that are there. For each // existing section request that the check passes. Re-requesting // already-passed checks is OK, the scheduler caches it. + bool passed = true; + #define SEC(NAME) \ section *NAME = \ lint.toplev_check > (stack); \ if (NAME != NULL) \ - do_check::check (stack, lint); + if (!do_check::check (stack, lint)) \ + passed = false; + DEBUGINFO_SECTIONS; #undef SEC lint.check (stack); + + if (!passed) + throw check_base::failed (); } diff --git a/dwarflint/tests/run-aranges_terminate_early.sh b/dwarflint/tests/run-aranges_terminate_early.sh index 6bd8fbba9..7c5957091 100755 --- a/dwarflint/tests/run-aranges_terminate_early.sh +++ b/dwarflint/tests/run-aranges_terminate_early.sh @@ -35,3 +35,8 @@ testrun_compare ./dwarflint --strict aranges_terminate_early <