import gdb-1999-06-07 snapshot

This commit is contained in:
Jason Molenda
1999-06-07 19:19:32 +00:00
parent eb858bb431
commit cce74817d9
55 changed files with 1634 additions and 964 deletions

View File

@@ -36,6 +36,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "opcode/mips.h"
struct frame_extra_info
{
mips_extra_func_info_t proc_desc;
int num_args;
};
/* Some MIPS boards don't support floating point while others only
support single-precision floating-point operations. See also
FP_REGISTER_DOUBLE. */
@@ -106,7 +112,16 @@ char *tmp_mips_processor_type;
/* A set of original names, to be used when restoring back to generic
registers from a specific set. */
char *mips_generic_reg_names[] = REGISTER_NAMES;
char *mips_generic_reg_names[] = MIPS_REGISTER_NAMES;
char **mips_processor_reg_names = mips_generic_reg_names;
char *
mips_register_name (i)
int i;
{
return mips_processor_reg_names[i];
}
/* Names of IDT R3041 registers. */
@@ -219,6 +234,18 @@ struct linked_proc_info
struct linked_proc_info *next;
} *linked_proc_desc_table = NULL;
void
mips_print_extra_frame_info (fi)
struct frame_info *fi;
{
if (fi
&& fi->extra_info
&& fi->extra_info->proc_desc
&& fi->extra_info->proc_desc->pdr.framereg < NUM_REGS)
printf_filtered (" frame pointer is at %s+%d\n",
REGISTER_NAME (fi->extra_info->proc_desc->pdr.framereg),
fi->extra_info->proc_desc->pdr.frameoffset);
}
/* Should the upper word of 64-bit addresses be zeroed? */
static int mask_address_p = 1;
@@ -873,7 +900,7 @@ mips_find_saved_regs (fci)
return;
}
proc_desc = fci->proc_desc;
proc_desc = fci->extra_info->proc_desc;
if (proc_desc == NULL)
/* I'm not sure how/whether this can happen. Normally when we can't
find a proc_desc, we "synthesize" one using heuristic_proc_desc
@@ -1065,7 +1092,7 @@ mips_frame_saved_pc(frame)
struct frame_info *frame;
{
CORE_ADDR saved_pc;
mips_extra_func_info_t proc_desc = frame->proc_desc;
mips_extra_func_info_t proc_desc = frame->extra_info->proc_desc;
/* We have to get the saved pc from the sigcontext
if it is a signal handler frame. */
int pcreg = frame->signal_handler_caller ? PC_REGNUM
@@ -1080,7 +1107,7 @@ mips_frame_saved_pc(frame)
}
static struct mips_extra_func_info temp_proc_desc;
static struct frame_saved_regs temp_saved_regs;
static CORE_ADDR temp_saved_regs[NUM_REGS];
/* Set a register's saved stack address in temp_saved_regs. If an address
has already been set for this register, do nothing; this way we will
@@ -1092,8 +1119,8 @@ set_reg_offset (regno, offset)
int regno;
CORE_ADDR offset;
{
if (temp_saved_regs.regs[regno] == 0)
temp_saved_regs.regs[regno] = offset;
if (temp_saved_regs[regno] == 0)
temp_saved_regs[regno] = offset;
}
@@ -1405,7 +1432,7 @@ mips32_heuristic_proc_desc(start_pc, limit_pc, next_frame, sp)
CORE_ADDR cur_pc;
CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
restart:
memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
memset (temp_saved_regs, '\0', SIZEOF_FRAME_SAVED_REGS);
PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
PROC_FRAME_ADJUST (&temp_proc_desc) = 0; /* offset of FP from SP */
for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN)
@@ -1508,7 +1535,7 @@ heuristic_proc_desc(start_pc, limit_pc, next_frame)
if (start_pc == 0) return NULL;
memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc));
memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
memset (&temp_saved_regs, '\0', SIZEOF_FRAME_SAVED_REGS);
PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
PROC_FRAME_REG (&temp_proc_desc) = SP_REGNUM;
PROC_PC_REG (&temp_proc_desc) = RA_REGNUM;
@@ -1676,7 +1703,8 @@ mips_frame_chain(frame)
}
void
init_extra_frame_info(fci)
mips_init_extra_frame_info(fromleaf, fci)
int fromleaf;
struct frame_info *fci;
{
int regnum;
@@ -1685,8 +1713,11 @@ init_extra_frame_info(fci)
mips_extra_func_info_t proc_desc =
fci->next ? cached_proc_desc : find_proc_desc(fci->pc, fci->next);
fci->extra_info = (struct frame_extra_info *)
frame_obstack_alloc (sizeof (struct frame_extra_info));
fci->saved_regs = NULL;
fci->proc_desc =
fci->extra_info->proc_desc =
proc_desc == &temp_proc_desc ? 0 : proc_desc;
if (proc_desc)
{
@@ -1711,21 +1742,21 @@ init_extra_frame_info(fci)
(CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
if (!IN_SIGTRAMP (fci->pc, name))
{
fci->saved_regs = (CORE_ADDR*)
frame_obstack_alloc (SIZEOF_FRAME_SAVED_REGS);
memcpy (fci->saved_regs, temp_saved_regs.regs, SIZEOF_FRAME_SAVED_REGS);
frame_saved_regs_zalloc (fci);
memcpy (fci->saved_regs, temp_saved_regs, SIZEOF_FRAME_SAVED_REGS);
fci->saved_regs[PC_REGNUM]
= fci->saved_regs[RA_REGNUM];
}
}
/* hack: if argument regs are saved, guess these contain args */
fci->num_args = -1; /* assume we can't tell how many args for now */
/* assume we can't tell how many args for now */
fci->extra_info->num_args = -1;
for (regnum = MIPS_LAST_ARG_REGNUM; regnum >= A0_REGNUM; regnum--)
{
if (PROC_REG_MASK(proc_desc) & (1 << regnum))
{
fci->num_args = regnum - A0_REGNUM + 1;
fci->extra_info->num_args = regnum - A0_REGNUM + 1;
break;
}
}
@@ -2109,7 +2140,7 @@ mips_pop_frame()
struct frame_info *frame = get_current_frame ();
CORE_ADDR new_sp = FRAME_FP (frame);
mips_extra_func_info_t proc_desc = frame->proc_desc;
mips_extra_func_info_t proc_desc = frame->extra_info->proc_desc;
write_register (PC_REGNUM, FRAME_SAVED_PC(frame));
if (frame->saved_regs == NULL)
@@ -3012,13 +3043,8 @@ mips_set_processor_type (str)
if (strcasecmp (str, mips_processor_type_table[i].name) == 0)
{
mips_processor_type = str;
for (j = 0; j < NUM_REGS; ++j)
/* FIXME - MIPS should be defining REGISTER_NAME() instead */
gdb_register_names[j] = mips_processor_type_table[i].regnames[j];
mips_processor_reg_names = mips_processor_type_table[i].regnames;
return 1;
/* FIXME tweak fpu flag too */
}
}