This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: RFA: Add support for Linux native on the PowerPC E500
- From: Kevin Buettner <kevinb at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Mon, 7 Jun 2004 10:19:33 -0700
- Subject: Re: RFA: Add support for Linux native on the PowerPC E500
- Organization: Red Hat
- References: <vt2fz9ajzpd.fsf@zenia.home>
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