* linux-nat.c (linux_nat_do_thread_registers): Use section size
from gdbarch_core_regset_sections also for .reg if present. * amd64-linux-tdep.c (amd64_linux_regset_sections): Fix incorrect section size for .reg. * ppc-linux-tdep.c (ppc_linux_vsx_regset_sections): Likewise. (ppc_linux_vmx_regset_sections): Likewise. (ppc_linux_fp_regset_sections): Likewise. (ppc64_linux_vsx_regset_sections): New variable. (ppc64_linux_vmx_regset_sections): Likewise. (ppc64_linux_fp_regset_sections): Likewise. (ppc_linux_init_abi): Install core_regset_section lists appropriate for current word size.
This commit is contained in:
parent
9176f4dfdc
commit
2f2241f146
4 changed files with 98 additions and 43 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
2010-07-07 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
|
* linux-nat.c (linux_nat_do_thread_registers): Use section size
|
||||||
|
from gdbarch_core_regset_sections also for .reg if present.
|
||||||
|
|
||||||
|
* amd64-linux-tdep.c (amd64_linux_regset_sections): Fix incorrect
|
||||||
|
section size for .reg.
|
||||||
|
* ppc-linux-tdep.c (ppc_linux_vsx_regset_sections): Likewise.
|
||||||
|
(ppc_linux_vmx_regset_sections): Likewise.
|
||||||
|
(ppc_linux_fp_regset_sections): Likewise.
|
||||||
|
(ppc64_linux_vsx_regset_sections): New variable.
|
||||||
|
(ppc64_linux_vmx_regset_sections): Likewise.
|
||||||
|
(ppc64_linux_fp_regset_sections): Likewise.
|
||||||
|
(ppc_linux_init_abi): Install core_regset_section lists appropriate
|
||||||
|
for current word size.
|
||||||
|
|
||||||
2010-07-06 Joel Brobecker <brobecker@adacore.com>
|
2010-07-06 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* server.c (myresume): Make static.
|
* server.c (myresume): Make static.
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
/* Supported register note sections. */
|
/* Supported register note sections. */
|
||||||
static struct core_regset_section amd64_linux_regset_sections[] =
|
static struct core_regset_section amd64_linux_regset_sections[] =
|
||||||
{
|
{
|
||||||
{ ".reg", 144, "general-purpose" },
|
{ ".reg", 27 * 8, "general-purpose" },
|
||||||
{ ".reg2", 512, "floating-point" },
|
{ ".reg2", 512, "floating-point" },
|
||||||
{ ".reg-xstate", I386_XSTATE_MAX_SIZE, "XSAVE extended state" },
|
{ ".reg-xstate", I386_XSTATE_MAX_SIZE, "XSAVE extended state" },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
|
|
|
@ -4134,8 +4134,6 @@ linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
|
||||||
char *note_data, int *note_size,
|
char *note_data, int *note_size,
|
||||||
enum target_signal stop_signal)
|
enum target_signal stop_signal)
|
||||||
{
|
{
|
||||||
gdb_gregset_t gregs;
|
|
||||||
gdb_fpregset_t fpregs;
|
|
||||||
unsigned long lwp = ptid_get_lwp (ptid);
|
unsigned long lwp = ptid_get_lwp (ptid);
|
||||||
struct gdbarch *gdbarch = target_gdbarch;
|
struct gdbarch *gdbarch = target_gdbarch;
|
||||||
struct regcache *regcache = get_thread_arch_regcache (ptid, gdbarch);
|
struct regcache *regcache = get_thread_arch_regcache (ptid, gdbarch);
|
||||||
|
@ -4153,21 +4151,6 @@ linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
|
||||||
core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
|
core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
|
||||||
sect_list = gdbarch_core_regset_sections (gdbarch);
|
sect_list = gdbarch_core_regset_sections (gdbarch);
|
||||||
|
|
||||||
if (core_regset_p
|
|
||||||
&& (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
|
|
||||||
sizeof (gregs))) != NULL
|
|
||||||
&& regset->collect_regset != NULL)
|
|
||||||
regset->collect_regset (regset, regcache, -1,
|
|
||||||
&gregs, sizeof (gregs));
|
|
||||||
else
|
|
||||||
fill_gregset (regcache, &gregs, -1);
|
|
||||||
|
|
||||||
note_data = (char *) elfcore_write_prstatus (obfd,
|
|
||||||
note_data,
|
|
||||||
note_size,
|
|
||||||
lwp,
|
|
||||||
stop_signal, &gregs);
|
|
||||||
|
|
||||||
/* The loop below uses the new struct core_regset_section, which stores
|
/* The loop below uses the new struct core_regset_section, which stores
|
||||||
the supported section names and sizes for the core file. Note that
|
the supported section names and sizes for the core file. Note that
|
||||||
note PRSTATUS needs to be treated specially. But the other notes are
|
note PRSTATUS needs to be treated specially. But the other notes are
|
||||||
|
@ -4175,12 +4158,6 @@ linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
|
||||||
if (core_regset_p && sect_list != NULL)
|
if (core_regset_p && sect_list != NULL)
|
||||||
while (sect_list->sect_name != NULL)
|
while (sect_list->sect_name != NULL)
|
||||||
{
|
{
|
||||||
/* .reg was already handled above. */
|
|
||||||
if (strcmp (sect_list->sect_name, ".reg") == 0)
|
|
||||||
{
|
|
||||||
sect_list++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
regset = gdbarch_regset_from_core_section (gdbarch,
|
regset = gdbarch_regset_from_core_section (gdbarch,
|
||||||
sect_list->sect_name,
|
sect_list->sect_name,
|
||||||
sect_list->size);
|
sect_list->size);
|
||||||
|
@ -4188,12 +4165,16 @@ linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
|
||||||
gdb_regset = xmalloc (sect_list->size);
|
gdb_regset = xmalloc (sect_list->size);
|
||||||
regset->collect_regset (regset, regcache, -1,
|
regset->collect_regset (regset, regcache, -1,
|
||||||
gdb_regset, sect_list->size);
|
gdb_regset, sect_list->size);
|
||||||
note_data = (char *) elfcore_write_register_note (obfd,
|
|
||||||
note_data,
|
if (strcmp (sect_list->sect_name, ".reg") == 0)
|
||||||
note_size,
|
note_data = (char *) elfcore_write_prstatus
|
||||||
sect_list->sect_name,
|
(obfd, note_data, note_size,
|
||||||
gdb_regset,
|
lwp, stop_signal, gdb_regset);
|
||||||
sect_list->size);
|
else
|
||||||
|
note_data = (char *) elfcore_write_register_note
|
||||||
|
(obfd, note_data, note_size,
|
||||||
|
sect_list->sect_name, gdb_regset,
|
||||||
|
sect_list->size);
|
||||||
xfree (gdb_regset);
|
xfree (gdb_regset);
|
||||||
sect_list++;
|
sect_list++;
|
||||||
}
|
}
|
||||||
|
@ -4203,6 +4184,24 @@ linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
|
||||||
the new support, the code below should be deleted. */
|
the new support, the code below should be deleted. */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
gdb_gregset_t gregs;
|
||||||
|
gdb_fpregset_t fpregs;
|
||||||
|
|
||||||
|
if (core_regset_p
|
||||||
|
&& (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
|
||||||
|
sizeof (gregs))) != NULL
|
||||||
|
&& regset->collect_regset != NULL)
|
||||||
|
regset->collect_regset (regset, regcache, -1,
|
||||||
|
&gregs, sizeof (gregs));
|
||||||
|
else
|
||||||
|
fill_gregset (regcache, &gregs, -1);
|
||||||
|
|
||||||
|
note_data = (char *) elfcore_write_prstatus (obfd,
|
||||||
|
note_data,
|
||||||
|
note_size,
|
||||||
|
lwp,
|
||||||
|
stop_signal, &gregs);
|
||||||
|
|
||||||
if (core_regset_p
|
if (core_regset_p
|
||||||
&& (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
|
&& (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
|
||||||
sizeof (fpregs))) != NULL
|
sizeof (fpregs))) != NULL
|
||||||
|
|
|
@ -516,7 +516,7 @@ ppc64_standard_linkage1_target (struct frame_info *frame,
|
||||||
|
|
||||||
static struct core_regset_section ppc_linux_vsx_regset_sections[] =
|
static struct core_regset_section ppc_linux_vsx_regset_sections[] =
|
||||||
{
|
{
|
||||||
{ ".reg", 268, "general-purpose" },
|
{ ".reg", 48 * 4, "general-purpose" },
|
||||||
{ ".reg2", 264, "floating-point" },
|
{ ".reg2", 264, "floating-point" },
|
||||||
{ ".reg-ppc-vmx", 544, "ppc Altivec" },
|
{ ".reg-ppc-vmx", 544, "ppc Altivec" },
|
||||||
{ ".reg-ppc-vsx", 256, "POWER7 VSX" },
|
{ ".reg-ppc-vsx", 256, "POWER7 VSX" },
|
||||||
|
@ -525,7 +525,7 @@ static struct core_regset_section ppc_linux_vsx_regset_sections[] =
|
||||||
|
|
||||||
static struct core_regset_section ppc_linux_vmx_regset_sections[] =
|
static struct core_regset_section ppc_linux_vmx_regset_sections[] =
|
||||||
{
|
{
|
||||||
{ ".reg", 268, "general-purpose" },
|
{ ".reg", 48 * 4, "general-purpose" },
|
||||||
{ ".reg2", 264, "floating-point" },
|
{ ".reg2", 264, "floating-point" },
|
||||||
{ ".reg-ppc-vmx", 544, "ppc Altivec" },
|
{ ".reg-ppc-vmx", 544, "ppc Altivec" },
|
||||||
{ NULL, 0}
|
{ NULL, 0}
|
||||||
|
@ -533,7 +533,31 @@ static struct core_regset_section ppc_linux_vmx_regset_sections[] =
|
||||||
|
|
||||||
static struct core_regset_section ppc_linux_fp_regset_sections[] =
|
static struct core_regset_section ppc_linux_fp_regset_sections[] =
|
||||||
{
|
{
|
||||||
{ ".reg", 268, "general-purpose" },
|
{ ".reg", 48 * 4, "general-purpose" },
|
||||||
|
{ ".reg2", 264, "floating-point" },
|
||||||
|
{ NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct core_regset_section ppc64_linux_vsx_regset_sections[] =
|
||||||
|
{
|
||||||
|
{ ".reg", 48 * 8, "general-purpose" },
|
||||||
|
{ ".reg2", 264, "floating-point" },
|
||||||
|
{ ".reg-ppc-vmx", 544, "ppc Altivec" },
|
||||||
|
{ ".reg-ppc-vsx", 256, "POWER7 VSX" },
|
||||||
|
{ NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct core_regset_section ppc64_linux_vmx_regset_sections[] =
|
||||||
|
{
|
||||||
|
{ ".reg", 48 * 8, "general-purpose" },
|
||||||
|
{ ".reg2", 264, "floating-point" },
|
||||||
|
{ ".reg-ppc-vmx", 544, "ppc Altivec" },
|
||||||
|
{ NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct core_regset_section ppc64_linux_fp_regset_sections[] =
|
||||||
|
{
|
||||||
|
{ ".reg", 48 * 8, "general-purpose" },
|
||||||
{ ".reg2", 264, "floating-point" },
|
{ ".reg2", 264, "floating-point" },
|
||||||
{ NULL, 0}
|
{ NULL, 0}
|
||||||
};
|
};
|
||||||
|
@ -1507,6 +1531,19 @@ ppc_linux_init_abi (struct gdbarch_info info,
|
||||||
set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpcle");
|
set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpcle");
|
||||||
else
|
else
|
||||||
set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpc");
|
set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpc");
|
||||||
|
|
||||||
|
/* Supported register sections. */
|
||||||
|
if (tdesc_find_feature (info.target_desc,
|
||||||
|
"org.gnu.gdb.power.vsx"))
|
||||||
|
set_gdbarch_core_regset_sections (gdbarch,
|
||||||
|
ppc_linux_vsx_regset_sections);
|
||||||
|
else if (tdesc_find_feature (info.target_desc,
|
||||||
|
"org.gnu.gdb.power.altivec"))
|
||||||
|
set_gdbarch_core_regset_sections (gdbarch,
|
||||||
|
ppc_linux_vmx_regset_sections);
|
||||||
|
else
|
||||||
|
set_gdbarch_core_regset_sections (gdbarch,
|
||||||
|
ppc_linux_fp_regset_sections);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tdep->wordsize == 8)
|
if (tdep->wordsize == 8)
|
||||||
|
@ -1533,20 +1570,23 @@ ppc_linux_init_abi (struct gdbarch_info info,
|
||||||
set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpcle");
|
set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpcle");
|
||||||
else
|
else
|
||||||
set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpc");
|
set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpc");
|
||||||
|
|
||||||
|
/* Supported register sections. */
|
||||||
|
if (tdesc_find_feature (info.target_desc,
|
||||||
|
"org.gnu.gdb.power.vsx"))
|
||||||
|
set_gdbarch_core_regset_sections (gdbarch,
|
||||||
|
ppc64_linux_vsx_regset_sections);
|
||||||
|
else if (tdesc_find_feature (info.target_desc,
|
||||||
|
"org.gnu.gdb.power.altivec"))
|
||||||
|
set_gdbarch_core_regset_sections (gdbarch,
|
||||||
|
ppc64_linux_vmx_regset_sections);
|
||||||
|
else
|
||||||
|
set_gdbarch_core_regset_sections (gdbarch,
|
||||||
|
ppc64_linux_fp_regset_sections);
|
||||||
}
|
}
|
||||||
set_gdbarch_regset_from_core_section (gdbarch, ppc_linux_regset_from_core_section);
|
set_gdbarch_regset_from_core_section (gdbarch, ppc_linux_regset_from_core_section);
|
||||||
set_gdbarch_core_read_description (gdbarch, ppc_linux_core_read_description);
|
set_gdbarch_core_read_description (gdbarch, ppc_linux_core_read_description);
|
||||||
|
|
||||||
/* Supported register sections. */
|
|
||||||
if (tdesc_find_feature (info.target_desc,
|
|
||||||
"org.gnu.gdb.power.vsx"))
|
|
||||||
set_gdbarch_core_regset_sections (gdbarch, ppc_linux_vsx_regset_sections);
|
|
||||||
else if (tdesc_find_feature (info.target_desc,
|
|
||||||
"org.gnu.gdb.power.altivec"))
|
|
||||||
set_gdbarch_core_regset_sections (gdbarch, ppc_linux_vmx_regset_sections);
|
|
||||||
else
|
|
||||||
set_gdbarch_core_regset_sections (gdbarch, ppc_linux_fp_regset_sections);
|
|
||||||
|
|
||||||
/* Enable TLS support. */
|
/* Enable TLS support. */
|
||||||
set_gdbarch_fetch_tls_load_module_address (gdbarch,
|
set_gdbarch_fetch_tls_load_module_address (gdbarch,
|
||||||
svr4_fetch_objfile_link_map);
|
svr4_fetch_objfile_link_map);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue