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]

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


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++)
> 
> 


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