aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog20
-rw-r--r--gdb/amd64-linux-tdep.c3
-rw-r--r--gdb/amd64-tdep.c17
-rw-r--r--gdb/amd64-tdep.h3
-rw-r--r--gdb/amd64-windows-tdep.c2
-rw-r--r--gdb/arch/amd64.c9
-rw-r--r--gdb/arch/amd64.h2
-rw-r--r--gdb/gdbserver/win32-i386-low.c2
8 files changed, 43 insertions, 15 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0cbccf5..c47c111 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,25 @@
2018-06-29 Pedro Alves <palves@redhat.com>
+ * gdb/amd64-tdep.h (amd64_create_target_description): Add
+ "segments" parameter.
+ * gdb/amd64-tdep.c (amd64_none_init_abi, amd64_x32_none_init_abi)
+ (_initialize_amd64_tdep): Update call to
+ amd64_create_target_description.
+ (amd64_target_description): Add "segments" parameter. Adjust
+ the implementation to use it.
+ * gdb/amd64-linux-tdep.c (amd64_linux_read_description): Update
+ call to amd64_create_target_description.
+ * gdb/amd64-windows-tdep.c (amd64_windows_init_abi): Likewise.
+ * gdb/arch/amd64.h (amd64_create_target_description): Add
+ "segments" register.
+ * gdb/arch/amd64.c (amd64_create_target_description): Add
+ "segments" parameter. Call create_feature_i386_64bit_segments
+ only if SEGMENTS is true.
+ * gdb/gdbserver/win32-i386-low.c (i386_arch_setup): Update
+ call to amd64_create_target_description.
+
+2018-06-29 Pedro Alves <palves@redhat.com>
+
* thread.c (thread_target_id_str): New, factored out from ...
(print_thread_info_1): ... here. Use it to compute the max
"Target Id" column width.
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index ef9248d..7fe37d8 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1594,7 +1594,8 @@ amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
}
if (*tdesc == NULL)
- *tdesc = amd64_create_target_description (xcr0_features_bit, is_x32, true);
+ *tdesc = amd64_create_target_description (xcr0_features_bit, is_x32,
+ true, true);
return *tdesc;
}
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index 9f8f018..190e086 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -3225,7 +3225,8 @@ amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
static void
amd64_none_init_abi (gdbarch_info info, gdbarch *arch)
{
- amd64_init_abi (info, arch, amd64_target_description (X86_XSTATE_SSE_MASK));
+ amd64_init_abi (info, arch, amd64_target_description (X86_XSTATE_SSE_MASK,
+ true));
}
static struct type *
@@ -3266,25 +3267,27 @@ static void
amd64_x32_none_init_abi (gdbarch_info info, gdbarch *arch)
{
amd64_x32_init_abi (info, arch,
- amd64_target_description (X86_XSTATE_SSE_MASK));
+ amd64_target_description (X86_XSTATE_SSE_MASK, true));
}
/* Return the target description for a specified XSAVE feature mask. */
const struct target_desc *
-amd64_target_description (uint64_t xcr0)
+amd64_target_description (uint64_t xcr0, bool segments)
{
static target_desc *amd64_tdescs \
- [2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
+ [2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/][2/*segments*/] = {};
target_desc **tdesc;
tdesc = &amd64_tdescs[(xcr0 & X86_XSTATE_AVX) ? 1 : 0]
[(xcr0 & X86_XSTATE_MPX) ? 1 : 0]
[(xcr0 & X86_XSTATE_AVX512) ? 1 : 0]
- [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0];
+ [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0]
+ [segments ? 1 : 0];
if (*tdesc == NULL)
- *tdesc = amd64_create_target_description (xcr0, false, false);
+ *tdesc = amd64_create_target_description (xcr0, false, false,
+ segments);
return *tdesc;
}
@@ -3314,7 +3317,7 @@ _initialize_amd64_tdep (void)
for (auto &a : xml_masks)
{
- auto tdesc = amd64_target_description (a.mask);
+ auto tdesc = amd64_target_description (a.mask, true);
selftests::record_xml_tdesc (a.xml, tdesc);
}
diff --git a/gdb/amd64-tdep.h b/gdb/amd64-tdep.h
index 7d3791a..94e0126 100644
--- a/gdb/amd64-tdep.h
+++ b/gdb/amd64-tdep.h
@@ -106,7 +106,8 @@ extern void amd64_init_abi (struct gdbarch_info info,
extern void amd64_x32_init_abi (struct gdbarch_info info,
struct gdbarch *gdbarch,
const target_desc *default_tdesc);
-extern const struct target_desc *amd64_target_description (uint64_t xcr0);
+extern const struct target_desc *amd64_target_description (uint64_t xcr0,
+ bool segments);
/* Fill register REGNUM in REGCACHE with the appropriate
floating-point or SSE register value from *FXSAVE. If REGNUM is
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index 83a7f2f..904875b 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -1226,7 +1226,7 @@ amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
frame_unwind_append_unwinder (gdbarch, &amd64_windows_frame_unwind);
amd64_init_abi (info, gdbarch,
- amd64_target_description (X86_XSTATE_SSE_MASK));
+ amd64_target_description (X86_XSTATE_SSE_MASK, false));
windows_init_abi (info, gdbarch);
diff --git a/gdb/arch/amd64.c b/gdb/arch/amd64.c
index d31d8f1..4ad17c3 100644
--- a/gdb/arch/amd64.c
+++ b/gdb/arch/amd64.c
@@ -33,10 +33,12 @@
/* Create amd64 target descriptions according to XCR0. If IS_X32 is
true, create the x32 ones. If IS_LINUX is true, create target
- descriptions for Linux. */
+ descriptions for Linux. If SEGMENTS is true, then include
+ the "org.gnu.gdb.i386.segments" feature registers. */
target_desc *
-amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux)
+amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux,
+ bool segments)
{
target_desc *tdesc = allocate_target_description ();
@@ -57,7 +59,8 @@ amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux)
regnum = create_feature_i386_64bit_sse (tdesc, regnum);
if (is_linux)
regnum = create_feature_i386_64bit_linux (tdesc, regnum);
- regnum = create_feature_i386_64bit_segments (tdesc, regnum);
+ if (segments)
+ regnum = create_feature_i386_64bit_segments (tdesc, regnum);
if (xcr0 & X86_XSTATE_AVX)
regnum = create_feature_i386_64bit_avx (tdesc, regnum);
diff --git a/gdb/arch/amd64.h b/gdb/arch/amd64.h
index c0c4dc2..4a65965 100644
--- a/gdb/arch/amd64.h
+++ b/gdb/arch/amd64.h
@@ -19,4 +19,4 @@
#include <stdint.h>
target_desc *amd64_create_target_description (uint64_t xcr0, bool is_x32,
- bool is_linux);
+ bool is_linux, bool segments);
diff --git a/gdb/gdbserver/win32-i386-low.c b/gdb/gdbserver/win32-i386-low.c
index 16fe2c8..6222168 100644
--- a/gdb/gdbserver/win32-i386-low.c
+++ b/gdb/gdbserver/win32-i386-low.c
@@ -436,7 +436,7 @@ i386_arch_setup (void)
#ifdef __x86_64__
tdesc = amd64_create_target_description (X86_XSTATE_SSE_MASK, false,
- false);
+ false, false);
const char **expedite_regs = amd64_expedite_regs;
#else
tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false);