| /* |
| |
| 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; |
| } |
| |
| */ |
| |
| .file "tronical.c" |
| .version "01.01" |
| gcc2_compiled.: |
| .text |
| .align 4 |
| .globl set |
| .type set,@function |
| set: |
| pushl %ebp |
| movl foo, %eax |
| orb $128, (%eax) |
| movl %esp, %ebp |
| popl %ebp |
| ret |
| .Lfe1: |
| .size set,.Lfe1-set |
| .section .rodata |
| .LC0: |
| .string "blieb\n" |
| .text |
| .align 4 |
| .globl get |
| .type get,@function |
| get: |
| pushl %ebp |
| movl %esp, %ebp |
| subl $8, %esp |
| movl foo, %eax |
| cmpb $0, (%eax) |
| js .L4 |
| subl $12, %esp |
| pushl $.LC0 |
| call printf |
| addl $16, %esp |
| .L4: |
| leave |
| ret |
| .Lfe2: |
| .size get,.Lfe2-get |
| .align 4 |
| .globl main |
| .type main,@function |
| main: |
| pushl %ebp |
| movl %esp, %ebp |
| subl $20, %esp |
| pushl $4 |
| call malloc |
| movl %eax, foo |
| call set |
| call get |
| xorl %eax, %eax |
| leave |
| ret |
| .Lfe3: |
| .size main,.Lfe3-main |
| .comm foo,4,4 |
| .ident "GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)" |