dee4e02102
Adds initial support for DataFlowSanitizer to the Rust compiler. It currently supports `-Zsanitizer-dataflow-abilist`. Additional options for it can be passed to LLVM command line argument processor via LLVM arguments using `llvm-args` codegen option (e.g., `-Cllvm-args=-dfsan-combine-pointer-labels-on-load=false`).
506 lines
15 KiB
Plaintext
506 lines
15 KiB
Plaintext
fun:main=uninstrumented
|
|
fun:main=discard
|
|
|
|
###############################################################################
|
|
# DFSan interface functions
|
|
###############################################################################
|
|
fun:dfsan_union=uninstrumented
|
|
fun:dfsan_union=discard
|
|
fun:dfsan_create_label=uninstrumented
|
|
fun:dfsan_create_label=discard
|
|
fun:dfsan_set_label=uninstrumented
|
|
fun:dfsan_set_label=discard
|
|
fun:dfsan_add_label=uninstrumented
|
|
fun:dfsan_add_label=discard
|
|
fun:dfsan_get_label=uninstrumented
|
|
fun:dfsan_get_label=custom
|
|
fun:dfsan_read_label=uninstrumented
|
|
fun:dfsan_read_label=discard
|
|
fun:dfsan_get_label_count=uninstrumented
|
|
fun:dfsan_get_label_count=discard
|
|
fun:dfsan_get_label_info=uninstrumented
|
|
fun:dfsan_get_label_info=discard
|
|
fun:dfsan_has_label=uninstrumented
|
|
fun:dfsan_has_label=discard
|
|
fun:dfsan_has_label_with_desc=uninstrumented
|
|
fun:dfsan_has_label_with_desc=discard
|
|
fun:dfsan_set_write_callback=uninstrumented
|
|
fun:dfsan_set_write_callback=custom
|
|
fun:dfsan_flush=uninstrumented
|
|
fun:dfsan_flush=discard
|
|
fun:dfsan_print_origin_trace=uninstrumented
|
|
fun:dfsan_print_origin_trace=discard
|
|
fun:dfsan_print_origin_id_trace=uninstrumented
|
|
fun:dfsan_print_origin_id_trace=discard
|
|
fun:dfsan_sprint_origin_trace=uninstrumented
|
|
fun:dfsan_sprint_origin_trace=discard
|
|
fun:dfsan_sprint_origin_id_trace=uninstrumented
|
|
fun:dfsan_sprint_origin_id_trace=discard
|
|
fun:dfsan_sprint_stack_trace=uninstrumented
|
|
fun:dfsan_sprint_stack_trace=discard
|
|
fun:dfsan_get_origin=uninstrumented
|
|
fun:dfsan_get_origin=custom
|
|
fun:dfsan_read_origin_of_first_taint=uninstrumented
|
|
fun:dfsan_read_origin_of_first_taint=discard
|
|
fun:dfsan_get_init_origin=uninstrumented
|
|
fun:dfsan_get_init_origin=discard
|
|
fun:dfsan_get_track_origins=uninstrumented
|
|
fun:dfsan_get_track_origins=discard
|
|
fun:dfsan_set_conditional_callback=uninstrumented
|
|
fun:dfsan_set_conditional_callback=discard
|
|
fun:dfsan_get_labels_in_signal_conditional=uninstrumented
|
|
fun:dfsan_get_labels_in_signal_conditional=discard
|
|
fun:dfsan_set_reaches_function_callback=uninstrumented
|
|
fun:dfsan_set_reaches_function_callback=discard
|
|
fun:dfsan_get_labels_in_signal_reaches_function=uninstrumented
|
|
fun:dfsan_get_labels_in_signal_reaches_function=discard
|
|
fun:dfsan_reaches_function_callback=uninstrumented
|
|
fun:dfsan_reaches_function_callback=discard
|
|
|
|
###############################################################################
|
|
# glibc
|
|
###############################################################################
|
|
# Functions of memory allocators
|
|
fun:__libc_memalign=discard
|
|
fun:aligned_alloc=discard
|
|
fun:calloc=discard
|
|
fun:cfree=discard
|
|
fun:mallinfo=discard
|
|
fun:malloc=discard
|
|
fun:free=discard
|
|
fun:malloc_stats=discard
|
|
fun:malloc_usable_size=discard
|
|
fun:mallopt=discard
|
|
fun:memalign=discard
|
|
fun:posix_memalign=discard
|
|
fun:pvalloc=discard
|
|
fun:realloc=discard
|
|
fun:reallocarray=discard
|
|
fun:valloc=discard
|
|
|
|
# Functions that return a value that depends on the input, but the output might
|
|
# not be necessarily data-dependent on the input.
|
|
fun:isalpha=functional
|
|
fun:isdigit=functional
|
|
fun:isprint=functional
|
|
fun:isxdigit=functional
|
|
fun:isalnum=functional
|
|
fun:ispunct=functional
|
|
fun:isspace=functional
|
|
fun:tolower=functional
|
|
fun:_tolower=functional
|
|
fun:toupper=functional
|
|
|
|
# Functions that return a value that is data-dependent on the input.
|
|
fun:__isinf=functional
|
|
fun:__isinff=functional
|
|
fun:__signbit=functional
|
|
fun:__signbitf=functional
|
|
fun:__signbitl=functional
|
|
fun:btowc=functional
|
|
fun:exp=functional
|
|
fun:exp2=functional
|
|
fun:expf=functional
|
|
fun:expl=functional
|
|
fun:fabs=functional
|
|
fun:finite=functional
|
|
fun:finitef=functional
|
|
fun:finitel=functional
|
|
fun:floor=functional
|
|
fun:fmod=functional
|
|
fun:isinf=functional
|
|
fun:isinff=functional
|
|
fun:isinfl=functional
|
|
fun:isnan=functional
|
|
fun:isnanf=functional
|
|
fun:isnanl=functional
|
|
fun:log=functional
|
|
fun:log1p=functional
|
|
fun:log1pf=functional
|
|
fun:log1pl=functional
|
|
fun:log2=functional
|
|
fun:log2f=functional
|
|
fun:log2l=functional
|
|
fun:modf=functional
|
|
fun:nextafter=functional
|
|
fun:nextafterf=functional
|
|
fun:nextafterl=functional
|
|
fun:nexttoward=functional
|
|
fun:nexttowardf=functional
|
|
fun:nexttowardl=functional
|
|
fun:pow=functional
|
|
fun:powf=functional
|
|
fun:powl=functional
|
|
fun:round=functional
|
|
fun:sqrt=functional
|
|
fun:sqrtf=functional
|
|
fun:sqrtl=functional
|
|
fun:wctob=functional
|
|
|
|
# Functions that produce an output that does not depend on the input (shadow is
|
|
# zeroed automatically).
|
|
fun:__assert_fail=discard
|
|
fun:__cmsg_nxthdr=discard
|
|
fun:__ctype_b_loc=discard
|
|
fun:__cxa_atexit=discard
|
|
fun:__errno_location=discard
|
|
fun:__newlocale=discard
|
|
fun:__sbrk=discard
|
|
fun:__sigsetjmp=discard
|
|
fun:__uselocale=discard
|
|
fun:__wctype_l=discard
|
|
fun:access=discard
|
|
fun:alarm=discard
|
|
fun:atexit=discard
|
|
fun:bind=discard
|
|
fun:chdir=discard
|
|
fun:close=discard
|
|
fun:closedir=discard
|
|
fun:connect=discard
|
|
fun:creat=discard
|
|
fun:dladdr=discard
|
|
fun:dlclose=discard
|
|
fun:epoll_create=discard
|
|
fun:epoll_create1=discard
|
|
fun:epoll_ctl=discard
|
|
fun:fclose=discard
|
|
fun:feof=discard
|
|
fun:ferror=discard
|
|
fun:fflush=discard
|
|
fun:fileno=discard
|
|
fun:fopen=discard
|
|
fun:fprintf=discard
|
|
fun:fputc=discard
|
|
fun:fputc=discard
|
|
fun:fputs=discard
|
|
fun:fputs=discard
|
|
fun:fseek=discard
|
|
fun:ftell=discard
|
|
fun:fwrite=discard
|
|
fun:getenv=discard
|
|
fun:getuid=discard
|
|
fun:geteuid=discard
|
|
fun:getpagesize=discard
|
|
fun:getpid=discard
|
|
fun:kill=discard
|
|
fun:listen=discard
|
|
fun:lseek=discard
|
|
fun:mkdir=discard
|
|
fun:mmap=discard
|
|
fun:munmap=discard
|
|
fun:open=discard
|
|
fun:openat=discard
|
|
fun:pipe=discard
|
|
fun:posix_fadvise=discard
|
|
fun:prctl=discard
|
|
fun:printf=discard
|
|
fun:pthread_sigmask=discard
|
|
fun:putc=discard
|
|
fun:putchar=discard
|
|
fun:puts=discard
|
|
fun:rand=discard
|
|
fun:random=discard
|
|
fun:remove=discard
|
|
fun:sched_getcpu=discard
|
|
fun:sched_get_priority_max=discard
|
|
fun:sched_setaffinity=discard
|
|
fun:sched_yield=discard
|
|
fun:sem_destroy=discard
|
|
fun:sem_init=discard
|
|
fun:sem_post=discard
|
|
fun:sem_wait=discard
|
|
fun:send=discard
|
|
fun:sendmsg=discard
|
|
fun:sendto=discard
|
|
fun:setsockopt=discard
|
|
fun:shutdown=discard
|
|
fun:sleep=discard
|
|
fun:socket=discard
|
|
fun:strerror=discard
|
|
fun:strspn=discard
|
|
fun:strcspn=discard
|
|
fun:symlink=discard
|
|
fun:syscall=discard
|
|
fun:unlink=discard
|
|
fun:uselocale=discard
|
|
fun:vfprintf=discard
|
|
|
|
# Functions that produce output does not depend on the input (need to zero the
|
|
# shadow manually).
|
|
fun:_dl_get_tls_static_info=custom
|
|
fun:clock_gettime=custom
|
|
fun:dlopen=custom
|
|
fun:epoll_wait=custom
|
|
fun:fgets=custom
|
|
fun:fstat=custom
|
|
fun:getcwd=custom
|
|
fun:get_current_dir_name=custom
|
|
fun:getentropy=custom
|
|
fun:gethostname=custom
|
|
fun:getpeername=custom
|
|
fun:getrlimit=custom
|
|
fun:getrusage=custom
|
|
fun:getsockname=custom
|
|
fun:getsockopt=custom
|
|
fun:nanosleep=custom
|
|
fun:pread=custom
|
|
fun:read=custom
|
|
fun:recvmmsg=custom
|
|
fun:recvmsg=custom
|
|
fun:sigaltstack=custom
|
|
fun:socketpair=custom
|
|
fun:stat=custom
|
|
fun:time=custom
|
|
|
|
# Functions that produce an output that depend on the input (propagate the
|
|
# shadow manually).
|
|
fun:ctime_r=custom
|
|
fun:inet_pton=custom
|
|
fun:localtime_r=custom
|
|
fun:memcpy=custom
|
|
fun:memmove=custom
|
|
fun:memset=custom
|
|
fun:strcpy=custom
|
|
fun:strdup=custom
|
|
fun:strncpy=custom
|
|
fun:strtod=custom
|
|
fun:strtol=custom
|
|
fun:strtoll=custom
|
|
fun:strtoul=custom
|
|
fun:strtoull=custom
|
|
fun:strcat=custom
|
|
fun:strncat=custom
|
|
fun:__isoc23_strtod=custom
|
|
fun:__isoc23_strtol=custom
|
|
fun:__isoc23_strtoll=custom
|
|
fun:__isoc23_strtoul=custom
|
|
fun:__isoc23_strtoull=custom
|
|
|
|
# Functions that produce an output that is computed from the input, but is not
|
|
# necessarily data dependent.
|
|
fun:bcmp=custom
|
|
fun:memchr=custom
|
|
fun:memcmp=custom
|
|
fun:strcasecmp=custom
|
|
fun:strchr=custom
|
|
fun:strcmp=custom
|
|
fun:strlen=custom
|
|
fun:strnlen=custom
|
|
fun:strncasecmp=custom
|
|
fun:strncmp=custom
|
|
fun:strpbrk=custom
|
|
fun:strrchr=custom
|
|
fun:strstr=custom
|
|
fun:strsep=custom
|
|
|
|
# Functions which take action based on global state, such as running a callback
|
|
# set by a separate function.
|
|
fun:write=custom
|
|
|
|
# Functions that take a callback (wrap the callback manually).
|
|
fun:dl_iterate_phdr=custom
|
|
|
|
fun:getpwuid_r=custom
|
|
fun:poll=custom
|
|
fun:sched_getaffinity=custom
|
|
fun:select=custom
|
|
fun:sigemptyset=custom
|
|
fun:sigaction=custom
|
|
fun:signal=custom
|
|
fun:gettimeofday=custom
|
|
|
|
# sprintf-like
|
|
fun:sprintf=custom
|
|
fun:snprintf=custom
|
|
|
|
# scanf-like
|
|
fun:sscanf=custom
|
|
fun:__isoc99_sscanf=custom
|
|
fun:__isoc23_sscanf=custom
|
|
|
|
# TODO: custom
|
|
fun:asprintf=discard
|
|
fun:qsort=discard
|
|
|
|
# fork
|
|
fun:fork=custom
|
|
|
|
###############################################################################
|
|
# pthread
|
|
###############################################################################
|
|
fun:__pthread_register_cancel=discard
|
|
fun:__pthread_unregister_cancel=discard
|
|
fun:pthread_attr_destroy=discard
|
|
fun:pthread_attr_getaffinity_np=discard
|
|
fun:pthread_attr_getdetachstate=discard
|
|
fun:pthread_attr_getguardsize=discard
|
|
fun:pthread_attr_getinheritsched=discard
|
|
fun:pthread_attr_getschedparam=discard
|
|
fun:pthread_attr_getschedpolicy=discard
|
|
fun:pthread_attr_getscope=discard
|
|
fun:pthread_attr_getstack=discard
|
|
fun:pthread_attr_getstackaddr=disacrd
|
|
fun:pthread_attr_getstacksize=discard
|
|
fun:pthread_attr_init=discard
|
|
fun:pthread_attr_setaffinity_np=discard
|
|
fun:pthread_attr_setdetachstate=discard
|
|
fun:pthread_attr_setguardsize=discard
|
|
fun:pthread_attr_setinheritsched=discard
|
|
fun:pthread_attr_setschedparam=discard
|
|
fun:pthread_attr_setschedpolicy=discard
|
|
fun:pthread_attr_setscope=discard
|
|
fun:pthread_attr_setstack=discard
|
|
fun:pthread_attr_setstackaddr=discard
|
|
fun:pthread_attr_setstacksize=discard
|
|
fun:pthread_equal=discard
|
|
fun:pthread_getschedparam=discard
|
|
fun:pthread_getspecific=discard
|
|
fun:pthread_key_create=discard
|
|
fun:pthread_key_delete=discard
|
|
fun:pthread_mutex_destroy=discard
|
|
fun:pthread_mutex_init=discard
|
|
fun:pthread_mutex_lock=discard
|
|
fun:pthread_mutex_trylock=discard
|
|
fun:pthread_mutex_unlock=discard
|
|
fun:pthread_mutexattr_destroy=discard
|
|
fun:pthread_mutexattr_init=discard
|
|
fun:pthread_mutexattr_settype=discard
|
|
fun:pthread_rwlock_destroy=discard
|
|
fun:pthread_rwlock_init=discard
|
|
fun:pthread_rwlock_rdlock=discard
|
|
fun:pthread_rwlock_timedrdlock=discard
|
|
fun:pthread_rwlock_timedwrlock=discard
|
|
fun:pthread_rwlock_tryrdlock=discard
|
|
fun:pthread_rwlock_trywrlock=discard
|
|
fun:pthread_rwlock_wrlock=discard
|
|
fun:pthread_rwlock_unlock=discard
|
|
fun:pthread_setschedparam=discard
|
|
fun:pthread_setname_np=discard
|
|
fun:pthread_once=discard
|
|
fun:pthread_self=discard
|
|
fun:pthread_setspecific=discard
|
|
|
|
# Functions that take a callback (wrap the callback manually).
|
|
fun:pthread_create=custom
|
|
|
|
# Functions that produce output does not depend on the input (need to zero the
|
|
# shadow manually).
|
|
fun:pthread_join=custom
|
|
|
|
###############################################################################
|
|
# libffi/libgo
|
|
###############################################################################
|
|
# Functions that are written in asm or are called from asm.
|
|
fun:ffi_call_unix64=uninstrumented
|
|
fun:ffi_call_unix64=discard
|
|
fun:ffi_closure_unix64_inner=uninstrumented
|
|
fun:ffi_closure_unix64_inner=discard
|
|
fun:ffi_closure_unix64=uninstrumented
|
|
fun:ffi_closure_unix64=discard
|
|
fun:__go_get_closure=uninstrumented
|
|
fun:__go_get_closure=discard
|
|
fun:__go_makefunc_can_recover=uninstrumented
|
|
fun:__go_makefunc_can_recover=discard
|
|
fun:__go_makefunc_returning=uninstrumented
|
|
fun:__go_makefunc_returning=discard
|
|
fun:reflect.MakeFuncStubGo=uninstrumented
|
|
fun:reflect.MakeFuncStubGo=discard
|
|
fun:reflect.makeFuncStub=uninstrumented
|
|
fun:reflect.makeFuncStub=discard
|
|
|
|
|
|
###############################################################################
|
|
# lib/Fuzzer
|
|
###############################################################################
|
|
# Replaces __sanitizer_cov_trace_cmp with __dfsw___sanitizer_cov_trace_cmp
|
|
fun:__sanitizer_cov_trace_cmp1=custom
|
|
fun:__sanitizer_cov_trace_cmp1=uninstrumented
|
|
fun:__sanitizer_cov_trace_cmp2=custom
|
|
fun:__sanitizer_cov_trace_cmp2=uninstrumented
|
|
fun:__sanitizer_cov_trace_cmp4=custom
|
|
fun:__sanitizer_cov_trace_cmp4=uninstrumented
|
|
fun:__sanitizer_cov_trace_cmp8=custom
|
|
fun:__sanitizer_cov_trace_cmp8=uninstrumented
|
|
fun:__sanitizer_cov_trace_const_cmp1=custom
|
|
fun:__sanitizer_cov_trace_const_cmp1=uninstrumented
|
|
fun:__sanitizer_cov_trace_const_cmp2=custom
|
|
fun:__sanitizer_cov_trace_const_cmp2=uninstrumented
|
|
fun:__sanitizer_cov_trace_const_cmp4=custom
|
|
fun:__sanitizer_cov_trace_const_cmp4=uninstrumented
|
|
fun:__sanitizer_cov_trace_const_cmp8=custom
|
|
fun:__sanitizer_cov_trace_const_cmp8=uninstrumented
|
|
# Similar for __sanitizer_cov_trace_switch
|
|
fun:__sanitizer_cov_trace_switch=custom
|
|
fun:__sanitizer_cov_trace_switch=uninstrumented
|
|
|
|
# Ignores all other __sanitizer callbacks.
|
|
fun:__sanitizer_cov=uninstrumented
|
|
fun:__sanitizer_cov=discard
|
|
fun:__sanitizer_cov_module_init=uninstrumented
|
|
fun:__sanitizer_cov_module_init=discard
|
|
fun:__sanitizer_cov_with_check=uninstrumented
|
|
fun:__sanitizer_cov_with_check=discard
|
|
fun:__sanitizer_set_death_callback=uninstrumented
|
|
fun:__sanitizer_set_death_callback=discard
|
|
fun:__sanitizer_update_counter_bitset_and_clear_counters=uninstrumented
|
|
fun:__sanitizer_update_counter_bitset_and_clear_counters=discard
|
|
fun:__sanitizer_cov_trace_pc*=uninstrumented
|
|
fun:__sanitizer_cov_trace_pc*=discard
|
|
fun:__sanitizer_cov_pcs_init=uninstrumented
|
|
fun:__sanitizer_cov_pcs_init=discard
|
|
|
|
fun:__sanitizer_get_current_allocated_bytes=uninstrumented
|
|
fun:__sanitizer_get_current_allocated_bytes=discard
|
|
fun:__sanitizer_get_heap_size=uninstrumented
|
|
fun:__sanitizer_get_heap_size=discard
|
|
fun:__sanitizer_get_free_bytes=uninstrumented
|
|
fun:__sanitizer_get_free_bytes=discard
|
|
fun:__sanitizer_get_unmapped_bytes=uninstrumented
|
|
fun:__sanitizer_get_unmapped_bytes=discard
|
|
fun:__sanitizer_get_estimated_allocated_size=uninstrumented
|
|
fun:__sanitizer_get_estimated_allocated_size=discard
|
|
fun:__sanitizer_get_ownership=uninstrumented
|
|
fun:__sanitizer_get_ownership=discard
|
|
fun:__sanitizer_get_allocated_begin=uninstrumented
|
|
fun:__sanitizer_get_allocated_begin=discard
|
|
fun:__sanitizer_get_allocated_size=uninstrumented
|
|
fun:__sanitizer_get_allocated_size=discard
|
|
fun:__sanitizer_get_allocated_size_fast=uninstrumented
|
|
fun:__sanitizer_get_allocated_size_fast=discard
|
|
fun:__sanitizer_print_stack_trace=uninstrumented
|
|
fun:__sanitizer_print_stack_trace=discard
|
|
|
|
fun:TcmallocSlab_Internal_PushBatch_FixedShift=uninstrumented
|
|
fun:TcmallocSlab_Internal_PushBatch_FixedShift=discard
|
|
fun:TcmallocSlab_Internal_PushBatch_FixedShift_VCPU=uninstrumented
|
|
fun:TcmallocSlab_Internal_PushBatch_FixedShift_VCPU=discard
|
|
fun:TcmallocSlab_Internal_PerCpuCmpxchg64=uninstrumented
|
|
fun:TcmallocSlab_Internal_PerCpuCmpxchg64=discard
|
|
fun:TcmallocSlab_Internal_PerCpuCmpxchg64_VCPU=uninstrumented
|
|
fun:TcmallocSlab_Internal_PerCpuCmpxchg64_VCPU=discard
|
|
fun:TcmallocSlab_Internal_PopBatch_FixedShift=uninstrumented
|
|
fun:TcmallocSlab_Internal_PopBatch_FixedShift=discard
|
|
fun:TcmallocSlab_Internal_PopBatch_FixedShift_VCPU=uninstrumented
|
|
fun:TcmallocSlab_Internal_PopBatch_FixedShift_VCPU=discard
|
|
|
|
# Ignores the dfsan wrappers.
|
|
fun:__dfsw_*=uninstrumented
|
|
fun:__dfsw_*=discard
|
|
fun:__dfso_*=uninstrumented
|
|
fun:__dfso_*=discard
|
|
|
|
# Rust functions.
|
|
fun:__rdl_alloc=uninstrumented
|
|
fun:__rdl_alloc_zeroed=uninstrumented
|
|
fun:__rdl_dealloc=uninstrumented
|
|
fun:__rdl_realloc=uninstrumented
|
|
fun:__rg_oom=uninstrumented
|
|
fun:__rust_alloc=uninstrumented
|
|
fun:__rust_alloc_error_handler=uninstrumented
|
|
fun:__rust_alloc_zeroed=uninstrumented
|
|
fun:__rust_dealloc=uninstrumented
|
|
fun:__rust_realloc=uninstrumented
|
|
fun:_ZN4core*=uninstrumented
|
|
fun:_ZN3std*=uninstrumented
|
|
fun:rust_eh_personality=uninstrumented
|