[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] fuzz, test x86_emulator: disable sse before including always_inline fns
Compiling with _FORTIFY_SOURCE or higher levels of optimization enabled will always_inline several library fns (memset, memcpy, ...) (with gcc 8.2.0 and glibc 2.28). In fuzz and x86_emulator test, the compiler is instructed not to generate SSE instructions via: #pragma GCC target("no-sse") because those registers are needed for use by the workload. The combination above causes compilation failure as the inline functions use those instructions. This is resolved by reordering the inclusion of <stdio.h> and <string.h> to after the pragma disabling SSE generation. Adds compile-time checks for unwanted inclusion of stdio.h, string.h Adds necessary (previously missing) #include <stdio.h> to x86-emulate.h Signed-off-by: Christopher Clark <christopher.clark6@xxxxxxxxxxxxxx> --- tools/fuzz/x86_instruction_emulator/fuzz-emul.c | 4 ++-- tools/tests/x86_emulator/wrappers.c | 3 ++- tools/tests/x86_emulator/x86-emulate.h | 13 ++++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c index 03a2473..d0a02d5 100644 --- a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c +++ b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c @@ -6,9 +6,7 @@ #include <stdbool.h> #include <stddef.h> #include <stdint.h> -#include <stdio.h> #include <stdlib.h> -#include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> @@ -16,6 +14,8 @@ #include <xen/xen.h> #include "x86-emulate.h" +#include <stdio.h> +#include <string.h> #include "fuzz-emul.h" #define MSR_INDEX_MAX 16 diff --git a/tools/tests/x86_emulator/wrappers.c b/tools/tests/x86_emulator/wrappers.c index d02013c..349b9de 100644 --- a/tools/tests/x86_emulator/wrappers.c +++ b/tools/tests/x86_emulator/wrappers.c @@ -1,9 +1,10 @@ #include <stdarg.h> -#include <stdio.h> #define WRAP(x) typeof(x) emul_##x #include "x86-emulate.h" +#include <stdio.h> + size_t emul_fwrite(const void *src, size_t sz, size_t n, FILE *f) { emul_save_fpu_state(); diff --git a/tools/tests/x86_emulator/x86-emulate.h b/tools/tests/x86_emulator/x86-emulate.h index b249e46..8760bb8 100644 --- a/tools/tests/x86_emulator/x86-emulate.h +++ b/tools/tests/x86_emulator/x86-emulate.h @@ -3,12 +3,23 @@ #include <stddef.h> #include <stdint.h> #include <stdlib.h> -#include <string.h> +/* + * Use of sse registers must be disabled prior to the definition of + * always_inline functions that would use them (memcpy, memset, etc). + */ +#ifdef _STRING_H +# error "Must not include <string.h> before x86-emulate.h" +#endif +#ifdef _STDIO_H +# error "Must not include <stdio.h> before x86-emulate.h" +#endif #if __GNUC__ >= 6 #pragma GCC target("no-sse") #endif +#include <string.h> +#include <stdio.h> #include <xen/xen.h> #include <xen/asm/msr-index.h> -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |