/* Target-dependent code for GNU/Linux i386.
- Copyright (C) 2000-2017 Free Software Foundation, Inc.
+ Copyright (C) 2000-2018 Free Software Foundation, Inc.
This file is part of GDB.
#include "record-full.h"
#include "linux-record.h"
-#include "features/i386/32bit-core.c"
-#include "features/i386/32bit-sse.c"
-#include "features/i386/32bit-linux.c"
-#include "features/i386/32bit-avx.c"
-#include "features/i386/32bit-mpx.c"
-#include "features/i386/32bit-avx512.c"
-#include "features/i386/32bit-pkeys.c"
+#include "arch/i386.h"
+#include "target-descriptions.h"
/* Return non-zero, when the register is in the corresponding register
group. Put the LINUX_ORIG_EAX register in the system group. */
static LONGEST
i386_linux_get_syscall_number_from_regcache (struct regcache *regcache)
{
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
/* The content of a register. */
gdb_byte buf[4];
[(xcr0 & X86_XSTATE_PKRU) ? 1 : 0];
if (*tdesc == NULL)
- {
- *tdesc = allocate_target_description ();
- set_tdesc_architecture (*tdesc, bfd_scan_arch ("i386"));
- set_tdesc_osabi (*tdesc, osabi_from_tdesc_string ("GNU/Linux"));
-
- long regnum = 0;
-
- if (xcr0 & X86_XSTATE_X87)
- regnum = create_feature_i386_32bit_core (*tdesc, regnum);
-
- if (xcr0 & X86_XSTATE_SSE)
- regnum = create_feature_i386_32bit_sse (*tdesc, regnum);
-
- regnum = create_feature_i386_32bit_linux (*tdesc, regnum);
-
- if (xcr0 & X86_XSTATE_AVX)
- regnum = create_feature_i386_32bit_avx (*tdesc, regnum);
-
- if (xcr0 & X86_XSTATE_MPX)
- regnum = create_feature_i386_32bit_mpx (*tdesc, regnum);
-
- if (xcr0 & X86_XSTATE_AVX512)
- regnum = create_feature_i386_32bit_avx512 (*tdesc, regnum);
-
- if (xcr0 & X86_XSTATE_PKRU)
- regnum = create_feature_i386_32bit_pkeys (*tdesc, regnum);
- }
+ *tdesc = i386_create_target_description (xcr0, true);
return *tdesc;
}
CORE_ADDR from, CORE_ADDR to,
struct regcache *regs)
{
- struct displaced_step_closure *closure;
-
- closure = i386_displaced_step_copy_insn (gdbarch, from, to, regs);
+ displaced_step_closure *closure_
+ = i386_displaced_step_copy_insn (gdbarch, from, to, regs);
if (i386_linux_get_syscall_number_from_regcache (regs) != -1)
{
- /* Since we use simple_displaced_step_copy_insn, our closure is a
- copy of the instruction. */
- gdb_byte *insn = (gdb_byte *) closure;
+ /* The closure returned by i386_displaced_step_copy_insn is simply a
+ buffer with a copy of the instruction. */
+ i386_displaced_step_closure *closure
+ = (i386_displaced_step_closure *) closure_;
/* Fake nop. */
- insn[0] = 0x90;
+ closure->buf[0] = 0x90;
}
- return closure;
+ return closure_;
}
static void
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
const struct target_desc *tdesc = info.target_desc;
- struct tdesc_arch_data *tdesc_data
- = (struct tdesc_arch_data *) info.tdep_info;
+ struct tdesc_arch_data *tdesc_data = info.tdesc_data;
const struct tdesc_feature *feature;
int valid_p;
i386_linux_handle_segmentation_fault);
}
-/* Provide a prototype to silence -Wmissing-prototypes. */
-extern void _initialize_i386_linux_tdep (void);
-
void
_initialize_i386_linux_tdep (void)
{