This is the mail archive of the gdb-patches@sources.redhat.com 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: RFA: Add support for Linux native on the PowerPC E500


On 05 Jun 2004 01:17:34 -0500
Jim Blandy <jimb@redhat.com> wrote:

> 2004-06-02  Jim Blandy  <jimb@redhat.com>
> 
> 	Add native Linux support for the PowerPC E500.
> 	* ppc-tdep.h (struct gdbarch_tdep): New member: 'ppc_gprs_pseudo_p'.
> 	* rs6000-tdep.c (rs6000_gdbarch_init): Initialize it to false on
> 	all architectures except the E500.
> 	* ppc-linux-nat.c: (PTRACE_GETEVRREGS, PTRACE_SETEVRREGS): New
> 	#definitions.
> 	(struct gdb_evrregset_t): New type.
> 	(have_ptrace_getsetevrregs): New variable.
> 	(get_spe_registers, read_spliced_spe_reg, fetch_spe_register, 
> 	fetch_spe_registers): New functions.
> 	(fetch_register): Call fetch_spe_register as appropriate.
> 	Assert that we're only passed raw register numbers.
> 	(fetch_ppc_registers): Call fetch_spe_registers as appropriate.
> 	Don't fetch gprs if they're pseudoregisters.
> 	(set_spe_registers, write_spliced_spe_reg, store_spe_register,
> 	store_spe_registers): New functions.
> 	(store_register): Call store_spe_register as appropriate.
> 	Assert that we're only passed raw register numbers.
> 	(store_ppc_registers): Call store_spe_registers as appropriate.
> 	Don't store gprs if they're pseudoregisters.

Okay, except for:

> *************** store_register (int tid, int regno)
> *** 413,423 ****
> --- 764,784 ----
>     size_t bytes_to_transfer;
>     char buf[MAX_REGISTER_SIZE];
>   
> +   /* Sanity check: this function should only be called to store raw
> +      registers' values, never pseudoregisters' values.  */
> +   if (tdep->ppc_gp0_regnum <= regno
> +       && regno < tdep->ppc_gp0_regnum + ppc_num_gprs)
> +     gdb_assert (! tdep->ppc_gprs_pseudo_p);
> + 
>     if (altivec_register_p (regno))
>       {
>         store_altivec_register (tid, regno);
>         return;
>       }
> +   else if (spe_register_p (regno))
> +     {
> +       store_spe_register (tid, regno);
> +     }

Is an early `return' needed after the call to store_spe_register()?
(I noticed that the altivec case does this.  Also, the corresponding
code in fetch_register() does this.)

Kevin


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