]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Test XML output.
authorJulian Seward <jseward@acm.org>
Tue, 24 May 2005 14:46:02 +0000 (14:46 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 24 May 2005 14:46:02 +0000 (14:46 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3796

memcheck/tests/Makefile.am
memcheck/tests/filter_xml [new file with mode: 0755]
memcheck/tests/xml1.c [new file with mode: 0644]
memcheck/tests/xml1.stderr.exp [new file with mode: 0644]
memcheck/tests/xml1.stdout.exp [new file with mode: 0644]
memcheck/tests/xml1.vgtest [new file with mode: 0644]

index 6b803bef608850bd1782cbddd5af7c8833d73940..8edb5d7c3c3d6527b4d226349b61588f1652b4e5 100644 (file)
@@ -2,7 +2,7 @@ SUBDIRS      = ${VG_ARCH}     .
 DIST_SUBDIRS = ${VG_ARCH_ALL} .
 
 noinst_SCRIPTS = filter_allocs filter_leak_check_size \
-                filter_stderr filter_stderr_backtrace
+                filter_stderr filter_stderr_backtrace filter_xml
 
 EXTRA_DIST = $(noinst_SCRIPTS) \
        addressable.stderr.exp addressable.stdout.exp addressable.vgtest \
@@ -77,6 +77,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        metadata.stderr.exp metadata.stdout.exp metadata.vgtest \
        vgtest_ume.stderr.exp vgtest_ume.vgtest \
        writev.stderr.exp writev.stderr.exp2 writev.stderr.exp3 writev.vgtest \
+       xml1.stderr.exp xml1.stdout.exp xml1.vgtest \
        zeropage.stderr.exp zeropage.stderr.exp2 zeropage.vgtest
 
 check_PROGRAMS = \
@@ -100,7 +101,7 @@ check_PROGRAMS = \
        str_tester supp1 supp2 suppfree \
        trivialleak weirdioctl  \
        mismatches new_override metadata \
-       vgtest_ume \
+       vgtest_ume xml1 \
        writev zeropage
 
 
@@ -173,6 +174,7 @@ metadata_SOURCES    = metadata.c
 str_tester_SOURCES     = str_tester.c
 str_tester_CFLAGS      = $(AM_CFLAGS) -Wno-shadow
 writev_SOURCES         = writev.c
+xml1_SOURCES           = xml1.c
 zeropage_SOURCES       = zeropage.c
 
 # C++ ones
diff --git a/memcheck/tests/filter_xml b/memcheck/tests/filter_xml
new file mode 100755 (executable)
index 0000000..f795d5e
--- /dev/null
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+./filter_stderr |
+sed "s/<tid>[0-9]*<\/tid>/<tid>...<\/tid>/" |
+sed "s/<pid>[0-9]*<\/pid>/<pid>...<\/pid>/" |
+sed "s/<ppid>[0-9]*<\/ppid>/<ppid>...<\/ppid>/" |
+sed "s/<obj>.*<\/obj>/<obj>...<\/obj>/" |
+sed "s/<preamble>.*<\/preamble>/<preamble>...<\/preamble>/"
+
diff --git a/memcheck/tests/xml1.c b/memcheck/tests/xml1.c
new file mode 100644 (file)
index 0000000..abf2d38
--- /dev/null
@@ -0,0 +1,50 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+
+
+int frame3 ( void )
+{
+  int *a = malloc(10 * sizeof(int));
+
+  // bad address;
+  int n = a[10];
+
+  // undefined condition
+  if (a[5] == 42) {
+    printf("hello from frame3().  The answer is 42.\n");
+  } else {
+    printf("hello from frame3().  The answer is not 42.\n");
+  }
+
+  // undefined address (careful ..)
+  n = a[  a[0] & 7  ];
+
+  // invalid free, the second time
+  free(a);
+  free(a);
+
+  // more invalid frees
+  free(&n);
+
+  // leak ..
+  a = malloc(99 * sizeof(int));
+
+  // pass garbage to the exit syscall
+  return n;
+}
+
+int frame2 ( void )
+{
+  return frame3() - 1;
+}
+
+int frame1 ( void )
+{
+  return frame2() + 1;
+}
+
+int main ( void )
+{
+  return frame1() - 1;
+}
diff --git a/memcheck/tests/xml1.stderr.exp b/memcheck/tests/xml1.stderr.exp
new file mode 100644 (file)
index 0000000..9cdc414
--- /dev/null
@@ -0,0 +1,151 @@
+
+<valgrindoutput>
+
+<protocolversion>1</protocolversion>
+
+<preamble>...</preamble>
+<preamble>...</preamble>
+<preamble>...</preamble>
+<preamble>...</preamble>
+<preamble>...</preamble>
+<preamble>...</preamble>
+
+<pid>...</pid>
+<ppid>...</ppid>
+<tool>memcheck</tool>
+
+<argv>
+  <arg>./xml1</arg>
+</argv>
+
+<status>RUNNING</status>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>InvalidRead</kind>
+  <what>Invalid read of size 4</what>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+  <auxwhat>Address 0x........ is 0 bytes after a block of size 40 alloc'd</auxwhat>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>malloc</fn><file>vg_replace_malloc.c</file><line>220</line></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>UninitCondition</kind>
+  <what>Conditional jump or move depends on uninitialised value(s)</what>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>UninitValue</kind>
+  <what>Use of uninitialised value of size 4</what>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>InvalidFree</kind>
+  <what>Invalid free() / delete / delete[]</what>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>free</fn><file>vg_replace_malloc.c</file><line>306</line></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+  <auxwhat>Address 0x........ is 0 bytes inside a block of size 40 free'd</auxwhat>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>free</fn><file>vg_replace_malloc.c</file><line>306</line></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>InvalidFree</kind>
+  <what>Invalid free() / delete / delete[]</what>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>free</fn><file>vg_replace_malloc.c</file><line>306</line></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+  <auxwhat>Address 0x........ is on thread 1's stack</auxwhat>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>SyscallParam</kind>
+  <what>Syscall param exit_group(exit_code) contains uninitialised byte(s)</what>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>_Exit</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>__libc_start_main</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><file>start.S</file><line>102</line></frame>
+  </stack>
+</error>
+
+<errorcounts>
+  <pair><count>1</count><unique>0x........</unique></pair>
+  <pair><count>1</count><unique>0x........</unique></pair>
+  <pair><count>1</count><unique>0x........</unique></pair>
+  <pair><count>1</count><unique>0x........</unique></pair>
+  <pair><count>1</count><unique>0x........</unique></pair>
+  <pair><count>1</count><unique>0x........</unique></pair>
+</errorcounts>
+
+<status>FINISHED</status>
+
+<suppcounts>
+  <pair><count>18</count><name>Ugly strchr error in /lib/ld-2.3.3.so</name></pair>
+<suppcounts>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>Leak_DefinitelyLost</kind>
+  <what>396 bytes in 1 blocks are definitely lost in loss record 1 of 1</what>
+  <leakedbytes>396</leakedbytes>
+  <leakedblocks>1</leakedblocks>
+  <stack>
+    <frame><ip>0x........</ip><obj>...</obj><fn>malloc</fn><file>vg_replace_malloc.c</file><line>220</line></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame3</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame2</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>frame1</fn></frame>
+    <frame><ip>0x........</ip><obj>...</obj><fn>main</fn></frame>
+  </stack>
+</error>
+
+</valgrindoutput>
+
diff --git a/memcheck/tests/xml1.stdout.exp b/memcheck/tests/xml1.stdout.exp
new file mode 100644 (file)
index 0000000..9397eec
--- /dev/null
@@ -0,0 +1 @@
+hello from frame3().  The answer is not 42.
diff --git a/memcheck/tests/xml1.vgtest b/memcheck/tests/xml1.vgtest
new file mode 100644 (file)
index 0000000..5a6769b
--- /dev/null
@@ -0,0 +1,3 @@
+prog: xml1
+vgopts: --xml=yes
+stderr_filter: filter_xml