2002-02-20 22:51:41 +00:00
|
|
|
/* Native-dependent code for GNU/Linux on MIPS processors.
|
2002-09-17 23:26:02 +00:00
|
|
|
|
2006-03-15 16:08:24 +00:00
|
|
|
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
|
|
|
|
Free Software Foundation, Inc.
|
2001-07-10 20:41:54 +00:00
|
|
|
|
|
|
|
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 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
|
2005-12-17 22:34:03 +00:00
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA. */
|
2001-07-10 20:41:54 +00:00
|
|
|
|
|
|
|
#include "defs.h"
|
* Makefile.in (mips_linux_tdep_h): New.
(mpis-linux-nat.o, mips-linux-tdep.o): Update.
* mips-linux-nat.c: Include "inferior.h", "mips-linux-tdep.h", and
<sys/ptrace.h>.
(have_ptrace_regsets, super_fetch_registers, super_store_registers)
(mips64_linux_regsets_fetch_registers)
(mips64_linux_regsets_store_registers, mips64_linux_fetch_registers)
(mips64_linux_store_registers): New.
(_initialize_mips_linux_nat): Override to_fetch_registers and
to_store_registers.
* mips-linux-tdep.h: New file.
* mips-linux-tdep.c: Include "mips-linux-tdep.c".
(ELF_NGREG, ELF_NFPREG, elf_greg_t, elf_gregset_t, elf_fpreg_t)
(elf_fpregset_t, FPR_BASE, PC, CAUSE, BADVADDR, MMHI, MMLO)
(FPC_CSR, FPC_EIR, EF_REG0, EF_REG31, EF_LO, EF_HI, EF_CP0_EPC)
(EF_CP0_BADVADDR, EF_CP0_STATUS, EF_CP0_CAUSE, EF_SIZE)
(MIPS64_ELF_NGREG, MIPS64_ELF_NFPREG, mips64_elf_greg_t)
(mips64_elf_gregset_t, mips64_elf_fpreg_t, mips64_elf_fpregset_t)
(MIPS64_FPR_BASE, MIPS64_PC, MIPS64_CAUSE, MIPS64_BADVADDR)
(MIPS64_MMHI, MIPS64_MMLO, MIPS64_FPC_CSR, MIPS64_FPC_EIR)
(MIPS64_EF_REG0, MIPS64_EF_REG31, MIPS64_EF_LO, MIPS64_EF_HI)
(MIPS64_EF_CP0_EPC, MIPS64_EF_CP0_BADVADDR, MIPS64_EF_CP0_STATUS)
(MIPS64_EF_CP0_CAUSE, MIPS64_EF_SIZE): Delete.
(supply_32bit_reg): Use gdb_byte.
(supply_64bit_reg): New.
(mips_supply_gregset, mips_fill_gregset, mips_supply_fpregset)
(mips_fill_fpregset, fetch_core_registers, supply_gregset)
(fill_gregset, supply_fpregset): Update for renamed types.
(mips64_supply_gregset): Use gdb_byte and supply_64bit_reg.
(mips64_fill_gregset): Make global. Handle 32-bit register
sizes.
(mips64_fill_fpregset): Make global. Use gdb_byte. Handle
FP regsets properly.
2006-03-15 17:13:36 +00:00
|
|
|
#include "inferior.h"
|
2004-02-02 03:12:32 +00:00
|
|
|
#include "mips-tdep.h"
|
* Makefile.in (ALLDEPFILES): Update.
(alpha-linux-nat.o, sparc-linux-nat.o): New rules.
(amd64-linux-nat.o, arm-linux-nat.o, hppa-linux-nat.o)
(i386-linux-nat.o, ia64-linux-nat.o, linux-nat.o, m32r-linux-nat.o)
(m68klinux-nat.o, mips-linux-nat.o, ppc-linux-nat.o, s390-nat.o)
(sparc64-linux-nat.o): Update dependencies.
* alpha-linux-nat.c, sparc-linux-nat.c: New files.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(amd64_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(amd64_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_amd64_linux_nat): Set it. Call linux_target and
add_target.
* arm-linux-nat.c (arm_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(arm_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_arm_linux_nat): Add a prototype. Use linux_target and
add_target.
* hppa-linux-nat.c (hppa_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(hppa_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_hppa_linux_nat): New function.
* i386-linux-nat.c (i386_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(i386_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(i386_linux_resume): Renamed from child_resume and made static.
(i386_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_i386_linux_nat): New function.
* i386-nat.c: Remove LINUX_CHILD_POST_STARTUP_INFERIOR #ifndef.
* ia64-linux-nat.c (ia64_linux_xfer_unwind_table): Remove.
(super_xfer_partial): New.
(ia64_linux_xfer_partial): New function. Use it.
(_initialize_ia64_linux_nat): New function.
* ia64-tdep.c (getunwind_table): Revert 2005-06-08 change; use
target_read_partial and document the problem.
* inf-ptrace.c (inf_ptrace_fetch_register): Use
CANNOT_FETCH_REGISTER. Fix some comments.
(inf_ptrace_store_register): Use CANNOT_STORE_REGISTER. Fix some
comments.
* linux-nat.c: Include "inf-ptrace.h" and "auxv.h".
(linux_ops, super_xfer_partial): New variables.
(linux_child_post_startup_inferior): Make static.
(child_post_startup_inferior): Delete.
(linux_nat_attach, linux_nat_detach, resume_callback)
(linux_nat_resume, linux_nat_wait, linux_nat_create_inferior)
(linux_nat_mourn_inferior): Use linux_ops instead of
deprecated_child_ops.
(child_wait): Do not depend on CHILD_WAIT.
(linux_nat_xfer_memory): Remove, replace by ...
(linux_nat_xfer_partial): ... this. Use linux_ops->to_xfer_partial
instead of linux_proc_xfer_memory and child_xfer_memory.
(linux_nat_fetch_registers, linux_nat_store_registers)
(linux_nat_child_post_startup_inferior): New functions.
(init_linux_nat_ops): Use the new functions.
(linux_proc_xfer_memory): Remove, replace by ...
(linux_proc_xfer_partial): ... this. Make static.
(linux_xfer_partial, linux_register_u_offset, linux_target): New
functions.
(_initialize_linux_nat): Do not modify deprecated_child_ops.
* linux-nat.h (linux_proc_xfer_memory): Remove prototype.
(struct mem_attrib, struct target_ops): Remove forward declarations.
(linux_child_post_startup_inferior): Remove prototype.
(linux_target): Add prototype.
* linux-thread-db.c (thread_db_xfer_memory): Remove, replace by ...
(thread_db_xfer_partial): ... this.
(init_thread_db_ops): Set to_xfer_partial instead of
deprecated_xfer_memory.
* m32r-linux-nat.c (m32r_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m32r_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_m32r_linux_nat): New function.
* m68klinux-nat.c (m68k_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m68k_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(old_fetch_inferior_registers, old_store_inferior_registers): Made
static.
(_initialize_m68k_linux_nat): Use linux_target and add_target.
* mips-linux-nat.c (_initialize_mips_linux_nat): New function.
* ppc-linux-nat.c (ppc_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(ppc_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_ppc_linux_nat): New function.
* s390-nat.c (s390_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(s390_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_s390_nat): New function.
* sparc64-linux-nat.c (_initialize_sparc64_linux_nat): Use
linux_target and add_target.
* config/nm-linux.h: Don't include "auxv.h".
(struct target_waitstatus, child_wait, CHILD_WAIT)
(CHILD_PID_TO_EXEC_FILE, CHILD_INSERT_FORK_CATCHPOINT)
(CHILD_INSERT_VFORK_CATCHPOINT, CHILD_INSERT_EXEC_CATCHPOINT)
(CHILD_POST_STARTUP_INFERIOR, CHILD_POST_ATTACH, CHILD_FOLLOW_FORK)
(DEPRECATED_KILL_INFERIOR, NATIVE_XFER_AUXV): Delete.
* config/alpha/alpha-linux.mh (NATDEPFILES): Replace infptrace.o
and inftarg.o with inf-ptrace.o and alpha-linux-nat.o.
* config/sparc/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with sparc-linux-nat.o.
* config/sparc/linux64.mh (NATDEPFILES): Remove infptrace.o and
inftarg.o.
* config/arm/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with inf-ptrace.o.
* config/i386/linux.mh (NATDEPFILES): Likewise.
* config/i386/linux64.mh (NATDEPFILES): Likewise.
* config/ia64/linux.mh (NATDEPFILES): Likewise.
* config/m32r/linux.mh (NATDEPFILES): Likewise.
* config/m68k/linux.mh (NATDEPFILES): Likewise.
* config/mips/linux.mh (NATDEPFILES): Likewise.
* config/pa/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Likewise.
* config/s390/s390.mh (NATDEPFILES): Likewise.
* config/i386/nm-linux.h (DEPRECATED_CHILD_RESUME): Don't define.
(LINUX_CHILD_POST_STARTUP_INFERIOR): Don't define.
* config/i386/nm-linux64.h (LINUX_CHILD_POST_STARTUP_INFERIOR):
Don't define.
* config/ia64/nm-linux.h: Don't include "target.h".
(NATIVE_XFER_UNWIND_TABLE, ia64_linux_xfer_unwind_table): Remove.
* config/djgpp/fnchange.lst: Add alpha-linux-tdep.c,
alpha-linux-nat.c, sparc-linux-tdep.c, and sparc-linux-nat.c.
2005-09-10 18:11:14 +00:00
|
|
|
#include "target.h"
|
|
|
|
#include "linux-nat.h"
|
* Makefile.in (mips_linux_tdep_h): New.
(mpis-linux-nat.o, mips-linux-tdep.o): Update.
* mips-linux-nat.c: Include "inferior.h", "mips-linux-tdep.h", and
<sys/ptrace.h>.
(have_ptrace_regsets, super_fetch_registers, super_store_registers)
(mips64_linux_regsets_fetch_registers)
(mips64_linux_regsets_store_registers, mips64_linux_fetch_registers)
(mips64_linux_store_registers): New.
(_initialize_mips_linux_nat): Override to_fetch_registers and
to_store_registers.
* mips-linux-tdep.h: New file.
* mips-linux-tdep.c: Include "mips-linux-tdep.c".
(ELF_NGREG, ELF_NFPREG, elf_greg_t, elf_gregset_t, elf_fpreg_t)
(elf_fpregset_t, FPR_BASE, PC, CAUSE, BADVADDR, MMHI, MMLO)
(FPC_CSR, FPC_EIR, EF_REG0, EF_REG31, EF_LO, EF_HI, EF_CP0_EPC)
(EF_CP0_BADVADDR, EF_CP0_STATUS, EF_CP0_CAUSE, EF_SIZE)
(MIPS64_ELF_NGREG, MIPS64_ELF_NFPREG, mips64_elf_greg_t)
(mips64_elf_gregset_t, mips64_elf_fpreg_t, mips64_elf_fpregset_t)
(MIPS64_FPR_BASE, MIPS64_PC, MIPS64_CAUSE, MIPS64_BADVADDR)
(MIPS64_MMHI, MIPS64_MMLO, MIPS64_FPC_CSR, MIPS64_FPC_EIR)
(MIPS64_EF_REG0, MIPS64_EF_REG31, MIPS64_EF_LO, MIPS64_EF_HI)
(MIPS64_EF_CP0_EPC, MIPS64_EF_CP0_BADVADDR, MIPS64_EF_CP0_STATUS)
(MIPS64_EF_CP0_CAUSE, MIPS64_EF_SIZE): Delete.
(supply_32bit_reg): Use gdb_byte.
(supply_64bit_reg): New.
(mips_supply_gregset, mips_fill_gregset, mips_supply_fpregset)
(mips_fill_fpregset, fetch_core_registers, supply_gregset)
(fill_gregset, supply_fpregset): Update for renamed types.
(mips64_supply_gregset): Use gdb_byte and supply_64bit_reg.
(mips64_fill_gregset): Make global. Handle 32-bit register
sizes.
(mips64_fill_fpregset): Make global. Use gdb_byte. Handle
FP regsets properly.
2006-03-15 17:13:36 +00:00
|
|
|
#include "mips-linux-tdep.h"
|
2001-07-10 20:41:54 +00:00
|
|
|
|
2006-03-15 16:08:24 +00:00
|
|
|
#include "gdb_proc_service.h"
|
|
|
|
|
* Makefile.in (mips_linux_tdep_h): New.
(mpis-linux-nat.o, mips-linux-tdep.o): Update.
* mips-linux-nat.c: Include "inferior.h", "mips-linux-tdep.h", and
<sys/ptrace.h>.
(have_ptrace_regsets, super_fetch_registers, super_store_registers)
(mips64_linux_regsets_fetch_registers)
(mips64_linux_regsets_store_registers, mips64_linux_fetch_registers)
(mips64_linux_store_registers): New.
(_initialize_mips_linux_nat): Override to_fetch_registers and
to_store_registers.
* mips-linux-tdep.h: New file.
* mips-linux-tdep.c: Include "mips-linux-tdep.c".
(ELF_NGREG, ELF_NFPREG, elf_greg_t, elf_gregset_t, elf_fpreg_t)
(elf_fpregset_t, FPR_BASE, PC, CAUSE, BADVADDR, MMHI, MMLO)
(FPC_CSR, FPC_EIR, EF_REG0, EF_REG31, EF_LO, EF_HI, EF_CP0_EPC)
(EF_CP0_BADVADDR, EF_CP0_STATUS, EF_CP0_CAUSE, EF_SIZE)
(MIPS64_ELF_NGREG, MIPS64_ELF_NFPREG, mips64_elf_greg_t)
(mips64_elf_gregset_t, mips64_elf_fpreg_t, mips64_elf_fpregset_t)
(MIPS64_FPR_BASE, MIPS64_PC, MIPS64_CAUSE, MIPS64_BADVADDR)
(MIPS64_MMHI, MIPS64_MMLO, MIPS64_FPC_CSR, MIPS64_FPC_EIR)
(MIPS64_EF_REG0, MIPS64_EF_REG31, MIPS64_EF_LO, MIPS64_EF_HI)
(MIPS64_EF_CP0_EPC, MIPS64_EF_CP0_BADVADDR, MIPS64_EF_CP0_STATUS)
(MIPS64_EF_CP0_CAUSE, MIPS64_EF_SIZE): Delete.
(supply_32bit_reg): Use gdb_byte.
(supply_64bit_reg): New.
(mips_supply_gregset, mips_fill_gregset, mips_supply_fpregset)
(mips_fill_fpregset, fetch_core_registers, supply_gregset)
(fill_gregset, supply_fpregset): Update for renamed types.
(mips64_supply_gregset): Use gdb_byte and supply_64bit_reg.
(mips64_fill_gregset): Make global. Handle 32-bit register
sizes.
(mips64_fill_fpregset): Make global. Use gdb_byte. Handle
FP regsets properly.
2006-03-15 17:13:36 +00:00
|
|
|
#include <sys/ptrace.h>
|
|
|
|
|
2006-03-15 16:08:24 +00:00
|
|
|
#ifndef PTRACE_GET_THREAD_AREA
|
|
|
|
#define PTRACE_GET_THREAD_AREA 25
|
|
|
|
#endif
|
|
|
|
|
* Makefile.in (mips_linux_tdep_h): New.
(mpis-linux-nat.o, mips-linux-tdep.o): Update.
* mips-linux-nat.c: Include "inferior.h", "mips-linux-tdep.h", and
<sys/ptrace.h>.
(have_ptrace_regsets, super_fetch_registers, super_store_registers)
(mips64_linux_regsets_fetch_registers)
(mips64_linux_regsets_store_registers, mips64_linux_fetch_registers)
(mips64_linux_store_registers): New.
(_initialize_mips_linux_nat): Override to_fetch_registers and
to_store_registers.
* mips-linux-tdep.h: New file.
* mips-linux-tdep.c: Include "mips-linux-tdep.c".
(ELF_NGREG, ELF_NFPREG, elf_greg_t, elf_gregset_t, elf_fpreg_t)
(elf_fpregset_t, FPR_BASE, PC, CAUSE, BADVADDR, MMHI, MMLO)
(FPC_CSR, FPC_EIR, EF_REG0, EF_REG31, EF_LO, EF_HI, EF_CP0_EPC)
(EF_CP0_BADVADDR, EF_CP0_STATUS, EF_CP0_CAUSE, EF_SIZE)
(MIPS64_ELF_NGREG, MIPS64_ELF_NFPREG, mips64_elf_greg_t)
(mips64_elf_gregset_t, mips64_elf_fpreg_t, mips64_elf_fpregset_t)
(MIPS64_FPR_BASE, MIPS64_PC, MIPS64_CAUSE, MIPS64_BADVADDR)
(MIPS64_MMHI, MIPS64_MMLO, MIPS64_FPC_CSR, MIPS64_FPC_EIR)
(MIPS64_EF_REG0, MIPS64_EF_REG31, MIPS64_EF_LO, MIPS64_EF_HI)
(MIPS64_EF_CP0_EPC, MIPS64_EF_CP0_BADVADDR, MIPS64_EF_CP0_STATUS)
(MIPS64_EF_CP0_CAUSE, MIPS64_EF_SIZE): Delete.
(supply_32bit_reg): Use gdb_byte.
(supply_64bit_reg): New.
(mips_supply_gregset, mips_fill_gregset, mips_supply_fpregset)
(mips_fill_fpregset, fetch_core_registers, supply_gregset)
(fill_gregset, supply_fpregset): Update for renamed types.
(mips64_supply_gregset): Use gdb_byte and supply_64bit_reg.
(mips64_fill_gregset): Make global. Handle 32-bit register
sizes.
(mips64_fill_fpregset): Make global. Use gdb_byte. Handle
FP regsets properly.
2006-03-15 17:13:36 +00:00
|
|
|
/* Assume that we have PTRACE_GETREGS et al. support. If we do not,
|
|
|
|
we'll clear this and use PTRACE_PEEKUSER instead. */
|
|
|
|
static int have_ptrace_regsets = 1;
|
|
|
|
|
|
|
|
/* Saved function pointers to fetch and store a single register using
|
|
|
|
PTRACE_PEEKUSER and PTRACE_POKEUSER. */
|
|
|
|
|
|
|
|
void (*super_fetch_registers) (int);
|
|
|
|
void (*super_store_registers) (int);
|
|
|
|
|
2001-07-10 20:41:54 +00:00
|
|
|
/* Pseudo registers can not be read. ptrace does not provide a way to
|
2004-10-30 22:54:40 +00:00
|
|
|
read (or set) MIPS_PS_REGNUM, and there's no point in reading or
|
|
|
|
setting MIPS_ZERO_REGNUM. We also can not set BADVADDR, CAUSE, or
|
|
|
|
FCRIR via ptrace(). */
|
2001-07-10 20:41:54 +00:00
|
|
|
|
|
|
|
int
|
|
|
|
mips_linux_cannot_fetch_register (int regno)
|
|
|
|
{
|
2004-10-30 22:36:34 +00:00
|
|
|
if (regno > MIPS_ZERO_REGNUM && regno < MIPS_ZERO_REGNUM + 32)
|
2001-07-10 20:41:54 +00:00
|
|
|
return 0;
|
2003-11-16 Andrew Cagney <cagney@redhat.com>
* mips-tdep.c (struct gdbarch_tdep): Add field "regnum".
(mips_fpa0_regnum, mips_regnum): New function.
(mips_gdbarch_init): Fill in the "regnum" fields.
* mips-tdep.h (struct mips_regnum): Define.
(mips_regnum): Declare.
* config/mips/tm-mips.h (BADVADDR_REGNUM): Delete macro.
(LO_REGNUM, HI_REGNUM, BADVADDR_REGNUM): Ditto.
(CAUSE_REGNUM, PC_REGNUM, FP0_REGNUM): Ditto.
(FCRCS_REGNUM, FCRIR_REGNUM, FPA0_REGNUM): Ditto.
* config/mips/tm-irix6.h (FP0_REGNUM): Delete macro.
(PC_REGNUM, CAUSE_REGNUM, BADVADDR_REGNUM): Ditto.
(HI_REGNUM, LO_REGNUM, FCRCS_REGNUM, FCRIR_REGNUM): Ditto.
* config/mips/tm-irix5.h (FP0_REGNUM): Delete macro.
(PC_REGNUM, CAUSE_REGNUM, BADVADDR_REGNUM): Ditto.
(HI_REGNUM, LO_REGNUM, FCRCS_REGNUM, FCRIR_REGNUM): Ditto.
* remote-mips.c: Include "mips-tdep.h". Update.
* mipsnbsd-tdep.c: Update.
* mipsv4-nat.c: Update.
* mips-tdep.c: Update.
* mips-nat.c: Update.
* mips-linux-tdep.c: Update.
* mips-linux-nat.c: Update.
* irix5-nat.c: Update.
* dve3900-rom.c: Include "mips-tdep.h". Update.
(ignore_packet): Supress GCC warning.
* config/mips/nm-riscos.h: Update.
* Makefile.in (dve3900-rom.o, remote-mips.o): Update dependencies.
2003-11-16 19:24:05 +00:00
|
|
|
else if (regno >= mips_regnum (current_gdbarch)->fp0
|
|
|
|
&& regno <= mips_regnum (current_gdbarch)->fp0 + 32)
|
2003-07-07 15:17:55 +00:00
|
|
|
return 0;
|
2003-11-16 Andrew Cagney <cagney@redhat.com>
* mips-tdep.c (struct gdbarch_tdep): Add field "regnum".
(mips_fpa0_regnum, mips_regnum): New function.
(mips_gdbarch_init): Fill in the "regnum" fields.
* mips-tdep.h (struct mips_regnum): Define.
(mips_regnum): Declare.
* config/mips/tm-mips.h (BADVADDR_REGNUM): Delete macro.
(LO_REGNUM, HI_REGNUM, BADVADDR_REGNUM): Ditto.
(CAUSE_REGNUM, PC_REGNUM, FP0_REGNUM): Ditto.
(FCRCS_REGNUM, FCRIR_REGNUM, FPA0_REGNUM): Ditto.
* config/mips/tm-irix6.h (FP0_REGNUM): Delete macro.
(PC_REGNUM, CAUSE_REGNUM, BADVADDR_REGNUM): Ditto.
(HI_REGNUM, LO_REGNUM, FCRCS_REGNUM, FCRIR_REGNUM): Ditto.
* config/mips/tm-irix5.h (FP0_REGNUM): Delete macro.
(PC_REGNUM, CAUSE_REGNUM, BADVADDR_REGNUM): Ditto.
(HI_REGNUM, LO_REGNUM, FCRCS_REGNUM, FCRIR_REGNUM): Ditto.
* remote-mips.c: Include "mips-tdep.h". Update.
* mipsnbsd-tdep.c: Update.
* mipsv4-nat.c: Update.
* mips-tdep.c: Update.
* mips-nat.c: Update.
* mips-linux-tdep.c: Update.
* mips-linux-nat.c: Update.
* irix5-nat.c: Update.
* dve3900-rom.c: Include "mips-tdep.h". Update.
(ignore_packet): Supress GCC warning.
* config/mips/nm-riscos.h: Update.
* Makefile.in (dve3900-rom.o, remote-mips.o): Update dependencies.
2003-11-16 19:24:05 +00:00
|
|
|
else if (regno == mips_regnum (current_gdbarch)->lo
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->hi
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->badvaddr
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->cause
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->pc
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->fp_control_status
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->fp_implementation_revision)
|
|
|
|
return 0;
|
|
|
|
else
|
|
|
|
return 1;
|
2001-07-10 20:41:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
mips_linux_cannot_store_register (int regno)
|
|
|
|
{
|
2004-10-30 22:36:34 +00:00
|
|
|
if (regno > MIPS_ZERO_REGNUM && regno < MIPS_ZERO_REGNUM + 32)
|
2001-07-10 20:41:54 +00:00
|
|
|
return 0;
|
2003-07-07 15:17:55 +00:00
|
|
|
else if (regno >= FP0_REGNUM && regno <= FP0_REGNUM + 32)
|
|
|
|
return 0;
|
2003-11-16 Andrew Cagney <cagney@redhat.com>
* mips-tdep.c (struct gdbarch_tdep): Add field "regnum".
(mips_fpa0_regnum, mips_regnum): New function.
(mips_gdbarch_init): Fill in the "regnum" fields.
* mips-tdep.h (struct mips_regnum): Define.
(mips_regnum): Declare.
* config/mips/tm-mips.h (BADVADDR_REGNUM): Delete macro.
(LO_REGNUM, HI_REGNUM, BADVADDR_REGNUM): Ditto.
(CAUSE_REGNUM, PC_REGNUM, FP0_REGNUM): Ditto.
(FCRCS_REGNUM, FCRIR_REGNUM, FPA0_REGNUM): Ditto.
* config/mips/tm-irix6.h (FP0_REGNUM): Delete macro.
(PC_REGNUM, CAUSE_REGNUM, BADVADDR_REGNUM): Ditto.
(HI_REGNUM, LO_REGNUM, FCRCS_REGNUM, FCRIR_REGNUM): Ditto.
* config/mips/tm-irix5.h (FP0_REGNUM): Delete macro.
(PC_REGNUM, CAUSE_REGNUM, BADVADDR_REGNUM): Ditto.
(HI_REGNUM, LO_REGNUM, FCRCS_REGNUM, FCRIR_REGNUM): Ditto.
* remote-mips.c: Include "mips-tdep.h". Update.
* mipsnbsd-tdep.c: Update.
* mipsv4-nat.c: Update.
* mips-tdep.c: Update.
* mips-nat.c: Update.
* mips-linux-tdep.c: Update.
* mips-linux-nat.c: Update.
* irix5-nat.c: Update.
* dve3900-rom.c: Include "mips-tdep.h". Update.
(ignore_packet): Supress GCC warning.
* config/mips/nm-riscos.h: Update.
* Makefile.in (dve3900-rom.o, remote-mips.o): Update dependencies.
2003-11-16 19:24:05 +00:00
|
|
|
else if (regno == mips_regnum (current_gdbarch)->lo
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->hi
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->pc
|
|
|
|
|| regno == mips_regnum (current_gdbarch)->fp_control_status)
|
|
|
|
return 0;
|
|
|
|
else
|
|
|
|
return 1;
|
2001-07-10 20:41:54 +00:00
|
|
|
}
|
* Makefile.in (ALLDEPFILES): Update.
(alpha-linux-nat.o, sparc-linux-nat.o): New rules.
(amd64-linux-nat.o, arm-linux-nat.o, hppa-linux-nat.o)
(i386-linux-nat.o, ia64-linux-nat.o, linux-nat.o, m32r-linux-nat.o)
(m68klinux-nat.o, mips-linux-nat.o, ppc-linux-nat.o, s390-nat.o)
(sparc64-linux-nat.o): Update dependencies.
* alpha-linux-nat.c, sparc-linux-nat.c: New files.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(amd64_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(amd64_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_amd64_linux_nat): Set it. Call linux_target and
add_target.
* arm-linux-nat.c (arm_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(arm_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_arm_linux_nat): Add a prototype. Use linux_target and
add_target.
* hppa-linux-nat.c (hppa_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(hppa_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_hppa_linux_nat): New function.
* i386-linux-nat.c (i386_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(i386_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(i386_linux_resume): Renamed from child_resume and made static.
(i386_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_i386_linux_nat): New function.
* i386-nat.c: Remove LINUX_CHILD_POST_STARTUP_INFERIOR #ifndef.
* ia64-linux-nat.c (ia64_linux_xfer_unwind_table): Remove.
(super_xfer_partial): New.
(ia64_linux_xfer_partial): New function. Use it.
(_initialize_ia64_linux_nat): New function.
* ia64-tdep.c (getunwind_table): Revert 2005-06-08 change; use
target_read_partial and document the problem.
* inf-ptrace.c (inf_ptrace_fetch_register): Use
CANNOT_FETCH_REGISTER. Fix some comments.
(inf_ptrace_store_register): Use CANNOT_STORE_REGISTER. Fix some
comments.
* linux-nat.c: Include "inf-ptrace.h" and "auxv.h".
(linux_ops, super_xfer_partial): New variables.
(linux_child_post_startup_inferior): Make static.
(child_post_startup_inferior): Delete.
(linux_nat_attach, linux_nat_detach, resume_callback)
(linux_nat_resume, linux_nat_wait, linux_nat_create_inferior)
(linux_nat_mourn_inferior): Use linux_ops instead of
deprecated_child_ops.
(child_wait): Do not depend on CHILD_WAIT.
(linux_nat_xfer_memory): Remove, replace by ...
(linux_nat_xfer_partial): ... this. Use linux_ops->to_xfer_partial
instead of linux_proc_xfer_memory and child_xfer_memory.
(linux_nat_fetch_registers, linux_nat_store_registers)
(linux_nat_child_post_startup_inferior): New functions.
(init_linux_nat_ops): Use the new functions.
(linux_proc_xfer_memory): Remove, replace by ...
(linux_proc_xfer_partial): ... this. Make static.
(linux_xfer_partial, linux_register_u_offset, linux_target): New
functions.
(_initialize_linux_nat): Do not modify deprecated_child_ops.
* linux-nat.h (linux_proc_xfer_memory): Remove prototype.
(struct mem_attrib, struct target_ops): Remove forward declarations.
(linux_child_post_startup_inferior): Remove prototype.
(linux_target): Add prototype.
* linux-thread-db.c (thread_db_xfer_memory): Remove, replace by ...
(thread_db_xfer_partial): ... this.
(init_thread_db_ops): Set to_xfer_partial instead of
deprecated_xfer_memory.
* m32r-linux-nat.c (m32r_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m32r_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_m32r_linux_nat): New function.
* m68klinux-nat.c (m68k_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m68k_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(old_fetch_inferior_registers, old_store_inferior_registers): Made
static.
(_initialize_m68k_linux_nat): Use linux_target and add_target.
* mips-linux-nat.c (_initialize_mips_linux_nat): New function.
* ppc-linux-nat.c (ppc_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(ppc_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_ppc_linux_nat): New function.
* s390-nat.c (s390_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(s390_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_s390_nat): New function.
* sparc64-linux-nat.c (_initialize_sparc64_linux_nat): Use
linux_target and add_target.
* config/nm-linux.h: Don't include "auxv.h".
(struct target_waitstatus, child_wait, CHILD_WAIT)
(CHILD_PID_TO_EXEC_FILE, CHILD_INSERT_FORK_CATCHPOINT)
(CHILD_INSERT_VFORK_CATCHPOINT, CHILD_INSERT_EXEC_CATCHPOINT)
(CHILD_POST_STARTUP_INFERIOR, CHILD_POST_ATTACH, CHILD_FOLLOW_FORK)
(DEPRECATED_KILL_INFERIOR, NATIVE_XFER_AUXV): Delete.
* config/alpha/alpha-linux.mh (NATDEPFILES): Replace infptrace.o
and inftarg.o with inf-ptrace.o and alpha-linux-nat.o.
* config/sparc/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with sparc-linux-nat.o.
* config/sparc/linux64.mh (NATDEPFILES): Remove infptrace.o and
inftarg.o.
* config/arm/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with inf-ptrace.o.
* config/i386/linux.mh (NATDEPFILES): Likewise.
* config/i386/linux64.mh (NATDEPFILES): Likewise.
* config/ia64/linux.mh (NATDEPFILES): Likewise.
* config/m32r/linux.mh (NATDEPFILES): Likewise.
* config/m68k/linux.mh (NATDEPFILES): Likewise.
* config/mips/linux.mh (NATDEPFILES): Likewise.
* config/pa/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Likewise.
* config/s390/s390.mh (NATDEPFILES): Likewise.
* config/i386/nm-linux.h (DEPRECATED_CHILD_RESUME): Don't define.
(LINUX_CHILD_POST_STARTUP_INFERIOR): Don't define.
* config/i386/nm-linux64.h (LINUX_CHILD_POST_STARTUP_INFERIOR):
Don't define.
* config/ia64/nm-linux.h: Don't include "target.h".
(NATIVE_XFER_UNWIND_TABLE, ia64_linux_xfer_unwind_table): Remove.
* config/djgpp/fnchange.lst: Add alpha-linux-tdep.c,
alpha-linux-nat.c, sparc-linux-tdep.c, and sparc-linux-nat.c.
2005-09-10 18:11:14 +00:00
|
|
|
|
2006-03-15 16:08:24 +00:00
|
|
|
/* Fetch the thread-local storage pointer for libthread_db. */
|
|
|
|
|
|
|
|
ps_err_e
|
|
|
|
ps_get_thread_area (const struct ps_prochandle *ph,
|
|
|
|
lwpid_t lwpid, int idx, void **base)
|
|
|
|
{
|
|
|
|
if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0)
|
|
|
|
return PS_ERR;
|
|
|
|
|
|
|
|
/* IDX is the bias from the thread pointer to the beginning of the
|
|
|
|
thread descriptor. It has to be subtracted due to implementation
|
|
|
|
quirks in libthread_db. */
|
|
|
|
*base = (void *) ((char *)*base - idx);
|
|
|
|
|
|
|
|
return PS_OK;
|
|
|
|
}
|
|
|
|
|
* Makefile.in (mips_linux_tdep_h): New.
(mpis-linux-nat.o, mips-linux-tdep.o): Update.
* mips-linux-nat.c: Include "inferior.h", "mips-linux-tdep.h", and
<sys/ptrace.h>.
(have_ptrace_regsets, super_fetch_registers, super_store_registers)
(mips64_linux_regsets_fetch_registers)
(mips64_linux_regsets_store_registers, mips64_linux_fetch_registers)
(mips64_linux_store_registers): New.
(_initialize_mips_linux_nat): Override to_fetch_registers and
to_store_registers.
* mips-linux-tdep.h: New file.
* mips-linux-tdep.c: Include "mips-linux-tdep.c".
(ELF_NGREG, ELF_NFPREG, elf_greg_t, elf_gregset_t, elf_fpreg_t)
(elf_fpregset_t, FPR_BASE, PC, CAUSE, BADVADDR, MMHI, MMLO)
(FPC_CSR, FPC_EIR, EF_REG0, EF_REG31, EF_LO, EF_HI, EF_CP0_EPC)
(EF_CP0_BADVADDR, EF_CP0_STATUS, EF_CP0_CAUSE, EF_SIZE)
(MIPS64_ELF_NGREG, MIPS64_ELF_NFPREG, mips64_elf_greg_t)
(mips64_elf_gregset_t, mips64_elf_fpreg_t, mips64_elf_fpregset_t)
(MIPS64_FPR_BASE, MIPS64_PC, MIPS64_CAUSE, MIPS64_BADVADDR)
(MIPS64_MMHI, MIPS64_MMLO, MIPS64_FPC_CSR, MIPS64_FPC_EIR)
(MIPS64_EF_REG0, MIPS64_EF_REG31, MIPS64_EF_LO, MIPS64_EF_HI)
(MIPS64_EF_CP0_EPC, MIPS64_EF_CP0_BADVADDR, MIPS64_EF_CP0_STATUS)
(MIPS64_EF_CP0_CAUSE, MIPS64_EF_SIZE): Delete.
(supply_32bit_reg): Use gdb_byte.
(supply_64bit_reg): New.
(mips_supply_gregset, mips_fill_gregset, mips_supply_fpregset)
(mips_fill_fpregset, fetch_core_registers, supply_gregset)
(fill_gregset, supply_fpregset): Update for renamed types.
(mips64_supply_gregset): Use gdb_byte and supply_64bit_reg.
(mips64_fill_gregset): Make global. Handle 32-bit register
sizes.
(mips64_fill_fpregset): Make global. Use gdb_byte. Handle
FP regsets properly.
2006-03-15 17:13:36 +00:00
|
|
|
/* Fetch REGNO (or all registers if REGNO == -1) from the target
|
|
|
|
using PTRACE_GETREGS et al. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
mips64_linux_regsets_fetch_registers (int regno)
|
|
|
|
{
|
|
|
|
int is_fp;
|
|
|
|
int tid;
|
|
|
|
|
|
|
|
if (regno >= mips_regnum (current_gdbarch)->fp0
|
|
|
|
&& regno <= mips_regnum (current_gdbarch)->fp0 + 32)
|
|
|
|
is_fp = 1;
|
|
|
|
else if (regno == mips_regnum (current_gdbarch)->fp_control_status)
|
|
|
|
is_fp = 1;
|
|
|
|
else if (regno == mips_regnum (current_gdbarch)->fp_implementation_revision)
|
|
|
|
is_fp = 1;
|
|
|
|
else
|
|
|
|
is_fp = 0;
|
|
|
|
|
|
|
|
tid = ptid_get_lwp (inferior_ptid);
|
|
|
|
if (tid == 0)
|
|
|
|
tid = ptid_get_pid (inferior_ptid);
|
|
|
|
|
|
|
|
if (regno == -1 || !is_fp)
|
|
|
|
{
|
|
|
|
mips64_elf_gregset_t regs;
|
|
|
|
|
|
|
|
if (ptrace (PTRACE_GETREGS, tid, 0L, (PTRACE_TYPE_ARG3) ®s) == -1)
|
|
|
|
{
|
|
|
|
if (errno == EIO)
|
|
|
|
{
|
|
|
|
have_ptrace_regsets = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
perror_with_name (_("Couldn't get registers"));
|
|
|
|
}
|
|
|
|
|
|
|
|
mips64_supply_gregset (®s);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (regno == -1 || is_fp)
|
|
|
|
{
|
|
|
|
mips64_elf_fpregset_t fp_regs;
|
|
|
|
|
|
|
|
if (ptrace (PTRACE_GETFPREGS, tid, 0L,
|
|
|
|
(PTRACE_TYPE_ARG3) &fp_regs) == -1)
|
|
|
|
{
|
|
|
|
if (errno == EIO)
|
|
|
|
{
|
|
|
|
have_ptrace_regsets = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
perror_with_name (_("Couldn't get FP registers"));
|
|
|
|
}
|
|
|
|
|
|
|
|
mips64_supply_fpregset (&fp_regs);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Store REGNO (or all registers if REGNO == -1) to the target
|
|
|
|
using PTRACE_SETREGS et al. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
mips64_linux_regsets_store_registers (int regno)
|
|
|
|
{
|
|
|
|
int is_fp;
|
|
|
|
int tid;
|
|
|
|
|
|
|
|
if (regno >= mips_regnum (current_gdbarch)->fp0
|
|
|
|
&& regno <= mips_regnum (current_gdbarch)->fp0 + 32)
|
|
|
|
is_fp = 1;
|
|
|
|
else if (regno == mips_regnum (current_gdbarch)->fp_control_status)
|
|
|
|
is_fp = 1;
|
|
|
|
else if (regno == mips_regnum (current_gdbarch)->fp_implementation_revision)
|
|
|
|
is_fp = 1;
|
|
|
|
else
|
|
|
|
is_fp = 0;
|
|
|
|
|
|
|
|
tid = ptid_get_lwp (inferior_ptid);
|
|
|
|
if (tid == 0)
|
|
|
|
tid = ptid_get_pid (inferior_ptid);
|
|
|
|
|
|
|
|
if (regno == -1 || !is_fp)
|
|
|
|
{
|
|
|
|
mips64_elf_gregset_t regs;
|
|
|
|
|
|
|
|
if (ptrace (PTRACE_GETREGS, tid, 0L, (PTRACE_TYPE_ARG3) ®s) == -1)
|
|
|
|
perror_with_name (_("Couldn't get registers"));
|
|
|
|
|
|
|
|
mips64_fill_gregset (®s, regno);
|
|
|
|
|
|
|
|
if (ptrace (PTRACE_SETREGS, tid, 0L, (PTRACE_TYPE_ARG3) ®s) == -1)
|
|
|
|
perror_with_name (_("Couldn't set registers"));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (regno == -1 || is_fp)
|
|
|
|
{
|
|
|
|
mips64_elf_fpregset_t fp_regs;
|
|
|
|
|
|
|
|
if (ptrace (PTRACE_GETFPREGS, tid, 0L,
|
|
|
|
(PTRACE_TYPE_ARG3) &fp_regs) == -1)
|
|
|
|
perror_with_name (_("Couldn't get FP registers"));
|
|
|
|
|
|
|
|
mips64_fill_fpregset (&fp_regs, regno);
|
|
|
|
|
|
|
|
if (ptrace (PTRACE_SETFPREGS, tid, 0L,
|
|
|
|
(PTRACE_TYPE_ARG3) &fp_regs) == -1)
|
|
|
|
perror_with_name (_("Couldn't set FP registers"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Fetch REGNO (or all registers if REGNO == -1) from the target
|
|
|
|
using any working method. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
mips64_linux_fetch_registers (int regnum)
|
|
|
|
{
|
|
|
|
/* Unless we already know that PTRACE_GETREGS does not work, try it. */
|
|
|
|
if (have_ptrace_regsets)
|
|
|
|
mips64_linux_regsets_fetch_registers (regnum);
|
|
|
|
|
|
|
|
/* If we know, or just found out, that PTRACE_GETREGS does not work, fall
|
|
|
|
back to PTRACE_PEEKUSER. */
|
|
|
|
if (!have_ptrace_regsets)
|
|
|
|
super_fetch_registers (regnum);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Store REGNO (or all registers if REGNO == -1) to the target
|
|
|
|
using any working method. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
mips64_linux_store_registers (int regnum)
|
|
|
|
{
|
|
|
|
/* Unless we already know that PTRACE_GETREGS does not work, try it. */
|
|
|
|
if (have_ptrace_regsets)
|
|
|
|
mips64_linux_regsets_store_registers (regnum);
|
|
|
|
|
|
|
|
/* If we know, or just found out, that PTRACE_GETREGS does not work, fall
|
|
|
|
back to PTRACE_PEEKUSER. */
|
|
|
|
if (!have_ptrace_regsets)
|
|
|
|
super_store_registers (regnum);
|
|
|
|
}
|
|
|
|
|
* Makefile.in (ALLDEPFILES): Update.
(alpha-linux-nat.o, sparc-linux-nat.o): New rules.
(amd64-linux-nat.o, arm-linux-nat.o, hppa-linux-nat.o)
(i386-linux-nat.o, ia64-linux-nat.o, linux-nat.o, m32r-linux-nat.o)
(m68klinux-nat.o, mips-linux-nat.o, ppc-linux-nat.o, s390-nat.o)
(sparc64-linux-nat.o): Update dependencies.
* alpha-linux-nat.c, sparc-linux-nat.c: New files.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(amd64_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(amd64_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_amd64_linux_nat): Set it. Call linux_target and
add_target.
* arm-linux-nat.c (arm_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(arm_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_arm_linux_nat): Add a prototype. Use linux_target and
add_target.
* hppa-linux-nat.c (hppa_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(hppa_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_hppa_linux_nat): New function.
* i386-linux-nat.c (i386_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(i386_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(i386_linux_resume): Renamed from child_resume and made static.
(i386_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_i386_linux_nat): New function.
* i386-nat.c: Remove LINUX_CHILD_POST_STARTUP_INFERIOR #ifndef.
* ia64-linux-nat.c (ia64_linux_xfer_unwind_table): Remove.
(super_xfer_partial): New.
(ia64_linux_xfer_partial): New function. Use it.
(_initialize_ia64_linux_nat): New function.
* ia64-tdep.c (getunwind_table): Revert 2005-06-08 change; use
target_read_partial and document the problem.
* inf-ptrace.c (inf_ptrace_fetch_register): Use
CANNOT_FETCH_REGISTER. Fix some comments.
(inf_ptrace_store_register): Use CANNOT_STORE_REGISTER. Fix some
comments.
* linux-nat.c: Include "inf-ptrace.h" and "auxv.h".
(linux_ops, super_xfer_partial): New variables.
(linux_child_post_startup_inferior): Make static.
(child_post_startup_inferior): Delete.
(linux_nat_attach, linux_nat_detach, resume_callback)
(linux_nat_resume, linux_nat_wait, linux_nat_create_inferior)
(linux_nat_mourn_inferior): Use linux_ops instead of
deprecated_child_ops.
(child_wait): Do not depend on CHILD_WAIT.
(linux_nat_xfer_memory): Remove, replace by ...
(linux_nat_xfer_partial): ... this. Use linux_ops->to_xfer_partial
instead of linux_proc_xfer_memory and child_xfer_memory.
(linux_nat_fetch_registers, linux_nat_store_registers)
(linux_nat_child_post_startup_inferior): New functions.
(init_linux_nat_ops): Use the new functions.
(linux_proc_xfer_memory): Remove, replace by ...
(linux_proc_xfer_partial): ... this. Make static.
(linux_xfer_partial, linux_register_u_offset, linux_target): New
functions.
(_initialize_linux_nat): Do not modify deprecated_child_ops.
* linux-nat.h (linux_proc_xfer_memory): Remove prototype.
(struct mem_attrib, struct target_ops): Remove forward declarations.
(linux_child_post_startup_inferior): Remove prototype.
(linux_target): Add prototype.
* linux-thread-db.c (thread_db_xfer_memory): Remove, replace by ...
(thread_db_xfer_partial): ... this.
(init_thread_db_ops): Set to_xfer_partial instead of
deprecated_xfer_memory.
* m32r-linux-nat.c (m32r_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m32r_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_m32r_linux_nat): New function.
* m68klinux-nat.c (m68k_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m68k_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(old_fetch_inferior_registers, old_store_inferior_registers): Made
static.
(_initialize_m68k_linux_nat): Use linux_target and add_target.
* mips-linux-nat.c (_initialize_mips_linux_nat): New function.
* ppc-linux-nat.c (ppc_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(ppc_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_ppc_linux_nat): New function.
* s390-nat.c (s390_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(s390_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_s390_nat): New function.
* sparc64-linux-nat.c (_initialize_sparc64_linux_nat): Use
linux_target and add_target.
* config/nm-linux.h: Don't include "auxv.h".
(struct target_waitstatus, child_wait, CHILD_WAIT)
(CHILD_PID_TO_EXEC_FILE, CHILD_INSERT_FORK_CATCHPOINT)
(CHILD_INSERT_VFORK_CATCHPOINT, CHILD_INSERT_EXEC_CATCHPOINT)
(CHILD_POST_STARTUP_INFERIOR, CHILD_POST_ATTACH, CHILD_FOLLOW_FORK)
(DEPRECATED_KILL_INFERIOR, NATIVE_XFER_AUXV): Delete.
* config/alpha/alpha-linux.mh (NATDEPFILES): Replace infptrace.o
and inftarg.o with inf-ptrace.o and alpha-linux-nat.o.
* config/sparc/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with sparc-linux-nat.o.
* config/sparc/linux64.mh (NATDEPFILES): Remove infptrace.o and
inftarg.o.
* config/arm/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with inf-ptrace.o.
* config/i386/linux.mh (NATDEPFILES): Likewise.
* config/i386/linux64.mh (NATDEPFILES): Likewise.
* config/ia64/linux.mh (NATDEPFILES): Likewise.
* config/m32r/linux.mh (NATDEPFILES): Likewise.
* config/m68k/linux.mh (NATDEPFILES): Likewise.
* config/mips/linux.mh (NATDEPFILES): Likewise.
* config/pa/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Likewise.
* config/s390/s390.mh (NATDEPFILES): Likewise.
* config/i386/nm-linux.h (DEPRECATED_CHILD_RESUME): Don't define.
(LINUX_CHILD_POST_STARTUP_INFERIOR): Don't define.
* config/i386/nm-linux64.h (LINUX_CHILD_POST_STARTUP_INFERIOR):
Don't define.
* config/ia64/nm-linux.h: Don't include "target.h".
(NATIVE_XFER_UNWIND_TABLE, ia64_linux_xfer_unwind_table): Remove.
* config/djgpp/fnchange.lst: Add alpha-linux-tdep.c,
alpha-linux-nat.c, sparc-linux-tdep.c, and sparc-linux-nat.c.
2005-09-10 18:11:14 +00:00
|
|
|
void _initialize_mips_linux_nat (void);
|
|
|
|
|
|
|
|
void
|
|
|
|
_initialize_mips_linux_nat (void)
|
|
|
|
{
|
* Makefile.in (mips_linux_tdep_h): New.
(mpis-linux-nat.o, mips-linux-tdep.o): Update.
* mips-linux-nat.c: Include "inferior.h", "mips-linux-tdep.h", and
<sys/ptrace.h>.
(have_ptrace_regsets, super_fetch_registers, super_store_registers)
(mips64_linux_regsets_fetch_registers)
(mips64_linux_regsets_store_registers, mips64_linux_fetch_registers)
(mips64_linux_store_registers): New.
(_initialize_mips_linux_nat): Override to_fetch_registers and
to_store_registers.
* mips-linux-tdep.h: New file.
* mips-linux-tdep.c: Include "mips-linux-tdep.c".
(ELF_NGREG, ELF_NFPREG, elf_greg_t, elf_gregset_t, elf_fpreg_t)
(elf_fpregset_t, FPR_BASE, PC, CAUSE, BADVADDR, MMHI, MMLO)
(FPC_CSR, FPC_EIR, EF_REG0, EF_REG31, EF_LO, EF_HI, EF_CP0_EPC)
(EF_CP0_BADVADDR, EF_CP0_STATUS, EF_CP0_CAUSE, EF_SIZE)
(MIPS64_ELF_NGREG, MIPS64_ELF_NFPREG, mips64_elf_greg_t)
(mips64_elf_gregset_t, mips64_elf_fpreg_t, mips64_elf_fpregset_t)
(MIPS64_FPR_BASE, MIPS64_PC, MIPS64_CAUSE, MIPS64_BADVADDR)
(MIPS64_MMHI, MIPS64_MMLO, MIPS64_FPC_CSR, MIPS64_FPC_EIR)
(MIPS64_EF_REG0, MIPS64_EF_REG31, MIPS64_EF_LO, MIPS64_EF_HI)
(MIPS64_EF_CP0_EPC, MIPS64_EF_CP0_BADVADDR, MIPS64_EF_CP0_STATUS)
(MIPS64_EF_CP0_CAUSE, MIPS64_EF_SIZE): Delete.
(supply_32bit_reg): Use gdb_byte.
(supply_64bit_reg): New.
(mips_supply_gregset, mips_fill_gregset, mips_supply_fpregset)
(mips_fill_fpregset, fetch_core_registers, supply_gregset)
(fill_gregset, supply_fpregset): Update for renamed types.
(mips64_supply_gregset): Use gdb_byte and supply_64bit_reg.
(mips64_fill_gregset): Make global. Handle 32-bit register
sizes.
(mips64_fill_fpregset): Make global. Use gdb_byte. Handle
FP regsets properly.
2006-03-15 17:13:36 +00:00
|
|
|
struct target_ops *t = linux_target ();
|
|
|
|
|
|
|
|
super_fetch_registers = t->to_fetch_registers;
|
|
|
|
super_store_registers = t->to_store_registers;
|
|
|
|
|
|
|
|
t->to_fetch_registers = mips64_linux_fetch_registers;
|
|
|
|
t->to_store_registers = mips64_linux_store_registers;
|
|
|
|
|
* linux-nat.c (linux_ops_saved): New.
(super_mourn_inferior, kill_inferior, threaded, linux_nat_ops)
(child_mourn_inferior, child_wait, linux_nat_create_inferior)
(linux_nat_fetch_registers, linux_nat_store_registers)
(linux_nat_child_post_startup_inferior, init_linux_nat_ops): Delete.
(init_lwp_list): Don't set threaded.
(add_lwp): Don't modify threaded.
(delete_lwp): Don't mention non-threaded mode.
(linux_nat_switch_fork): New.
(linux_nat_attach): Update inferior_ptid.
(linux_nat_wait): Handle num_lwps == 0 at entry. Don't check
threaded flag.
(linux_nat_kill): Handle pending forks and saved forks.
(linux_nat_mourn_inferior): Handle saved forks.
(linux_nat_pid_to_str): Don't use the LWP form when there is
only one thread.
(linux_target): Don't set to_wait, to_kill, or to_mourn_inferior.
(linux_nat_add_target): New.
(_initialize_linux_nat): Don't initialize the linux native target
here.
* linux-nat.h (linux_nat_add_target, linux_nat_switch_fork): New
prototypes.
* linux-fork.c: Include "linux-nat.h".
(add_fork): Update initial PID.
(fork_load_infrun_state): Call linux_nat_switch_fork.
* Makefile.in (linux-fork.o): Update.
* alpha-linux-nat.c (_initialize_alpha_linux_nat): Use
linux_nat_add_target instead of add_target.
* amd64-linux-nat.c (_initialize_amd64_linux_nat): Likewise.
* arm-linux-nat.c (_initialize_arm_linux_nat): Likewise.
* hppa-linux-nat.c (_initialize_hppa_linux_nat): Likewise.
* ia64-linux-nat.c (_initialize_ia64_linux_nat): Likewise.
* i386-linux-nat.c (_initialize_i386_linux_nat): Likewise.
* m32r-linux-nat.c (_initialize_m32r_linux_nat): Likewise.
* m68klinux-nat.c (_initialize_m68k_linux_nat): Likewise.
* mips-linux-nat.c (_initialize_mips_linux_nat): Likewise.
* ppc-linux-nat.c (_initialize_ppc_linux_nat): Likewise.
* s390-nat.c (_initialize_s390_nat): Likewise.
* sparc-linux-nat.c (_initialize_sparc_linux_nat): Likewise.
* sparc64-linux-nat.c (_initialize_sparc64_linux_nat): Likewise.
2006-03-24 23:08:16 +00:00
|
|
|
linux_nat_add_target (t);
|
* Makefile.in (ALLDEPFILES): Update.
(alpha-linux-nat.o, sparc-linux-nat.o): New rules.
(amd64-linux-nat.o, arm-linux-nat.o, hppa-linux-nat.o)
(i386-linux-nat.o, ia64-linux-nat.o, linux-nat.o, m32r-linux-nat.o)
(m68klinux-nat.o, mips-linux-nat.o, ppc-linux-nat.o, s390-nat.o)
(sparc64-linux-nat.o): Update dependencies.
* alpha-linux-nat.c, sparc-linux-nat.c: New files.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(amd64_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(amd64_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_amd64_linux_nat): Set it. Call linux_target and
add_target.
* arm-linux-nat.c (arm_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(arm_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_arm_linux_nat): Add a prototype. Use linux_target and
add_target.
* hppa-linux-nat.c (hppa_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(hppa_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_hppa_linux_nat): New function.
* i386-linux-nat.c (i386_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(i386_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(i386_linux_resume): Renamed from child_resume and made static.
(i386_linux_child_post_start_inferior): Renamed from
child_post_startup_inferior and made static. Call
super_post_startup_inferior.
(super_post_startup_inferior): New.
(_initialize_i386_linux_nat): New function.
* i386-nat.c: Remove LINUX_CHILD_POST_STARTUP_INFERIOR #ifndef.
* ia64-linux-nat.c (ia64_linux_xfer_unwind_table): Remove.
(super_xfer_partial): New.
(ia64_linux_xfer_partial): New function. Use it.
(_initialize_ia64_linux_nat): New function.
* ia64-tdep.c (getunwind_table): Revert 2005-06-08 change; use
target_read_partial and document the problem.
* inf-ptrace.c (inf_ptrace_fetch_register): Use
CANNOT_FETCH_REGISTER. Fix some comments.
(inf_ptrace_store_register): Use CANNOT_STORE_REGISTER. Fix some
comments.
* linux-nat.c: Include "inf-ptrace.h" and "auxv.h".
(linux_ops, super_xfer_partial): New variables.
(linux_child_post_startup_inferior): Make static.
(child_post_startup_inferior): Delete.
(linux_nat_attach, linux_nat_detach, resume_callback)
(linux_nat_resume, linux_nat_wait, linux_nat_create_inferior)
(linux_nat_mourn_inferior): Use linux_ops instead of
deprecated_child_ops.
(child_wait): Do not depend on CHILD_WAIT.
(linux_nat_xfer_memory): Remove, replace by ...
(linux_nat_xfer_partial): ... this. Use linux_ops->to_xfer_partial
instead of linux_proc_xfer_memory and child_xfer_memory.
(linux_nat_fetch_registers, linux_nat_store_registers)
(linux_nat_child_post_startup_inferior): New functions.
(init_linux_nat_ops): Use the new functions.
(linux_proc_xfer_memory): Remove, replace by ...
(linux_proc_xfer_partial): ... this. Make static.
(linux_xfer_partial, linux_register_u_offset, linux_target): New
functions.
(_initialize_linux_nat): Do not modify deprecated_child_ops.
* linux-nat.h (linux_proc_xfer_memory): Remove prototype.
(struct mem_attrib, struct target_ops): Remove forward declarations.
(linux_child_post_startup_inferior): Remove prototype.
(linux_target): Add prototype.
* linux-thread-db.c (thread_db_xfer_memory): Remove, replace by ...
(thread_db_xfer_partial): ... this.
(init_thread_db_ops): Set to_xfer_partial instead of
deprecated_xfer_memory.
* m32r-linux-nat.c (m32r_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m32r_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_m32r_linux_nat): New function.
* m68klinux-nat.c (m68k_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(m68k_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(old_fetch_inferior_registers, old_store_inferior_registers): Made
static.
(_initialize_m68k_linux_nat): Use linux_target and add_target.
* mips-linux-nat.c (_initialize_mips_linux_nat): New function.
* ppc-linux-nat.c (ppc_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(ppc_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_ppc_linux_nat): New function.
* s390-nat.c (s390_linux_fetch_inferior_registers): Renamed
from fetch_inferior_registers and made static.
(s390_linux_store_inferior_registers): Renamed from
store_inferior_registers and made static.
(_initialize_s390_nat): New function.
* sparc64-linux-nat.c (_initialize_sparc64_linux_nat): Use
linux_target and add_target.
* config/nm-linux.h: Don't include "auxv.h".
(struct target_waitstatus, child_wait, CHILD_WAIT)
(CHILD_PID_TO_EXEC_FILE, CHILD_INSERT_FORK_CATCHPOINT)
(CHILD_INSERT_VFORK_CATCHPOINT, CHILD_INSERT_EXEC_CATCHPOINT)
(CHILD_POST_STARTUP_INFERIOR, CHILD_POST_ATTACH, CHILD_FOLLOW_FORK)
(DEPRECATED_KILL_INFERIOR, NATIVE_XFER_AUXV): Delete.
* config/alpha/alpha-linux.mh (NATDEPFILES): Replace infptrace.o
and inftarg.o with inf-ptrace.o and alpha-linux-nat.o.
* config/sparc/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with sparc-linux-nat.o.
* config/sparc/linux64.mh (NATDEPFILES): Remove infptrace.o and
inftarg.o.
* config/arm/linux.mh (NATDEPFILES): Replace infptrace.o and
inftarg.o with inf-ptrace.o.
* config/i386/linux.mh (NATDEPFILES): Likewise.
* config/i386/linux64.mh (NATDEPFILES): Likewise.
* config/ia64/linux.mh (NATDEPFILES): Likewise.
* config/m32r/linux.mh (NATDEPFILES): Likewise.
* config/m68k/linux.mh (NATDEPFILES): Likewise.
* config/mips/linux.mh (NATDEPFILES): Likewise.
* config/pa/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Likewise.
* config/s390/s390.mh (NATDEPFILES): Likewise.
* config/i386/nm-linux.h (DEPRECATED_CHILD_RESUME): Don't define.
(LINUX_CHILD_POST_STARTUP_INFERIOR): Don't define.
* config/i386/nm-linux64.h (LINUX_CHILD_POST_STARTUP_INFERIOR):
Don't define.
* config/ia64/nm-linux.h: Don't include "target.h".
(NATIVE_XFER_UNWIND_TABLE, ia64_linux_xfer_unwind_table): Remove.
* config/djgpp/fnchange.lst: Add alpha-linux-tdep.c,
alpha-linux-nat.c, sparc-linux-tdep.c, and sparc-linux-nat.c.
2005-09-10 18:11:14 +00:00
|
|
|
}
|