This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH-ppc 2/5] Add VSX support for core-files
- From: Luis Machado <luisgpm at linux dot vnet dot ibm dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 08 Aug 2008 12:17:29 -0300
- Subject: Re: [PATCH-ppc 2/5] Add VSX support for core-files
- References: <1217016947.29012.76.camel@gargoyle>
- Reply-to: luisgpm at linux dot vnet dot ibm dot com
Ping?
On Fri, 2008-07-25 at 17:15 -0300, Luis Machado wrote:
> 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++)
>
>