# Pass this file to Valgrind with "--suppressions=tools/valgrind.supp"

# Intentional thread / memory leak in DM and nanbench.
{
   nanobench_and_dm_keepalive_thread_leak
   Memcheck:Leak
   match-leak-kinds: possible,definite
   ...
   fun:start_keepalive
   ...
   fun:main
   ...
}

# Third party lib, driver issues.
{
    ati_driver_bug_1
    Memcheck:Param
    ioctl(generic)
    fun:ioctl
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_2
    Memcheck:Cond
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_3
    Memcheck:Addr8
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_4
    Memcheck:Addr4
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_5
    Memcheck:Addr2
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_6
    Memcheck:Addr1
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_7
    Memcheck:Leak
    fun:malloc
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    driver_bug_8
    Memcheck:Overlap
    fun:strcpy
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_9
    Memcheck:Leak
    fun:calloc
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_10
    Memcheck:Leak
    fun:malloc
    obj:/usr/lib/fglrx/fglrx-libGL.so.1.2
}
{
    nv_driver_bug_1
    Memcheck:Param
    write(buf)
    ...
    obj:*/libnvidia-glcore.so*
}
{
    nv_driver_bug_2
    Memcheck:Cond
    ...
    obj:*/libnvidia-glcore.so*
}
{
    nv_driver_bug_3
    Memcheck:Leak
    fun:calloc
    obj:/usr/lib*/libGL.so*
}
{
   nv_driver_bug_4
   Memcheck:Param
   sendmsg(msg.msg_iov[0])
   fun:sendmsg
   obj:*/libGLX_nvidia.so*
}
{
   nv_driver_bug_5
   Memcheck:Leak
   fun:malloc
   obj:*/libGLX_nvidia.so*
}
{
    #Fixed by FontConfig 2.9.0
    #http://cgit.freedesktop.org/fontconfig/commit/?id=1c475d5c8cb265ac939d6b9e097666e300162511
    font_config_bug_1
    Memcheck:Addr4
    fun:FcConfigFileExists
}
{
    #https://bugs.freedesktop.org/show_bug.cgi?id=8215
    #https://bugs.freedesktop.org/show_bug.cgi?id=8428
    #FcPattern uses 'intptr_t elts_offset' instead of 'FcPatternEltPtr elts',
    #which confuses valgrind.
    font_config_bug_2
    Memcheck:Leak
    fun:*alloc
    ...
    fun:Fc*Add*
}
{
    #Same root cause as font_config_bug_2.
    #The 'leak' here is a copy of rule values, as opposed to new values.
    font_config_bug_3
    Memcheck:Leak
    fun:*alloc
    ...
    fun:FcConfigValues
    fun:FcConfigSubstituteWithPat
    fun:FcFontRenderPrepare
}
{
    #Same root cause as font_config_bug_2.
    #The 'leak' is copies of font or pattern values into returned pattern values.
    font_config_bug_4
    Memcheck:Leak
    fun:*alloc
    ...
    fun:FcValue*
    fun:FcFontRenderPrepare
}
{
   font_config_bug_5
   Memcheck:Leak
   fun:malloc
   obj:*/libfontconfig.so.1.8.0
   fun:FcConfigSubstituteWithPat
}
{
   font_config_bug_6
   Memcheck:Leak
   fun:*alloc
   ...
   obj:*/libfontconfig.so.1.8.0
   fun:FcFont*
}
{
    zlib_bug_1
    Memcheck:Cond
    fun:inflateReset2
    fun:inflateInit2_
    fun:png_create_read_struct_2
    fun:png_create_read_struct
}
{
    zlib_bug_2
    Memcheck:Cond
    fun:inflateReset2
    fun:inflateInit2_
    fun:_ZN12_GLOBAL__N_17doFlateEbP8SkStreamP9SkWStream
    fun:_ZN7SkFlate7InflateEP8SkStreamP9SkWStream
}

# Why is it OK to suppress this?
{
    SkRTConfRegistry_bug_1
    Memcheck:Leak
    fun:_Znwm
    fun:_ZN16SkRTConfRegistry12registerConfEP12SkRTConfBase
}

# The gpu_issue_* suppressions suppress issues that cannot be reproduced locally. These appear to be
# due to valgrind not knowing about memory mapped by the ATI driver via glMapBuffer.
{
    gpu_issue_1
    Memcheck:Addr2
    fun:_ZNK5GrGpu18getQuadIndexBufferEv
}
{
    gpu_issue_2
    Memcheck:Addr2
    fun:_ZN24GrAAHairLinePathRenderer6CreateEP9GrContext
}
{
    gpu_issue_3
    Memcheck:Addr2
    fun:_ZN16GrAARectRenderer21aaFillRectIndexBufferEP5GrGpu
}
{
    gpu_issue_4
    Memcheck:Addr8
    fun:_ZN24GrAAHairLinePathRenderer14createLineGeomERK6SkPathP12GrDrawTargetRK8SkTArrayI7SkPointLb1EEiPNS3_19AutoReleaseGeometryEP6SkRect
}
{
    gpu_issue_5
    Memcheck:Addr8
    fun:_ZN21GrDefaultPathRenderer10createGeomERK6SkPathRK11SkStrokeRecfP12GrDrawTargetP15GrPrimitiveTypePiSA_PNS6_19AutoReleaseGeometryE
}
{
    gpu_issue_6
    Memcheck:Addr8
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_7
    Memcheck:Addr4
    fun:_ZNK7SkPoint24distanceToLineBetweenSqdERKS_S1_PNS_4SideE
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_8
    Memcheck:Addr4
    fun:_ZN24GrAAHairLinePathRenderer14createLineGeomERK6SkPathP12GrDrawTargetRK8SkTArrayI7SkPointLb1EEiPNS3_19AutoReleaseGeometryEP6SkRect
}
{
    gpu_issue_9
    Memcheck:Addr2
    fun:_ZN21GrDefaultPathRenderer10createGeomERK6SkPathRK11SkStrokeRecfP12GrDrawTargetP15GrPrimitiveTypePiSA_PNS6_19AutoReleaseGeometryE
}
{
    gpu_issue_10
    Memcheck:Addr4
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_11
    Memcheck:Addr2
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_12
    Memcheck:Addr8
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_13
    Memcheck:Addr4
    fun:_ZNK7SkPoint24distanceToLineBetweenSqdERKS_S1_PNS_4SideE
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_14
    Memcheck:Addr4
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_15
    Memcheck:Addr2
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    libjpeg_turbo_bug4550_1
    Memcheck:Cond
    fun:_Z26S32A_Opaque_BlitRow32_SSE4PjPKjij
    fun:_ZN14Sprite_D32_S328blitRectEiiii
}
{
    libjpeg_turbo_bug4550_2
    Memcheck:Cond
    fun:_ZL15S32A_D565_BlendPtPKjijii
    fun:_ZN26Sprite_D16_S32_BlitRowProc8blitRectEiiii
}
{
    libjpeg_turbo_bug4550_3
    Memcheck:Cond
    fun:_ZN12_GLOBAL__N_120ConvolveHorizontallyILb0EEEvPKhRK21SkConvolutionFilter1DPh
    fun:_Z14BGRAConvolve2DPKhibRK21SkConvolutionFilter1DS3_iPhRK18SkConvolutionProcsb
}