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

# 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:/usr/lib/libnvidia-glcore.so*
}
{
    nv_driver_bug_2
    Memcheck:Cond
    ...
    obj:/usr/lib/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
}
{
    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
}
