Add --event-horizon=yes|no [yes] so that the limit on errors shown
can be disabled if desired.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@414 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/valgrind.in b/coregrind/valgrind.in
index 713506f..fbec27c 100755
--- a/coregrind/valgrind.in
+++ b/coregrind/valgrind.in
@@ -41,6 +41,8 @@
--verbose) vgopts="$vgopts -v"; shift;;
-q) vgopts="$vgopts $arg"; shift;;
--quiet) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=no) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=yes) vgopts="$vgopts $arg"; shift;;
--check-addrVs=no) vgopts="$vgopts $arg"; shift;;
--check-addrVs=yes) vgopts="$vgopts $arg"; shift;;
--gdb-attach=no) vgopts="$vgopts $arg"; shift;;
@@ -121,6 +123,7 @@
echo " --gdb-attach=no|yes start GDB when errors detected? [no]"
echo " --demangle=no|yes automatically demangle C++ names? [yes]"
echo " --num-callers=<number> show <num> callers in stack traces [4]"
+ echo " --event-horizon=no|yes stop showing new errors if too many? [yes]"
echo " --partial-loads-ok=no|yes too hard to explain here; see manual [yes]"
echo " --leak-check=no|yes search for memory leaks at exit? [no]"
echo " --leak-resolution=low|med|high"
diff --git a/coregrind/vg_errcontext.c b/coregrind/vg_errcontext.c
index d5e0abb..60eaba0 100644
--- a/coregrind/vg_errcontext.c
+++ b/coregrind/vg_errcontext.c
@@ -497,8 +497,9 @@
the burden of the error-management system becoming excessive in
extremely buggy programs, although it does make it pretty
pointless to continue the Valgrind run after this point. */
- if (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
- || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND) {
+ if (VG_(clo_event_horizon)
+ && (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
+ || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND)) {
if (!stopping_message) {
VG_(message)(Vg_UserMsg, "");
@@ -516,6 +517,12 @@
VG_(message)(Vg_UserMsg,
"Final error counts will be inaccurate. Go fix your program!");
+ VG_(message)(Vg_UserMsg,
+ "Rerun with --event-horizon=no to disable this cutoff. Note");
+ VG_(message)(Vg_UserMsg,
+ "that your program may now segfault without prior warning from");
+ VG_(message)(Vg_UserMsg,
+ "Valgrind, because errors are no longer being displayed.");
VG_(message)(Vg_UserMsg, "");
stopping_message = True;
vg_ignore_errors = True;
diff --git a/coregrind/vg_include.h b/coregrind/vg_include.h
index a480765..97d6b4e 100644
--- a/coregrind/vg_include.h
+++ b/coregrind/vg_include.h
@@ -218,8 +218,10 @@
#define VG_CLO_MAX_SFILES 10
+/* Should we stop collecting errors if too many appear? default: YES */
+extern Bool VG_(clo_event_horizon);
/* Shall we V-check addrs (they are always A checked too): default: YES */
-extern Bool VG_(clo_check_addrVs);
+extern Bool VG_(clo_check_addrVs);
/* Enquire about whether to attach to GDB at errors? default: NO */
extern Bool VG_(clo_GDB_attach);
/* Sanity-check level: 0 = none, 1 (default), > 1 = expensive. */
diff --git a/coregrind/vg_main.c b/coregrind/vg_main.c
index 29cd3d6..ceec5d0 100644
--- a/coregrind/vg_main.c
+++ b/coregrind/vg_main.c
@@ -399,6 +399,7 @@
Values derived from command-line options.
------------------------------------------------------------------ */
+Bool VG_(clo_event_horizon);
Bool VG_(clo_check_addrVs);
Bool VG_(clo_GDB_attach);
Int VG_(sanity_level);
@@ -532,6 +533,7 @@
# define STREQN(nn,s1,s2) (0==VG_(strncmp_ws)((s1),(s2),(nn)))
/* Set defaults. */
+ VG_(clo_event_horizon) = True;
VG_(clo_check_addrVs) = True;
VG_(clo_GDB_attach) = False;
VG_(sanity_level) = 1;
@@ -708,6 +710,11 @@
else if (STREQ(argv[i], "-q") || STREQ(argv[i], "--quiet"))
VG_(clo_verbosity)--;
+ else if (STREQ(argv[i], "--event-horizon=yes"))
+ VG_(clo_event_horizon) = True;
+ else if (STREQ(argv[i], "--event-horizon=no"))
+ VG_(clo_event_horizon) = False;
+
else if (STREQ(argv[i], "--check-addrVs=yes"))
VG_(clo_check_addrVs) = True;
else if (STREQ(argv[i], "--check-addrVs=no"))
diff --git a/valgrind.in b/valgrind.in
index 713506f..fbec27c 100755
--- a/valgrind.in
+++ b/valgrind.in
@@ -41,6 +41,8 @@
--verbose) vgopts="$vgopts -v"; shift;;
-q) vgopts="$vgopts $arg"; shift;;
--quiet) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=no) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=yes) vgopts="$vgopts $arg"; shift;;
--check-addrVs=no) vgopts="$vgopts $arg"; shift;;
--check-addrVs=yes) vgopts="$vgopts $arg"; shift;;
--gdb-attach=no) vgopts="$vgopts $arg"; shift;;
@@ -121,6 +123,7 @@
echo " --gdb-attach=no|yes start GDB when errors detected? [no]"
echo " --demangle=no|yes automatically demangle C++ names? [yes]"
echo " --num-callers=<number> show <num> callers in stack traces [4]"
+ echo " --event-horizon=no|yes stop showing new errors if too many? [yes]"
echo " --partial-loads-ok=no|yes too hard to explain here; see manual [yes]"
echo " --leak-check=no|yes search for memory leaks at exit? [no]"
echo " --leak-resolution=low|med|high"
diff --git a/vg_errcontext.c b/vg_errcontext.c
index d5e0abb..60eaba0 100644
--- a/vg_errcontext.c
+++ b/vg_errcontext.c
@@ -497,8 +497,9 @@
the burden of the error-management system becoming excessive in
extremely buggy programs, although it does make it pretty
pointless to continue the Valgrind run after this point. */
- if (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
- || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND) {
+ if (VG_(clo_event_horizon)
+ && (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
+ || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND)) {
if (!stopping_message) {
VG_(message)(Vg_UserMsg, "");
@@ -516,6 +517,12 @@
VG_(message)(Vg_UserMsg,
"Final error counts will be inaccurate. Go fix your program!");
+ VG_(message)(Vg_UserMsg,
+ "Rerun with --event-horizon=no to disable this cutoff. Note");
+ VG_(message)(Vg_UserMsg,
+ "that your program may now segfault without prior warning from");
+ VG_(message)(Vg_UserMsg,
+ "Valgrind, because errors are no longer being displayed.");
VG_(message)(Vg_UserMsg, "");
stopping_message = True;
vg_ignore_errors = True;
diff --git a/vg_include.h b/vg_include.h
index a480765..97d6b4e 100644
--- a/vg_include.h
+++ b/vg_include.h
@@ -218,8 +218,10 @@
#define VG_CLO_MAX_SFILES 10
+/* Should we stop collecting errors if too many appear? default: YES */
+extern Bool VG_(clo_event_horizon);
/* Shall we V-check addrs (they are always A checked too): default: YES */
-extern Bool VG_(clo_check_addrVs);
+extern Bool VG_(clo_check_addrVs);
/* Enquire about whether to attach to GDB at errors? default: NO */
extern Bool VG_(clo_GDB_attach);
/* Sanity-check level: 0 = none, 1 (default), > 1 = expensive. */
diff --git a/vg_main.c b/vg_main.c
index 29cd3d6..ceec5d0 100644
--- a/vg_main.c
+++ b/vg_main.c
@@ -399,6 +399,7 @@
Values derived from command-line options.
------------------------------------------------------------------ */
+Bool VG_(clo_event_horizon);
Bool VG_(clo_check_addrVs);
Bool VG_(clo_GDB_attach);
Int VG_(sanity_level);
@@ -532,6 +533,7 @@
# define STREQN(nn,s1,s2) (0==VG_(strncmp_ws)((s1),(s2),(nn)))
/* Set defaults. */
+ VG_(clo_event_horizon) = True;
VG_(clo_check_addrVs) = True;
VG_(clo_GDB_attach) = False;
VG_(sanity_level) = 1;
@@ -708,6 +710,11 @@
else if (STREQ(argv[i], "-q") || STREQ(argv[i], "--quiet"))
VG_(clo_verbosity)--;
+ else if (STREQ(argv[i], "--event-horizon=yes"))
+ VG_(clo_event_horizon) = True;
+ else if (STREQ(argv[i], "--event-horizon=no"))
+ VG_(clo_event_horizon) = False;
+
else if (STREQ(argv[i], "--check-addrVs=yes"))
VG_(clo_check_addrVs) = True;
else if (STREQ(argv[i], "--check-addrVs=no"))