* mips-tdep.c: Remove unused #ifndef NUMERIC_REG_NAMES and add comment.

This commit is contained in:
Jim Kingdon 1993-08-17 22:37:25 +00:00
parent da6102634a
commit 48be4c355a
2 changed files with 103 additions and 57 deletions

View File

@ -1,3 +1,7 @@
Tue Aug 17 11:14:25 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
* mips-tdep.c: Remove unused #ifndef NUMERIC_REG_NAMES and add comment.
Tue Aug 17 15:10:04 1993 K. Richard Pixley (rich@sendai.cygnus.com) Tue Aug 17 15:10:04 1993 K. Richard Pixley (rich@sendai.cygnus.com)
* config/m88k/tm-m88k.h: Fix typo in comment. * config/m88k/tm-m88k.h: Fix typo in comment.

View File

@ -256,8 +256,23 @@ find_proc_desc(pc, next_frame)
{ {
mips_extra_func_info_t proc_desc; mips_extra_func_info_t proc_desc;
struct block *b = block_for_pc(pc); struct block *b = block_for_pc(pc);
struct symbol *sym = struct symbol *sym;
b ? lookup_symbol(MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE, 0, NULL) : NULL; CORE_ADDR startaddr;
find_pc_partial_function (pc, NULL, &startaddr, NULL);
if (b == NULL)
sym = NULL;
else
{
if (startaddr > BLOCK_START (b))
/* This is the "pathological" case referred to in a comment in
print_frame_info. It might be better to move this check into
symbol reading. */
sym = NULL;
else
sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE,
0, NULL);
}
if (sym) if (sym)
{ {
@ -300,8 +315,11 @@ find_proc_desc(pc, next_frame)
&& PROC_HIGH_ADDR(&link->info) > pc) && PROC_HIGH_ADDR(&link->info) > pc)
return &link->info; return &link->info;
if (startaddr == 0)
startaddr = heuristic_proc_start (pc);
proc_desc = proc_desc =
heuristic_proc_desc (heuristic_proc_start (pc), pc, next_frame); heuristic_proc_desc (startaddr, pc, next_frame);
} }
return proc_desc; return proc_desc;
} }
@ -359,14 +377,33 @@ init_extra_frame_info(fci)
/* If this is the innermost frame, and we are still in the /* If this is the innermost frame, and we are still in the
prologue (loosely defined), then the registers may not have prologue (loosely defined), then the registers may not have
been saved yet. But they haven't been clobbered either, so been saved yet. */
it's fine to say they have not been saved. */
if (fci->next == NULL if (fci->next == NULL
&& !PROC_DESC_IS_DUMMY(proc_desc) && !PROC_DESC_IS_DUMMY(proc_desc)
&& mips_in_lenient_prologue (PROC_LOW_ADDR (proc_desc), fci->pc)) && mips_in_lenient_prologue (PROC_LOW_ADDR (proc_desc), fci->pc))
/* We already zeroed the saved regs. */ {
; /* Can't just say that the registers are not saved, because they
else if (proc_desc == &temp_proc_desc) might get clobbered halfway through the prologue.
heuristic_proc_desc already has the right code to figure out
exactly what has been saved, so use it. As far as I know we
could be doing this (as we do on the 68k, for example)
regardless of whether we are in the prologue; I'm leaving in
the check for being in the prologue only out of conservatism
(I'm not sure whether heuristic_proc_desc handles all cases,
for example).
This stuff is ugly (and getting uglier by the minute). Probably
the best way to clean it up is to ignore the proc_desc's from
the symbols altogher, and get all the information we need by
examining the prologue (provided we can make the prologue
examining code good enough to get all the cases...). */
proc_desc =
heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
fci->pc,
fci->next);
}
if (proc_desc == &temp_proc_desc)
*fci->saved_regs = temp_saved_regs; *fci->saved_regs = temp_saved_regs;
else else
{ {
@ -648,11 +685,14 @@ mips_print_register (regnum, all)
printf_filtered ("); "); printf_filtered ("); ");
} }
fputs_filtered (reg_names[regnum], stdout); fputs_filtered (reg_names[regnum], stdout);
#ifndef NUMERIC_REG_NAMES
/* The problem with printing numeric register names (r26, etc.) is that
the user can't use them on input. Probably the best solution is to
fix it so that either the numeric or the funky (a2, etc.) names
are accepted on input. */
if (regnum < 32) if (regnum < 32)
printf_filtered ("(r%d): ", regnum); printf_filtered ("(r%d): ", regnum);
else else
#endif
printf_filtered (": "); printf_filtered (": ");
/* If virtual format is floating, print it that way. */ /* If virtual format is floating, print it that way. */
@ -672,6 +712,8 @@ mips_print_register (regnum, all)
if (val == 0) if (val == 0)
printf_filtered ("0"); printf_filtered ("0");
else if (all) else if (all)
/* FIXME: We should be printing this in a fixed field width, so that
registers line up. */
printf_filtered (local_hex_format(), val); printf_filtered (local_hex_format(), val);
else else
printf_filtered ("%s=%d", local_hex_string(val), val); printf_filtered ("%s=%d", local_hex_string(val), val);