This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH-ppc 2/5] Add VSX support for core-files


This patch adds the required support to dump VSX registers and read them
them back from a specific VSX notes section. This is in sync with the
format used by the Kernel.

--- 
2008-07-25  Luis Machado  <luisgpm@br.ibm.com>

	* ppc-linux-tdep.c (ppc_linux_regset_sections): Add new ".reg-ppc-vsx" field.
	(ppc32_linux_vsxregset): New 32-bit VSX-enabled regset.
	(ppc_linux_regset_from_core_section): Handle VSX core section.
	(ppc_linux_core_read_description): Support VSX-enabled core files.

	* corelow.c (get_core_register_section): Support VSX-enabled 
	core files.


Index: gdb/ppc-linux-tdep.c
===================================================================
--- gdb.orig/ppc-linux-tdep.c	2008-07-23 09:28:09.000000000 -0700
+++ gdb/ppc-linux-tdep.c	2008-07-23 09:31:44.000000000 -0700
@@ -496,6 +496,7 @@
   { ".reg", 268 },
   { ".reg2", 264 },
   { ".reg-ppc-vmx", 544 },
+  { ".reg-ppc-vsx", 256 },
   { NULL, 0}
 };
 
@@ -743,6 +744,13 @@
   NULL
 };
 
+static const struct regset ppc32_linux_vsxregset = {
+  &ppc32_linux_reg_offsets,
+  ppc_supply_vsxregset,
+  ppc_collect_vsxregset,
+  NULL
+};
+
 const struct regset *
 ppc_linux_gregset (int wordsize)
 {
@@ -771,6 +779,8 @@
     return &ppc32_linux_fpregset;
   if (strcmp (sect_name, ".reg-ppc-vmx") == 0)
     return &ppc32_linux_vrregset;
+  if (strcmp (sect_name, ".reg-ppc-vsx") == 0)
+    return &ppc32_linux_vsxregset;
   return NULL;
 }
 
@@ -974,6 +984,7 @@
 				 bfd *abfd)
 {
   asection *altivec = bfd_get_section_by_name (abfd, ".reg-ppc-vmx");
+  asection *vsx = bfd_get_section_by_name (abfd, ".reg-ppc-vsx");
   asection *section = bfd_get_section_by_name (abfd, ".reg");
   if (! section)
     return NULL;
@@ -981,10 +992,20 @@
   switch (bfd_section_size (abfd, section))
     {
     case 48 * 4:
-      return altivec? tdesc_powerpc_altivec32l : tdesc_powerpc_32l;
+      if (vsx)
+	return tdesc_powerpc_vsx32l;
+      else if (altivec)
+	return tdesc_powerpc_altivec32l;
+      else
+	return tdesc_powerpc_32l;
 
     case 48 * 8:
-      return altivec? tdesc_powerpc_altivec64l : tdesc_powerpc_64l;
+      if (vsx)
+	return tdesc_powerpc_vsx64l;
+      else if (altivec)
+	return tdesc_powerpc_altivec64l;
+      else
+	return tdesc_powerpc_64l;
 
     default:
       return NULL;
Index: gdb/corelow.c
===================================================================
--- gdb.orig/corelow.c	2008-07-23 09:28:09.000000000 -0700
+++ gdb/corelow.c	2008-07-23 09:31:44.000000000 -0700
@@ -499,6 +499,8 @@
 			     ".reg-xfp", 3, "extended floating-point", 0);
   get_core_register_section (regcache,
   			     ".reg-ppc-vmx", 3, "ppc Altivec", 0);
+  get_core_register_section (regcache,
+			     ".reg-ppc-vsx", 4, "POWER7 VSX", 0);
 
   /* Supply dummy value for all registers not found in the core.  */
   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]