diff options
Diffstat (limited to 'gdb/m88k-nat.c')
-rw-r--r-- | gdb/m88k-nat.c | 187 |
1 files changed, 97 insertions, 90 deletions
diff --git a/gdb/m88k-nat.c b/gdb/m88k-nat.c index 27d72544606..ed9dfffc306 100644 --- a/gdb/m88k-nat.c +++ b/gdb/m88k-nat.c @@ -1,21 +1,22 @@ /* Native-dependent Motorola 88xxx support for GDB, the GNU Debugger. Copyright 1988, 1990, 1991, 1992 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 "frame.h" @@ -54,7 +55,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define SFIP_OFFSET ((char *)&u.pt_sigframe.dg_sigframe.sc_sfip - (char *)&u) #endif -extern int have_symbol_file_p(); +extern int have_symbol_file_p (); extern jmp_buf stack_jmp; @@ -62,7 +63,7 @@ extern int errno; void fetch_inferior_registers (regno) - int regno; /* Original value discarded */ + int regno; /* Original value discarded */ { register unsigned int regaddr; char buf[MAX_REGISTER_RAW_SIZE]; @@ -71,33 +72,33 @@ fetch_inferior_registers (regno) struct USER u; unsigned int offset; - offset = (char *) &u.pt_r0 - (char *) &u; - regaddr = offset; /* byte offset to r0;*/ + offset = (char *) &u.pt_r0 - (char *) &u; + regaddr = offset; /* byte offset to r0; */ /* offset = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) offset, 0) - KERNEL_U_ADDR; */ for (regno = 0; regno < NUM_REGS; regno++) { - /*regaddr = register_addr (regno, offset);*/ - /* 88k enhancement */ - + /*regaddr = register_addr (regno, offset); */ + /* 88k enhancement */ + for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int)) - { - *(int *) &buf[i] = ptrace (3, inferior_pid, + { + *(int *) &buf[i] = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) regaddr, 0); - regaddr += sizeof (int); - } + regaddr += sizeof (int); + } supply_register (regno, buf); } - /* now load up registers 36 - 38; special pc registers */ - *(int *) &buf[0] = ptrace (3,inferior_pid, - (PTRACE_ARG3_TYPE) SXIP_OFFSET ,0); - supply_register (SXIP_REGNUM, buf); - *(int *) &buf[0] = ptrace (3, inferior_pid, - (PTRACE_ARG3_TYPE) SNIP_OFFSET,0); - supply_register (SNIP_REGNUM, buf); - *(int *) &buf[0] = ptrace (3, inferior_pid, - (PTRACE_ARG3_TYPE) SFIP_OFFSET,0); - supply_register (SFIP_REGNUM, buf); + /* now load up registers 36 - 38; special pc registers */ + *(int *) &buf[0] = ptrace (3, inferior_pid, + (PTRACE_ARG3_TYPE) SXIP_OFFSET, 0); + supply_register (SXIP_REGNUM, buf); + *(int *) &buf[0] = ptrace (3, inferior_pid, + (PTRACE_ARG3_TYPE) SNIP_OFFSET, 0); + supply_register (SNIP_REGNUM, buf); + *(int *) &buf[0] = ptrace (3, inferior_pid, + (PTRACE_ARG3_TYPE) SFIP_OFFSET, 0); + supply_register (SFIP_REGNUM, buf); } /* Store our register values back into the inferior. @@ -124,7 +125,7 @@ store_inferior_registers (regno) { /* regaddr = register_addr (regno, offset); */ if (regno < PC_REGNUM) - { + { regaddr = offset + regno * sizeof (int); errno = 0; ptrace (6, inferior_pid, @@ -137,18 +138,18 @@ store_inferior_registers (regno) } else if (regno == SXIP_REGNUM) ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) SXIP_OFFSET, read_register(regno)); + (PTRACE_ARG3_TYPE) SXIP_OFFSET, read_register (regno)); else if (regno == SNIP_REGNUM) ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) SNIP_OFFSET, read_register(regno)); + (PTRACE_ARG3_TYPE) SNIP_OFFSET, read_register (regno)); else if (regno == SFIP_REGNUM) ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) SFIP_OFFSET, read_register(regno)); + (PTRACE_ARG3_TYPE) SFIP_OFFSET, read_register (regno)); else printf_unfiltered ("Bad register number for store_inferior routine\n"); } else - { + { for (regno = 0; regno < PC_REGNUM; regno++) { /* regaddr = register_addr (regno, offset); */ @@ -162,12 +163,12 @@ store_inferior_registers (regno) perror_with_name (buf); } } - ptrace (6,inferior_pid, - (PTRACE_ARG3_TYPE) SXIP_OFFSET,read_register(SXIP_REGNUM)); - ptrace (6,inferior_pid, - (PTRACE_ARG3_TYPE) SNIP_OFFSET,read_register(SNIP_REGNUM)); - ptrace (6,inferior_pid, - (PTRACE_ARG3_TYPE) SFIP_OFFSET,read_register(SFIP_REGNUM)); + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) SXIP_OFFSET, read_register (SXIP_REGNUM)); + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) SNIP_OFFSET, read_register (SNIP_REGNUM)); + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) SFIP_OFFSET, read_register (SFIP_REGNUM)); } } @@ -212,19 +213,25 @@ m88k_register_u_addr (blockend, regnum) case 30: case 31: return (ustart + ((int) &u.pt_r0 - (int) &u) + REGISTER_SIZE * regnum); - case PSR_REGNUM: return (ustart + ((int) &u.pt_psr - (int) &u)); - case FPSR_REGNUM: return (ustart + ((int) &u.pt_fpsr - (int) &u)); - case FPCR_REGNUM: return (ustart + ((int) &u.pt_fpcr - (int) &u)); - case SXIP_REGNUM: return (ustart + SXIP_OFFSET); - case SNIP_REGNUM: return (ustart + SNIP_OFFSET); - case SFIP_REGNUM: return (ustart + SFIP_OFFSET); - default: - if (regnum < NUM_REGS) - /* The register is one of those which is not defined... - give it zero */ - return (ustart + ((int) &u.pt_r0 - (int) &u)); - else - return (blockend + REGISTER_SIZE * regnum); + case PSR_REGNUM: + return (ustart + ((int) &u.pt_psr - (int) &u)); + case FPSR_REGNUM: + return (ustart + ((int) &u.pt_fpsr - (int) &u)); + case FPCR_REGNUM: + return (ustart + ((int) &u.pt_fpcr - (int) &u)); + case SXIP_REGNUM: + return (ustart + SXIP_OFFSET); + case SNIP_REGNUM: + return (ustart + SNIP_OFFSET); + case SFIP_REGNUM: + return (ustart + SFIP_OFFSET); + default: + if (regnum < NUM_REGS) + /* The register is one of those which is not defined... + give it zero */ + return (ustart + ((int) &u.pt_r0 - (int) &u)); + else + return (blockend + REGISTER_SIZE * regnum); } } @@ -233,25 +240,25 @@ m88k_register_u_addr (blockend, regnum) #include <sys/procfs.h> /* Given a pointer to a general register set in /proc format (gregset_t *), - unpack the register contents and supply them as gdb's idea of the current - register values. */ + unpack the register contents and supply them as gdb's idea of the current + register values. */ void supply_gregset (gregsetp) gregset_t *gregsetp; { - register int regi; - register greg_t *regp = (greg_t *) gregsetp; - - for (regi=0; regi <= SP_REGNUM; regi++) - supply_register (regi, (char *) (regp + regi)); - - supply_register (SXIP_REGNUM, (char *) (regp + R_XIP)); - supply_register (SNIP_REGNUM, (char *) (regp + R_NIP)); - supply_register (SFIP_REGNUM, (char *) (regp + R_FIP)); - supply_register (PSR_REGNUM, (char *) (regp + R_PSR)); - supply_register (FPSR_REGNUM, (char *) (regp + R_FPSR)); - supply_register (FPCR_REGNUM, (char *) (regp + R_FPCR)); + register int regi; + register greg_t *regp = (greg_t *) gregsetp; + + for (regi = 0; regi <= SP_REGNUM; regi++) + supply_register (regi, (char *) (regp + regi)); + + supply_register (SXIP_REGNUM, (char *) (regp + R_XIP)); + supply_register (SNIP_REGNUM, (char *) (regp + R_NIP)); + supply_register (SFIP_REGNUM, (char *) (regp + R_FIP)); + supply_register (PSR_REGNUM, (char *) (regp + R_PSR)); + supply_register (FPSR_REGNUM, (char *) (regp + R_FPSR)); + supply_register (FPCR_REGNUM, (char *) (regp + R_FPCR)); } void @@ -259,25 +266,25 @@ fill_gregset (gregsetp, regno) gregset_t *gregsetp; int regno; { - int regi; - register greg_t *regp = (greg_t *) gregsetp; - - for (regi = 0 ; regi <= R_R31 ; regi++) - if ((regno == -1) || (regno == regi)) - *(regp + regi) = *(int *) ®isters[REGISTER_BYTE(regi)]; - - if ((regno == -1) || (regno == SXIP_REGNUM)) - *(regp + R_XIP) = *(int *) ®isters[REGISTER_BYTE(SXIP_REGNUM)]; - if ((regno == -1) || (regno == SNIP_REGNUM)) - *(regp + R_NIP) = *(int *) ®isters[REGISTER_BYTE(SNIP_REGNUM)]; - if ((regno == -1) || (regno == SFIP_REGNUM)) - *(regp + R_FIP) = *(int *) ®isters[REGISTER_BYTE(SFIP_REGNUM)]; - if ((regno == -1) || (regno == PSR_REGNUM)) - *(regp + R_PSR) = *(int *) ®isters[REGISTER_BYTE(PSR_REGNUM)]; - if ((regno == -1) || (regno == FPSR_REGNUM)) - *(regp + R_FPSR) = *(int *) ®isters[REGISTER_BYTE(FPSR_REGNUM)]; - if ((regno == -1) || (regno == FPCR_REGNUM)) - *(regp + R_FPCR) = *(int *) ®isters[REGISTER_BYTE(FPCR_REGNUM)]; + int regi; + register greg_t *regp = (greg_t *) gregsetp; + + for (regi = 0; regi <= R_R31; regi++) + if ((regno == -1) || (regno == regi)) + *(regp + regi) = *(int *) ®isters[REGISTER_BYTE (regi)]; + + if ((regno == -1) || (regno == SXIP_REGNUM)) + *(regp + R_XIP) = *(int *) ®isters[REGISTER_BYTE (SXIP_REGNUM)]; + if ((regno == -1) || (regno == SNIP_REGNUM)) + *(regp + R_NIP) = *(int *) ®isters[REGISTER_BYTE (SNIP_REGNUM)]; + if ((regno == -1) || (regno == SFIP_REGNUM)) + *(regp + R_FIP) = *(int *) ®isters[REGISTER_BYTE (SFIP_REGNUM)]; + if ((regno == -1) || (regno == PSR_REGNUM)) + *(regp + R_PSR) = *(int *) ®isters[REGISTER_BYTE (PSR_REGNUM)]; + if ((regno == -1) || (regno == FPSR_REGNUM)) + *(regp + R_FPSR) = *(int *) ®isters[REGISTER_BYTE (FPSR_REGNUM)]; + if ((regno == -1) || (regno == FPCR_REGNUM)) + *(regp + R_FPCR) = *(int *) ®isters[REGISTER_BYTE (FPCR_REGNUM)]; } #endif /* USE_PROC_FS */ |