|
From: <sv...@va...> - 2006-01-10 15:49:59
|
Author: sewardj
Date: 2006-01-10 15:49:46 +0000 (Tue, 10 Jan 2006)
New Revision: 5508
Log:
Add another function wrapping test.
Added:
branches/FNWRAP/memcheck/tests/wrap6.c
branches/FNWRAP/memcheck/tests/wrap6.stderr.exp
branches/FNWRAP/memcheck/tests/wrap6.stdout.exp
branches/FNWRAP/memcheck/tests/wrap6.vgtest
Modified:
branches/FNWRAP/memcheck/tests/Makefile.am
Modified: branches/FNWRAP/memcheck/tests/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/memcheck/tests/Makefile.am 2006-01-10 08:02:41 UTC (r=
ev 5507)
+++ branches/FNWRAP/memcheck/tests/Makefile.am 2006-01-10 15:49:46 UTC (r=
ev 5508)
@@ -107,6 +107,7 @@
wrap3.vgtest wrap3.stdout.exp wrap3.stderr.exp \
wrap4.vgtest wrap4.stdout.exp wrap4.stderr.exp \
wrap5.vgtest wrap5.stdout.exp wrap5.stderr.exp \
+ wrap6.vgtest wrap6.stdout.exp wrap6.stderr.exp \
writev.stderr.exp writev.stderr.exp2 writev.stderr.exp3 writev.vgtest \
xml1.stderr.exp xml1.stderr.exp2 xml1.stderr.exp3 \
xml1.stderr.exp64 xml1.stderr.exp64_2 xml1.stdout.exp \
@@ -140,7 +141,7 @@
trivialleak \
mismatches new_override metadata \
xml1 \
- wrap1 wrap2 wrap3 wrap4 wrap5 \
+ wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 \
writev zeropage
=20
=20
Added: branches/FNWRAP/memcheck/tests/wrap6.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/memcheck/tests/wrap6.c (rev 0=
)
+++ branches/FNWRAP/memcheck/tests/wrap6.c 2006-01-10 15:49:46 UTC (rev 5=
508)
@@ -0,0 +1,155 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "valgrind.h"
+
+/* Program that checks all numbers of args (0 through 12) work for
+ wrapping. Also calls originals which trash all the iregs in an
+ attempt to shake out any problems caused by insufficient saving of
+ caller-save registers around the hidden call instruction. */
+
+typedef unsigned long UWord;
+
+#define ROL(_x,n) (((_x) << n) | ((UWord)(_x)) >> ((8*sizeof(UWord)-n)))
+
+#define TRASH_IREGS(_rlval, _vec) \
+ do { \
+ UWord* vec =3D (_vec); \
+ /* x86 spills for v > 4, amd64 for v > 12. */ \
+ UWord i, sum =3D 0; \
+ UWord v1 =3D vec[1-1]; \
+ UWord v2 =3D vec[2-1]; \
+ UWord v3 =3D vec[3-1]; \
+ UWord v4 =3D vec[4-1]; \
+ UWord v5 =3D vec[5-1]; \
+ UWord v6 =3D vec[6-1]; \
+ UWord v7 =3D vec[7-1]; \
+ UWord v8 =3D vec[8-1]; \
+ UWord v9 =3D vec[9-1]; \
+ UWord v10 =3D vec[10-1]; \
+ UWord v11 =3D vec[11-1]; \
+ UWord v12 =3D vec[12-1]; \
+ for (i =3D 0; i < 50; i++) { \
+ v1 =3D ROL(v1,1); \
+ v2 =3D ROL(v2,2); \
+ v3 =3D ROL(v3,3); \
+ v4 =3D ROL(v4,4); \
+ v5 =3D ROL(v5,5); \
+ v6 =3D ROL(v6,6); \
+ v7 =3D ROL(v7,7); \
+ v8 =3D ROL(v8,8); \
+ v9 =3D ROL(v9,9); \
+ v10 =3D ROL(v10,10); \
+ v11 =3D ROL(v11,11); \
+ v12 =3D ROL(v12,12); \
+ sum ^=3D (v1-v2); \
+ sum ^=3D (v1-v3); \
+ sum ^=3D (v1-v4); \
+ sum ^=3D (v1-v5); \
+ sum ^=3D (v1-v6); \
+ sum ^=3D (v1-v7); \
+ sum ^=3D (v1-v8); \
+ sum ^=3D (v1-v9); \
+ sum ^=3D (v1-v10); \
+ sum ^=3D (v1-v11); \
+ sum ^=3D (v1-v12); \
+ } \
+ _rlval =3D sum; \
+ } while (0)
+
+/* --------------- 0 --------------- */ =20
+
+UWord fn_0 ( void )
+{
+ UWord r;
+ UWord* words =3D calloc(200, sizeof(UWord));
+ TRASH_IREGS(r, words);
+ free(words);
+ return r;
+}
+
+UWord I_WRAP_SONAME_FNNAME_ZU(NONE,fn_0) ( UWord a1 )
+{
+ UWord r;
+ void* fn;
+ VALGRIND_GET_ORIG_FN(fn);
+ printf("fn_0 wrapper pre ()\n");
+ CALL_FN_W_v(r, fn);
+ printf("fn_0 wrapper post1 =3D %d\n", (int)r);
+ CALL_FN_v_v(fn);
+ printf("fn_0 wrapper post2 =3D %d\n", (int)r);
+ return r;
+}
+
+/* --------------- 1 --------------- */ =20
+
+UWord fn_1 ( UWord a1 )
+{
+ UWord r;
+ UWord* words =3D calloc(200, sizeof(UWord));
+ words[1-1] =3D a1;
+ TRASH_IREGS(r, words);
+ free(words);
+ return r;
+}
+
+UWord I_WRAP_SONAME_FNNAME_ZU(NONE,fn_1) ( UWord a1 )
+{
+ UWord r;
+ void* fn;
+ VALGRIND_GET_ORIG_FN(fn);
+ printf("fn_1 wrapper pre ( %d )\n", (int)a1);
+ CALL_FN_W_W(r, fn, a1);
+ printf("fn_1 wrapper post1 =3D %d\n", (int)r);
+ CALL_FN_v_W(fn, a1);
+ printf("fn_1 wrapper post2 =3D %d\n", (int)r);
+ return r;
+}
+
+/* --------------- 2 --------------- */ =20
+
+UWord fn_2 ( UWord a1, UWord a2 )
+{
+ UWord r;
+ UWord* words =3D calloc(200, sizeof(UWord));
+ words[1-1] =3D a1;
+ words[2-1] =3D a2;
+ TRASH_IREGS(r, words);
+ free(words);
+ return r;
+}
+
+UWord I_WRAP_SONAME_FNNAME_ZU(NONE,fn_2) ( UWord a1, UWord a2 )
+{
+ UWord r;
+ void* fn;
+ VALGRIND_GET_ORIG_FN(fn);
+ printf("fn_2 wrapper pre ( %d, %d )\n", (int)a1, (int)a2);
+ CALL_FN_W_WW(r, fn, a1, a2);
+ printf("fn_2 wrapper post1 =3D %d\n", (int)r);
+ CALL_FN_v_WW(fn, a1, a2);
+ printf("fn_2 wrapper post2 =3D %d\n", (int)r);
+ return r;
+}
+
+/* --------------- main --------------- */ =20
+
+int main ( void )
+{
+ UWord w;
+
+ printf("fn_0 ...\n");
+ w =3D fn_0();
+ printf(" ... %d\n\n", (int)w);
+
+ printf("fn_1 ...\n");
+ w =3D fn_1(42);
+ printf(" ... %d\n\n", (int)w);
+
+ printf("fn_2 ...\n");
+ w =3D fn_2(42,43);
+ printf(" ... %d\n\n", (int)w);
+
+ return 0;
+}
+
Added: branches/FNWRAP/memcheck/tests/wrap6.stderr.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Added: branches/FNWRAP/memcheck/tests/wrap6.stdout.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/memcheck/tests/wrap6.stdout.exp =
(rev 0)
+++ branches/FNWRAP/memcheck/tests/wrap6.stdout.exp 2006-01-10 15:49:46 U=
TC (rev 5508)
@@ -0,0 +1,18 @@
+fn_0 ...
+fn_0 wrapper pre ()
+fn_0 wrapper post1 =3D 0
+fn_0 wrapper post2 =3D 0
+ ... 0
+
+fn_1 ...
+fn_1 wrapper pre ( 42 )
+fn_1 wrapper post1 =3D -52
+fn_1 wrapper post2 =3D -52
+ ... -52
+
+fn_2 ...
+fn_2 wrapper pre ( 42, 43 )
+fn_2 wrapper post1 =3D 2617
+fn_2 wrapper post2 =3D 2617
+ ... 2617
+
Added: branches/FNWRAP/memcheck/tests/wrap6.vgtest
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/memcheck/tests/wrap6.vgtest (=
rev 0)
+++ branches/FNWRAP/memcheck/tests/wrap6.vgtest 2006-01-10 15:49:46 UTC (=
rev 5508)
@@ -0,0 +1,2 @@
+prog: wrap6
+vgopts: -q
|