# Valgrind does not recognize the ashmen ioctl() calls on ARM64, so it assumes that a size
# parameter is a pointer.
{
   ashmem ioctl
   Memcheck:Param
   ioctl(generic)
   ...
   fun:ioctl
   fun:ashmem_create_region
}

# It seems that on ARM64 Valgrind considers the canary value used by the Clang stack protector to
# be an uninitialized value.
{
   jemalloc chunk_alloc_cache
   Memcheck:Cond
   fun:je_chunk_alloc_cache
}

# The VectorImpl class does not hold a pointer to the allocated SharedBuffer structure, but to the
# beginning of the data, which is effectively an interior pointer. Valgrind has limitations when
# dealing with interior pointers.
{
   VectorImpl
   Memcheck:Leak
   match-leak-kinds:possible
   fun:malloc
   # The wildcards make this rule work both for 32-bit and 64-bit environments.
   fun:_ZN7android12SharedBuffer5allocE?
   fun:_ZN7android10VectorImpl5_growE??
}

# Clang/LLVM uses memcpy for *x = *y, even though x == y (which is undefined behavior). Ignore.
# b/29279679, https://llvm.org/bugs/show_bug.cgi?id=11763
{
   MemCpySelfAssign
   Memcheck:Overlap
   fun:memcpy
   ...
   fun:je_malloc_tsd_boot0
}

# Setenv is known-leaking when overwriting mappings. This is triggered by re-initializing
# ANDROID_DATA. Ignore all setenv leaks.
{
   SetenvAndroidDataReinit
   Memcheck:Leak
   match-leak-kinds: definite
   fun:malloc
   fun:setenv
}

{
   b/31275764
   Memcheck:Leak
   match-leak-kinds: definite
   fun:malloc
   ...
   fun:_ZN3art7Runtime17InitNativeMethodsEv
}

# art::MemMap::MapInternal() uses msync() to check for the existence of memory mappings.
{
  art::MemMap::MapInternal()
  Memcheck:Param
  msync(start)
  fun:msync
  fun:_ZN3art6MemMap11MapInternalEPvmiiilb
}

{
   process_vm_readv
   Memcheck:Param
   process_vm_readv(lvec[...])
   fun:process_vm_readv
}
