* frame.c (read_relative_register_raw_bytes_for_frame): Do not

override FP_REGNUM with frame->fp.  Update copyright.
* parse.c (num_std_regs, std_regs): Delete.
(target_map_name_to_register): Do not search std_regs.  Update
function description.
* parser-defs.h (num_std_regs, std_regs, struct std_regs): Delete
declarations.  Update copyright.
Fix PR gdb/251.
This commit is contained in:
Andrew Cagney
2002-04-09 22:14:39 +00:00
parent c3a3ccc760
commit 96cb11df6d
4 changed files with 29 additions and 101 deletions

View File

@ -1,3 +1,14 @@
2002-04-09 Andrew Cagney <ac131313@redhat.com>
* frame.c (read_relative_register_raw_bytes_for_frame): Do not
override FP_REGNUM with frame->fp. Update copyright.
* parse.c (num_std_regs, std_regs): Delete.
(target_map_name_to_register): Do not search std_regs. Update
function description.
* parser-defs.h (num_std_regs, std_regs, struct std_regs): Delete
declarations. Update copyright.
Fix PR gdb/251.
2002-04-09 Daniel Jacobowitz <drow@mvista.com> 2002-04-09 Daniel Jacobowitz <drow@mvista.com>
* gdbserver/Makefile.in: Add stamp-h target. * gdbserver/Makefile.in: Add stamp-h target.

View File

@ -1,6 +1,7 @@
/* Cache and manage the values of registers for GDB, the GNU debugger. /* Cache and manage the values of registers for GDB, the GNU debugger.
Copyright 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000, 2001
Free Software Foundation, Inc. Copyright 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000,
2001, 2002 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -182,24 +183,12 @@ get_saved_register (char *raw_buffer,
Returns 1 if could not be read, 0 if could. */ Returns 1 if could not be read, 0 if could. */
/* FIXME: This function increases the confusion between FP_REGNUM
and the virtual/pseudo-frame pointer. */
static int static int
read_relative_register_raw_bytes_for_frame (int regnum, read_relative_register_raw_bytes_for_frame (int regnum,
char *myaddr, char *myaddr,
struct frame_info *frame) struct frame_info *frame)
{ {
int optim; int optim;
if (regnum == FP_REGNUM && frame)
{
/* Put it back in target format. */
store_address (myaddr, REGISTER_RAW_SIZE (FP_REGNUM),
(LONGEST) FRAME_FP (frame));
return 0;
}
get_saved_register (myaddr, &optim, (CORE_ADDR *) NULL, frame, get_saved_register (myaddr, &optim, (CORE_ADDR *) NULL, frame,
regnum, (enum lval_type *) NULL); regnum, (enum lval_type *) NULL);

View File

@ -104,15 +104,9 @@ struct funcall
static struct funcall *funcall_chain; static struct funcall *funcall_chain;
/* Assign machine-independent names to certain registers
(unless overridden by the REGISTER_NAMES table) */
unsigned num_std_regs = 0;
struct std_regs *std_regs;
/* The generic method for targets to specify how their registers are /* The generic method for targets to specify how their registers are
named. The mapping can be derived from three sources: named. The mapping can be derived from two sources: REGISTER_NAME;
REGISTER_NAME; std_regs; or a target specific alias hook. */ or builtin regs. */
int int
target_map_name_to_register (char *str, int len) target_map_name_to_register (char *str, int len)
@ -127,12 +121,12 @@ target_map_name_to_register (char *str, int len)
return i; return i;
} }
/* Try standard aliases. */ /* Try builtin registers. */
for (i = 0; i < num_std_regs; i++) i = builtin_reg_map_name_to_regnum (str, len);
if (std_regs[i].name && len == strlen (std_regs[i].name) if (i >= 0)
&& STREQN (str, std_regs[i].name, len))
{ {
return std_regs[i].regnum; gdb_assert (i >= NUM_REGS + NUM_PSEUDO_REGS);
return i;
} }
/* Try builtin registers. */ /* Try builtin registers. */
@ -1361,63 +1355,6 @@ build_parse (void)
init_type (TYPE_CODE_INT, 1, 0, init_type (TYPE_CODE_INT, 1, 0,
"<variable (not text or data), no debug info>", "<variable (not text or data), no debug info>",
NULL); NULL);
/* create the std_regs table */
num_std_regs = 0;
#ifdef PC_REGNUM
if (PC_REGNUM >= 0)
num_std_regs++;
#endif
#ifdef FP_REGNUM
if (FP_REGNUM >= 0)
num_std_regs++;
#endif
#ifdef SP_REGNUM
if (SP_REGNUM >= 0)
num_std_regs++;
#endif
#ifdef PS_REGNUM
if (PS_REGNUM >= 0)
num_std_regs++;
#endif
/* create an empty table */
std_regs = xmalloc ((num_std_regs + 1) * sizeof *std_regs);
i = 0;
/* fill it in */
#ifdef PC_REGNUM
if (PC_REGNUM >= 0)
{
std_regs[i].name = "pc";
std_regs[i].regnum = PC_REGNUM;
i++;
}
#endif
#ifdef FP_REGNUM
if (FP_REGNUM >= 0)
{
std_regs[i].name = "fp";
std_regs[i].regnum = FP_REGNUM;
i++;
}
#endif
#ifdef SP_REGNUM
if (SP_REGNUM >= 0)
{
std_regs[i].name = "sp";
std_regs[i].regnum = SP_REGNUM;
i++;
}
#endif
#ifdef PS_REGNUM
if (PS_REGNUM >= 0)
{
std_regs[i].name = "ps";
std_regs[i].regnum = PS_REGNUM;
i++;
}
#endif
memset (&std_regs[i], 0, sizeof (std_regs[i]));
} }
void void
@ -1437,8 +1374,6 @@ _initialize_parse (void)
register_gdbarch_swap (&msym_data_symbol_type, sizeof (msym_data_symbol_type), NULL); register_gdbarch_swap (&msym_data_symbol_type, sizeof (msym_data_symbol_type), NULL);
register_gdbarch_swap (&msym_unknown_symbol_type, sizeof (msym_unknown_symbol_type), NULL); register_gdbarch_swap (&msym_unknown_symbol_type, sizeof (msym_unknown_symbol_type), NULL);
register_gdbarch_swap (&num_std_regs, sizeof (std_regs), NULL);
register_gdbarch_swap (&std_regs, sizeof (std_regs), NULL);
register_gdbarch_swap (NULL, 0, build_parse); register_gdbarch_swap (NULL, 0, build_parse);
add_show_from_set ( add_show_from_set (

View File

@ -1,6 +1,8 @@
/* Parser definitions for GDB. /* Parser definitions for GDB.
Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000 Free Software Foundation, Inc. Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
Modified from expread.y by the Department of Computer Science at the Modified from expread.y by the Department of Computer Science at the
State University of New York at Buffalo. State University of New York at Buffalo.
@ -26,15 +28,6 @@
#include "doublest.h" #include "doublest.h"
struct std_regs
{
char *name;
int regnum;
};
extern struct std_regs *std_regs;
extern unsigned num_std_regs;
extern struct expression *expout; extern struct expression *expout;
extern int expout_size; extern int expout_size;
extern int expout_ptr; extern int expout_ptr;
@ -208,8 +201,8 @@ struct op_print
}; };
/* The generic method for targets to specify how their registers are /* The generic method for targets to specify how their registers are
named. The mapping can be derived from three sources: named. The mapping can be derived from two sources: REGISTER_NAME;
REGISTER_NAME; std_regs; or a target specific alias hook. */ and builtin regs. */
extern int target_map_name_to_register (char *, int); extern int target_map_name_to_register (char *, int);