
##----------------------------------------------------------------------##

# Format of this file is:
# {
#     name_of_suppression
#     tool_name:supp_kind
#     (optional extra info for some suppression types)
#     caller0 name, or /name/of/so/file.so
#     caller1 name, or ditto
#     (optionally: caller2 name)
#     (optionally: caller3 name)
#  }
#
# For Memcheck, the supp_kinds are:
#
#     Param Value1 Value2 Value4 Value8 Value16 Jump
#     Free Addr1 Addr2 Addr4 Addr8 Addr16
#     Cond (previously known as Value0)
#
# and the optional extra info is:
#     if Param: name of system call param

##----------------------------------------------------------------------##


# zlib-1.2.x uses uninitialised memory in some tricky way which
# apparently is harmless (it must amount to a vectorised while-loop,
# nothing else makes sense).  Fools Memcheck though.  See the mentioned
# URL for details.
{
   zlib-1.2.x trickyness (1a): See http://www.zlib.net/zlib_faq.html#faq36
   Memcheck:Cond
   obj:/*lib*/libz.so.1.2.*
   ...
   obj:/*lib*/libz.so.1.2.*
   fun:deflate
}

{
   zlib-1.2.x trickyness (1b): See http://www.zlib.net/zlib_faq.html#faq36
   Memcheck:Cond
   obj:/*lib*/libz.so.1.2.*
   fun:deflate
}

{
   zlib-1.2.x trickyness (2a): See http://www.zlib.net/zlib_faq.html#faq36
   Memcheck:Value8
   obj:/*lib*/libz.so.1.2.*
   ...
   obj:/*lib*/libz.so.1.2.*
   fun:deflate
}

{
   zlib-1.2.x trickyness (2b): See http://www.zlib.net/zlib_faq.html#faq36
   Memcheck:Value8
   obj:/*lib*/libz.so.1.2.*
   fun:deflate
}

{
   zlib-1.2.x trickyness (3a): See http://www.zlib.net/zlib_faq.html#faq36
   Memcheck:Value4
   obj:/*lib*/libz.so.1.2.*
   ...
   obj:/*lib*/libz.so.1.2.*
   fun:deflate
}

{
   zlib-1.2.x trickyness (3b): See http://www.zlib.net/zlib_faq.html#faq36
   Memcheck:Value4
   obj:/*lib*/libz.so.1.2.*
   fun:deflate
}

##----------------------------------------------------------------------##

# Suppressions for Android's libc (bionic) and probably other
# stuff too.

# this is a real bug in the Android stack -- this routine really does read and write below sp.
{
   sha1_block_data_order-reads-below-sp
   Memcheck:Addr4
   fun:sha1_block_data_order
}

# This is a false error, and it's reported in the wrong place.  Memcheck misinterprets
# a restore path in dvmPlatformInvoke: "ldmdb   r4, {r4, r5, r6, r7, r8, r9, sp, pc}"
# because it breaks this up into non-atomic IR.  This non atomic IR restores PC
# first, then SP, and then r4-r9; the latter of which happen after (from Memcheck's
# point of view) the assignment to SP, hence constitute a read below SP (depends
# which way SP moved, I guess).  Worse, because these happen after the restore to SP,
# the errors are reported in the callers of this function, not here :-(
# General bogusness all round, but I don't see how to handle it any better.  Hence
# hide all the callers; fortunately there appear to be not many.
#
{
   dvmPlatformInvoke-misinterpretation-1
   Memcheck:Addr4
   fun:dvmCallJNIMethod_virtualNoRef
}

{
   dvmPlatformInvoke-misinterpretation-2
   Memcheck:Addr4
   fun:dvmCallJNIMethod_staticNoRef
}

{
   dvmPlatformInvoke-misinterpretation-3
   Memcheck:Addr4
   fun:dvmCallJNIMethod_general
}

##----------------------------------------------------------------------##
# ASC ADDED ...

{
   Linker-1
   Memcheck:Cond
   obj:/system/bin/linker
}

{
   Linker-2
   Memcheck:Value4
   obj:/system/bin/linker
}

{
   Linker-3
   Memcheck:Free
   obj:/system/bin/linker
}

{
   Linker-4
   Memcheck:Leak
   obj:/system/bin/linker
}

# ...

{
   BootOAT-1
   Memcheck:Cond
   obj:/data/dalvik-cache/arm/system@framework@boot.oat
}

{
   BootOAT-2
   Memcheck:Addr4
   obj:/data/dalvik-cache/arm/system@framework@boot.oat
}

{
   BootOAT-3
   Memcheck:Free
   obj:/data/dalvik-cache/arm/system@framework@boot.oat
}

{
   BootOAT-4
   Memcheck:Leak
   obj:/data/dalvik-cache/arm/system@framework@boot.oat
}

# ...

{
   LibJavaCore-1
   Memcheck:Cond
   obj:/system/lib/libjavacore.so
}

{
   LibJavaCore-2
   Memcheck:Addr4
   obj:/system/lib/libjavacore.so
}

{
   LibJavaCore-3
   Memcheck:Free
   obj:/system/lib/libjavacore.so
}

{
   LibJavaCore-4
   Memcheck:Leak
   obj:/system/lib/libjavacore.so
}

# ...

{
   APP2-SPECIFIC-1
   Memcheck:Cond
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic-2@base.apk@classes.dex
}

{
   APP2-SPECIFIC-2
   Memcheck:Addr4
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic-2@base.apk@classes.dex
}

{
   APP2-SPECIFIC-3
   Memcheck:Free
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic-2@base.apk@classes.dex
}

{
   APP2-SPECIFIC-4
   Memcheck:Leak
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic-2@base.apk@classes.dex
}

# ...

{
   APP-SPECIFIC-1
   Memcheck:Cond
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic@base.apk@classes.dex
}

{
   APP-SPECIFIC-2
   Memcheck:Addr4
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic@base.apk@classes.dex
}

{
   APP-SPECIFIC-3
   Memcheck:Free
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic@base.apk@classes.dex
}

{
   APP-SPECIFIC-4
   Memcheck:Leak
   obj:/data/dalvik-cache/arm/data@app@org.deadc0de.apple2ix.basic@base.apk@classes.dex
}

