| Index: gdb/i386-linux-tdep.c
|
| diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
|
| index 8475d7a8e1062e36064e84a1023edc38f7c9d74a..b46a51e3006371f7ddd63ecbc8fe5a6e65b8d9c8 100644
|
| --- a/gdb/i386-linux-tdep.c
|
| +++ b/gdb/i386-linux-tdep.c
|
| @@ -1,6 +1,6 @@
|
| /* Target-dependent code for GNU/Linux i386.
|
|
|
| - Copyright (C) 2000-2005, 2007-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2000-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -27,7 +27,7 @@
|
| #include "osabi.h"
|
| #include "reggroups.h"
|
| #include "dwarf2-frame.h"
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
|
|
| #include "i386-tdep.h"
|
| #include "i386-linux-tdep.h"
|
| @@ -44,12 +44,13 @@
|
| /* The syscall's XML filename for i386. */
|
| #define XML_SYSCALL_FILENAME_I386 "syscalls/i386-linux.xml"
|
|
|
| -#include "record.h"
|
| +#include "record-full.h"
|
| #include "linux-record.h"
|
| #include <stdint.h>
|
|
|
| #include "features/i386/i386-linux.c"
|
| #include "features/i386/i386-mmx-linux.c"
|
| +#include "features/i386/i386-mpx-linux.c"
|
| #include "features/i386/i386-avx-linux.c"
|
|
|
| /* Supported register note sections. */
|
| @@ -370,23 +371,23 @@ i386_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
|
| static int
|
| i386_all_but_ip_registers_record (struct regcache *regcache)
|
| {
|
| - if (record_arch_list_add_reg (regcache, I386_EAX_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EAX_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_ECX_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_ECX_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_EDX_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EDX_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_EBX_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EBX_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_ESP_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_ESP_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_EBP_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EBP_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_ESI_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_ESI_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_EDI_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EDI_REGNUM))
|
| return -1;
|
| - if (record_arch_list_add_reg (regcache, I386_EFLAGS_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EFLAGS_REGNUM))
|
| return -1;
|
|
|
| return 0;
|
| @@ -450,7 +451,7 @@ i386_linux_intx80_sysenter_syscall_record (struct regcache *regcache)
|
| return ret;
|
|
|
| /* Record the return value of the system call. */
|
| - if (record_arch_list_add_reg (regcache, I386_EAX_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EAX_REGNUM))
|
| return -1;
|
|
|
| return 0;
|
| @@ -469,7 +470,7 @@ i386_linux_record_signal (struct gdbarch *gdbarch,
|
| if (i386_all_but_ip_registers_record (regcache))
|
| return -1;
|
|
|
| - if (record_arch_list_add_reg (regcache, I386_EIP_REGNUM))
|
| + if (record_full_arch_list_add_reg (regcache, I386_EIP_REGNUM))
|
| return -1;
|
|
|
| /* Record the change in the stack. */
|
| @@ -480,11 +481,11 @@ i386_linux_record_signal (struct gdbarch *gdbarch,
|
| /* This is for frame_size.
|
| sp -= sizeof (struct rt_sigframe); */
|
| esp -= I386_LINUX_frame_size;
|
| - if (record_arch_list_add_mem (esp,
|
| - I386_LINUX_xstate + I386_LINUX_frame_size))
|
| + if (record_full_arch_list_add_mem (esp,
|
| + I386_LINUX_xstate + I386_LINUX_frame_size))
|
| return -1;
|
|
|
| - if (record_arch_list_add_end ())
|
| + if (record_full_arch_list_add_end ())
|
| return -1;
|
|
|
| return 0;
|
| @@ -569,6 +570,8 @@ int i386_linux_gregset_reg_offset[] =
|
| -1, -1, -1, -1, -1, -1, -1, -1,
|
| -1,
|
| -1, -1, -1, -1, -1, -1, -1, -1,
|
| + -1, -1, -1, -1, /* MPX registers BND0 ... BND3. */
|
| + -1, -1, /* MPX registers BNDCFGU, BNDSTATUS. */
|
| 11 * 4 /* "orig_eax" */
|
| };
|
|
|
| @@ -599,8 +602,7 @@ static int i386_linux_sc_reg_offset[] =
|
| /* Get XSAVE extended state xcr0 from core dump. */
|
|
|
| uint64_t
|
| -i386_linux_core_read_xcr0 (struct gdbarch *gdbarch,
|
| - struct target_ops *target, bfd *abfd)
|
| +i386_linux_core_read_xcr0 (bfd *abfd)
|
| {
|
| asection *xstate = bfd_get_section_by_name (abfd, ".reg-xstate");
|
| uint64_t xcr0;
|
| @@ -642,9 +644,12 @@ i386_linux_core_read_description (struct gdbarch *gdbarch,
|
| bfd *abfd)
|
| {
|
| /* Linux/i386. */
|
| - uint64_t xcr0 = i386_linux_core_read_xcr0 (gdbarch, target, abfd);
|
| - switch ((xcr0 & I386_XSTATE_AVX_MASK))
|
| + uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
|
| +
|
| + switch ((xcr0 & I386_XSTATE_ALL_MASK))
|
| {
|
| + case I386_XSTATE_MPX_MASK:
|
| + return tdesc_i386_mpx_linux;
|
| case I386_XSTATE_AVX_MASK:
|
| return tdesc_i386_avx_linux;
|
| case I386_XSTATE_SSE_MASK:
|
| @@ -980,4 +985,5 @@ _initialize_i386_linux_tdep (void)
|
| initialize_tdesc_i386_linux ();
|
| initialize_tdesc_i386_mmx_linux ();
|
| initialize_tdesc_i386_avx_linux ();
|
| + initialize_tdesc_i386_mpx_linux ();
|
| }
|
|
|