diff options
-rw-r--r-- | gdb/ChangeLog | 20 | ||||
-rw-r--r-- | gdb/amd64-linux-tdep.c | 3 | ||||
-rw-r--r-- | gdb/amd64-tdep.c | 17 | ||||
-rw-r--r-- | gdb/amd64-tdep.h | 3 | ||||
-rw-r--r-- | gdb/amd64-windows-tdep.c | 2 | ||||
-rw-r--r-- | gdb/arch/amd64.c | 9 | ||||
-rw-r--r-- | gdb/arch/amd64.h | 2 | ||||
-rw-r--r-- | gdb/gdbserver/win32-i386-low.c | 2 |
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); |