i386-tdep: Verify architecture before proceeding with `set/show mpx'
authorMaciej W. Rozycki <macro@imgtec.com>
Mon, 17 Oct 2016 15:15:33 +0000 (16:15 +0100)
committerMaciej W. Rozycki <macro@imgtec.com>
Tue, 18 Oct 2016 03:42:23 +0000 (04:42 +0100)
Make sure the architecture is `bfd_arch_i386' before handling the `set
mpx' and `show mpx' commands, avoiding the issue with `i386_mpx_enabled'
interpreting `gdbarch->tdep' according to the `struct gdbarch_tdep'
definition in i386-tdep.h while indeed in a multi-target configuration
it may have a different layout and cause GDB to crash or at least
misbehave.

gdb/
* i386-tdep.c (i386_mpx_info_bounds): Make sure the architecture
is `bfd_arch_i386' before proceeding.
(i386_mpx_set_bounds): Likewise.

gdb/ChangeLog
gdb/i386-tdep.c

index 6bc980545422d6831b89e725647a477bd134fa5d..4b642b8ae9eaa7bf84cd5a71651fd222781f0d0c 100644 (file)
@@ -1,3 +1,9 @@
+2016-10-18  Maciej W. Rozycki  <macro@imgtec.com>
+
+       * i386-tdep.c (i386_mpx_info_bounds): Make sure the architecture
+       is `bfd_arch_i386' before proceeding.
+       (i386_mpx_set_bounds): Likewise.
+
 2016-10-18  Maciej W. Rozycki  <macro@imgtec.com>
 
        * tilegx-tdep.c (tilegx_analyze_prologue): Use the `long long'
index ccdfec07fe7d381f1f435632a62d4ae7afbd0271..da8ff8ee668261da6c1d6f669cf4e440c85c8d40 100644 (file)
@@ -8857,7 +8857,8 @@ i386_mpx_info_bounds (char *args, int from_tty)
   struct gdbarch *gdbarch = get_current_arch ();
   struct type *data_ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
 
-  if (!i386_mpx_enabled ())
+  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_i386
+      || !i386_mpx_enabled ())
     {
       printf_unfiltered (_("Intel Memory Protection Extensions not "
                           "supported on this target.\n"));
@@ -8900,7 +8901,8 @@ i386_mpx_set_bounds (char *args, int from_tty)
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct type *data_ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
 
-  if (!i386_mpx_enabled ())
+  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_i386
+      || !i386_mpx_enabled ())
     error (_("Intel Memory Protection Extensions not supported\
  on this target."));