Properly read i386 coredump.

2010-04-21  H.J. Lu  <hongjiu.lu@intel.com>

	PR corefiles/11523
	* amd64-linux-tdep.c (amd64_linux_core_read_description): Check
	XCR0 first.

	* i386-linux-tdep.c (i386_linux_core_read_xcr0): Return 0 if
	there is no .reg-xstate section.
	(i386_linux_core_read_description): Check XCR0 first.
This commit is contained in:
H.J. Lu 2010-04-21 20:22:20 +00:00
parent a9789a6b9d
commit f335d1b395
3 changed files with 35 additions and 26 deletions

View File

@ -1,3 +1,13 @@
2010-04-21 H.J. Lu <hongjiu.lu@intel.com>
PR corefiles/11523
* amd64-linux-tdep.c (amd64_linux_core_read_description): Check
XCR0 first.
* i386-linux-tdep.c (i386_linux_core_read_xcr0): Return 0 if
there is no .reg-xstate section.
(i386_linux_core_read_description): Check XCR0 first.
2010-04-21 Mike Frysinger <vapier@gentoo.org>
* gdb/sparc-tdep.c (sparc32_store_return_value): Add gdb_assert ()

View File

@ -1269,18 +1269,15 @@ amd64_linux_core_read_description (struct gdbarch *gdbarch,
struct target_ops *target,
bfd *abfd)
{
asection *section = bfd_get_section_by_name (abfd, ".reg2");
uint64_t xcr0;
if (section == NULL)
return NULL;
/* Linux/x86-64. */
xcr0 = i386_linux_core_read_xcr0 (gdbarch, target, abfd);
if ((xcr0 & I386_XSTATE_AVX_MASK) == I386_XSTATE_AVX_MASK)
return tdesc_amd64_avx_linux;
else
return tdesc_amd64_linux;
uint64_t xcr0 = i386_linux_core_read_xcr0 (gdbarch, target, abfd);
switch ((xcr0 & I386_XSTATE_AVX_MASK))
{
case I386_XSTATE_AVX_MASK:
return tdesc_amd64_avx_linux;
default:
return tdesc_amd64_linux;
}
}
static void

View File

@ -611,7 +611,7 @@ i386_linux_core_read_xcr0 (struct gdbarch *gdbarch,
}
}
else
xcr0 = I386_XSTATE_SSE_MASK;
xcr0 = 0;
return xcr0;
}
@ -623,22 +623,24 @@ i386_linux_core_read_description (struct gdbarch *gdbarch,
struct target_ops *target,
bfd *abfd)
{
asection *section = bfd_get_section_by_name (abfd, ".reg2");
uint64_t xcr0;
if (section == NULL)
return NULL;
section = bfd_get_section_by_name (abfd, ".reg-xfp");
if (section == NULL)
return tdesc_i386_mmx_linux;
/* Linux/i386. */
xcr0 = i386_linux_core_read_xcr0 (gdbarch, target, abfd);
if ((xcr0 & I386_XSTATE_AVX_MASK) == I386_XSTATE_AVX_MASK)
return tdesc_i386_avx_linux;
else
uint64_t xcr0 = i386_linux_core_read_xcr0 (gdbarch, target, abfd);
switch ((xcr0 & I386_XSTATE_AVX_MASK))
{
case I386_XSTATE_AVX_MASK:
return tdesc_i386_avx_linux;
case I386_XSTATE_SSE_MASK:
return tdesc_i386_linux;
case I386_XSTATE_X87_MASK:
return tdesc_i386_mmx_linux;
default:
break;
}
if (bfd_get_section_by_name (abfd, ".reg-xfp") != NULL)
return tdesc_i386_linux;
else
return tdesc_i386_mmx_linux;
}
static void