On Fri, Dec 06, 2013 at 04:10:31PM +0100, Ondřej Bílka wrote: > Currently this code with sanitize=address gets expanded > > int foo(char *x, char *y, int i) > { > x[i] = y[i]; > } > > to > > snip > movq %rsi, %rax > movq %rsi, %rdx > shrq $3, %rax > andl $7, %edx > movzbl 2147450880(%rax), %eax > cmpb %dl, %al > jle .L18 > .L2: > > snip > > .L18: > .cfi_restore_state > testb %al, %al > je .L2 > movq %rsi, %rdi > call __asan_report_load1 > > There is nothing imposible about disabling these checks. You just fill a > page to make this check pass and use mmap to make entire shadow memory point > to that page.
I don't think I understand you. __asan_report_* is a fatal error, the program is terminated there. What is costly on the asan instrumentation is exactly the >>, memory loads, extra comparisons, in non-buggy programs you never enter the __asan_report_* calls. Jakub