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

# Intentional thread / memory leak in DM.
{
   dm_keepalive_thread_leak
   Memcheck:Leak
   match-leak-kinds: possible
   ...
   fun:_ZN8SkThreadC1EPFvPvES0_
   ...
   fun:_Z7dm_mainv
   ...
}

# Intentional thread / memory leak in nanobench.
{
   nanobench_keepalive_thread_leak
   Memcheck:Leak
   match-leak-kinds: possible
   ...
   fun:_ZN8SkThreadC1EPFvPvES0_
   ...
   fun:_Z14nanobench_mainv
   ...
}

# 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*
}
{
    #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
}
{
    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
}
