Home | History | Annotate | Download | only in x86
      1 /*
      2 
      3 2006-05-21: vex r1619 finally causes the x86->IR front end to state
      4 exactly the %eflags dataflow surrounding 'cmpb $0, ... ;  js ..'
      5 and so memcheck no longer gives a false positive on this test.
      6 
      7 -----------
      8 
      9 (original comments)
     10 Assembly derived from the following program compiled with -O2.
     11 This fools Valgrind, causing it to give a false error.
     12 
     13 #include <stdio.h>
     14 
     15 struct 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 
     27 struct Foo* foo;
     28 
     29 void set()
     30 {
     31     foo->bleh = 1;
     32 }
     33 
     34 void get()
     35 {
     36     if ( foo->bleh == 0 )
     37         printf( "blieb\n" );
     38 }
     39 
     40 int 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 #if defined(VGO_linux) || defined(VGO_solaris)
     56 	.version	"01.01"
     57 #endif
     58 gcc2_compiled.:
     59 .text
     60 	.align 4
     61 .globl set
     62 set:
     63 	pushl	%ebp
     64 	movl	foo, %eax
     65 	orb	$128, (%eax)
     66 	movl	%esp, %ebp
     67 	popl	%ebp
     68 	ret
     69 .Lfe1:
     70 .LC0:
     71 	.ascii	"blieb\n"
     72 .text
     73 	.align 4
     74 .globl get
     75 get:
     76 	pushl	%ebp
     77 	movl	%esp, %ebp
     78 	subl	$8, %esp
     79 	movl	foo, %eax
     80 	cmpb	$0, (%eax)
     81 	js	.L4
     82 	subl	$12, %esp
     83 	pushl	$.LC0
     84 	call	VG_SYM_ASM(printf)
     85 	addl	$16, %esp
     86 .L4:
     87 	leave
     88 	ret
     89 .Lfe2:
     90 	.align 4
     91 .globl VG_SYM_ASM(main)
     92 VG_SYM_ASM(main):
     93 	pushl	%ebp
     94 	movl	%esp, %ebp
     95 	subl	$20, %esp
     96 	pushl	$4
     97 	call	VG_SYM_ASM(malloc)
     98 	movl	%eax, foo
     99 	call	set
    100 	call	get
    101 	xorl	%eax, %eax
    102 	leave
    103 	ret
    104 .Lfe3:
    105 	.comm	foo,4,4
    106 	.ident	"GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)"
    107