From ae71e7b59836219c617193a263b17041d765a031 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Mon, 17 Oct 2016 16:15:33 +0100 Subject: i386-tdep: Verify architecture before proceeding with `set/show mpx' 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/i386-tdep.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'gdb/i386-tdep.c') diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index ccdfec07fe..da8ff8ee66 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -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.")); -- cgit v1.2.3