blob: e5bb4009e3d22f27bd81033da1447dc647474d20 [file] [log] [blame]
/*
2006-05-21: vex r1619 finally causes the x86->IR front end to state
exactly the %eflags dataflow surrounding 'cmpb $0, ... ; js ..'
and so memcheck no longer gives a false positive on this test.
-----------
(original comments)
Assembly derived from the following program compiled with -O2.
This fools Valgrind, causing it to give a false error.
#include <stdio.h>
struct Foo
{
int a1 : 1;
int a2 : 1;
int a3 : 1;
int a4 : 1;
int a5 : 1;
int a6 : 1;
int a7 : 1;
int bleh : 1;
};
struct Foo* foo;
void set()
{
foo->bleh = 1;
}
void get()
{
if ( foo->bleh == 0 )
printf( "blieb\n" );
}
int main()
{
foo = malloc(sizeof(struct Foo));
set();
get();
return 0;
}
*/
#include "tests/asm.h"
.file "tronical.c"
#if defined(VGO_linux) || defined(VGO_solaris)
.version "01.01"
#endif
gcc2_compiled.:
.text
.align 4
.globl set
set:
pushl %ebp
movl foo, %eax
orb $128, (%eax)
movl %esp, %ebp
popl %ebp
ret
.Lfe1:
.LC0:
.ascii "blieb\n"
.text
.align 4
.globl get
get:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl foo, %eax
cmpb $0, (%eax)
js .L4
subl $12, %esp
pushl $.LC0
call VG_SYM_ASM(printf)
addl $16, %esp
.L4:
leave
ret
.Lfe2:
.align 4
.globl VG_SYM_ASM(main)
VG_SYM_ASM(main):
pushl %ebp
movl %esp, %ebp
subl $20, %esp
pushl $4
call VG_SYM_ASM(malloc)
movl %eax, foo
call set
call get
xorl %eax, %eax
leave
ret
.Lfe3:
.comm foo,4,4
.ident "GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)"