• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2
32006-05-21: vex r1619 finally causes the x86->IR front end to state
4exactly the %eflags dataflow surrounding 'cmpb $0, ... ;  js ..'
5and so memcheck no longer gives a false positive on this test.
6
7-----------
8
9(original comments)
10Assembly derived from the following program compiled with -O2.
11This fools Valgrind, causing it to give a false error.
12
13#include <stdio.h>
14
15struct Foo
16{
17    int a1 : 1;
18    int a2 : 1;
19    int a3 : 1;
20    int a4 : 1;
21    int a5 : 1;
22    int a6 : 1;
23    int a7 : 1;
24    int bleh : 1;
25};
26
27struct Foo* foo;
28
29void set()
30{
31    foo->bleh = 1;
32}
33
34void get()
35{
36    if ( foo->bleh == 0 )
37        printf( "blieb\n" );
38}
39
40int main()
41{
42  foo = malloc(sizeof(struct Foo));
43    set();
44
45    get();
46
47    return 0;
48}
49
50*/
51
52#include "tests/asm.h"
53
54	.file	"tronical.c"
55	.version	"01.01"
56gcc2_compiled.:
57.text
58	.align 4
59.globl set
60set:
61	pushl	%ebp
62	movl	foo, %eax
63	orb	$128, (%eax)
64	movl	%esp, %ebp
65	popl	%ebp
66	ret
67.Lfe1:
68.LC0:
69	.ascii	"blieb\n"
70.text
71	.align 4
72.globl get
73get:
74	pushl	%ebp
75	movl	%esp, %ebp
76	subl	$8, %esp
77	movl	foo, %eax
78	cmpb	$0, (%eax)
79	js	.L4
80	subl	$12, %esp
81	pushl	$.LC0
82	call	VG_SYM_ASM(printf)
83	addl	$16, %esp
84.L4:
85	leave
86	ret
87.Lfe2:
88	.align 4
89.globl VG_SYM_ASM(main)
90VG_SYM_ASM(main):
91	pushl	%ebp
92	movl	%esp, %ebp
93	subl	$20, %esp
94	pushl	$4
95	call	VG_SYM_ASM(malloc)
96	movl	%eax, foo
97	call	set
98	call	get
99	xorl	%eax, %eax
100	leave
101	ret
102.Lfe3:
103	.comm	foo,4,4
104	.ident	"GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)"
105