summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-11-07 21:22:47 +0200
committerArnold D. Robbins <arnold@skeeve.com>2016-11-07 21:22:47 +0200
commite331f49edafc56bf8f32cc82adacd6c109666ad1 (patch)
treef345bd919a0e36e4342e547c06e05ef1a3ecf530
parente886bf34a4e42095824a2b14c40cb19efa80390f (diff)
downloadgawk-e331f49edafc56bf8f32cc82adacd6c109666ad1.tar.gz
Improve valgrind scan.
-rw-r--r--test/ChangeLog8
-rw-r--r--test/Makefile.am12
-rw-r--r--test/Makefile.in12
-rw-r--r--test/valgrind.awk43
4 files changed, 53 insertions, 22 deletions
diff --git a/test/ChangeLog b/test/ChangeLog
index 280a80ae..9006d334 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,11 @@
+2016-11-07 Arnold D. Robbins <arnold@skeeve.com>
+
+ * valgrind.awk: New file. Based on original valgrind-scan code.
+ Having it in a separate file makes it easier to adjust.
+ Commented out several checks that just produced false positives.
+ Add check for invalid read and write.
+ * Makefile.am (valgrind-scan): Use valgrind.awk.
+
2016-08-25 Arnold D. Robbins <arnold@skeeve.com>
* 4.1.4: Release tar ball made.
diff --git a/test/Makefile.am b/test/Makefile.am
index e27dcf65..a9d247ed 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -2228,17 +2228,7 @@ diffout:
# convenient way to scan valgrind results for errors
valgrind-scan:
@echo "Scanning valgrind log files for problems:"
- @$(AWK) '\
- function show() {if (cmd) {printf "%s: %s\n",FILENAME,cmd; cmd = ""}; \
- printf "\t%s\n",$$0}; \
- {$$1 = ""}; \
- $$2 == "Command:" {incmd = 1; $$2 = ""; cmd = $$0; next}; \
- incmd {if (/Parent PID:/) incmd = 0; else {cmd = (cmd $$0); next}}; \
- /ERROR SUMMARY:/ && !/: 0 errors from 0 contexts/ {show()}; \
- /definitely lost:/ && !/: 0 bytes in 0 blocks/ {show()}; \
- /possibly lost:/ && !/: 0 bytes in 0 blocks/ {show()}; \
- / suppressed:/ && !/: 0 bytes in 0 blocks/ {show()}; \
- ' log.[0-9]*
+ @$(AWK) -f "$(srcdir)"/valgrind.awk log.[0-9]*
# This target is for testing with electric fence.
efence:
diff --git a/test/Makefile.in b/test/Makefile.in
index 0a5595ba..af45cc39 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -4150,17 +4150,7 @@ diffout:
# convenient way to scan valgrind results for errors
valgrind-scan:
@echo "Scanning valgrind log files for problems:"
- @$(AWK) '\
- function show() {if (cmd) {printf "%s: %s\n",FILENAME,cmd; cmd = ""}; \
- printf "\t%s\n",$$0}; \
- {$$1 = ""}; \
- $$2 == "Command:" {incmd = 1; $$2 = ""; cmd = $$0; next}; \
- incmd {if (/Parent PID:/) incmd = 0; else {cmd = (cmd $$0); next}}; \
- /ERROR SUMMARY:/ && !/: 0 errors from 0 contexts/ {show()}; \
- /definitely lost:/ && !/: 0 bytes in 0 blocks/ {show()}; \
- /possibly lost:/ && !/: 0 bytes in 0 blocks/ {show()}; \
- / suppressed:/ && !/: 0 bytes in 0 blocks/ {show()}; \
- ' log.[0-9]*
+ @$(AWK) -f "$(srcdir)"/valgrind.awk log.[0-9]*
# This target is for testing with electric fence.
efence:
diff --git a/test/valgrind.awk b/test/valgrind.awk
new file mode 100644
index 00000000..95699da1
--- /dev/null
+++ b/test/valgrind.awk
@@ -0,0 +1,43 @@
+function show()
+{
+ error_count++
+ if (cmd) {
+ printf "%s: %s\n", FILENAME, cmd
+ cmd = ""
+ }
+ printf "\t%s\n",$0
+}
+
+FNR == 1 {
+ error_count = 0
+}
+
+{ $1 = "" }
+
+$2 == "Command:" {
+ incmd = 1
+ $2 = ""
+ cmd = $0
+ next
+}
+
+incmd {
+ if (/Parent PID:/)
+ incmd = 0
+ else {
+ cmd = (cmd $0)
+ next
+ }
+}
+
+/ERROR SUMMARY:/ && !/: 0 errors from 0 contexts/ && error_count > 0 {
+ show()
+}
+
+/definitely lost:/ && !/: 0 bytes in 0 blocks/ { show() }
+
+# /possibly lost:/ && !/: 0 bytes in 0 blocks/ { show() }
+
+# / suppressed:/ && !/: 0 bytes in 0 blocks/ { show() }
+
+/[Ii]nvalid (read|write)/ { show() }