import gdb-1999-07-07 post reformat

This commit is contained in:
Jason Molenda
1999-07-07 20:19:36 +00:00
parent 3a4b77d8be
commit c5aa993b1f
643 changed files with 69889 additions and 65773 deletions

View File

@ -2,21 +2,22 @@
Copyright 1986, 87, 89, 91, 92, 93, 94, 95, 96, 98, 1999
Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <ctype.h>
#include "defs.h"
@ -92,7 +93,7 @@ static int print_block_frame_locals PARAMS ((struct block *,
GDB_FILE *));
static void print_frame_info_base PARAMS ((struct frame_info *, int, int, int));
static void print_stack_frame_base PARAMS ((struct frame_info *, int, int));
static void backtrace_command PARAMS ((char *, int));
@ -123,14 +124,15 @@ int selected_frame_level;
cases and in a slightly different syntax. */
int annotation_level = 0;
struct print_stack_frame_args {
struct frame_info *fi;
int level;
int source;
int args;
};
struct print_stack_frame_args
{
struct frame_info *fi;
int level;
int source;
int args;
};
static int print_stack_frame_base_stub PARAMS ((char *));
@ -141,7 +143,7 @@ static int
show_and_print_stack_frame_stub (args)
void *args;
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *)args;
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
/* Reversed order of these so tuiDo() doesn't occur
* in the middle of "Breakpoint 1 ... [location]" printing = RT
@ -160,7 +162,7 @@ static int
print_stack_frame_stub (args)
void *args;
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *)args;
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
if (tui_version)
print_frame_info (p->fi, p->level, p->source, p->args);
@ -178,7 +180,7 @@ static int
print_stack_frame_base_stub (args)
char *args;
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *)args;
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
print_frame_info_base (p->fi, p->level, p->source, p->args);
return 0;
@ -191,7 +193,7 @@ static int
print_only_stack_frame_stub (args)
void *args;
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *)args;
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
print_frame_info_base (p->fi, p->level, p->source, p->args);
return 0;
@ -273,7 +275,7 @@ print_stack_frame (fi, level, source)
args.source = source;
args.args = 1;
catch_errors (print_stack_frame_stub, (char *)&args, "", RETURN_MASK_ALL);
catch_errors (print_stack_frame_stub, (char *) &args, "", RETURN_MASK_ALL);
}
/* Print a stack frame briefly. FRAME_INFI should be the frame info
@ -302,7 +304,8 @@ print_only_stack_frame (fi, level, source)
catch_errors (print_only_stack_frame_stub, &args, "", RETURN_MASK_ALL);
}
struct print_args_args {
struct print_args_args
{
struct symbol *func;
struct frame_info *fi;
GDB_FILE *stream;
@ -317,7 +320,7 @@ print_args_stub (args)
PTR args;
{
int numargs;
struct print_args_args *p = (struct print_args_args *)args;
struct print_args_args *p = (struct print_args_args *) args;
numargs = FRAME_NUM_ARGS (p->fi);
print_frame_args (p->func, p->fi, numargs, p->stream);
@ -353,8 +356,8 @@ print_frame_info_base (fi, level, source, args)
/* On the 68k, this spends too much time in m68k_find_saved_regs. */
/* Get the value of SP_REGNUM relative to the frame. */
get_saved_register (buf, (int *)NULL, (CORE_ADDR *)NULL,
FRAME_INFO_ID (fi), SP_REGNUM, (enum lval_type *)NULL);
get_saved_register (buf, (int *) NULL, (CORE_ADDR *) NULL,
FRAME_INFO_ID (fi), SP_REGNUM, (enum lval_type *) NULL);
sp = extract_address (buf, REGISTER_RAW_SIZE (SP_REGNUM));
/* This is not a perfect test, because if a function alloca's some
@ -369,7 +372,7 @@ print_frame_info_base (fi, level, source, args)
annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
/* Do this regardless of SOURCE because we don't have any source
to list for this frame. */
to list for this frame. */
if (level >= 0)
printf_filtered ("#%-2d ", level);
annotate_function_call ();
@ -382,7 +385,7 @@ print_frame_info_base (fi, level, source, args)
annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
/* Do this regardless of SOURCE because we don't have any source
to list for this frame. */
to list for this frame. */
if (level >= 0)
printf_filtered ("#%-2d ", level);
annotate_signal_handler_caller ();
@ -407,24 +410,24 @@ print_frame_info_base (fi, level, source, args)
if (func)
{
/* In certain pathological cases, the symtabs give the wrong
function (when we are in the first function in a file which
is compiled without debugging symbols, the previous function
is compiled with debugging symbols, and the "foo.o" symbol
that is supposed to tell us where the file with debugging symbols
ends has been truncated by ar because it is longer than 15
characters). This also occurs if the user uses asm() to create
a function but not stabs for it (in a file compiled -g).
function (when we are in the first function in a file which
is compiled without debugging symbols, the previous function
is compiled with debugging symbols, and the "foo.o" symbol
that is supposed to tell us where the file with debugging symbols
ends has been truncated by ar because it is longer than 15
characters). This also occurs if the user uses asm() to create
a function but not stabs for it (in a file compiled -g).
So look in the minimal symbol tables as well, and if it comes
up with a larger address for the function use that instead.
I don't think this can ever cause any problems; there shouldn't
be any minimal symbols in the middle of a function; if this is
ever changed many parts of GDB will need to be changed (and we'll
create a find_pc_minimal_function or some such). */
So look in the minimal symbol tables as well, and if it comes
up with a larger address for the function use that instead.
I don't think this can ever cause any problems; there shouldn't
be any minimal symbols in the middle of a function; if this is
ever changed many parts of GDB will need to be changed (and we'll
create a find_pc_minimal_function or some such). */
struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
if (msymbol != NULL
&& (SYMBOL_VALUE_ADDRESS (msymbol)
&& (SYMBOL_VALUE_ADDRESS (msymbol)
> BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
{
#if 0
@ -443,31 +446,32 @@ print_frame_info_base (fi, level, source, args)
}
else
{
/* I'd like to use SYMBOL_SOURCE_NAME() here, to display
* the demangled name that we already have stored in
* the symbol table, but we stored a version with
* DMGL_PARAMS turned on, and here we don't want
* to display parameters. So call the demangler again,
* with DMGL_ANSI only. RT
* (Yes, I know that printf_symbol_filtered() will
* again try to demangle the name on the fly, but
* the issue is that if cplus_demangle() fails here,
* it'll fail there too. So we want to catch the failure
* ("demangled==NULL" case below) here, while we still
* have our hands on the function symbol.)
*/
char * demangled;
/* I'd like to use SYMBOL_SOURCE_NAME() here, to display
* the demangled name that we already have stored in
* the symbol table, but we stored a version with
* DMGL_PARAMS turned on, and here we don't want
* to display parameters. So call the demangler again,
* with DMGL_ANSI only. RT
* (Yes, I know that printf_symbol_filtered() will
* again try to demangle the name on the fly, but
* the issue is that if cplus_demangle() fails here,
* it'll fail there too. So we want to catch the failure
* ("demangled==NULL" case below) here, while we still
* have our hands on the function symbol.)
*/
char *demangled;
funname = SYMBOL_NAME (func);
funlang = SYMBOL_LANGUAGE (func);
if (funlang == language_cplus) {
demangled = cplus_demangle (funname, DMGL_ANSI);
if (demangled == NULL)
/* If the demangler fails, try the demangled name
* from the symbol table. This'll have parameters,
* but that's preferable to diplaying a mangled name.
*/
funname = SYMBOL_SOURCE_NAME (func);
}
if (funlang == language_cplus)
{
demangled = cplus_demangle (funname, DMGL_ANSI);
if (demangled == NULL)
/* If the demangler fails, try the demangled name
* from the symbol table. This'll have parameters,
* but that's preferable to diplaying a mangled name.
*/
funname = SYMBOL_SOURCE_NAME (func);
}
}
}
else
@ -513,7 +517,7 @@ print_frame_info_base (fi, level, source, args)
if (sal.symtab && sal.symtab->filename)
{
annotate_frame_source_begin ();
wrap_here (" ");
wrap_here (" ");
printf_filtered (" at ");
annotate_frame_source_file ();
printf_filtered ("%s", sal.symtab->filename);
@ -525,9 +529,9 @@ print_frame_info_base (fi, level, source, args)
}
#ifdef PC_LOAD_SEGMENT
/* If we couldn't print out function name but if can figure out what
load segment this pc value is from, at least print out some info
about its load segment. */
/* If we couldn't print out function name but if can figure out what
load segment this pc value is from, at least print out some info
about its load segment. */
if (!funname)
{
annotate_frame_where ();
@ -569,7 +573,7 @@ print_frame_info_base (fi, level, source, args)
else if (!tui_version)
print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
}
current_source_line = max (sal.line - lines_to_list/2, 1);
current_source_line = max (sal.line - lines_to_list / 2, 1);
}
if (source != 0)
set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
@ -582,9 +586,9 @@ print_frame_info_base (fi, level, source, args)
#if 0
void
stack_publish_stopped_with_no_frame()
stack_publish_stopped_with_no_frame ()
{
TUIDO(((TuiOpaqueFuncPtr)tuiUpdateOnEnd));
TUIDO (((TuiOpaqueFuncPtr) tuiUpdateOnEnd));
return;
}
@ -593,35 +597,35 @@ stack_publish_stopped_with_no_frame()
/* Show or print the frame info. If this is the tui, it will be shown in
the source display */
void
print_frame_info(fi, level, source, args)
print_frame_info (fi, level, source, args)
struct frame_info *fi;
register int level;
int source;
int args;
{
if (!tui_version)
print_frame_info_base(fi, level, source, args);
print_frame_info_base (fi, level, source, args);
else
{
if (fi && (frame_in_dummy(fi) || fi->signal_handler_caller))
print_frame_info_base(fi, level, source, args);
else
{
TUIDO(((TuiOpaqueFuncPtr)tui_vShowFrameInfo, fi));
}
}
{
if (fi && (frame_in_dummy (fi) || fi->signal_handler_caller))
print_frame_info_base (fi, level, source, args);
else
{
TUIDO (((TuiOpaqueFuncPtr) tui_vShowFrameInfo, fi));
}
}
}
/* Show the frame info. If this is the tui, it will be shown in
the source display otherwise, nothing is done */
void
show_stack_frame(fi)
show_stack_frame (fi)
struct frame_info *fi;
{
TUIDO(((TuiOpaqueFuncPtr)tui_vShowFrameInfo, fi));
TUIDO (((TuiOpaqueFuncPtr) tui_vShowFrameInfo, fi));
}
/* Read a frame specification in whatever the appropriate format is.
Call error() if the specification is in any way invalid (i.e.
this function never returns NULL). */
@ -633,22 +637,23 @@ parse_frame_specification (frame_exp)
int numargs = 0;
#define MAXARGS 4
CORE_ADDR args[MAXARGS];
if (frame_exp)
{
char *addr_string, *p;
struct cleanup *tmp_cleanup;
while (*frame_exp == ' ') frame_exp++;
while (*frame_exp == ' ')
frame_exp++;
while (*frame_exp)
{
if (numargs > MAXARGS)
error ("Too many args in frame specification");
/* Parse an argument. */
for (p = frame_exp; *p && *p != ' '; p++)
for (p = frame_exp; *p && *p != ' '; p++)
;
addr_string = savestring(frame_exp, p - frame_exp);
addr_string = savestring (frame_exp, p - frame_exp);
{
tmp_cleanup = make_cleanup (free, addr_string);
@ -657,7 +662,8 @@ parse_frame_specification (frame_exp)
}
/* Skip spaces, move to possible next arg. */
while (*p == ' ') p++;
while (*p == ' ')
p++;
frame_exp = p;
}
}
@ -673,7 +679,7 @@ parse_frame_specification (frame_exp)
{
int level = args[0];
struct frame_info *fid =
find_relative_frame (get_current_frame (), &level);
find_relative_frame (get_current_frame (), &level);
struct frame_info *tfid;
if (level == 0)
@ -708,17 +714,17 @@ parse_frame_specification (frame_exp)
while ((tfid = get_prev_frame (fid)) &&
(tfid->frame == args[0]))
fid = tfid;
/* We couldn't identify the frame as an existing frame, but
perhaps we can create one with a single argument. */
}
default:
default:
#ifdef SETUP_ARBITRARY_FRAME
return SETUP_ARBITRARY_FRAME (numargs, args);
#else
/* Usual case. Do it here rather than have everyone supply
a SETUP_ARBITRARY_FRAME that does this. */
a SETUP_ARBITRARY_FRAME that does this. */
if (numargs == 1)
return create_new_frame (args[0], 0);
error ("Too many args in frame specification");
@ -767,7 +773,7 @@ frame_info (addr_exp, from_tty)
&& !fi->next->signal_handler_caller
&& !frame_in_dummy (fi->next));
func = get_frame_function (fi);
s = find_pc_symtab(fi->pc);
s = find_pc_symtab (fi->pc);
if (func)
{
/* I'd like to use SYMBOL_SOURCE_NAME() here, to display
@ -783,19 +789,19 @@ frame_info (addr_exp, from_tty)
* ("demangled==NULL" case below) here, while we still
* have our hands on the function symbol.)
*/
char * demangled;
funname = SYMBOL_NAME (func);
funlang = SYMBOL_LANGUAGE (func);
if (funlang == language_cplus)
{
demangled = cplus_demangle (funname, DMGL_ANSI);
/* If the demangler fails, try the demangled name
* from the symbol table. This'll have parameters,
* but that's preferable to diplaying a mangled name.
*/
if (demangled == NULL)
funname = SYMBOL_SOURCE_NAME (func);
}
char *demangled;
funname = SYMBOL_NAME (func);
funlang = SYMBOL_LANGUAGE (func);
if (funlang == language_cplus)
{
demangled = cplus_demangle (funname, DMGL_ANSI);
/* If the demangler fails, try the demangled name
* from the symbol table. This'll have parameters,
* but that's preferable to diplaying a mangled name.
*/
if (demangled == NULL)
funname = SYMBOL_SOURCE_NAME (func);
}
}
else
{
@ -913,7 +919,7 @@ frame_info (addr_exp, from_tty)
if (fi->saved_regs != NULL)
{
/* The sp is special; what's returned isn't the save address, but
actually the value of the previous frame's sp. */
actually the value of the previous frame's sp. */
printf_filtered (" Previous frame's sp is ");
print_address_numeric (fi->saved_regs[SP_REGNUM], 1, gdb_stdout);
printf_filtered ("\n");
@ -937,9 +943,9 @@ frame_info (addr_exp, from_tty)
else
{
/* We could get some information about saved registers by
calling get_saved_register on each register. Which info goes
with which frame is necessarily lost, however, and I suspect
that the users don't care whether they get the info. */
calling get_saved_register on each register. Which info goes
with which frame is necessarily lost, however, and I suspect
that the users don't care whether they get the info. */
puts_filtered ("\n");
}
}
@ -1014,7 +1020,7 @@ backtrace_command_1 (count_exp, show_locals, from_tty)
QUIT;
current = get_prev_frame (current);
}
/* Will stop when CURRENT reaches the top of the stack. TRAILING
will be COUNT below it. */
while (current)
@ -1024,7 +1030,7 @@ backtrace_command_1 (count_exp, show_locals, from_tty)
current = get_prev_frame (current);
trailing_level++;
}
count = -1;
}
}
@ -1034,12 +1040,12 @@ backtrace_command_1 (count_exp, show_locals, from_tty)
if (info_verbose)
{
struct partial_symtab *ps;
/* Read in symbols for all of the frames. Need to do this in
a separate pass so that "Reading in symbols for xxx" messages
don't screw up the appearance of the backtrace. Also
if people have strong opinions against reading symbols for
backtrace this may have to be an option. */
a separate pass so that "Reading in symbols for xxx" messages
don't screw up the appearance of the backtrace. Also
if people have strong opinions against reading symbols for
backtrace this may have to be an option. */
i = count;
for (fi = trailing;
fi != NULL && i--;
@ -1059,12 +1065,12 @@ backtrace_command_1 (count_exp, show_locals, from_tty)
QUIT;
/* Don't use print_stack_frame; if an error() occurs it probably
means further attempts to backtrace would fail (on the other
hand, perhaps the code does or could be fixed to make sure
the frame->prev field gets set to NULL in that case). */
means further attempts to backtrace would fail (on the other
hand, perhaps the code does or could be fixed to make sure
the frame->prev field gets set to NULL in that case). */
print_frame_info_base (fi, trailing_level + i, 0, 1);
if (show_locals)
print_frame_local_vars(fi, 1, gdb_stdout);
print_frame_local_vars (fi, 1, gdb_stdout);
}
/* If we've stopped before the end, mention that. */
@ -1077,66 +1083,66 @@ backtrace_command (arg, from_tty)
char *arg;
int from_tty;
{
struct cleanup *old_chain = (struct cleanup *)NULL;
char **argv = (char **)NULL;
int argIndicatingFullTrace = (-1), totArgLen = 0, argc = 0;
char *argPtr = arg;
struct cleanup *old_chain = (struct cleanup *) NULL;
char **argv = (char **) NULL;
int argIndicatingFullTrace = (-1), totArgLen = 0, argc = 0;
char *argPtr = arg;
if (arg != (char *)NULL)
if (arg != (char *) NULL)
{
int i;
argv = buildargv(arg);
argv = buildargv (arg);
old_chain = make_cleanup_freeargv (argv);
argc = 0;
for (i = 0; (argv[i] != (char *)NULL); i++)
{
int j;
for (i = 0; (argv[i] != (char *) NULL); i++)
{
int j;
for (j = 0; (j < strlen(argv[i])); j++)
argv[i][j] = tolower(argv[i][j]);
for (j = 0; (j < strlen (argv[i])); j++)
argv[i][j] = tolower (argv[i][j]);
if (argIndicatingFullTrace < 0 && subset_compare (argv[i], "full"))
argIndicatingFullTrace = argc;
else
{
argc++;
totArgLen += strlen(argv[i]);
}
}
if (argIndicatingFullTrace < 0 && subset_compare (argv[i], "full"))
argIndicatingFullTrace = argc;
else
{
argc++;
totArgLen += strlen (argv[i]);
}
}
totArgLen += argc;
if (argIndicatingFullTrace >= 0)
{
if (totArgLen > 0)
{
argPtr = (char *)xmalloc(totArgLen + 1);
if (!argPtr)
nomem(0);
else
{
memset(argPtr, 0, totArgLen + 1);
for (i = 0; (i < (argc + 1)); i++)
{
if (i != argIndicatingFullTrace)
{
strcat(argPtr, argv[i]);
strcat(argPtr, " ");
}
}
}
}
else
argPtr = (char *)NULL;
}
{
if (totArgLen > 0)
{
argPtr = (char *) xmalloc (totArgLen + 1);
if (!argPtr)
nomem (0);
else
{
memset (argPtr, 0, totArgLen + 1);
for (i = 0; (i < (argc + 1)); i++)
{
if (i != argIndicatingFullTrace)
{
strcat (argPtr, argv[i]);
strcat (argPtr, " ");
}
}
}
}
else
argPtr = (char *) NULL;
}
}
backtrace_command_1 (argPtr, (argIndicatingFullTrace >= 0), from_tty);
if (argIndicatingFullTrace >= 0 && totArgLen > 0)
free(argPtr);
free (argPtr);
if (old_chain)
do_cleanups(old_chain);
do_cleanups (old_chain);
}
static void backtrace_full_command PARAMS ((char *arg, int from_tty));
@ -1147,8 +1153,8 @@ backtrace_full_command (arg, from_tty)
{
backtrace_command_1 (arg, 1, from_tty);
}
/* Print the local variables of a block B active in FRAME.
Return 1 if any variables were printed; 0 otherwise. */
@ -1177,7 +1183,7 @@ print_block_frame_locals (b, fi, num_tabs, stream)
case LOC_BASEREG:
values_printed = 1;
for (j = 0; j < num_tabs; j++)
fputs_filtered("\t", stream);
fputs_filtered ("\t", stream);
fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
fputs_filtered (" = ", stream);
print_variable_value (sym, fi, stream);
@ -1256,14 +1262,14 @@ print_frame_local_vars (fi, num_tabs, stream)
fprintf_filtered (stream, "No symbol table info available.\n");
return;
}
while (block != 0)
{
if (print_block_frame_locals (block, fi, num_tabs, stream))
values_printed = 1;
/* After handling the function's top-level block, stop.
Don't continue to its superblock, the block of
per-file symbols. */
Don't continue to its superblock, the block of
per-file symbols. */
if (BLOCK_FUNCTION (block))
break;
block = BLOCK_SUPERBLOCK (block);
@ -1334,8 +1340,8 @@ print_frame_label_vars (fi, this_level_only, stream)
return;
/* After handling the function's top-level block, stop.
Don't continue to its superblock, the block of
per-file symbols. */
Don't continue to its superblock, the block of
per-file symbols. */
if (BLOCK_FUNCTION (block))
break;
block = BLOCK_SUPERBLOCK (block);
@ -1363,9 +1369,9 @@ catch_info (ignore, from_tty)
char *ignore;
int from_tty;
{
struct symtab_and_line * sal;
struct symtab_and_line *sal;
/* Check for target support for exception handling */
/* Check for target support for exception handling */
sal = target_enable_exception_callback (EX_EVENT_CATCH, 1);
if (sal)
{
@ -1374,16 +1380,16 @@ catch_info (ignore, from_tty)
system to find the list of active handlers, etc. */
fprintf_filtered (gdb_stdout, "Info catch not supported with this target/compiler combination.\n");
#if 0
if (!selected_frame)
error ("No frame selected.");
if (!selected_frame)
error ("No frame selected.");
#endif
}
else
{
/* Assume g++ compiled code -- old v 4.16 behaviour */
/* Assume g++ compiled code -- old v 4.16 behaviour */
if (!selected_frame)
error ("No frame selected.");
error ("No frame selected.");
print_frame_label_vars (selected_frame, 0, gdb_stdout);
}
}
@ -1436,7 +1442,7 @@ print_frame_arg_vars (fi, stream)
are not combined in symbol-reading. */
sym2 = lookup_symbol (SYMBOL_NAME (sym),
b, VAR_NAMESPACE, (int *)NULL, (struct symtab **)NULL);
b, VAR_NAMESPACE, (int *) NULL, (struct symtab **) NULL);
print_variable_value (sym2, fi, stream);
fprintf_filtered (stream, "\n");
break;
@ -1469,11 +1475,11 @@ args_plus_locals_info (ignore, from_tty)
char *ignore;
int from_tty;
{
args_info(ignore, from_tty);
locals_info(ignore, from_tty);
args_info (ignore, from_tty);
locals_info (ignore, from_tty);
}
/* Select frame FI, and note that its stack level is LEVEL.
LEVEL may be -1 if an actual level number is not known. */
@ -1492,42 +1498,43 @@ select_frame (fi, level)
/* Ensure that symbols for this frame are read in. Also, determine the
source language of this frame, and switch to it if desired. */
if (fi)
{
s = find_pc_symtab (fi->pc);
if (s
&& s->language != current_language->la_language
&& s->language != language_unknown
&& language_mode == language_mode_auto) {
set_language(s->language);
{
s = find_pc_symtab (fi->pc);
if (s
&& s->language != current_language->la_language
&& s->language != language_unknown
&& language_mode == language_mode_auto)
{
set_language (s->language);
}
/* elz: this if here fixes the problem with the pc not being displayed
in the tui asm layout, with no debug symbols. The value of s
would be 0 here, and select_source_symtab would abort the
command by calling the 'error' function */
if (s)
{
TUIDO (((TuiOpaqueFuncPtr) tui_vSelectSourceSymtab, s));
}
}
/* elz: this if here fixes the problem with the pc not being displayed
in the tui asm layout, with no debug symbols. The value of s
would be 0 here, and select_source_symtab would abort the
command by calling the 'error' function*/
if (s)
{
TUIDO(((TuiOpaqueFuncPtr)tui_vSelectSourceSymtab, s));
}
}
}
/* Select frame FI, noting that its stack level is LEVEL. Also print
the stack frame and show the source if this is the tui version. */
void
select_and_print_frame(fi, level)
select_and_print_frame (fi, level)
struct frame_info *fi;
int level;
{
select_frame(fi, level);
select_frame (fi, level);
if (fi)
{
print_stack_frame(fi, level, 1);
TUIDO(((TuiOpaqueFuncPtr)tui_vCheckDataValues, fi));
print_stack_frame (fi, level, 1);
TUIDO (((TuiOpaqueFuncPtr) tui_vCheckDataValues, fi));
}
}
/* Select frame FI, noting that its stack level is LEVEL. Be silent if
not the TUI */
#if 0
@ -1537,9 +1544,9 @@ select_and_maybe_print_frame (fi, level)
int level;
{
if (!tui_version)
select_frame(fi, level);
select_frame (fi, level);
else
select_and_print_frame(fi, level);
select_and_print_frame (fi, level);
}
#endif
@ -1600,13 +1607,14 @@ find_relative_frame (frame, level_offset_ptr)
/* Going down is just as simple. */
if (*level_offset_ptr < 0)
{
while (*level_offset_ptr < 0) {
frame1 = get_next_frame (frame);
if (!frame1)
break;
frame = frame1;
(*level_offset_ptr)++;
}
while (*level_offset_ptr < 0)
{
frame1 = get_next_frame (frame);
if (!frame1)
break;
frame = frame1;
(*level_offset_ptr)++;
}
}
return frame;
}
@ -1634,12 +1642,13 @@ select_frame_command (level_exp, from_tty)
/* Try to figure out what level this frame is. But if there is
no current stack, don't error out -- let the user set one. */
frame1 = 0;
if (get_current_frame()) {
for (frame1 = get_prev_frame (0);
frame1 && frame1 != frame;
frame1 = get_prev_frame (frame1))
level++;
}
if (get_current_frame ())
{
for (frame1 = get_prev_frame (0);
frame1 && frame1 != frame;
frame1 = get_prev_frame (frame1))
level++;
}
if (!frame1)
level = 0;
@ -1668,7 +1677,7 @@ current_frame_command (level_exp, from_tty)
int from_tty;
{
if (target_has_stack == 0 || selected_frame == 0)
error ("No stack.");
error ("No stack.");
print_only_stack_frame (selected_frame, selected_frame_level, 1);
}
@ -1685,7 +1694,7 @@ up_silently_base (count_exp)
if (count_exp)
count = parse_and_eval_address (count_exp);
count1 = count;
if (target_has_stack == 0 || selected_frame == 0)
error ("No stack.");
@ -1700,7 +1709,7 @@ up_silently_command (count_exp, from_tty)
char *count_exp;
int from_tty;
{
up_silently_base(count_exp);
up_silently_base (count_exp);
if (tui_version)
print_stack_frame (selected_frame, selected_frame_level, 1);
}
@ -1725,9 +1734,9 @@ down_silently_base (count_exp)
register struct frame_info *frame;
int count = -1, count1;
if (count_exp)
count = - parse_and_eval_address (count_exp);
count = -parse_and_eval_address (count_exp);
count1 = count;
if (target_has_stack == 0 || selected_frame == 0)
error ("No stack.");
@ -1736,9 +1745,9 @@ down_silently_base (count_exp)
{
/* We only do this if count_exp is not specified. That way "down"
means to really go down (and let me know if that is
impossible), but "down 9999" can be used to mean go all the way
down without getting an error. */
means to really go down (and let me know if that is
impossible), but "down 9999" can be used to mean go all the way
down without getting an error. */
error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
}
@ -1799,7 +1808,7 @@ return_command (retval_exp, from_tty)
return_value = value_cast (return_type, return_value);
/* Make sure we have fully evaluated it, since
it might live in the stack frame we're about to pop. */
it might live in the stack frame we're about to pop. */
if (VALUE_LAZY (return_value))
value_fetch_lazy (return_value);
}
@ -1816,9 +1825,8 @@ return_command (retval_exp, from_tty)
/* NOTREACHED */
}
}
else
if (!query ("Make selected stack frame return now? "))
error ("Not confirmed.");
else if (!query ("Make selected stack frame return now? "))
error ("Not confirmed.");
}
/* Do the real work. Pop until the specified frame is current. We
@ -1826,7 +1834,7 @@ return_command (retval_exp, from_tty)
a POP_FRAME. The pc comparison makes this work even if the
selected frame shares its fp with another frame. */
while (selected_frame_addr != (frame = get_current_frame())->frame
while (selected_frame_addr != (frame = get_current_frame ())->frame
|| selected_frame_pc != frame->pc)
POP_FRAME;
@ -1918,10 +1926,10 @@ get_frame_language ()
{
register struct symtab *s;
enum language flang; /* The language of the current frame */
if (selected_frame)
{
s = find_pc_symtab(selected_frame->pc);
s = find_pc_symtab (selected_frame->pc);
if (s)
flang = s->language;
else
@ -1936,7 +1944,7 @@ get_frame_language ()
void
_initialize_stack ()
{
#if 0
#if 0
backtrace_limit = 30;
#endif
@ -1974,8 +1982,8 @@ a command file or a user-defined command.");
if (xdb_commands)
{
add_com("L", class_stack, current_frame_command,
"Print the current stack frame.\n");
add_com ("L", class_stack, current_frame_command,
"Print the current stack frame.\n");
add_com_alias ("V", "frame", class_stack, 1);
}
add_com ("select-frame", class_stack, select_frame_command,
@ -1992,7 +2000,7 @@ Use of the 'full' qualifier also prints the values of the local variables.\n");
{
add_com_alias ("t", "backtrace", class_stack, 0);
add_com ("T", class_stack, backtrace_full_command,
"Print backtrace of all stack frames, or innermost COUNT frames \n\
"Print backtrace of all stack frames, or innermost COUNT frames \n\
and the values of the local variables.\n\
With a negative argument, print outermost -COUNT frames.\n\
Usage: T <count>\n");
@ -2010,21 +2018,21 @@ Usage: T <count>\n");
add_info ("args", args_info,
"Argument variables of current stack frame.");
if (xdb_commands)
add_com("l", class_info, args_plus_locals_info,
"Argument and local variables of current stack frame.");
add_com ("l", class_info, args_plus_locals_info,
"Argument and local variables of current stack frame.");
if (dbx_commands)
add_com("func", class_stack, func_command,
"Select the stack frame that contains <func>.\nUsage: func <name>\n");
add_com ("func", class_stack, func_command,
"Select the stack frame that contains <func>.\nUsage: func <name>\n");
add_info ("catch", catch_info,
"Exceptions that can be caught in the current stack frame.");
#if 0
add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command,
"Specify maximum number of frames for \"backtrace\" to print by default.",
add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command,
"Specify maximum number of frames for \"backtrace\" to print by default.",
&setlist);
add_info ("backtrace-limit", backtrace_limit_info,
"The maximum number of frames for \"backtrace\" to print by default.");
"The maximum number of frames for \"backtrace\" to print by default.");
#endif
}