[Mesa-dev] [PATCH] gallium: Fix blend color alignment for 32-bit systems
Marek Olšák
maraeo at gmail.com
Tue Jul 12 13:13:16 UTC 2016
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Tue, Jul 12, 2016 at 1:40 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> This fixes a regression introduced by commit d8d6091a8.
>
> Heap allocations may be only 8-byte aligned on 32-bit system, and so having
> members with 16-byte alignment (such as in the case where pipe_blend_color is
> embedded in radeonsi's si_context) is undefined behavior which indeed causes
> crashes when compiled with gcc -O3.
>
> Rather than track down and fix all allocation sites where a pipe_blend_color
> may be embedded, assume that the original compiler bug only affects 64-bits.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96835
> Cc: Tim Rowley <timothy.o.rowley at intel.com>
> Cc: Chuck Atkins <chuck.atkins at kitware.com>
> Cc: <mesa-stable at lists.freedesktop.org>
> --
> This should fix the linked bug report. The big question is whether the
> assumption about the original compiler problem is correct?
> ---
> src/gallium/include/pipe/p_state.h | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index a73a771..1986495 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -335,8 +335,13 @@ struct pipe_blend_color
> * unaligned accessors resulting in a segfault. Specifically several
> * versions of the Intel compiler are known to be affected but it's likely
> * others are as well.
> + *
> + * This only applies on 64-bit architectures, and adding the alignment on
> + * 32-bit architectures causes bugs because heap allocations are not
> + * sufficiently aligned.
> */
> - PIPE_ALIGN_VAR(16) float color[4];
> + PIPE_ALIGN_VAR(sizeof(void *) >= 8 ? 16 : 4)
> + float color[4];
> };
>
>
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list