aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-12-06 16:01:47 +0100
committerTom de Vries <tdevries@suse.de>2021-12-06 16:01:47 +0100
commit197a63068b10d50c01fbe024a45d47cd25a907e3 (patch)
treed4bfe298f6e544518ec001b952ff555ecbf78396 /gdb
parentf21dbd7c8038acee8ece4d57f2454083c37e98f6 (diff)
downloadgdb-197a63068b10d50c01fbe024a45d47cd25a907e3.zip
gdb-197a63068b10d50c01fbe024a45d47cd25a907e3.tar.gz
gdb-197a63068b10d50c01fbe024a45d47cd25a907e3.tar.bz2
[gdb/testsuite] Fix data alignment in gdb.arch/i386-{avx,sse}.exp
When running test-case gdb.arch/i386-avx.exp with clang I ran into: ... (gdb) PASS: gdb.arch/i386-avx.exp: set first breakpoint in main continue^M Continuing.^M ^M Program received signal SIGSEGV, Segmentation fault.^M 0x000000000040052b in main (argc=1, argv=0x7fffffffd3c8) at i386-avx.c:54^M 54 asm ("vmovaps 0(%0), %%ymm0\n\t"^M (gdb) FAIL: gdb.arch/i386-avx.exp: continue to breakpoint: \ continue to first breakpoint in main ... The problem is that the vmovaps insn requires an 256-bit (or 32-byte) aligned address, and it's only 16-byte aligned: ... (gdb) p /x $rax $1 = 0x601030 ... Fix this by using a sufficiently aligned address, using _Alignas. Compile using -std=gnu11 to support _Alignas. Likewise in gdb.arch/i386-sse.exp. Tested on x86_64-linux, with both gcc and clang.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/gdb.arch/i386-avx.c5
-rw-r--r--gdb/testsuite/gdb.arch/i386-avx.exp11
-rw-r--r--gdb/testsuite/gdb.arch/i386-sse.c5
-rw-r--r--gdb/testsuite/gdb.arch/i386-sse.exp11
4 files changed, 24 insertions, 8 deletions
diff --git a/gdb/testsuite/gdb.arch/i386-avx.c b/gdb/testsuite/gdb.arch/i386-avx.c
index 4e93839..765026c 100644
--- a/gdb/testsuite/gdb.arch/i386-avx.c
+++ b/gdb/testsuite/gdb.arch/i386-avx.c
@@ -20,8 +20,11 @@
#include <stdio.h>
#include "nat/x86-cpuid.h"
+/* Align sufficient to be able to use vmovaps. */
+#define ALIGN 32
+
typedef struct {
- float f[8];
+ _Alignas (ALIGN) float f[8];
} v8sf_t;
diff --git a/gdb/testsuite/gdb.arch/i386-avx.exp b/gdb/testsuite/gdb.arch/i386-avx.exp
index 1b61a65..d721b8c 100644
--- a/gdb/testsuite/gdb.arch/i386-avx.exp
+++ b/gdb/testsuite/gdb.arch/i386-avx.exp
@@ -35,12 +35,17 @@ if [get_compiler_info] {
return -1
}
-set additional_flags ""
+set flags { debug }
+
+# C11 for _Alignas, gnu for asm.
+lappend flags additional_flags=-std=gnu11
+
if { [test_compiler_info gcc*] || [test_compiler_info clang*] } {
- set additional_flags "additional_flags=-mavx -I${srcdir}/.."
+ lappend flags "additional_flags=-mavx -I${srcdir}/.."
}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
+ $flags] != "" } {
unsupported "compiler does not support AVX"
return
}
diff --git a/gdb/testsuite/gdb.arch/i386-sse.c b/gdb/testsuite/gdb.arch/i386-sse.c
index a5941a4..10bd4b6 100644
--- a/gdb/testsuite/gdb.arch/i386-sse.c
+++ b/gdb/testsuite/gdb.arch/i386-sse.c
@@ -20,8 +20,11 @@
#include <stdio.h>
#include "nat/x86-cpuid.h"
+/* Align sufficient to be able to use movaps. */
+#define ALIGN 16
+
typedef struct {
- float f[4];
+ _Alignas (ALIGN) float f[4];
} v4sf_t;
diff --git a/gdb/testsuite/gdb.arch/i386-sse.exp b/gdb/testsuite/gdb.arch/i386-sse.exp
index 1ee3a84..15649e4 100644
--- a/gdb/testsuite/gdb.arch/i386-sse.exp
+++ b/gdb/testsuite/gdb.arch/i386-sse.exp
@@ -30,12 +30,17 @@ if [get_compiler_info] {
return -1
}
-set additional_flags ""
+set flags { debug }
+
+# C11 for _Alignas, gnu for asm.
+lappend flags additional_flags=-std=gnu11
+
if { [test_compiler_info gcc*] || [test_compiler_info clang*] } {
- set additional_flags "additional_flags=-msse -I${srcdir}/.."
+ lappend flags "additional_flags=-msse -I${srcdir}/.."
}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
+ $flags] != "" } {
unsupported "compiler does not support SSE"
return
}