]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add a test case for #157748.
authorJulian Seward <jseward@acm.org>
Fri, 9 May 2008 19:46:55 +0000 (19:46 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 9 May 2008 19:46:55 +0000 (19:46 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8018

memcheck/tests/x86/Makefile.am
memcheck/tests/x86/pushfw_x86.c [new file with mode: 0644]
memcheck/tests/x86/pushfw_x86.stderr.exp [new file with mode: 0644]
memcheck/tests/x86/pushfw_x86.stdout.exp [new file with mode: 0644]
memcheck/tests/x86/pushfw_x86.vgtest [new file with mode: 0644]

index 36a6a3990b0ddb56e81c7765fa7686a825201670..3c5264b0c7262905fdd94affcbca008f2515d14c 100644 (file)
@@ -14,6 +14,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        $(addsuffix .vgtest,$(INSN_TESTS)) \
        int3-x86.vgtest int3-x86.stderr.exp int3-x86.stdout.exp \
        pushfpopf.stderr.exp pushfpopf.stdout.exp pushfpopf.vgtest \
+       pushfw_x86.vgtest pushfw_x86.stdout.exp pushfw_x86.stderr.exp \
        pushpopmem.stderr.exp pushpopmem.stdout.exp pushpopmem.vgtest \
        scalar.stderr.exp scalar.stderr.exp2 scalar.vgtest \
        scalar_fork.stderr.exp scalar_fork.vgtest \
@@ -36,7 +37,9 @@ check_PROGRAMS = \
        espindola2 \
        int3-x86 \
        scalar_exit_group scalar_fork scalar_supp scalar_vfork \
-       fpeflags pushfpopf pushpopmem scalar sse_memory tronical \
+       fpeflags pushfpopf \
+       pushfw_x86 \
+       pushpopmem scalar sse_memory tronical \
        more_x86_fp fprem xor-undef-x86
 
 AM_CPPFLAGS  = -I$(top_srcdir)/include
diff --git a/memcheck/tests/x86/pushfw_x86.c b/memcheck/tests/x86/pushfw_x86.c
new file mode 100644 (file)
index 0000000..74bc684
--- /dev/null
@@ -0,0 +1,22 @@
+
+/* Test case for http://bugs.kde.org/show_bug.cgi?id=157748 */
+
+#include <stdio.h>
+
+int arr[3];
+
+int main ( void )
+{
+   /* eax points at arr[0] */
+   __asm__ __volatile__(
+      "movl %%esp,0(%%eax)\n\t"
+      "pushfw\n\t"
+      "movl %%esp,4(%%eax)\n\t"
+      "popfw\n\t"
+      "movl %%esp,8(%%eax)\n"
+      : /*out*/ : /*in*/ "a"(&arr) : /*trash*/ "memory","cc"
+   );
+
+   printf("%x %x %x\n", arr[0]-arr[0], arr[0]-arr[1], arr[0]-arr[2]);
+   return 0;
+}
diff --git a/memcheck/tests/x86/pushfw_x86.stderr.exp b/memcheck/tests/x86/pushfw_x86.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/memcheck/tests/x86/pushfw_x86.stdout.exp b/memcheck/tests/x86/pushfw_x86.stdout.exp
new file mode 100644 (file)
index 0000000..c24938b
--- /dev/null
@@ -0,0 +1 @@
+0 2 0
diff --git a/memcheck/tests/x86/pushfw_x86.vgtest b/memcheck/tests/x86/pushfw_x86.vgtest
new file mode 100644 (file)
index 0000000..392252f
--- /dev/null
@@ -0,0 +1,2 @@
+prog: pushfw_x86
+vgopts: -q