mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
2004-01-17 Andrew Cagney <cagney@redhat.com>
* gdbarch.sh (DEPRECATED_NPC_REGNUM): Delete. * gdbarch.h, gdbarch.c: Re-generate. * procfs.c (procfs_fetch_registers): Delete reference to DEPRECATED_NPC_REGNUM. (procfs_store_registers): Ditto. * regcache.c (generic_target_write_pc): Simplify. * lynx-nat.c: Delete #ifdef SPARC code. Not used. Index: doc/ChangeLog 2004-01-17 Andrew Cagney <cagney@redhat.com> * gdbint.texinfo (Target Architecture Definition): Delete documentation on DEPRECATED_NPC_REGNUM.
This commit is contained in:
parent
a698f53eb9
commit
afb18d0f3d
@ -1,5 +1,13 @@
|
||||
2004-01-17 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* gdbarch.sh (DEPRECATED_NPC_REGNUM): Delete.
|
||||
* gdbarch.h, gdbarch.c: Re-generate.
|
||||
* procfs.c (procfs_fetch_registers): Delete reference to
|
||||
DEPRECATED_NPC_REGNUM.
|
||||
(procfs_store_registers): Ditto.
|
||||
* regcache.c (generic_target_write_pc): Simplify.
|
||||
* lynx-nat.c: Delete #ifdef SPARC code. Not used.
|
||||
|
||||
* core-sol2.c (fetch_core_registers): Replace
|
||||
DEPRECATED_NPC_REGNUM with equivalent tdep value.
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-01-17 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* gdbint.texinfo (Target Architecture Definition): Delete
|
||||
documentation on DEPRECATED_NPC_REGNUM.
|
||||
|
||||
2004-01-13 Daniel Jacobowitz <drow@mvista.com>
|
||||
|
||||
* gdb.texinfo: Update copyright year. Mention that set
|
||||
|
@ -3715,13 +3715,6 @@ be the number (greater than or equal to zero) of that register.
|
||||
This should only need to be defined if @code{TARGET_READ_PC} and
|
||||
@code{TARGET_WRITE_PC} are not defined.
|
||||
|
||||
@item DEPRECATED_NPC_REGNUM
|
||||
@findex DEPRECATED_NPC_REGNUM
|
||||
The number of the ``next program counter'' register, if defined.
|
||||
|
||||
@code{DEPRECATED_NPC_REGNUM} has been replaced by @code{TARGET_WRITE_PC}
|
||||
(@pxref{TARGET_WRITE_PC}).
|
||||
|
||||
@item PARM_BOUNDARY
|
||||
@findex PARM_BOUNDARY
|
||||
If non-zero, round arguments to a boundary of this many bits before
|
||||
|
@ -137,7 +137,6 @@ struct gdbarch
|
||||
int pc_regnum;
|
||||
int ps_regnum;
|
||||
int fp0_regnum;
|
||||
int deprecated_npc_regnum;
|
||||
gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum;
|
||||
gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum;
|
||||
gdbarch_dwarf_reg_to_regnum_ftype *dwarf_reg_to_regnum;
|
||||
@ -310,7 +309,6 @@ struct gdbarch startup_gdbarch =
|
||||
-1, /* pc_regnum */
|
||||
-1, /* ps_regnum */
|
||||
0, /* fp0_regnum */
|
||||
0, /* deprecated_npc_regnum */
|
||||
0, /* stab_reg_to_regnum */
|
||||
0, /* ecoff_reg_to_regnum */
|
||||
0, /* dwarf_reg_to_regnum */
|
||||
@ -493,7 +491,6 @@ gdbarch_alloc (const struct gdbarch_info *info,
|
||||
current_gdbarch->pc_regnum = -1;
|
||||
current_gdbarch->ps_regnum = -1;
|
||||
current_gdbarch->fp0_regnum = -1;
|
||||
current_gdbarch->deprecated_npc_regnum = -1;
|
||||
current_gdbarch->stab_reg_to_regnum = no_op_reg_to_regnum;
|
||||
current_gdbarch->ecoff_reg_to_regnum = no_op_reg_to_regnum;
|
||||
current_gdbarch->dwarf_reg_to_regnum = no_op_reg_to_regnum;
|
||||
@ -630,7 +627,6 @@ verify_gdbarch (struct gdbarch *current_gdbarch)
|
||||
/* Skip verify of pc_regnum, invalid_p == 0 */
|
||||
/* Skip verify of ps_regnum, invalid_p == 0 */
|
||||
/* Skip verify of fp0_regnum, invalid_p == 0 */
|
||||
/* Skip verify of deprecated_npc_regnum, invalid_p == 0 */
|
||||
/* Skip verify of stab_reg_to_regnum, invalid_p == 0 */
|
||||
/* Skip verify of ecoff_reg_to_regnum, invalid_p == 0 */
|
||||
/* Skip verify of dwarf_reg_to_regnum, invalid_p == 0 */
|
||||
@ -1370,14 +1366,6 @@ gdbarch_dump (struct gdbarch *current_gdbarch, struct ui_file *file)
|
||||
"gdbarch_dump: DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE = %d\n",
|
||||
DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE);
|
||||
#endif
|
||||
#ifdef DEPRECATED_NPC_REGNUM
|
||||
fprintf_unfiltered (file,
|
||||
"gdbarch_dump: DEPRECATED_NPC_REGNUM # %s\n",
|
||||
XSTRING (DEPRECATED_NPC_REGNUM));
|
||||
fprintf_unfiltered (file,
|
||||
"gdbarch_dump: DEPRECATED_NPC_REGNUM = %d\n",
|
||||
DEPRECATED_NPC_REGNUM);
|
||||
#endif
|
||||
#ifdef DEPRECATED_PC_IN_CALL_DUMMY_P
|
||||
fprintf_unfiltered (file,
|
||||
"gdbarch_dump: %s # %s\n",
|
||||
@ -2986,23 +2974,6 @@ set_gdbarch_fp0_regnum (struct gdbarch *gdbarch,
|
||||
gdbarch->fp0_regnum = fp0_regnum;
|
||||
}
|
||||
|
||||
int
|
||||
gdbarch_deprecated_npc_regnum (struct gdbarch *gdbarch)
|
||||
{
|
||||
gdb_assert (gdbarch != NULL);
|
||||
/* Skip verify of deprecated_npc_regnum, invalid_p == 0 */
|
||||
if (gdbarch_debug >= 2)
|
||||
fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_npc_regnum called\n");
|
||||
return gdbarch->deprecated_npc_regnum;
|
||||
}
|
||||
|
||||
void
|
||||
set_gdbarch_deprecated_npc_regnum (struct gdbarch *gdbarch,
|
||||
int deprecated_npc_regnum)
|
||||
{
|
||||
gdbarch->deprecated_npc_regnum = deprecated_npc_regnum;
|
||||
}
|
||||
|
||||
int
|
||||
gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int stab_regnr)
|
||||
{
|
||||
|
@ -376,18 +376,6 @@ extern void set_gdbarch_fp0_regnum (struct gdbarch *gdbarch, int fp0_regnum);
|
||||
#define FP0_REGNUM (gdbarch_fp0_regnum (current_gdbarch))
|
||||
#endif
|
||||
|
||||
/* Replace DEPRECATED_NPC_REGNUM with an implementation of WRITE_PC
|
||||
that updates PC, NPC and even NNPC. */
|
||||
|
||||
extern int gdbarch_deprecated_npc_regnum (struct gdbarch *gdbarch);
|
||||
extern void set_gdbarch_deprecated_npc_regnum (struct gdbarch *gdbarch, int deprecated_npc_regnum);
|
||||
#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_NPC_REGNUM)
|
||||
#error "Non multi-arch definition of DEPRECATED_NPC_REGNUM"
|
||||
#endif
|
||||
#if !defined (DEPRECATED_NPC_REGNUM)
|
||||
#define DEPRECATED_NPC_REGNUM (gdbarch_deprecated_npc_regnum (current_gdbarch))
|
||||
#endif
|
||||
|
||||
/* Convert stab register number (from `r' declaration) to a gdb REGNUM. */
|
||||
|
||||
typedef int (gdbarch_stab_reg_to_regnum_ftype) (int stab_regnr);
|
||||
|
@ -454,9 +454,6 @@ v:2:SP_REGNUM:int:sp_regnum::::-1:-1::0
|
||||
v:2:PC_REGNUM:int:pc_regnum::::-1:-1::0
|
||||
v:2:PS_REGNUM:int:ps_regnum::::-1:-1::0
|
||||
v:2:FP0_REGNUM:int:fp0_regnum::::0:-1::0
|
||||
# Replace DEPRECATED_NPC_REGNUM with an implementation of WRITE_PC
|
||||
# that updates PC, NPC and even NNPC.
|
||||
v:2:DEPRECATED_NPC_REGNUM:int:deprecated_npc_regnum::::0:-1::0
|
||||
# Convert stab register number (from \`r\' declaration) to a gdb REGNUM.
|
||||
f:2:STAB_REG_TO_REGNUM:int:stab_reg_to_regnum:int stab_regnr:stab_regnr:::no_op_reg_to_regnum::0
|
||||
# Provide a default mapping from a ecoff register number to a gdb REGNUM.
|
||||
|
208
gdb/lynx-nat.c
208
gdb/lynx-nat.c
@ -256,214 +256,6 @@ static int regmap[] =
|
||||
|
||||
#endif /* rs6000 */
|
||||
|
||||
#ifdef SPARC
|
||||
|
||||
/* This routine handles some oddball cases for Sparc registers and LynxOS.
|
||||
In partucular, it causes refs to G0, g5->7, and all fp regs to return zero.
|
||||
It also handles knows where to find the I & L regs on the stack. */
|
||||
|
||||
void
|
||||
fetch_inferior_registers (int regno)
|
||||
{
|
||||
int whatregs = 0;
|
||||
|
||||
#define WHATREGS_FLOAT 1
|
||||
#define WHATREGS_GEN 2
|
||||
#define WHATREGS_STACK 4
|
||||
|
||||
if (regno == -1)
|
||||
whatregs = WHATREGS_FLOAT | WHATREGS_GEN | WHATREGS_STACK;
|
||||
else if (regno >= L0_REGNUM && regno <= I7_REGNUM)
|
||||
whatregs = WHATREGS_STACK;
|
||||
else if (regno >= FP0_REGNUM && regno < FP0_REGNUM + 32)
|
||||
whatregs = WHATREGS_FLOAT;
|
||||
else
|
||||
whatregs = WHATREGS_GEN;
|
||||
|
||||
if (whatregs & WHATREGS_GEN)
|
||||
{
|
||||
struct econtext ec; /* general regs */
|
||||
char buf[MAX_REGISTER_SIZE];
|
||||
int retval;
|
||||
int i;
|
||||
|
||||
errno = 0;
|
||||
retval = ptrace (PTRACE_GETREGS, PIDGET (inferior_ptid),
|
||||
(PTRACE_ARG3_TYPE) & ec, 0);
|
||||
if (errno)
|
||||
perror_with_name ("ptrace(PTRACE_GETREGS)");
|
||||
|
||||
memset (buf, 0, DEPRECATED_REGISTER_RAW_SIZE (G0_REGNUM));
|
||||
supply_register (G0_REGNUM, buf);
|
||||
supply_register (TBR_REGNUM, (char *) &ec.tbr);
|
||||
|
||||
memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (G1_REGNUM)], &ec.g1,
|
||||
4 * DEPRECATED_REGISTER_RAW_SIZE (G1_REGNUM));
|
||||
for (i = G1_REGNUM; i <= G1_REGNUM + 3; i++)
|
||||
deprecated_register_valid[i] = 1;
|
||||
|
||||
supply_register (PS_REGNUM, (char *) &ec.psr);
|
||||
supply_register (Y_REGNUM, (char *) &ec.y);
|
||||
supply_register (PC_REGNUM, (char *) &ec.pc);
|
||||
supply_register (DEPRECATED_NPC_REGNUM, (char *) &ec.npc);
|
||||
supply_register (WIM_REGNUM, (char *) &ec.wim);
|
||||
|
||||
memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (O0_REGNUM)], ec.o,
|
||||
8 * DEPRECATED_REGISTER_RAW_SIZE (O0_REGNUM));
|
||||
for (i = O0_REGNUM; i <= O0_REGNUM + 7; i++)
|
||||
deprecated_register_valid[i] = 1;
|
||||
}
|
||||
|
||||
if (whatregs & WHATREGS_STACK)
|
||||
{
|
||||
CORE_ADDR sp;
|
||||
int i;
|
||||
|
||||
sp = read_register (SP_REGNUM);
|
||||
|
||||
target_read_memory (sp + FRAME_SAVED_I0,
|
||||
&deprecated_registers[DEPRECATED_REGISTER_BYTE (I0_REGNUM)],
|
||||
8 * DEPRECATED_REGISTER_RAW_SIZE (I0_REGNUM));
|
||||
for (i = I0_REGNUM; i <= I7_REGNUM; i++)
|
||||
deprecated_register_valid[i] = 1;
|
||||
|
||||
target_read_memory (sp + FRAME_SAVED_L0,
|
||||
&deprecated_registers[DEPRECATED_REGISTER_BYTE (L0_REGNUM)],
|
||||
8 * DEPRECATED_REGISTER_RAW_SIZE (L0_REGNUM));
|
||||
for (i = L0_REGNUM; i <= L0_REGNUM + 7; i++)
|
||||
deprecated_register_valid[i] = 1;
|
||||
}
|
||||
|
||||
if (whatregs & WHATREGS_FLOAT)
|
||||
{
|
||||
struct fcontext fc; /* fp regs */
|
||||
int retval;
|
||||
int i;
|
||||
|
||||
errno = 0;
|
||||
retval = ptrace (PTRACE_GETFPREGS, PIDGET (inferior_ptid),
|
||||
(PTRACE_ARG3_TYPE) & fc, 0);
|
||||
if (errno)
|
||||
perror_with_name ("ptrace(PTRACE_GETFPREGS)");
|
||||
|
||||
memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (FP0_REGNUM)], fc.f.fregs,
|
||||
32 * DEPRECATED_REGISTER_RAW_SIZE (FP0_REGNUM));
|
||||
for (i = FP0_REGNUM; i <= FP0_REGNUM + 31; i++)
|
||||
deprecated_register_valid[i] = 1;
|
||||
|
||||
supply_register (FPS_REGNUM, (char *) &fc.fsr);
|
||||
}
|
||||
}
|
||||
|
||||
/* This routine handles storing of the I & L regs for the Sparc. The trick
|
||||
here is that they actually live on the stack. The really tricky part is
|
||||
that when changing the stack pointer, the I & L regs must be written to
|
||||
where the new SP points, otherwise the regs will be incorrect when the
|
||||
process is started up again. We assume that the I & L regs are valid at
|
||||
this point. */
|
||||
|
||||
void
|
||||
store_inferior_registers (int regno)
|
||||
{
|
||||
int whatregs = 0;
|
||||
|
||||
if (regno == -1)
|
||||
whatregs = WHATREGS_FLOAT | WHATREGS_GEN | WHATREGS_STACK;
|
||||
else if (regno >= L0_REGNUM && regno <= I7_REGNUM)
|
||||
whatregs = WHATREGS_STACK;
|
||||
else if (regno >= FP0_REGNUM && regno < FP0_REGNUM + 32)
|
||||
whatregs = WHATREGS_FLOAT;
|
||||
else if (regno == SP_REGNUM)
|
||||
whatregs = WHATREGS_STACK | WHATREGS_GEN;
|
||||
else
|
||||
whatregs = WHATREGS_GEN;
|
||||
|
||||
if (whatregs & WHATREGS_GEN)
|
||||
{
|
||||
struct econtext ec; /* general regs */
|
||||
int retval;
|
||||
|
||||
ec.tbr = read_register (TBR_REGNUM);
|
||||
memcpy (&ec.g1, &deprecated_registers[DEPRECATED_REGISTER_BYTE (G1_REGNUM)],
|
||||
4 * DEPRECATED_REGISTER_RAW_SIZE (G1_REGNUM));
|
||||
|
||||
ec.psr = read_register (PS_REGNUM);
|
||||
ec.y = read_register (Y_REGNUM);
|
||||
ec.pc = read_register (PC_REGNUM);
|
||||
ec.npc = read_register (DEPRECATED_NPC_REGNUM);
|
||||
ec.wim = read_register (WIM_REGNUM);
|
||||
|
||||
memcpy (ec.o, &deprecated_registers[DEPRECATED_REGISTER_BYTE (O0_REGNUM)],
|
||||
8 * DEPRECATED_REGISTER_RAW_SIZE (O0_REGNUM));
|
||||
|
||||
errno = 0;
|
||||
retval = ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
|
||||
(PTRACE_ARG3_TYPE) & ec, 0);
|
||||
if (errno)
|
||||
perror_with_name ("ptrace(PTRACE_SETREGS)");
|
||||
}
|
||||
|
||||
if (whatregs & WHATREGS_STACK)
|
||||
{
|
||||
int regoffset;
|
||||
CORE_ADDR sp;
|
||||
|
||||
sp = read_register (SP_REGNUM);
|
||||
|
||||
if (regno == -1 || regno == SP_REGNUM)
|
||||
{
|
||||
if (!deprecated_register_valid[L0_REGNUM + 5])
|
||||
internal_error (__FILE__, __LINE__, "failed internal consistency check");
|
||||
target_write_memory (sp + FRAME_SAVED_I0,
|
||||
&deprecated_registers[DEPRECATED_REGISTER_BYTE (I0_REGNUM)],
|
||||
8 * DEPRECATED_REGISTER_RAW_SIZE (I0_REGNUM));
|
||||
|
||||
target_write_memory (sp + FRAME_SAVED_L0,
|
||||
&deprecated_registers[DEPRECATED_REGISTER_BYTE (L0_REGNUM)],
|
||||
8 * DEPRECATED_REGISTER_RAW_SIZE (L0_REGNUM));
|
||||
}
|
||||
else if (regno >= L0_REGNUM && regno <= I7_REGNUM)
|
||||
{
|
||||
if (!deprecated_register_valid[regno])
|
||||
internal_error (__FILE__, __LINE__, "failed internal consistency check");
|
||||
if (regno >= L0_REGNUM && regno <= L0_REGNUM + 7)
|
||||
regoffset = DEPRECATED_REGISTER_BYTE (regno) - DEPRECATED_REGISTER_BYTE (L0_REGNUM)
|
||||
+ FRAME_SAVED_L0;
|
||||
else
|
||||
regoffset = DEPRECATED_REGISTER_BYTE (regno) - DEPRECATED_REGISTER_BYTE (I0_REGNUM)
|
||||
+ FRAME_SAVED_I0;
|
||||
target_write_memory (sp + regoffset,
|
||||
&deprecated_registers[DEPRECATED_REGISTER_BYTE (regno)],
|
||||
DEPRECATED_REGISTER_RAW_SIZE (regno));
|
||||
}
|
||||
}
|
||||
|
||||
if (whatregs & WHATREGS_FLOAT)
|
||||
{
|
||||
struct fcontext fc; /* fp regs */
|
||||
int retval;
|
||||
|
||||
/* We read fcontext first so that we can get good values for fq_t... */
|
||||
errno = 0;
|
||||
retval = ptrace (PTRACE_GETFPREGS, PIDGET (inferior_ptid),
|
||||
(PTRACE_ARG3_TYPE) & fc, 0);
|
||||
if (errno)
|
||||
perror_with_name ("ptrace(PTRACE_GETFPREGS)");
|
||||
|
||||
memcpy (fc.f.fregs, &deprecated_registers[DEPRECATED_REGISTER_BYTE (FP0_REGNUM)],
|
||||
32 * DEPRECATED_REGISTER_RAW_SIZE (FP0_REGNUM));
|
||||
|
||||
fc.fsr = read_register (FPS_REGNUM);
|
||||
|
||||
errno = 0;
|
||||
retval = ptrace (PTRACE_SETFPREGS, PIDGET (inferior_ptid),
|
||||
(PTRACE_ARG3_TYPE) & fc, 0);
|
||||
if (errno)
|
||||
perror_with_name ("ptrace(PTRACE_SETFPREGS)");
|
||||
}
|
||||
}
|
||||
#endif /* SPARC */
|
||||
|
||||
#if defined (I386) || defined (M68K) || defined (rs6000)
|
||||
|
||||
/* Return the offset relative to the start of the per-thread data to the
|
||||
|
18
gdb/procfs.c
18
gdb/procfs.c
@ -3703,11 +3703,10 @@ procfs_fetch_registers (int regno)
|
||||
|
||||
if (FP0_REGNUM >= 0) /* need floating point? */
|
||||
{
|
||||
if ((regno >= 0 && regno < FP0_REGNUM) ||
|
||||
regno == PC_REGNUM ||
|
||||
(DEPRECATED_NPC_REGNUM >= 0 && regno == DEPRECATED_NPC_REGNUM) ||
|
||||
regno == DEPRECATED_FP_REGNUM ||
|
||||
regno == SP_REGNUM)
|
||||
if ((regno >= 0 && regno < FP0_REGNUM)
|
||||
|| regno == PC_REGNUM
|
||||
|| regno == DEPRECATED_FP_REGNUM
|
||||
|| regno == SP_REGNUM)
|
||||
return; /* not a floating point register */
|
||||
|
||||
if ((fpregs = proc_get_fpregs (pi)) == NULL)
|
||||
@ -3777,11 +3776,10 @@ procfs_store_registers (int regno)
|
||||
|
||||
if (FP0_REGNUM >= 0) /* need floating point? */
|
||||
{
|
||||
if ((regno >= 0 && regno < FP0_REGNUM) ||
|
||||
regno == PC_REGNUM ||
|
||||
(DEPRECATED_NPC_REGNUM >= 0 && regno == DEPRECATED_NPC_REGNUM) ||
|
||||
regno == DEPRECATED_FP_REGNUM ||
|
||||
regno == SP_REGNUM)
|
||||
if ((regno >= 0 && regno < FP0_REGNUM)
|
||||
|| regno == PC_REGNUM
|
||||
|| regno == DEPRECATED_FP_REGNUM
|
||||
|| regno == SP_REGNUM)
|
||||
return; /* not a floating point register */
|
||||
|
||||
if ((fpregs = proc_get_fpregs (pi)) == NULL)
|
||||
|
@ -1351,15 +1351,11 @@ read_pc (void)
|
||||
void
|
||||
generic_target_write_pc (CORE_ADDR pc, ptid_t ptid)
|
||||
{
|
||||
#ifdef PC_REGNUM
|
||||
if (PC_REGNUM >= 0)
|
||||
write_register_pid (PC_REGNUM, pc, ptid);
|
||||
if (DEPRECATED_NPC_REGNUM >= 0)
|
||||
write_register_pid (DEPRECATED_NPC_REGNUM, pc + 4, ptid);
|
||||
#else
|
||||
internal_error (__FILE__, __LINE__,
|
||||
"generic_target_write_pc");
|
||||
#endif
|
||||
else
|
||||
internal_error (__FILE__, __LINE__,
|
||||
"generic_target_write_pc");
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user