* mips-linux-nat.c: No longer include "gdbcore.h".

(mips_linux_register_addr): Move from mips-linux-tdep.c.
	(mips64_linux_register_addr): Likewise.
	(mips_linux_register_u_offset): Call mips_linux_register_addr or
	mips64_linux_register_addr instead of register_addr.
	* mips-linux-tdep.c (mips_linux_register_addr,
	mips64_linux_register_addr): Move to mips-linux-nat.c.
	(register_addr): Remove.
	(register_addr_data, init_register_addr_data): Remove.
	(_initialize_mips_linux_tdep): Do not initialize register_addr_data.
	(set_mips_linux_register_addr): Remove.
	(mips_linux_init_abi): Do not call set_mips_linux_register_addr.
	* Makefile.in (mips-linux-nat.o): Update dependencies.
This commit is contained in:
Ulrich Weigand 2007-04-25 22:22:11 +00:00
parent 910122bf0a
commit dda0c97e68
4 changed files with 90 additions and 113 deletions

View File

@ -1,3 +1,19 @@
2007-04-25 Ulrich Weigand <uweigand@de.ibm.com>
* mips-linux-nat.c: No longer include "gdbcore.h".
(mips_linux_register_addr): Move from mips-linux-tdep.c.
(mips64_linux_register_addr): Likewise.
(mips_linux_register_u_offset): Call mips_linux_register_addr or
mips64_linux_register_addr instead of register_addr.
* mips-linux-tdep.c (mips_linux_register_addr,
mips64_linux_register_addr): Move to mips-linux-nat.c.
(register_addr): Remove.
(register_addr_data, init_register_addr_data): Remove.
(_initialize_mips_linux_tdep): Do not initialize register_addr_data.
(set_mips_linux_register_addr): Remove.
(mips_linux_init_abi): Do not call set_mips_linux_register_addr.
* Makefile.in (mips-linux-nat.o): Update dependencies.
2007-04-25 Ulrich Weigand <uweigand@de.ibm.com>
* linux-nat.c (linux_register_u_offset): Remove.

View File

@ -2341,7 +2341,7 @@ mips64obsd-tdep.o: mips64obsd-tdep.c $(defs_h) $(osabi_h) $(regcache_h) \
mips-irix-tdep.o: mips-irix-tdep.c $(defs_h) $(osabi_h) $(elf_bfd_h)
mips-linux-nat.o: mips-linux-nat.c $(defs_h) $(mips_tdep_h) $(target_h) \
$(linux_nat_h) $(gdb_proc_service_h) $(mips_linux_tdep_h) \
$(gdbcore_h) $(inferior_h)
$(inferior_h)
mips-linux-tdep.o: mips-linux-tdep.c $(defs_h) $(gdbcore_h) $(target_h) \
$(solib_svr4_h) $(osabi_h) $(mips_tdep_h) $(gdb_string_h) \
$(gdb_assert_h) $(frame_h) $(regcache_h) $(trad_frame_h) \

View File

@ -26,7 +26,6 @@
#include "target.h"
#include "linux-nat.h"
#include "mips-linux-tdep.h"
#include "gdbcore.h"
#include "gdb_proc_service.h"
@ -87,6 +86,75 @@ mips_linux_cannot_store_register (int regno)
return 1;
}
/* Map gdb internal register number to ptrace ``address''.
These ``addresses'' are normally defined in <asm/ptrace.h>. */
static CORE_ADDR
mips_linux_register_addr (int regno)
{
int regaddr;
if (regno < 0 || regno >= NUM_REGS)
error (_("Bogon register number %d."), regno);
if (regno < 32)
regaddr = regno;
else if ((regno >= mips_regnum (current_gdbarch)->fp0)
&& (regno < mips_regnum (current_gdbarch)->fp0 + 32))
regaddr = FPR_BASE + (regno - mips_regnum (current_gdbarch)->fp0);
else if (regno == mips_regnum (current_gdbarch)->pc)
regaddr = PC;
else if (regno == mips_regnum (current_gdbarch)->cause)
regaddr = CAUSE;
else if (regno == mips_regnum (current_gdbarch)->badvaddr)
regaddr = BADVADDR;
else if (regno == mips_regnum (current_gdbarch)->lo)
regaddr = MMLO;
else if (regno == mips_regnum (current_gdbarch)->hi)
regaddr = MMHI;
else if (regno == mips_regnum (current_gdbarch)->fp_control_status)
regaddr = FPC_CSR;
else if (regno == mips_regnum (current_gdbarch)->fp_implementation_revision)
regaddr = FPC_EIR;
else
error (_("Unknowable register number %d."), regno);
return regaddr;
}
static CORE_ADDR
mips64_linux_register_addr (int regno)
{
int regaddr;
if (regno < 0 || regno >= NUM_REGS)
error (_("Bogon register number %d."), regno);
if (regno < 32)
regaddr = regno;
else if ((regno >= mips_regnum (current_gdbarch)->fp0)
&& (regno < mips_regnum (current_gdbarch)->fp0 + 32))
regaddr = MIPS64_FPR_BASE + (regno - FP0_REGNUM);
else if (regno == mips_regnum (current_gdbarch)->pc)
regaddr = MIPS64_PC;
else if (regno == mips_regnum (current_gdbarch)->cause)
regaddr = MIPS64_CAUSE;
else if (regno == mips_regnum (current_gdbarch)->badvaddr)
regaddr = MIPS64_BADVADDR;
else if (regno == mips_regnum (current_gdbarch)->lo)
regaddr = MIPS64_MMLO;
else if (regno == mips_regnum (current_gdbarch)->hi)
regaddr = MIPS64_MMHI;
else if (regno == mips_regnum (current_gdbarch)->fp_control_status)
regaddr = MIPS64_FPC_CSR;
else if (regno == mips_regnum (current_gdbarch)->fp_implementation_revision)
regaddr = MIPS64_FPC_EIR;
else
error (_("Unknowable register number %d."), regno);
return regaddr;
}
/* Fetch the thread-local storage pointer for libthread_db. */
ps_err_e
@ -253,10 +321,10 @@ mips64_linux_store_registers (int regnum)
static CORE_ADDR
mips_linux_register_u_offset (int regno)
{
/* FIXME drow/2005-09-04: The hardcoded use of register_addr should go
away. This requires disentangling the various definitions of it
(particularly alpha-nat.c's). */
return register_addr (regno, 0);
if (mips_abi_regsize (current_gdbarch) == 8)
return mips64_linux_register_addr (regno);
else
return mips_linux_register_addr (regno);
}
void _initialize_mips_linux_nat (void);

View File

@ -218,42 +218,6 @@ mips_fill_fpregset (mips_elf_fpregset_t *fpregsetp, int regno)
}
}
/* Map gdb internal register number to ptrace ``address''.
These ``addresses'' are normally defined in <asm/ptrace.h>. */
static CORE_ADDR
mips_linux_register_addr (int regno, CORE_ADDR blockend)
{
int regaddr;
if (regno < 0 || regno >= NUM_REGS)
error (_("Bogon register number %d."), regno);
if (regno < 32)
regaddr = regno;
else if ((regno >= mips_regnum (current_gdbarch)->fp0)
&& (regno < mips_regnum (current_gdbarch)->fp0 + 32))
regaddr = FPR_BASE + (regno - mips_regnum (current_gdbarch)->fp0);
else if (regno == mips_regnum (current_gdbarch)->pc)
regaddr = PC;
else if (regno == mips_regnum (current_gdbarch)->cause)
regaddr = CAUSE;
else if (regno == mips_regnum (current_gdbarch)->badvaddr)
regaddr = BADVADDR;
else if (regno == mips_regnum (current_gdbarch)->lo)
regaddr = MMLO;
else if (regno == mips_regnum (current_gdbarch)->hi)
regaddr = MMHI;
else if (regno == mips_regnum (current_gdbarch)->fp_control_status)
regaddr = FPC_CSR;
else if (regno == mips_regnum (current_gdbarch)->fp_implementation_revision)
regaddr = FPC_EIR;
else
error (_("Unknowable register number %d."), regno);
return regaddr;
}
/* Support for 64-bit ABIs. */
/* Figure out where the longjmp will land.
@ -487,42 +451,6 @@ mips64_fill_fpregset (mips64_elf_fpregset_t *fpregsetp, int regno)
}
/* Map gdb internal register number to ptrace ``address''.
These ``addresses'' are normally defined in <asm/ptrace.h>. */
static CORE_ADDR
mips64_linux_register_addr (int regno, CORE_ADDR blockend)
{
int regaddr;
if (regno < 0 || regno >= NUM_REGS)
error (_("Bogon register number %d."), regno);
if (regno < 32)
regaddr = regno;
else if ((regno >= mips_regnum (current_gdbarch)->fp0)
&& (regno < mips_regnum (current_gdbarch)->fp0 + 32))
regaddr = MIPS64_FPR_BASE + (regno - FP0_REGNUM);
else if (regno == mips_regnum (current_gdbarch)->pc)
regaddr = MIPS64_PC;
else if (regno == mips_regnum (current_gdbarch)->cause)
regaddr = MIPS64_CAUSE;
else if (regno == mips_regnum (current_gdbarch)->badvaddr)
regaddr = MIPS64_BADVADDR;
else if (regno == mips_regnum (current_gdbarch)->lo)
regaddr = MIPS64_MMLO;
else if (regno == mips_regnum (current_gdbarch)->hi)
regaddr = MIPS64_MMHI;
else if (regno == mips_regnum (current_gdbarch)->fp_control_status)
regaddr = MIPS64_FPC_CSR;
else if (regno == mips_regnum (current_gdbarch)->fp_implementation_revision)
regaddr = MIPS64_FPC_EIR;
else
error (_("Unknowable register number %d."), regno);
return regaddr;
}
/* Use a local version of this function to get the correct types for
regsets, until multi-arch core support is ready. */
@ -584,35 +512,6 @@ static struct core_fns regset_core_fns =
NULL /* next */
};
/* Handle for obtaining pointer to the current register_addr()
function for a given architecture. */
static struct gdbarch_data *register_addr_data;
CORE_ADDR
register_addr (int regno, CORE_ADDR blockend)
{
CORE_ADDR (*register_addr_ptr) (int, CORE_ADDR) =
gdbarch_data (current_gdbarch, register_addr_data);
gdb_assert (register_addr_ptr != 0);
return register_addr_ptr (regno, blockend);
}
static void
set_mips_linux_register_addr (struct gdbarch *gdbarch,
CORE_ADDR (*register_addr_ptr) (int,
CORE_ADDR))
{
deprecated_set_gdbarch_data (gdbarch, register_addr_data,
register_addr_ptr);
}
static void *
init_register_addr_data (struct gdbarch *gdbarch)
{
return 0;
}
/* Check the code at PC for a dynamic linker lazy resolution stub.
Because they aren't in the .plt section, we pattern-match on the
@ -1139,7 +1038,6 @@ mips_linux_init_abi (struct gdbarch_info info,
mips_linux_get_longjmp_target);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
set_mips_linux_register_addr (gdbarch, mips_linux_register_addr);
tramp_frame_prepend_unwinder (gdbarch, &mips_linux_o32_sigframe);
tramp_frame_prepend_unwinder (gdbarch, &mips_linux_o32_rt_sigframe);
break;
@ -1148,7 +1046,6 @@ mips_linux_init_abi (struct gdbarch_info info,
mips_linux_get_longjmp_target);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
set_mips_linux_register_addr (gdbarch, mips64_linux_register_addr);
set_gdbarch_long_double_bit (gdbarch, 128);
/* These floatformats should probably be renamed. MIPS uses
the same 128-bit IEEE floating point format that IA-64 uses,
@ -1162,7 +1059,6 @@ mips_linux_init_abi (struct gdbarch_info info,
mips64_linux_get_longjmp_target);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_lp64_fetch_link_map_offsets);
set_mips_linux_register_addr (gdbarch, mips64_linux_register_addr);
set_gdbarch_long_double_bit (gdbarch, 128);
/* These floatformats should probably be renamed. MIPS uses
the same 128-bit IEEE floating point format that IA-64 uses,
@ -1191,9 +1087,6 @@ _initialize_mips_linux_tdep (void)
{
const struct bfd_arch_info *arch_info;
register_addr_data =
gdbarch_data_register_post_init (init_register_addr_data);
for (arch_info = bfd_lookup_arch (bfd_arch_mips, 0);
arch_info != NULL;
arch_info = arch_info->next)