Go to file
Christophe de Dinechin 858a0bfae9 Avoid clang warnings on casts with stricter alignment requirements
For example, something like this:
    uint8_t  *p8;
    uint32_t *p32 = (uint32_t *) p8;

generates a warning like this:
  spice-channel.c:1350:10: error: cast from 'uint8_t *' (aka 'unsigned char *') to
      'uint32_t *' (aka 'unsigned int *') increases required alignment from 1 to
      4 [-Werror,-Wcast-align]

The warning indicates that we end up with a pointer to data that
should be 4-byte aligned, but its value may be misaligned. On x86,
this does not make much of a difference, except a relatively minor
performance penalty. However, on platforms such as older ARM, misaligned
accesses are emulated by the kernel, and support for them is optional.
So we may end up with a fault.

The intent of the fix here is to make it easy to identify and rework
places where actual mis-alignment occurs. Wherever casts raise the warning,
they are replaced with a macro:

- SPICE_ALIGNED_CAST(type, value) casts value to type, and indicates that
  we believe the resulting pointer is aligned. If it is not, a runtime
  warning will be issued. This check is disabled unless
  --enable-alignment-checks is passed at configure time

- SPICE_UNALIGNED_CAST(type, value) casts value to type, and indicates that
  we believe the resulting pointer is not always aligned.

Any code using SPICE_UNALIGNED_CAST may need to be revisited in order
to improve performance, e.g. by using memcpy.

There are normally no warnings for SPICE_UNALIGNED_CAST, but it is possible
to emit debug messages for mis-alignment in SPICE_UNALIGNED_CAST
by configuring with CFLAGS=-DSPICE_DEBUG_ALIGNMENT.

Signed-off-by: Christophe de Dinechin <dinechin@redhat.com>
2017-06-20 11:33:45 +02:00
build-aux build-sys: make it a seperately buildable spice-common library 2012-03-22 20:21:05 +01:00
common Avoid clang warnings on casts with stricter alignment requirements 2017-06-20 11:33:45 +02:00
docs build-sys: don't dist spice-protocol.html 2017-03-28 14:57:50 +02:00
m4 spice-deps: Set python version based on modules availability 2016-11-29 11:43:25 +01:00
python_modules silence -Wunused-parameter 2016-11-01 15:26:43 +01:00
tests silence -Wunused-parameter 2016-11-01 15:26:43 +01:00
.gitmodules Remove spice-protocol submodule 2015-08-11 10:26:06 +02:00
autogen.sh Remove files moved to spice-protocol 2015-08-11 10:26:06 +02:00
configure.ac Avoid clang warnings on casts with stricter alignment requirements 2017-06-20 11:33:45 +02:00
COPYING Remove trailing whitespace 2015-12-18 11:41:15 +01:00
git.mk Update git.mk to latest version 2012-09-21 10:51:17 +02:00
Makefile.am Start adding protocol file documentation 2016-10-17 11:43:26 +01:00
spice1.proto Revert "Remove files moved to spice-protocol" 2016-03-10 16:01:36 +01:00
spice_codegen.py codegen: Fix license name 2017-05-18 16:40:36 +01:00
spice.proto protocol: Add support for VP9 video codec 2017-01-31 08:51:33 +00:00