{
lint.toplev_check <T> (stack);
}
+
+ virtual void list () const
+ {
+ dwarflint::list_check (T::descriptor ());
+ }
};
#endif//DWARFLINT_CHECKS_HH
}
}
+void
+dwarflint::check_registrar::list_checks () const
+{
+ for (std::vector <item *>::const_iterator it = _m_items.begin ();
+ it != _m_items.end (); ++it)
+ (*it)->list ();
+}
+
+void
+dwarflint::list_check (checkdescriptor const &cd)
+{
+ std::cout << cd.name << std::endl;
+}
+
namespace
{
bool
struct item
{
virtual void run (checkstack &stack, dwarflint &lint) = 0;
+ virtual void list () const = 0;
};
static check_registrar *inst ()
_m_items.push_back (i);
}
+ void list_checks () const;
+
private:
friend class dwarflint;
void enroll (dwarflint &lint);
return check<T> (stack);
}
- template <class T> T *toplev_check (checkstack &stack,
- T *tag = NULL);
+ template <class T>
+ T *toplev_check (checkstack &stack, T *tag = NULL);
+
+ static void list_check (checkdescriptor const &cd);
};
#endif//DWARFLINT_HH
#define ARGP_nohl 304
#define ARGP_dump_off 305
#define ARGP_check 306
+#define ARGP_list_checks 307
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
N_("Dump DIE offsets to stderr as the tree is iterated."), 0 },
{ "check", ARGP_check, "[+-][@]name,...", 0,
N_("Only run selected checks."), 0 },
+ { "list-checks", ARGP_list_checks, NULL, 0,
+ N_("List all the available checks."), 0 },
{ NULL, 0, NULL, 0, NULL, 0 }
};
}
break;
+ case ARGP_list_checks:
+ dwarflint::check_registrar::inst ()->list_checks ();
+ std::exit (0);
+
case 'i':
tolerate_nodebug = true;
break;