mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
Support i386 without SSE.
gdb/ 2010-04-08 H.J. Lu <hongjiu.lu@intel.com> * i386-linux-nat.c (have_ptrace_getfpxregs): Initialize to -1 if HAVE_PTRACE_GETFPXREGS is defined. (i386_linux_read_description): Set have_ptrace_getfpxregs and have_ptrace_getregset to 0 if ptrace PTRACE_GETFPXREGS failed. * i386-linux-tdep.c: Include "features/i386/i386-mmx-linux.c" (i386_linux_core_read_description): Return tdesc_i386_mmx_linux if .reg-xfp section doesn't exist. (_initialize_i386_linux_tdep): Call initialize_tdesc_i386_mmx_linux. * i386-linux-tdep.h (tdesc_i386_mmx_linux): New. * i386-tdep.c: Include "features/i386/i386-mmx.c". (i386_go32_init_abi): Set tdesc to tdesc_i386_mmx. (i386_validate_tdesc_p): Make org.gnu.gdb.i386.sse optional. Set xcr0 to I386_XSTATE_X87_MASK if SSE isn't available. (i386_gdbarch_init): Update comments. (_initialize_i386_tdep): Call initialize_tdesc_i386_mmx. * common/i386-xstate.h (I386_XSTATE_X87_MASK): New. * config/djgpp/fnchange.lst: Add i386 MMX XML files. * features/Makefile (i386/i386-mmx-expedite): New. (i386/i386-mmx-linux-expedite): Likewise. ($(outdir)/i386/i386-mmx.dat): Likewise. ($(outdir)/i386/i386-mmx-linux.dat): Likewise. * features/i386/i386-mmx-linux.c: New. * features/i386/i386-mmx-linux.xml: Likewise. * features/i386/i386-mmx.c: Likewise. * features/i386/i386-mmx.xml: Likewise. * regformats/i386/i386-mmx-linux.dat: Likewise. * regformats/i386/i386-mmx.dat: Likewise. * features/Makefile (WHICH): Add i386/i386-mmx and i386/i386-mmx-linux. gdb/doc/ 2010-04-08 H.J. Lu <hongjiu.lu@intel.com> * gdb.texinfo (i386 Features): Make org.gnu.gdb.i386.avx optional. Make org.gnu.gdb.i386.avx requires org.gnu.gdb.i386.avx. gdb/gdbserver/ 2010-04-08 H.J. Lu <hongjiu.lu@intel.com> * Makefile.in (clean): Also remove i386-mmx.c i386-mmx-linux.c. (i386-mmx.o): New. (i386-mmx.c): Likewise. (i386-mmx-linux.o): Likewise. (i386-mmx-linux.c): Likewise. * configure.srv (srv_i386_regobj): Add i386-mmx.o. (srv_i386_linux_regobj): Add i386-mmx-linux.o. (srv_i386_xmlfiles): Add i386/i386-mmx.xml. (srv_i386_linux_xmlfiles): Add i386/i386-mmx-linux.xml. * linux-x86-low.c (init_registers_i386_mmx_linux): New. (x86_linux_update_xmltarget): Call init_registers_i386_mmx_linux and return if ptrace PTRACE_GETFPXREGS failed in 32bit.
This commit is contained in:
@ -37,6 +37,8 @@ void init_registers_amd64_linux (void);
|
||||
void init_registers_i386_avx_linux (void);
|
||||
/* Defined in auto-generated file amd64-avx-linux.c. */
|
||||
void init_registers_amd64_avx_linux (void);
|
||||
/* Defined in auto-generated file i386-mmx-linux.c. */
|
||||
void init_registers_i386_mmx_linux (void);
|
||||
|
||||
/* Backward compatibility for gdb without XML support. */
|
||||
|
||||
@ -828,19 +830,56 @@ static int use_xml;
|
||||
static void
|
||||
x86_linux_update_xmltarget (void)
|
||||
{
|
||||
int pid;
|
||||
struct regset_info *regset;
|
||||
static unsigned long long xcr0;
|
||||
static int have_ptrace_getregset = -1;
|
||||
#ifdef HAVE_PTRACE_GETFPXREGS
|
||||
static int have_ptrace_getfpxregs = -1;
|
||||
#endif
|
||||
|
||||
if (!current_inferior)
|
||||
return;
|
||||
|
||||
pid = pid_of (get_thread_lwp (current_inferior));
|
||||
#ifdef __x86_64__
|
||||
if (num_xmm_registers == 8)
|
||||
init_registers_i386_linux ();
|
||||
else
|
||||
init_registers_amd64_linux ();
|
||||
#else
|
||||
init_registers_i386_linux ();
|
||||
{
|
||||
# ifdef HAVE_PTRACE_GETFPXREGS
|
||||
if (have_ptrace_getfpxregs == -1)
|
||||
{
|
||||
elf_fpxregset_t fpxregs;
|
||||
|
||||
if (ptrace (PTRACE_GETFPXREGS, pid, 0, (int) &fpxregs) < 0)
|
||||
{
|
||||
have_ptrace_getfpxregs = 0;
|
||||
x86_xcr0 = I386_XSTATE_X87_MASK;
|
||||
|
||||
/* Disable PTRACE_GETFPXREGS. */
|
||||
for (regset = target_regsets;
|
||||
regset->fill_function != NULL; regset++)
|
||||
if (regset->get_request == PTRACE_GETFPXREGS)
|
||||
{
|
||||
regset->size = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
have_ptrace_getfpxregs = 1;
|
||||
}
|
||||
|
||||
if (!have_ptrace_getfpxregs)
|
||||
{
|
||||
init_registers_i386_mmx_linux ();
|
||||
return;
|
||||
}
|
||||
# endif
|
||||
init_registers_i386_linux ();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!use_xml)
|
||||
@ -863,10 +902,8 @@ x86_linux_update_xmltarget (void)
|
||||
/* Check if XSAVE extended state is supported. */
|
||||
if (have_ptrace_getregset == -1)
|
||||
{
|
||||
int pid = pid_of (get_thread_lwp (current_inferior));
|
||||
unsigned long long xstateregs[I386_XSTATE_SSE_SIZE / sizeof (long long)];
|
||||
struct iovec iov;
|
||||
struct regset_info *regset;
|
||||
|
||||
iov.iov_base = xstateregs;
|
||||
iov.iov_len = sizeof (xstateregs);
|
||||
|
Reference in New Issue
Block a user