|
From: <sv...@va...> - 2008-02-26 18:36:28
|
Author: sewardj
Date: 2008-02-26 18:36:29 +0000 (Tue, 26 Feb 2008)
New Revision: 7479
Log:
Add some regression tests for the Dwarf3 variable reader.
Added:
branches/DATASYMS/memcheck/tests/varinfo1.c
branches/DATASYMS/memcheck/tests/varinfo1.stderr.exp
branches/DATASYMS/memcheck/tests/varinfo1.stdout.exp
branches/DATASYMS/memcheck/tests/varinfo1.vgtest
branches/DATASYMS/memcheck/tests/varinfo2.c
branches/DATASYMS/memcheck/tests/varinfo2.stderr.exp
branches/DATASYMS/memcheck/tests/varinfo2.stdout.exp
branches/DATASYMS/memcheck/tests/varinfo2.vgtest
branches/DATASYMS/memcheck/tests/varinfo3.c
branches/DATASYMS/memcheck/tests/varinfo3.stderr.exp
branches/DATASYMS/memcheck/tests/varinfo3.stdout.exp
branches/DATASYMS/memcheck/tests/varinfo3.vgtest
branches/DATASYMS/memcheck/tests/varinfo4.c
branches/DATASYMS/memcheck/tests/varinfo4.stderr.exp
branches/DATASYMS/memcheck/tests/varinfo4.stdout.exp
branches/DATASYMS/memcheck/tests/varinfo4.vgtest
Modified:
branches/DATASYMS/memcheck/tests/Makefile.am
Modified: branches/DATASYMS/memcheck/tests/Makefile.am
===================================================================
--- branches/DATASYMS/memcheck/tests/Makefile.am 2008-02-26 17:23:54 UTC (rev 7478)
+++ branches/DATASYMS/memcheck/tests/Makefile.am 2008-02-26 18:36:29 UTC (rev 7479)
@@ -129,6 +129,10 @@
toobig-allocs.stderr.exp toobig-allocs.vgtest \
trivialleak.stderr.exp trivialleak.vgtest \
metadata.stderr.exp metadata.stdout.exp metadata.vgtest \
+ varinfo1.vgtest varinfo1.stdout.exp varinfo1.stderr.exp \
+ varinfo2.vgtest varinfo2.stdout.exp varinfo2.stderr.exp \
+ varinfo3.vgtest varinfo3.stdout.exp varinfo3.stderr.exp \
+ varinfo4.vgtest varinfo4.stdout.exp varinfo4.stderr.exp \
vcpu_bz2.stdout.exp vcpu_bz2.stderr.exp vcpu_bz2.vgtest \
vcpu_fbench.stdout.exp vcpu_fbench.stderr.exp vcpu_fbench.vgtest \
vcpu_fnfns.stdout.exp vcpu_fnfns.stderr.exp vcpu_fnfns.vgtest \
@@ -181,6 +185,7 @@
supp_unknown supp1 supp2 suppfree \
trivialleak \
mismatches new_override metadata \
+ varinfo1 varinfo2 varinfo3 varinfo4 \
vcpu_bz2 vcpu_fbench vcpu_fnfns \
xml1 \
wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 \
Added: branches/DATASYMS/memcheck/tests/varinfo1.c
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo1.c (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo1.c 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,53 @@
+
+/* Basic check of variable location identification, in a zero-biased
+ executable. */
+
+/* Relevant compile flags are:
+
+ -Wall -g -I$prefix/include/valgrind
+
+ eg -Wall -g -I`pwd`/Inst/include/valgrind
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "memcheck/memcheck.h"
+
+/* Cause memcheck to complain about the address "a" and so to print
+ its best guess as to what "a" actually is. a must be
+ addressible. */
+
+void croak ( void* a )
+{
+ volatile char undef;
+ *(char*)a = undef;
+ VALGRIND_CHECK_MEM_IS_DEFINED(a, 1);
+}
+
+#include <stdio.h>
+
+int global_u1;
+
+int global_i1 = 17;
+
+char global_u2[10];
+
+char global_i2[10] = { 1,2,3,4,5,6,7,8,9,10 };
+
+
+int main ( void )
+{
+ int local;
+ char* onheap = malloc(3);
+ assert(onheap);
+ croak(onheap+1);
+ free(onheap);
+
+ croak( &global_u1 );
+ croak( &global_i1 );
+ croak( &global_u2[3] );
+ croak( &global_i2[7] );
+ croak( &local );
+ return 0;
+}
Added: branches/DATASYMS/memcheck/tests/varinfo1.stderr.exp
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo1.stderr.exp (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo1.stderr.exp 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,43 @@
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo1.c:25)
+ by 0x........: main (varinfo1.c:44)
+ Address 0x........ is 1 bytes inside a block of size 3 alloc'd
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: main (varinfo1.c:42)
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo1.c:25)
+ by 0x........: main (varinfo1.c:47)
+ Location 0x........ is 0 bytes inside global var "global_u1"
+ declared at varinfo1.c:30
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo1.c:25)
+ by 0x........: main (varinfo1.c:48)
+ Location 0x........ is 0 bytes inside global var "global_i1"
+ declared at varinfo1.c:32
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo1.c:25)
+ by 0x........: main (varinfo1.c:49)
+ Location 0x........ is 0 bytes inside global_u2[3],
+ a global variable declared at varinfo1.c:34
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo1.c:25)
+ by 0x........: main (varinfo1.c:50)
+ Location 0x........ is 0 bytes inside global_i2[7],
+ a global variable declared at varinfo1.c:36
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo1.c:25)
+ by 0x........: main (varinfo1.c:51)
+ Location 0x........ is 0 bytes inside local var "local"
+ declared at varinfo1.c:41, in frame #1 of thread 1
+
+ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 1 allocs, 1 frees, 3 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
Added: branches/DATASYMS/memcheck/tests/varinfo1.stdout.exp
===================================================================
Added: branches/DATASYMS/memcheck/tests/varinfo1.vgtest
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo1.vgtest (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo1.vgtest 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1 @@
+prog: varinfo1
Added: branches/DATASYMS/memcheck/tests/varinfo2.c
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo2.c (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo2.c 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,48 @@
+
+/* Check for correct handling of nested scopes in a zero-biased
+ executable. */
+
+/* Relevant compile flags are:
+
+ -Wall -g -I$prefix/include/valgrind
+
+ eg -Wall -g -I`pwd`/Inst/include/valgrind
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "memcheck/memcheck.h"
+
+/* Cause memcheck to complain about the address "a" and so to print
+ its best guess as to what "a" actually is. a must be
+ addressible. */
+
+void croak ( void* a )
+{
+ volatile char undef;
+ *(char*)a = undef;
+ VALGRIND_CHECK_MEM_IS_DEFINED(a, 1);
+}
+
+#include <stdio.h>
+
+void foo ( void )
+{
+ int var;
+ var = 1;
+ { char var[10];
+ var[6] = 4;
+ croak( &var[7] );
+ { struct { double foo; float bar; } var;
+ croak ( 2 + (char*)&var.bar );
+ }
+ }
+ croak( 1 + (char*)&var );
+}
+
+int main ( void )
+{
+ foo();
+ return 0;
+}
Added: branches/DATASYMS/memcheck/tests/varinfo2.stderr.exp
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo2.stderr.exp (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo2.stderr.exp 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,27 @@
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo2.c:25)
+ by 0x........: foo (varinfo2.c:36)
+ by 0x........: main (varinfo2.c:46)
+ Location 0x........ is 0 bytes inside var[7],
+ declared at varinfo2.c:34, in frame #1 of thread 1
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo2.c:25)
+ by 0x........: foo (varinfo2.c:38)
+ by 0x........: main (varinfo2.c:46)
+ Location 0x........ is 2 bytes inside var.bar,
+ declared at varinfo2.c:37, in frame #1 of thread 1
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo2.c:25)
+ by 0x........: foo (varinfo2.c:41)
+ by 0x........: main (varinfo2.c:46)
+ Location 0x........ is 1 byte inside local var "var"
+ declared at varinfo2.c:32, in frame #1 of thread 1
+
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
Added: branches/DATASYMS/memcheck/tests/varinfo2.stdout.exp
===================================================================
Added: branches/DATASYMS/memcheck/tests/varinfo2.vgtest
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo2.vgtest (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo2.vgtest 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1 @@
+prog: varinfo2
Added: branches/DATASYMS/memcheck/tests/varinfo3.c
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo3.c (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo3.c 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,63 @@
+
+/* Check for correct handling of static vs non-static, local vs
+ non-local variables in a zero-biased executable. */
+
+/* Relevant compile flags are:
+
+ -Wall -g -I$prefix/include/valgrind
+
+ eg -Wall -g -I`pwd`/Inst/include/valgrind
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "memcheck/memcheck.h"
+
+/* Cause memcheck to complain about the address "a" and so to print
+ its best guess as to what "a" actually is. a must be
+ addressible. */
+
+void croak ( void* a )
+{
+ volatile char undef;
+ *(char*)a = undef;
+ VALGRIND_CHECK_MEM_IS_DEFINED(a, 1);
+}
+
+#include <stdio.h>
+
+static char static_global_def[10] = {0,0,0,0,0, 0,0,0,0,0};
+ char nonstatic_global_def[10] = {0,0,0,0,0, 0,0,0,0,0};
+static char static_global_undef[10];
+ char nonstatic_global_undef[10];
+
+void bar ( char* p1, char* p2, char* p3, char* p4 )
+{
+ croak(p1);
+ croak(p2);
+ croak(p3);
+ croak(p4);
+}
+
+void foo ( void )
+{
+ static char static_local_def[10] = {0,0,0,0,0, 0,0,0,0,0};
+ char nonstatic_local_def[10] = {0,0,0,0,0, 0,0,0,0,0};
+ static char static_local_undef[10];
+ char nonstatic_local_undef[10];
+ croak ( 1 + (char*)&static_global_def );
+ croak ( 2 + (char*)&nonstatic_global_def );
+ croak ( 3 + (char*)&static_global_undef );
+ croak ( 4 + (char*)&nonstatic_global_undef );
+ bar( 5 + (char*)&static_local_def,
+ 6 + (char*)&nonstatic_local_def,
+ 7 + (char*)&static_local_undef,
+ 8 + (char*)&nonstatic_local_undef );
+}
+
+int main ( void )
+{
+ foo();
+ return 0;
+}
Added: branches/DATASYMS/memcheck/tests/varinfo3.stderr.exp
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo3.stderr.exp (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo3.stderr.exp 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,64 @@
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: foo (varinfo3.c:49)
+ by 0x........: main (varinfo3.c:61)
+ Location 0x........ is 0 bytes inside static_global_def[1],
+ declared at varinfo3.c:30, in frame #0 of thread 1
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: foo (varinfo3.c:50)
+ by 0x........: main (varinfo3.c:61)
+ Location 0x........ is 0 bytes inside nonstatic_global_def[2],
+ a global variable declared at varinfo3.c:31
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: foo (varinfo3.c:51)
+ by 0x........: main (varinfo3.c:61)
+ Location 0x........ is 0 bytes inside static_global_undef[3],
+ declared at varinfo3.c:32, in frame #0 of thread 1
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: foo (varinfo3.c:52)
+ by 0x........: main (varinfo3.c:61)
+ Location 0x........ is 0 bytes inside nonstatic_global_undef[4],
+ a global variable declared at varinfo3.c:33
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: bar (varinfo3.c:37)
+ by 0x........: foo (varinfo3.c:53)
+ by 0x........: main (varinfo3.c:61)
+ Address 0x........ is 5 bytes inside data symbol "static_local_def.2751"
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: bar (varinfo3.c:38)
+ by 0x........: foo (varinfo3.c:53)
+ by 0x........: main (varinfo3.c:61)
+ Location 0x........ is 0 bytes inside nonstatic_local_def[6],
+ declared at varinfo3.c:46, in frame #2 of thread 1
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: bar (varinfo3.c:39)
+ by 0x........: foo (varinfo3.c:53)
+ by 0x........: main (varinfo3.c:61)
+ Address 0x........ is 7 bytes inside data symbol "static_local_undef.2753"
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:25)
+ by 0x........: bar (varinfo3.c:40)
+ by 0x........: foo (varinfo3.c:53)
+ by 0x........: main (varinfo3.c:61)
+ Location 0x........ is 0 bytes inside nonstatic_local_undef[8],
+ declared at varinfo3.c:48, in frame #2 of thread 1
+
+ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
Added: branches/DATASYMS/memcheck/tests/varinfo3.stdout.exp
===================================================================
Added: branches/DATASYMS/memcheck/tests/varinfo3.vgtest
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo3.vgtest (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo3.vgtest 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1 @@
+prog: varinfo3
Added: branches/DATASYMS/memcheck/tests/varinfo4.c
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo4.c (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo4.c 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,53 @@
+
+/* A small demo of providing descriptions of structured types in error
+ messages. */
+
+/* Relevant compile flags are:
+
+ -Wall -g -I$prefix/include/valgrind
+
+ eg -Wall -g -I`pwd`/Inst/include/valgrind
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "memcheck/memcheck.h"
+
+/* Cause memcheck to complain about the address "a" and so to print
+ its best guess as to what "a" actually is. a must be
+ addressible. */
+
+void croak ( void* a )
+{
+ volatile char undef;
+ *(char*)a = undef;
+ VALGRIND_CHECK_MEM_IS_DEFINED(a, 1);
+}
+
+#include <stdio.h>
+#include <string.h>
+
+typedef struct { short c1; char* c2[3]; } XX;
+
+typedef
+ struct _str { int bing; int bong; XX xyzzy[77]; }
+ Str;
+
+__attribute__((noinline))
+int blah ( int x, int y )
+{
+ Str a[10];
+ memset(a, 0, sizeof(a));
+ croak(1 + (char*)(&a[3].xyzzy[x*y].c1));
+ croak( (char*)(&a[5].bong) );
+ croak( 1 + (char*)(&a[3].xyzzy[x*y].c2[2]) );
+ memset(a, 0, sizeof(a));
+ return a[3].xyzzy[x*y].c1;
+}
+
+int main ( void )
+{
+ printf("answer is %d\n", blah(3,7) );
+ return 0;
+}
Added: branches/DATASYMS/memcheck/tests/varinfo4.stderr.exp
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo4.stderr.exp (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo4.stderr.exp 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1,27 @@
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo4.c:25)
+ by 0x........: blah (varinfo4.c:42)
+ by 0x........: main (varinfo4.c:51)
+ Location 0x........ is 1 byte inside a[3].xyzzy[21].c1,
+ declared at varinfo4.c:40, in frame #1 of thread 1
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo4.c:25)
+ by 0x........: blah (varinfo4.c:43)
+ by 0x........: main (varinfo4.c:51)
+ Location 0x........ is 0 bytes inside a[5].bong,
+ declared at varinfo4.c:40, in frame #1 of thread 1
+
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo4.c:25)
+ by 0x........: blah (varinfo4.c:44)
+ by 0x........: main (varinfo4.c:51)
+ Location 0x........ is 1 byte inside a[3].xyzzy[21].c2[2],
+ declared at varinfo4.c:40, in frame #1 of thread 1
+
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
Added: branches/DATASYMS/memcheck/tests/varinfo4.stdout.exp
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo4.stdout.exp (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo4.stdout.exp 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1 @@
+answer is 0
Added: branches/DATASYMS/memcheck/tests/varinfo4.vgtest
===================================================================
--- branches/DATASYMS/memcheck/tests/varinfo4.vgtest (rev 0)
+++ branches/DATASYMS/memcheck/tests/varinfo4.vgtest 2008-02-26 18:36:29 UTC (rev 7479)
@@ -0,0 +1 @@
+prog: varinfo4
|