| // This file was generated by gen_asm_instrumentation.sh. Please, do not edit |
| .section .text |
| #if defined(__x86_64__) || defined(__i386__) |
| .globl __asan_report_store1 |
| .globl __asan_report_load1 |
| .globl __asan_report_store2 |
| .globl __asan_report_load2 |
| .globl __asan_report_store4 |
| .globl __asan_report_load4 |
| .globl __asan_report_store8 |
| .globl __asan_report_load8 |
| .globl __asan_report_store16 |
| .globl __asan_report_load16 |
| #endif // defined(__x86_64__) || defined(__i386__) |
| #if defined(__i386__) |
| // Sanitize 1-byte store. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_store1 |
| .type __sanitizer_sanitize_store1, @function |
| __sanitizer_sanitize_store1: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushl %edx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| movb 0x20000000(%ecx), %cl |
| testb %cl, %cl |
| je .sanitize_store1_done |
| movl %eax, %edx |
| andl $0x7, %edx |
| movsbl %cl, %ecx |
| cmpl %ecx, %edx |
| jl .sanitize_store1_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_store1@PLT |
| .sanitize_store1_done: |
| popfl |
| popl %edx |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 1-byte load. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_load1 |
| .type __sanitizer_sanitize_load1, @function |
| __sanitizer_sanitize_load1: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushl %edx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| movb 0x20000000(%ecx), %cl |
| testb %cl, %cl |
| je .sanitize_load1_done |
| movl %eax, %edx |
| andl $0x7, %edx |
| movsbl %cl, %ecx |
| cmpl %ecx, %edx |
| jl .sanitize_load1_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_load1@PLT |
| .sanitize_load1_done: |
| popfl |
| popl %edx |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 2-byte store. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_store2 |
| .type __sanitizer_sanitize_store2, @function |
| __sanitizer_sanitize_store2: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushl %edx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| movb 0x20000000(%ecx), %cl |
| testb %cl, %cl |
| je .sanitize_store2_done |
| movl %eax, %edx |
| andl $0x7, %edx |
| incl %edx |
| movsbl %cl, %ecx |
| cmpl %ecx, %edx |
| jl .sanitize_store2_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_store2@PLT |
| .sanitize_store2_done: |
| popfl |
| popl %edx |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 2-byte load. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_load2 |
| .type __sanitizer_sanitize_load2, @function |
| __sanitizer_sanitize_load2: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushl %edx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| movb 0x20000000(%ecx), %cl |
| testb %cl, %cl |
| je .sanitize_load2_done |
| movl %eax, %edx |
| andl $0x7, %edx |
| incl %edx |
| movsbl %cl, %ecx |
| cmpl %ecx, %edx |
| jl .sanitize_load2_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_load2@PLT |
| .sanitize_load2_done: |
| popfl |
| popl %edx |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 4-byte store. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_store4 |
| .type __sanitizer_sanitize_store4, @function |
| __sanitizer_sanitize_store4: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushl %edx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| movb 0x20000000(%ecx), %cl |
| testb %cl, %cl |
| je .sanitize_store4_done |
| movl %eax, %edx |
| andl $0x7, %edx |
| addl $0x3, %edx |
| movsbl %cl, %ecx |
| cmpl %ecx, %edx |
| jl .sanitize_store4_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_store4@PLT |
| .sanitize_store4_done: |
| popfl |
| popl %edx |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 4-byte load. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_load4 |
| .type __sanitizer_sanitize_load4, @function |
| __sanitizer_sanitize_load4: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushl %edx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| movb 0x20000000(%ecx), %cl |
| testb %cl, %cl |
| je .sanitize_load4_done |
| movl %eax, %edx |
| andl $0x7, %edx |
| addl $0x3, %edx |
| movsbl %cl, %ecx |
| cmpl %ecx, %edx |
| jl .sanitize_load4_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_load4@PLT |
| .sanitize_load4_done: |
| popfl |
| popl %edx |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 8-byte store. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_store8 |
| .type __sanitizer_sanitize_store8, @function |
| __sanitizer_sanitize_store8: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| cmpb $0x0, 0x20000000(%ecx) |
| je .sanitize_store8_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_store8@PLT |
| .sanitize_store8_done: |
| popfl |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 8-byte load. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_load8 |
| .type __sanitizer_sanitize_load8, @function |
| __sanitizer_sanitize_load8: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| cmpb $0x0, 0x20000000(%ecx) |
| je .sanitize_load8_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_load8@PLT |
| .sanitize_load8_done: |
| popfl |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 16-byte store. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_store16 |
| .type __sanitizer_sanitize_store16, @function |
| __sanitizer_sanitize_store16: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| cmpw $0x0, 0x20000000(%ecx) |
| je .sanitize_store16_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_store16@PLT |
| .sanitize_store16_done: |
| popfl |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| // Sanitize 16-byte load. Takes one 4-byte address as an argument on |
| // stack, nothing is returned. |
| .globl __sanitizer_sanitize_load16 |
| .type __sanitizer_sanitize_load16, @function |
| __sanitizer_sanitize_load16: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %eax |
| pushl %ecx |
| pushfl |
| movl 8(%ebp), %eax |
| movl %eax, %ecx |
| shrl $0x3, %ecx |
| cmpw $0x0, 0x20000000(%ecx) |
| je .sanitize_load16_done |
| pushl %eax |
| cld |
| emms |
| call __asan_report_load16@PLT |
| .sanitize_load16_done: |
| popfl |
| popl %ecx |
| popl %eax |
| leave |
| ret |
| #endif // defined(__i386__) |
| #if defined(__x86_64__) |
| // Sanitize 1-byte store. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_store1 |
| .type __sanitizer_sanitize_store1, @function |
| __sanitizer_sanitize_store1: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushq %rcx |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| movb 0x7fff8000(%rax), %al |
| test %al, %al |
| je .sanitize_store1_done |
| movl %edi, %ecx |
| andl $0x7, %ecx |
| movsbl %al, %eax |
| cmpl %eax, %ecx |
| jl .sanitize_store1_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_store1@PLT |
| .sanitize_store1_done: |
| popfq |
| popq %rcx |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 1-byte load. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_load1 |
| .type __sanitizer_sanitize_load1, @function |
| __sanitizer_sanitize_load1: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushq %rcx |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| movb 0x7fff8000(%rax), %al |
| test %al, %al |
| je .sanitize_load1_done |
| movl %edi, %ecx |
| andl $0x7, %ecx |
| movsbl %al, %eax |
| cmpl %eax, %ecx |
| jl .sanitize_load1_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_load1@PLT |
| .sanitize_load1_done: |
| popfq |
| popq %rcx |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 2-byte store. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_store2 |
| .type __sanitizer_sanitize_store2, @function |
| __sanitizer_sanitize_store2: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushq %rcx |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| movb 0x7fff8000(%rax), %al |
| test %al, %al |
| je .sanitize_store2_done |
| movl %edi, %ecx |
| andl $0x7, %ecx |
| incl %ecx |
| movsbl %al, %eax |
| cmpl %eax, %ecx |
| jl .sanitize_store2_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_store2@PLT |
| .sanitize_store2_done: |
| popfq |
| popq %rcx |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 2-byte load. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_load2 |
| .type __sanitizer_sanitize_load2, @function |
| __sanitizer_sanitize_load2: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushq %rcx |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| movb 0x7fff8000(%rax), %al |
| test %al, %al |
| je .sanitize_load2_done |
| movl %edi, %ecx |
| andl $0x7, %ecx |
| incl %ecx |
| movsbl %al, %eax |
| cmpl %eax, %ecx |
| jl .sanitize_load2_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_load2@PLT |
| .sanitize_load2_done: |
| popfq |
| popq %rcx |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 4-byte store. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_store4 |
| .type __sanitizer_sanitize_store4, @function |
| __sanitizer_sanitize_store4: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushq %rcx |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| movb 0x7fff8000(%rax), %al |
| test %al, %al |
| je .sanitize_store4_done |
| movl %edi, %ecx |
| andl $0x7, %ecx |
| addl $0x3, %ecx |
| movsbl %al, %eax |
| cmpl %eax, %ecx |
| jl .sanitize_store4_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_store4@PLT |
| .sanitize_store4_done: |
| popfq |
| popq %rcx |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 4-byte load. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_load4 |
| .type __sanitizer_sanitize_load4, @function |
| __sanitizer_sanitize_load4: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushq %rcx |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| movb 0x7fff8000(%rax), %al |
| test %al, %al |
| je .sanitize_load4_done |
| movl %edi, %ecx |
| andl $0x7, %ecx |
| addl $0x3, %ecx |
| movsbl %al, %eax |
| cmpl %eax, %ecx |
| jl .sanitize_load4_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_load4@PLT |
| .sanitize_load4_done: |
| popfq |
| popq %rcx |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 8-byte store. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_store8 |
| .type __sanitizer_sanitize_store8, @function |
| __sanitizer_sanitize_store8: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| cmpb $0x0, 0x7fff8000(%rax) |
| je .sanitize_store8_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_store8@PLT |
| .sanitize_store8_done: |
| popfq |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 8-byte load. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_load8 |
| .type __sanitizer_sanitize_load8, @function |
| __sanitizer_sanitize_load8: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| cmpb $0x0, 0x7fff8000(%rax) |
| je .sanitize_load8_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_load8@PLT |
| .sanitize_load8_done: |
| popfq |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 16-byte store. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_store16 |
| .type __sanitizer_sanitize_store16, @function |
| __sanitizer_sanitize_store16: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| cmpw $0x0, 0x7fff8000(%rax) |
| je .sanitize_store16_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_store16@PLT |
| .sanitize_store16_done: |
| popfq |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| // Sanitize 16-byte load. Takes one 8-byte address as an argument in %rdi, |
| // nothing is returned. |
| .globl __sanitizer_sanitize_load16 |
| .type __sanitizer_sanitize_load16, @function |
| __sanitizer_sanitize_load16: |
| leaq -128(%rsp), %rsp |
| pushq %rax |
| pushfq |
| movq %rdi, %rax |
| shrq $0x3, %rax |
| cmpw $0x0, 0x7fff8000(%rax) |
| je .sanitize_load16_done |
| subq $8, %rsp |
| andq $-16, %rsp |
| cld |
| emms |
| call __asan_report_load16@PLT |
| .sanitize_load16_done: |
| popfq |
| popq %rax |
| leaq 128(%rsp), %rsp |
| ret |
| #endif // defined(__x86_64__) |
| /* We do not need executable stack. */ |
| #if defined(__arm__) |
| .section .note.GNU-stack,"",%progbits |
| #else |
| .section .note.GNU-stack,"",@progbits |
| #endif // defined(__arm__) |
| #endif // __linux__ |