mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
0747795c08
This changes all includes to use the form "common/filename.h" rather than just "filename.h". This was written by a script. gdb/ChangeLog 2019-01-25 Tom Tromey <tom@tromey.com> * xtensa-linux-nat.c: Fix common/ includes. * xml-support.h: Fix common/ includes. * xml-support.c: Fix common/ includes. * x86-linux-nat.c: Fix common/ includes. * windows-nat.c: Fix common/ includes. * varobj.h: Fix common/ includes. * varobj.c: Fix common/ includes. * value.c: Fix common/ includes. * valops.c: Fix common/ includes. * utils.c: Fix common/ includes. * unittests/xml-utils-selftests.c: Fix common/ includes. * unittests/utils-selftests.c: Fix common/ includes. * unittests/unpack-selftests.c: Fix common/ includes. * unittests/tracepoint-selftests.c: Fix common/ includes. * unittests/style-selftests.c: Fix common/ includes. * unittests/string_view-selftests.c: Fix common/ includes. * unittests/scoped_restore-selftests.c: Fix common/ includes. * unittests/scoped_mmap-selftests.c: Fix common/ includes. * unittests/scoped_fd-selftests.c: Fix common/ includes. * unittests/rsp-low-selftests.c: Fix common/ includes. * unittests/parse-connection-spec-selftests.c: Fix common/ includes. * unittests/optional-selftests.c: Fix common/ includes. * unittests/offset-type-selftests.c: Fix common/ includes. * unittests/observable-selftests.c: Fix common/ includes. * unittests/mkdir-recursive-selftests.c: Fix common/ includes. * unittests/memrange-selftests.c: Fix common/ includes. * unittests/memory-map-selftests.c: Fix common/ includes. * unittests/lookup_name_info-selftests.c: Fix common/ includes. * unittests/function-view-selftests.c: Fix common/ includes. * unittests/environ-selftests.c: Fix common/ includes. * unittests/copy_bitwise-selftests.c: Fix common/ includes. * unittests/common-utils-selftests.c: Fix common/ includes. * unittests/cli-utils-selftests.c: Fix common/ includes. * unittests/array-view-selftests.c: Fix common/ includes. * ui-file.c: Fix common/ includes. * tui/tui-io.c: Fix common/ includes. * tracepoint.h: Fix common/ includes. * tracepoint.c: Fix common/ includes. * tracefile-tfile.c: Fix common/ includes. * top.h: Fix common/ includes. * top.c: Fix common/ includes. * thread.c: Fix common/ includes. * target/waitstatus.h: Fix common/ includes. * target/waitstatus.c: Fix common/ includes. * target.h: Fix common/ includes. * target.c: Fix common/ includes. * target-memory.c: Fix common/ includes. * target-descriptions.c: Fix common/ includes. * symtab.h: Fix common/ includes. * symfile.c: Fix common/ includes. * stap-probe.c: Fix common/ includes. * spu-linux-nat.c: Fix common/ includes. * sparc-nat.c: Fix common/ includes. * source.c: Fix common/ includes. * solib.c: Fix common/ includes. * solib-target.c: Fix common/ includes. * ser-unix.c: Fix common/ includes. * ser-tcp.c: Fix common/ includes. * ser-pipe.c: Fix common/ includes. * ser-base.c: Fix common/ includes. * selftest-arch.c: Fix common/ includes. * s12z-tdep.c: Fix common/ includes. * rust-exp.y: Fix common/ includes. * rs6000-aix-tdep.c: Fix common/ includes. * riscv-tdep.c: Fix common/ includes. * remote.c: Fix common/ includes. * remote-notif.h: Fix common/ includes. * remote-fileio.h: Fix common/ includes. * remote-fileio.c: Fix common/ includes. * regcache.h: Fix common/ includes. * regcache.c: Fix common/ includes. * record-btrace.c: Fix common/ includes. * python/python.c: Fix common/ includes. * python/py-type.c: Fix common/ includes. * python/py-inferior.c: Fix common/ includes. * progspace.h: Fix common/ includes. * producer.c: Fix common/ includes. * procfs.c: Fix common/ includes. * proc-api.c: Fix common/ includes. * printcmd.c: Fix common/ includes. * ppc-linux-nat.c: Fix common/ includes. * parser-defs.h: Fix common/ includes. * osdata.c: Fix common/ includes. * obsd-nat.c: Fix common/ includes. * nat/x86-linux.c: Fix common/ includes. * nat/x86-linux-dregs.c: Fix common/ includes. * nat/x86-dregs.h: Fix common/ includes. * nat/x86-dregs.c: Fix common/ includes. * nat/ppc-linux.c: Fix common/ includes. * nat/mips-linux-watch.h: Fix common/ includes. * nat/mips-linux-watch.c: Fix common/ includes. * nat/linux-waitpid.c: Fix common/ includes. * nat/linux-ptrace.h: Fix common/ includes. * nat/linux-ptrace.c: Fix common/ includes. * nat/linux-procfs.c: Fix common/ includes. * nat/linux-personality.c: Fix common/ includes. * nat/linux-osdata.c: Fix common/ includes. * nat/linux-namespaces.c: Fix common/ includes. * nat/linux-btrace.h: Fix common/ includes. * nat/linux-btrace.c: Fix common/ includes. * nat/fork-inferior.c: Fix common/ includes. * nat/amd64-linux-siginfo.c: Fix common/ includes. * nat/aarch64-sve-linux-ptrace.c: Fix common/ includes. * nat/aarch64-linux.c: Fix common/ includes. * nat/aarch64-linux-hw-point.h: Fix common/ includes. * nat/aarch64-linux-hw-point.c: Fix common/ includes. * namespace.h: Fix common/ includes. * mips-linux-tdep.c: Fix common/ includes. * minsyms.c: Fix common/ includes. * mi/mi-parse.h: Fix common/ includes. * mi/mi-main.c: Fix common/ includes. * mi/mi-cmd-env.c: Fix common/ includes. * memrange.h: Fix common/ includes. * memattr.c: Fix common/ includes. * maint.h: Fix common/ includes. * maint.c: Fix common/ includes. * main.c: Fix common/ includes. * machoread.c: Fix common/ includes. * location.c: Fix common/ includes. * linux-thread-db.c: Fix common/ includes. * linux-nat.c: Fix common/ includes. * linux-fork.c: Fix common/ includes. * inline-frame.c: Fix common/ includes. * infrun.c: Fix common/ includes. * inflow.c: Fix common/ includes. * inferior.h: Fix common/ includes. * inferior.c: Fix common/ includes. * infcmd.c: Fix common/ includes. * inf-ptrace.c: Fix common/ includes. * inf-child.c: Fix common/ includes. * ia64-linux-nat.c: Fix common/ includes. * i387-tdep.c: Fix common/ includes. * i386-tdep.c: Fix common/ includes. * i386-linux-tdep.c: Fix common/ includes. * i386-linux-nat.c: Fix common/ includes. * i386-go32-tdep.c: Fix common/ includes. * i386-fbsd-tdep.c: Fix common/ includes. * i386-fbsd-nat.c: Fix common/ includes. * guile/scm-type.c: Fix common/ includes. * guile/guile.c: Fix common/ includes. * go32-nat.c: Fix common/ includes. * gnu-nat.c: Fix common/ includes. * gdbthread.h: Fix common/ includes. * gdbarch-selftests.c: Fix common/ includes. * gdb_usleep.c: Fix common/ includes. * gdb_select.h: Fix common/ includes. * gdb_bfd.c: Fix common/ includes. * gcore.c: Fix common/ includes. * fork-child.c: Fix common/ includes. * findvar.c: Fix common/ includes. * fbsd-nat.c: Fix common/ includes. * event-top.c: Fix common/ includes. * event-loop.c: Fix common/ includes. * dwarf2read.c: Fix common/ includes. * dwarf2loc.c: Fix common/ includes. * dwarf2-frame.c: Fix common/ includes. * dwarf-index-cache.c: Fix common/ includes. * dtrace-probe.c: Fix common/ includes. * disasm-selftests.c: Fix common/ includes. * defs.h: Fix common/ includes. * csky-tdep.c: Fix common/ includes. * cp-valprint.c: Fix common/ includes. * cp-support.h: Fix common/ includes. * cp-support.c: Fix common/ includes. * corelow.c: Fix common/ includes. * completer.h: Fix common/ includes. * completer.c: Fix common/ includes. * compile/compile.c: Fix common/ includes. * compile/compile-loc2c.c: Fix common/ includes. * compile/compile-cplus-types.c: Fix common/ includes. * compile/compile-cplus-symbols.c: Fix common/ includes. * command.h: Fix common/ includes. * cli/cli-dump.c: Fix common/ includes. * cli/cli-cmds.c: Fix common/ includes. * charset.c: Fix common/ includes. * build-id.c: Fix common/ includes. * btrace.h: Fix common/ includes. * btrace.c: Fix common/ includes. * breakpoint.h: Fix common/ includes. * breakpoint.c: Fix common/ includes. * ax.h: (enum agent_op): Fix common/ includes. * ax-general.c (struct aop_map): Fix common/ includes. * ax-gdb.c: Fix common/ includes. * auxv.c: Fix common/ includes. * auto-load.c: Fix common/ includes. * arm-tdep.c: Fix common/ includes. * arch/riscv.c: Fix common/ includes. * arch/ppc-linux-common.c: Fix common/ includes. * arch/i386.c: Fix common/ includes. * arch/arm.c: Fix common/ includes. * arch/arm-linux.c: Fix common/ includes. * arch/arm-get-next-pcs.c: Fix common/ includes. * arch/amd64.c: Fix common/ includes. * arch/aarch64.c: Fix common/ includes. * arch/aarch64-insn.c: Fix common/ includes. * arch-utils.c: Fix common/ includes. * amd64-windows-tdep.c: Fix common/ includes. * amd64-tdep.c: Fix common/ includes. * amd64-sol2-tdep.c: Fix common/ includes. * amd64-obsd-tdep.c: Fix common/ includes. * amd64-nbsd-tdep.c: Fix common/ includes. * amd64-linux-tdep.c: Fix common/ includes. * amd64-linux-nat.c: Fix common/ includes. * amd64-fbsd-tdep.c: Fix common/ includes. * amd64-fbsd-nat.c: Fix common/ includes. * amd64-dicos-tdep.c: Fix common/ includes. * amd64-darwin-tdep.c: Fix common/ includes. * agent.c: Fix common/ includes. * ada-lang.h: Fix common/ includes. * ada-lang.c: Fix common/ includes. * aarch64-tdep.c: Fix common/ includes. gdb/gdbserver/ChangeLog 2019-01-25 Tom Tromey <tom@tromey.com> * win32-low.c: Fix common/ includes. * win32-i386-low.c: Fix common/ includes. * tracepoint.c: Fix common/ includes. * thread-db.c: Fix common/ includes. * target.h: Fix common/ includes. * symbol.c: Fix common/ includes. * spu-low.c: Fix common/ includes. * server.h: Fix common/ includes. * server.c: Fix common/ includes. * remote-utils.c: Fix common/ includes. * regcache.h: Fix common/ includes. * regcache.c: Fix common/ includes. * nto-x86-low.c: Fix common/ includes. * notif.h: Fix common/ includes. * mem-break.h: Fix common/ includes. * lynx-low.c: Fix common/ includes. * lynx-i386-low.c: Fix common/ includes. * linux-x86-tdesc-selftest.c: Fix common/ includes. * linux-x86-low.c: Fix common/ includes. * linux-low.c: Fix common/ includes. * inferiors.h: Fix common/ includes. * i387-fp.c: Fix common/ includes. * hostio.c: Fix common/ includes. * hostio-errno.c: Fix common/ includes. * gdbthread.h: Fix common/ includes. * gdbreplay.c: Fix common/ includes. * fork-child.c: Fix common/ includes. * event-loop.c: Fix common/ includes. * ax.c: (enum gdb_agent_op): Fix common/ includes.
359 lines
12 KiB
C
359 lines
12 KiB
C
/* Copyright (C) 2010-2019 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#include "server.h"
|
|
#include "lynx-low.h"
|
|
#include <limits.h>
|
|
#include <sys/ptrace.h>
|
|
#include "common/x86-xstate.h"
|
|
#include "arch/i386.h"
|
|
#include "x86-tdesc.h"
|
|
|
|
/* The following two typedefs are defined in a .h file which is not
|
|
in the standard include path (/sys/include/family/x86/ucontext.h),
|
|
so we just duplicate them here.
|
|
|
|
Unfortunately for us, the definition of this structure differs between
|
|
LynxOS 5.x and LynxOS 178. Rather than duplicate the code, we use
|
|
different definitions depending on the target. */
|
|
|
|
#ifdef VMOS_DEV
|
|
#define LYNXOS_178
|
|
#endif
|
|
|
|
/* General register context */
|
|
typedef struct usr_econtext {
|
|
|
|
uint32_t uec_fault;
|
|
uint32_t uec_es;
|
|
uint32_t uec_ds;
|
|
uint32_t uec_edi;
|
|
uint32_t uec_esi;
|
|
uint32_t uec_ebp;
|
|
uint32_t uec_temp;
|
|
uint32_t uec_ebx;
|
|
uint32_t uec_edx;
|
|
uint32_t uec_ecx;
|
|
uint32_t uec_eax;
|
|
uint32_t uec_inum;
|
|
uint32_t uec_ecode;
|
|
uint32_t uec_eip;
|
|
uint32_t uec_cs;
|
|
uint32_t uec_eflags;
|
|
uint32_t uec_esp;
|
|
uint32_t uec_ss;
|
|
uint32_t uec_fs;
|
|
uint32_t uec_gs;
|
|
} usr_econtext_t;
|
|
|
|
#if defined(LYNXOS_178)
|
|
|
|
/* Floating point register context */
|
|
typedef struct usr_fcontext {
|
|
uint32_t ufc_control;
|
|
uint32_t ufc_status;
|
|
uint32_t ufc_tag;
|
|
uint8_t *ufc_inst_off;
|
|
uint32_t ufc_inst_sel;
|
|
uint8_t *ufc_data_off;
|
|
uint32_t ufc_data_sel;
|
|
struct ufp387_real {
|
|
uint16_t umant4;
|
|
uint16_t umant3;
|
|
uint16_t umant2;
|
|
uint16_t umant1;
|
|
uint16_t us_and_e;
|
|
} ufc_reg[8];
|
|
} usr_fcontext_t;
|
|
|
|
#else /* This is LynxOS 5.x. */
|
|
|
|
/* Floating point and SIMD register context */
|
|
typedef struct usr_fcontext {
|
|
uint16_t ufc_control;
|
|
uint16_t ufc_status;
|
|
uint16_t ufc_tag;
|
|
uint16_t ufc_opcode;
|
|
uint8_t *ufc_inst_off;
|
|
uint32_t ufc_inst_sel;
|
|
uint8_t *ufc_data_off;
|
|
uint32_t ufc_data_sel;
|
|
uint32_t usse_mxcsr;
|
|
uint32_t usse_mxcsr_mask;
|
|
struct ufp387_real {
|
|
uint16_t umant4;
|
|
uint16_t umant3;
|
|
uint16_t umant2;
|
|
uint16_t umant1;
|
|
uint16_t us_and_e;
|
|
uint16_t ureserved_1;
|
|
uint16_t ureserved_2;
|
|
uint16_t ureserved_3;
|
|
} ufc_reg[8];
|
|
struct uxmm_register {
|
|
uint16_t uchunk_1;
|
|
uint16_t uchunk_2;
|
|
uint16_t uchunk_3;
|
|
uint16_t uchunk_4;
|
|
uint16_t uchunk_5;
|
|
uint16_t uchunk_6;
|
|
uint16_t uchunk_7;
|
|
uint16_t uchunk_8;
|
|
} uxmm_reg[8];
|
|
char ureserved[16][14];
|
|
} usr_fcontext_t;
|
|
|
|
#endif
|
|
|
|
/* The index of various registers inside the regcache. */
|
|
|
|
enum lynx_i386_gdb_regnum
|
|
{
|
|
I386_EAX_REGNUM,
|
|
I386_ECX_REGNUM,
|
|
I386_EDX_REGNUM,
|
|
I386_EBX_REGNUM,
|
|
I386_ESP_REGNUM,
|
|
I386_EBP_REGNUM,
|
|
I386_ESI_REGNUM,
|
|
I386_EDI_REGNUM,
|
|
I386_EIP_REGNUM,
|
|
I386_EFLAGS_REGNUM,
|
|
I386_CS_REGNUM,
|
|
I386_SS_REGNUM,
|
|
I386_DS_REGNUM,
|
|
I386_ES_REGNUM,
|
|
I386_FS_REGNUM,
|
|
I386_GS_REGNUM,
|
|
I386_ST0_REGNUM,
|
|
I386_FCTRL_REGNUM = I386_ST0_REGNUM + 8,
|
|
I386_FSTAT_REGNUM,
|
|
I386_FTAG_REGNUM,
|
|
I386_FISEG_REGNUM,
|
|
I386_FIOFF_REGNUM,
|
|
I386_FOSEG_REGNUM,
|
|
I386_FOOFF_REGNUM,
|
|
I386_FOP_REGNUM,
|
|
I386_XMM0_REGNUM = 32,
|
|
I386_MXCSR_REGNUM = I386_XMM0_REGNUM + 8,
|
|
I386_SENTINEL_REGUM
|
|
};
|
|
|
|
/* The fill_function for the general-purpose register set. */
|
|
|
|
static void
|
|
lynx_i386_fill_gregset (struct regcache *regcache, char *buf)
|
|
{
|
|
#define lynx_i386_collect_gp(regnum, fld) \
|
|
collect_register (regcache, regnum, \
|
|
buf + offsetof (usr_econtext_t, uec_##fld))
|
|
|
|
lynx_i386_collect_gp (I386_EAX_REGNUM, eax);
|
|
lynx_i386_collect_gp (I386_ECX_REGNUM, ecx);
|
|
lynx_i386_collect_gp (I386_EDX_REGNUM, edx);
|
|
lynx_i386_collect_gp (I386_EBX_REGNUM, ebx);
|
|
lynx_i386_collect_gp (I386_ESP_REGNUM, esp);
|
|
lynx_i386_collect_gp (I386_EBP_REGNUM, ebp);
|
|
lynx_i386_collect_gp (I386_ESI_REGNUM, esi);
|
|
lynx_i386_collect_gp (I386_EDI_REGNUM, edi);
|
|
lynx_i386_collect_gp (I386_EIP_REGNUM, eip);
|
|
lynx_i386_collect_gp (I386_EFLAGS_REGNUM, eflags);
|
|
lynx_i386_collect_gp (I386_CS_REGNUM, cs);
|
|
lynx_i386_collect_gp (I386_SS_REGNUM, ss);
|
|
lynx_i386_collect_gp (I386_DS_REGNUM, ds);
|
|
lynx_i386_collect_gp (I386_ES_REGNUM, es);
|
|
lynx_i386_collect_gp (I386_FS_REGNUM, fs);
|
|
lynx_i386_collect_gp (I386_GS_REGNUM, gs);
|
|
}
|
|
|
|
/* The store_function for the general-purpose register set. */
|
|
|
|
static void
|
|
lynx_i386_store_gregset (struct regcache *regcache, const char *buf)
|
|
{
|
|
#define lynx_i386_supply_gp(regnum, fld) \
|
|
supply_register (regcache, regnum, \
|
|
buf + offsetof (usr_econtext_t, uec_##fld))
|
|
|
|
lynx_i386_supply_gp (I386_EAX_REGNUM, eax);
|
|
lynx_i386_supply_gp (I386_ECX_REGNUM, ecx);
|
|
lynx_i386_supply_gp (I386_EDX_REGNUM, edx);
|
|
lynx_i386_supply_gp (I386_EBX_REGNUM, ebx);
|
|
lynx_i386_supply_gp (I386_ESP_REGNUM, esp);
|
|
lynx_i386_supply_gp (I386_EBP_REGNUM, ebp);
|
|
lynx_i386_supply_gp (I386_ESI_REGNUM, esi);
|
|
lynx_i386_supply_gp (I386_EDI_REGNUM, edi);
|
|
lynx_i386_supply_gp (I386_EIP_REGNUM, eip);
|
|
lynx_i386_supply_gp (I386_EFLAGS_REGNUM, eflags);
|
|
lynx_i386_supply_gp (I386_CS_REGNUM, cs);
|
|
lynx_i386_supply_gp (I386_SS_REGNUM, ss);
|
|
lynx_i386_supply_gp (I386_DS_REGNUM, ds);
|
|
lynx_i386_supply_gp (I386_ES_REGNUM, es);
|
|
lynx_i386_supply_gp (I386_FS_REGNUM, fs);
|
|
lynx_i386_supply_gp (I386_GS_REGNUM, gs);
|
|
}
|
|
|
|
/* Extract the first 16 bits of register REGNUM in the REGCACHE,
|
|
and store these 2 bytes at DEST.
|
|
|
|
This is useful to collect certain 16bit registers which are known
|
|
by GDBserver as 32bit registers (such as the Control Register
|
|
for instance). */
|
|
|
|
static void
|
|
collect_16bit_register (struct regcache *regcache, int regnum, char *dest)
|
|
{
|
|
gdb_byte word[4];
|
|
|
|
collect_register (regcache, regnum, word);
|
|
memcpy (dest, word, 2);
|
|
}
|
|
|
|
/* The fill_function for the floating-point register set. */
|
|
|
|
static void
|
|
lynx_i386_fill_fpregset (struct regcache *regcache, char *buf)
|
|
{
|
|
int i;
|
|
|
|
/* Collect %st0 .. %st7. */
|
|
for (i = 0; i < 8; i++)
|
|
collect_register (regcache, I386_ST0_REGNUM + i,
|
|
buf + offsetof (usr_fcontext_t, ufc_reg)
|
|
+ i * sizeof (struct ufp387_real));
|
|
|
|
/* Collect the other FPU registers. */
|
|
collect_16bit_register (regcache, I386_FCTRL_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_control));
|
|
collect_16bit_register (regcache, I386_FSTAT_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_status));
|
|
collect_16bit_register (regcache, I386_FTAG_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_tag));
|
|
collect_register (regcache, I386_FISEG_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_inst_sel));
|
|
collect_register (regcache, I386_FIOFF_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_inst_off));
|
|
collect_register (regcache, I386_FOSEG_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_data_sel));
|
|
collect_register (regcache, I386_FOOFF_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_data_off));
|
|
#if !defined(LYNXOS_178)
|
|
collect_16bit_register (regcache, I386_FOP_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_opcode));
|
|
|
|
/* Collect the XMM registers. */
|
|
for (i = 0; i < 8; i++)
|
|
collect_register (regcache, I386_XMM0_REGNUM + i,
|
|
buf + offsetof (usr_fcontext_t, uxmm_reg)
|
|
+ i * sizeof (struct uxmm_register));
|
|
collect_register (regcache, I386_MXCSR_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, usse_mxcsr));
|
|
#endif
|
|
}
|
|
|
|
/* This is the supply counterpart for collect_16bit_register:
|
|
It extracts a 2byte value from BUF, and uses that value to
|
|
set REGNUM's value in the regcache.
|
|
|
|
This is useful to supply the value of certain 16bit registers
|
|
which are known by GDBserver as 32bit registers (such as the Control
|
|
Register for instance). */
|
|
|
|
static void
|
|
supply_16bit_register (struct regcache *regcache, int regnum, const char *buf)
|
|
{
|
|
gdb_byte word[4];
|
|
|
|
memcpy (word, buf, 2);
|
|
memset (word + 2, 0, 2);
|
|
supply_register (regcache, regnum, word);
|
|
}
|
|
|
|
/* The store_function for the floating-point register set. */
|
|
|
|
static void
|
|
lynx_i386_store_fpregset (struct regcache *regcache, const char *buf)
|
|
{
|
|
int i;
|
|
|
|
/* Store the %st0 .. %st7 registers. */
|
|
for (i = 0; i < 8; i++)
|
|
supply_register (regcache, I386_ST0_REGNUM + i,
|
|
buf + offsetof (usr_fcontext_t, ufc_reg)
|
|
+ i * sizeof (struct ufp387_real));
|
|
|
|
/* Store the other FPU registers. */
|
|
supply_16bit_register (regcache, I386_FCTRL_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_control));
|
|
supply_16bit_register (regcache, I386_FSTAT_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_status));
|
|
supply_16bit_register (regcache, I386_FTAG_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_tag));
|
|
supply_register (regcache, I386_FISEG_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_inst_sel));
|
|
supply_register (regcache, I386_FIOFF_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_inst_off));
|
|
supply_register (regcache, I386_FOSEG_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_data_sel));
|
|
supply_register (regcache, I386_FOOFF_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_data_off));
|
|
#if !defined(LYNXOS_178)
|
|
supply_16bit_register (regcache, I386_FOP_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, ufc_opcode));
|
|
|
|
/* Store the XMM registers. */
|
|
for (i = 0; i < 8; i++)
|
|
supply_register (regcache, I386_XMM0_REGNUM + i,
|
|
buf + offsetof (usr_fcontext_t, uxmm_reg)
|
|
+ i * sizeof (struct uxmm_register));
|
|
supply_register (regcache, I386_MXCSR_REGNUM,
|
|
buf + offsetof (usr_fcontext_t, usse_mxcsr));
|
|
#endif
|
|
}
|
|
|
|
/* Implements the lynx_target_ops.arch_setup routine. */
|
|
|
|
static void
|
|
lynx_i386_arch_setup (void)
|
|
{
|
|
struct target_desc *tdesc
|
|
= i386_create_target_description (X86_XSTATE_SSE_MASK, false);
|
|
|
|
init_target_desc (tdesc, i386_expedite_regs);
|
|
|
|
lynx_tdesc = tdesc;
|
|
}
|
|
|
|
/* Description of all the x86-lynx register sets. */
|
|
|
|
struct lynx_regset_info lynx_target_regsets[] = {
|
|
/* General Purpose Registers. */
|
|
{PTRACE_GETREGS, PTRACE_SETREGS, sizeof(usr_econtext_t),
|
|
lynx_i386_fill_gregset, lynx_i386_store_gregset},
|
|
/* Floating Point Registers. */
|
|
{ PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof(usr_fcontext_t),
|
|
lynx_i386_fill_fpregset, lynx_i386_store_fpregset },
|
|
/* End of list marker. */
|
|
{0, 0, -1, NULL, NULL }
|
|
};
|
|
|
|
/* The lynx_target_ops vector for x86-lynx. */
|
|
|
|
struct lynx_target_ops the_low_target = {
|
|
lynx_i386_arch_setup,
|
|
};
|