X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcore-aout.c;h=0329302dc1e360573a3b0349c0599b40c2b7b90d;hb=3f565f1eb5001c29a32b383d8b7fe05f73557db8;hp=32eef9611468f84b379f746a86c89937e292a970;hpb=a1df8e780c755671cb0c77272a1cc91155974183;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/core-aout.c b/gdb/core-aout.c index 32eef96114..0329302dc1 100644 --- a/gdb/core-aout.c +++ b/gdb/core-aout.c @@ -1,21 +1,23 @@ /* Extract registers from a "standard" core file, for GDB. - Copyright (C) 1988-1995 Free Software Foundation, Inc. + Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, + 1999, 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. */ /* Typically used on systems that have a.out format executables. corefile.c is supposed to contain the more machine-independent @@ -23,25 +25,27 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ more machine specific. */ #include "defs.h" + +#ifdef HAVE_PTRACE_H +#include +#else +#ifdef HAVE_SYS_PTRACE_H +#include +#endif +#endif + #include #include #include "gdbcore.h" -#include "value.h" /* For supply_register. */ -#include "inferior.h" /* For ARCH_NUM_REGS. */ +#include "value.h" /* For supply_register. */ +#include "regcache.h" /* These are needed on various systems to expand REGISTER_U_ADDR. */ #ifndef USG -#include +#include "gdb_dirent.h" #include #include "gdb_stat.h" #include -#ifndef NO_PTRACE_H -# ifdef PTRACE_IN_WRONG_PLACE -# include -# else /* !PTRACE_IN_WRONG_PLACE */ -# include -# endif /* !PTRACE_IN_WRONG_PLACE */ -#endif /* NO_PTRACE_H */ #endif #ifndef CORE_REGISTER_ADDR @@ -52,31 +56,32 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #endif +static void fetch_core_registers (char *, unsigned, int, CORE_ADDR); + +void _initialize_core_aout (void); + /* Extract the register values out of the core file and store them where `read_register' will find them. CORE_REG_SECT points to the register values themselves, read into memory. CORE_REG_SIZE is the size of that area. WHICH says which set of registers we are handling (0 = int, 2 = float - on machines where they are discontiguous). + on machines where they are discontiguous). REG_ADDR is the offset from u.u_ar0 to the register values relative to - core_reg_sect. This is used with old-fashioned core files to - locate the registers in a large upage-plus-stack ".reg" section. - Original upage address X is at location core_reg_sect+x+reg_addr. + core_reg_sect. This is used with old-fashioned core files to + locate the registers in a large upage-plus-stack ".reg" section. + Original upage address X is at location core_reg_sect+x+reg_addr. */ static void -fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) - char *core_reg_sect; - unsigned core_reg_size; - int which; - unsigned reg_addr; +fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which, + CORE_ADDR reg_addr) { - register int regno; - register unsigned int addr; + int regno; + CORE_ADDR addr; int bad_reg = -1; - register reg_ptr = -reg_addr; /* Original u.u_ar0 is -reg_addr. */ - int numregs = ARCH_NUM_REGS; + CORE_ADDR reg_ptr = -reg_addr; /* Original u.u_ar0 is -reg_addr. */ + int numregs = NUM_REGS; /* If u.u_ar0 was an absolute address in the core file, relativize it now, so we can use it as an offset into core_reg_sect. When we're done, @@ -90,17 +95,15 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) for (regno = 0; regno < numregs; regno++) { addr = CORE_REGISTER_ADDR (regno, reg_ptr); - if (addr >= core_reg_size) { - if (bad_reg < 0) - bad_reg = regno; - } else { + if (addr >= core_reg_size + && bad_reg < 0) + bad_reg = regno; + else supply_register (regno, core_reg_sect + addr); - } } + if (bad_reg >= 0) - { - error ("Register %s not found in core file.", reg_names[bad_reg]); - } + error ("Register %s not found in core file.", REGISTER_NAME (bad_reg)); } @@ -109,14 +112,12 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) /* Return the address in the core dump or inferior of register REGNO. BLOCKEND is the address of the end of the user structure. */ -unsigned int -register_addr (regno, blockend) - int regno; - int blockend; +CORE_ADDR +register_addr (int regno, CORE_ADDR blockend) { - int addr; + CORE_ADDR addr; - if (regno < 0 || regno >= ARCH_NUM_REGS) + if (regno < 0 || regno >= NUM_REGS) error ("Invalid register number %d.", regno); REGISTER_U_ADDR (addr, blockend, regno); @@ -125,19 +126,21 @@ register_addr (regno, blockend) } #endif /* REGISTER_U_ADDR */ - + /* Register that we are able to handle aout (trad-core) file formats. */ static struct core_fns aout_core_fns = { - bfd_target_unknown_flavour, - fetch_core_registers, - NULL + bfd_target_unknown_flavour, /* core_flavour */ + default_check_format, /* check_format */ + default_core_sniffer, /* core_sniffer */ + fetch_core_registers, /* core_read_registers */ + NULL /* next */ }; void -_initialize_core_aout () +_initialize_core_aout (void) { add_core_fns (&aout_core_fns); }