Skip to content
  • Peter Maydell's avatar
    78b40bfb
    hw/display/omap_lcdc: Drop broken bigendian ifdef · 78b40bfb
    Peter Maydell authored
    
    
    The draw_line16_32() function in the omap_lcdc template header
    includes an ifdef for the case where HOST_WORDS_BIGENDIAN matches
    TARGET_WORDS_BIGENDIAN.  This is trying to optimise for "source
    bitmap and destination bitmap format match", but it is broken,
    because in this function the formats don't match: the source is
    16-bit colour and the destination is 32-bit colour, so a memcpy()
    will produce corrupted graphics output.  Drop the bogus ifdef.
    
    This bug was introduced in commit ea644cf3, when we dropped
    support for DEPTH values other than 32 from the template header.
    The old #if line was
      #if DEPTH == 16 && defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
    and this was mistakenly changed to
      #if defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
    rather than deleting the #if as now having an always-false condition.
    
    Fixes: ea644cf3
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
    Message-id: 20210215103215.4944-7-peter.maydell@linaro.org
    78b40bfb
    hw/display/omap_lcdc: Drop broken bigendian ifdef
    Peter Maydell authored
    
    
    The draw_line16_32() function in the omap_lcdc template header
    includes an ifdef for the case where HOST_WORDS_BIGENDIAN matches
    TARGET_WORDS_BIGENDIAN.  This is trying to optimise for "source
    bitmap and destination bitmap format match", but it is broken,
    because in this function the formats don't match: the source is
    16-bit colour and the destination is 32-bit colour, so a memcpy()
    will produce corrupted graphics output.  Drop the bogus ifdef.
    
    This bug was introduced in commit ea644cf3, when we dropped
    support for DEPTH values other than 32 from the template header.
    The old #if line was
      #if DEPTH == 16 && defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
    and this was mistakenly changed to
      #if defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
    rather than deleting the #if as now having an always-false condition.
    
    Fixes: ea644cf3
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
    Message-id: 20210215103215.4944-7-peter.maydell@linaro.org
Loading