X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fmipsv4-nat.c;h=901f9b0e39fde640e2cf16a39a326998a3f32b60;hb=2e834e497e9bb0cdae7f71397d3404f4ed0f9f35;hp=df4b6e9a090e36b66eb4f61d6732cdcfc5eca607;hpb=8b0b198558d0fc981f129e2e3dcbe00a0f308449;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/mipsv4-nat.c b/gdb/mipsv4-nat.c index df4b6e9a09..901f9b0e39 100644 --- a/gdb/mipsv4-nat.c +++ b/gdb/mipsv4-nat.c @@ -1,31 +1,36 @@ /* Native support for MIPS running SVR4, for GDB. - Copyright 1994, 1995 Free Software Foundation, Inc. + Copyright 1994, 1995, 2000, 2001 Free Software Foundation, Inc. -This file is part of GDB. + This file is part of GDB. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "defs.h" #include "inferior.h" #include "gdbcore.h" #include "target.h" +#include "regcache.h" #include #include #include /* For JB_XXX. */ +/* Prototypes for supply_gregset etc. */ +#include "gregset.h" + /* Size of elements in jmpbuf */ #define JB_ELEMENT_SIZE 4 @@ -37,21 +42,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ * any MIPS SVR4 target. */ -void -supply_gregset (gregsetp) - gregset_t *gregsetp; +void +supply_gregset (gregset_t *gregsetp) { register int regi; register greg_t *regp = &(*gregsetp)[0]; - static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0}; + static char zerobuf[MAX_REGISTER_RAW_SIZE] = + {0}; for (regi = 0; regi <= CXT_RA; regi++) - supply_register (regi, (char *)(regp + regi)); + supply_register (regi, (char *) (regp + regi)); - supply_register (PC_REGNUM, (char *)(regp + CXT_EPC)); - supply_register (HI_REGNUM, (char *)(regp + CXT_MDHI)); - supply_register (LO_REGNUM, (char *)(regp + CXT_MDLO)); - supply_register (CAUSE_REGNUM, (char *)(regp + CXT_CAUSE)); + supply_register (PC_REGNUM, (char *) (regp + CXT_EPC)); + supply_register (HI_REGNUM, (char *) (regp + CXT_MDHI)); + supply_register (LO_REGNUM, (char *) (regp + CXT_MDLO)); + supply_register (CAUSE_REGNUM, (char *) (regp + CXT_CAUSE)); /* Fill inaccessible registers with zero. */ supply_register (PS_REGNUM, zerobuf); @@ -63,28 +68,26 @@ supply_gregset (gregsetp) } void -fill_gregset (gregsetp, regno) - gregset_t *gregsetp; - int regno; +fill_gregset (gregset_t *gregsetp, int regno) { int regi; register greg_t *regp = &(*gregsetp)[0]; for (regi = 0; regi <= 32; regi++) if ((regno == -1) || (regno == regi)) - *(regp + regi) = *(greg_t *) ®isters[REGISTER_BYTE (regi)]; + *(regp + regi) = *(greg_t *) & registers[REGISTER_BYTE (regi)]; if ((regno == -1) || (regno == PC_REGNUM)) - *(regp + CXT_EPC) = *(greg_t *) ®isters[REGISTER_BYTE (PC_REGNUM)]; + *(regp + CXT_EPC) = *(greg_t *) & registers[REGISTER_BYTE (PC_REGNUM)]; if ((regno == -1) || (regno == CAUSE_REGNUM)) - *(regp + CXT_CAUSE) = *(greg_t *) ®isters[REGISTER_BYTE (CAUSE_REGNUM)]; + *(regp + CXT_CAUSE) = *(greg_t *) & registers[REGISTER_BYTE (CAUSE_REGNUM)]; if ((regno == -1) || (regno == HI_REGNUM)) - *(regp + CXT_MDHI) = *(greg_t *) ®isters[REGISTER_BYTE (HI_REGNUM)]; + *(regp + CXT_MDHI) = *(greg_t *) & registers[REGISTER_BYTE (HI_REGNUM)]; if ((regno == -1) || (regno == LO_REGNUM)) - *(regp + CXT_MDLO) = *(greg_t *) ®isters[REGISTER_BYTE (LO_REGNUM)]; + *(regp + CXT_MDLO) = *(greg_t *) & registers[REGISTER_BYTE (LO_REGNUM)]; } /* @@ -96,26 +99,24 @@ fill_gregset (gregsetp, regno) */ void -supply_fpregset (fpregsetp) - fpregset_t *fpregsetp; +supply_fpregset (fpregset_t *fpregsetp) { register int regi; - static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0}; + static char zerobuf[MAX_REGISTER_RAW_SIZE] = + {0}; for (regi = 0; regi < 32; regi++) supply_register (FP0_REGNUM + regi, - (char *)&fpregsetp->fp_r.fp_regs[regi]); + (char *) &fpregsetp->fp_r.fp_regs[regi]); - supply_register (FCRCS_REGNUM, (char *)&fpregsetp->fp_csr); + supply_register (FCRCS_REGNUM, (char *) &fpregsetp->fp_csr); /* FIXME: how can we supply FCRIR_REGNUM? The ABI doesn't tell us. */ supply_register (FCRIR_REGNUM, zerobuf); } void -fill_fpregset (fpregsetp, regno) - fpregset_t *fpregsetp; - int regno; +fill_fpregset (fpregset_t *fpregsetp, int regno) { int regi; char *from, *to; @@ -126,12 +127,12 @@ fill_fpregset (fpregsetp, regno) { from = (char *) ®isters[REGISTER_BYTE (regi)]; to = (char *) &(fpregsetp->fp_r.fp_regs[regi - FP0_REGNUM]); - memcpy(to, from, REGISTER_RAW_SIZE (regi)); + memcpy (to, from, REGISTER_RAW_SIZE (regi)); } } if ((regno == -1) || (regno == FCRCS_REGNUM)) - fpregsetp->fp_csr = *(unsigned *) ®isters[REGISTER_BYTE(FCRCS_REGNUM)]; + fpregsetp->fp_csr = *(unsigned *) ®isters[REGISTER_BYTE (FCRCS_REGNUM)]; } @@ -141,12 +142,12 @@ fill_fpregset (fpregsetp, regno) This routine returns true on success. */ int -get_longjmp_target (pc) - CORE_ADDR *pc; +get_longjmp_target (CORE_ADDR *pc) { - char buf[TARGET_PTR_BIT / TARGET_CHAR_BIT]; + char *buf; CORE_ADDR jb_addr; + buf = alloca (TARGET_PTR_BIT / TARGET_CHAR_BIT); jb_addr = read_register (A0_REGNUM); if (target_read_memory (jb_addr + _JB_PC * JB_ELEMENT_SIZE, buf,