mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-28 06:20:30 +00:00
* source.c (line_info): If --fullname, display the source.
(identify_source_line), callers: Take pc as argument, rather than assuming innermost frame (emacs doesn't use this, so no one ever noticed). * symtab.h: Declare frame_file_full_name. * main.c: Don't.
This commit is contained in:
parent
b64d5e491a
commit
b9298844e5
@ -1,3 +1,12 @@
|
||||
Tue May 25 20:44:24 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* source.c (line_info): If --fullname, display the source.
|
||||
(identify_source_line), callers: Take pc as argument, rather than
|
||||
assuming innermost frame (emacs doesn't use this, so no one ever
|
||||
noticed).
|
||||
* symtab.h: Declare frame_file_full_name.
|
||||
* main.c: Don't.
|
||||
|
||||
Tue May 25 15:30:43 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
|
||||
|
||||
* breakpoint.c (catch_command_1): Fix typo in error msg.
|
||||
|
53
gdb/source.c
53
gdb/source.c
@ -106,13 +106,13 @@ static int last_line_listed;
|
||||
static int first_line_listed;
|
||||
|
||||
|
||||
/* Set the source file default for the "list" command, specifying a
|
||||
symtab. Sigh. Behavior specification: If it is called with a
|
||||
non-zero argument, that is the symtab to select. If it is not,
|
||||
first lookup "main"; if it exists, use the symtab and line it
|
||||
defines. If not, take the last symtab in the symtab lists (if it
|
||||
exists) or the last symtab in the psymtab lists (if *it* exists). If
|
||||
none of this works, report an error. */
|
||||
/* Set the source file default for the "list" command to be S.
|
||||
|
||||
If S is NULL, and we don't have a default, find one. This
|
||||
should only be called when the user actually tries to use the
|
||||
default, since we produce an error if we can't find a reasonable
|
||||
default. Also, since this can cause symbols to be read, doing it
|
||||
before we need to would make things slower than necessary. */
|
||||
|
||||
void
|
||||
select_source_symtab (s)
|
||||
@ -131,6 +131,9 @@ select_source_symtab (s)
|
||||
return;
|
||||
}
|
||||
|
||||
if (current_source_symtab)
|
||||
return;
|
||||
|
||||
/* Make the default place to list be the function `main'
|
||||
if one exists. */
|
||||
if (lookup_symbol ("main", 0, VAR_NAMESPACE, 0, NULL))
|
||||
@ -189,9 +192,6 @@ select_source_symtab (s)
|
||||
}
|
||||
}
|
||||
|
||||
if (current_source_symtab)
|
||||
return;
|
||||
|
||||
error ("Can't find a default source file");
|
||||
}
|
||||
|
||||
@ -437,8 +437,13 @@ source_info (ignore, from_tty)
|
||||
|
||||
/* Open a file named STRING, searching path PATH (dir names sep by colons)
|
||||
using mode MODE and protection bits PROT in the calls to open.
|
||||
|
||||
If TRY_CWD_FIRST, try to open ./STRING before searching PATH.
|
||||
(ie pretend the first element of PATH is ".")
|
||||
(ie pretend the first element of PATH is "."). This also indicates
|
||||
that a slash in STRING disables searching of the path (this is
|
||||
so that "exec-file ./foo" or "symbol-file ./foo" insures that you
|
||||
get that particular version of foo or an error message).
|
||||
|
||||
If FILENAMED_OPENED is non-null, set it to a newly allocated string naming
|
||||
the actual file opened (this string will always start with a "/". We
|
||||
have to take special pains to avoid doubling the "/" between the directory
|
||||
@ -468,18 +473,18 @@ openp (path, try_cwd_first, string, mode, prot, filename_opened)
|
||||
if (!path)
|
||||
path = ".";
|
||||
|
||||
/* ./foo => foo */
|
||||
while (string[0] == '.' && string[1] == '/')
|
||||
string += 2;
|
||||
|
||||
if (try_cwd_first || string[0] == '/')
|
||||
{
|
||||
filename = string;
|
||||
fd = open (filename, mode, prot);
|
||||
if (fd >= 0 || string[0] == '/')
|
||||
if (fd >= 0 || string[0] == '/' || strchr (string, '/'))
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* ./foo => foo */
|
||||
while (string[0] == '.' && string[1] == '/')
|
||||
string += 2;
|
||||
|
||||
alloclen = strlen (path) + strlen (string) + 2;
|
||||
filename = (char *) alloca (alloclen);
|
||||
fd = -1;
|
||||
@ -773,10 +778,11 @@ get_filename_and_charpos (s, fullname)
|
||||
Return 1 if successful, 0 if could not find the file. */
|
||||
|
||||
int
|
||||
identify_source_line (s, line, mid_statement)
|
||||
identify_source_line (s, line, mid_statement, pc)
|
||||
struct symtab *s;
|
||||
int line;
|
||||
int mid_statement;
|
||||
CORE_ADDR pc;
|
||||
{
|
||||
if (s->line_charpos == 0)
|
||||
get_filename_and_charpos (s, (char **)NULL);
|
||||
@ -787,7 +793,7 @@ identify_source_line (s, line, mid_statement)
|
||||
printf ("\032\032%s:%d:%d:%s:0x%x\n", s->fullname,
|
||||
line, s->line_charpos[line - 1],
|
||||
mid_statement ? "middle" : "beg",
|
||||
get_frame_pc (get_current_frame()));
|
||||
pc);
|
||||
current_source_line = line;
|
||||
first_line_listed = line;
|
||||
last_line_listed = line;
|
||||
@ -841,7 +847,7 @@ print_source_lines (s, line, stopline, noerror)
|
||||
perror_with_name (s->filename);
|
||||
}
|
||||
|
||||
stream = fdopen (desc, "r");
|
||||
stream = fdopen (desc, FOPEN_RT);
|
||||
clearerr (stream);
|
||||
|
||||
while (nlines-- > 0)
|
||||
@ -1110,6 +1116,11 @@ line_info (arg, from_tty)
|
||||
set_next_address (start_pc);
|
||||
/* Repeating "info line" should do the following line. */
|
||||
last_line_listed = sal.line + 1;
|
||||
|
||||
/* If this is the only line, show the source code. If it could
|
||||
not find the file, don't do anything special. */
|
||||
if (frame_file_full_name && sals.nelts == 1)
|
||||
identify_source_line (sal.symtab, sal.line, 0, start_pc);
|
||||
}
|
||||
else
|
||||
printf_filtered ("Line number %d is out of range for \"%s\".\n",
|
||||
@ -1159,7 +1170,7 @@ forward_search_command (regex, from_tty)
|
||||
perror_with_name (current_source_symtab->filename);
|
||||
}
|
||||
|
||||
stream = fdopen (desc, "r");
|
||||
stream = fdopen (desc, FOPEN_RT);
|
||||
clearerr (stream);
|
||||
while (1) {
|
||||
/* FIXME!!! We walk right off the end of buf if we get a long line!!! */
|
||||
@ -1231,7 +1242,7 @@ reverse_search_command (regex, from_tty)
|
||||
perror_with_name (current_source_symtab->filename);
|
||||
}
|
||||
|
||||
stream = fdopen (desc, "r");
|
||||
stream = fdopen (desc, FOPEN_RT);
|
||||
clearerr (stream);
|
||||
while (line > 1)
|
||||
{
|
||||
|
24
gdb/symtab.h
24
gdb/symtab.h
@ -469,7 +469,8 @@ enum address_class
|
||||
/* Value is in specified register. Just like LOC_REGPARM except the
|
||||
register holds the address of the argument instead of the argument
|
||||
itself. This is currently used for the passing of structs and unions
|
||||
on sparc and hppa. */
|
||||
on sparc and hppa. It is also used for call by reference where the
|
||||
address is in a register, at least by mipsread.c. */
|
||||
|
||||
LOC_REGPARM_ADDR,
|
||||
|
||||
@ -618,6 +619,23 @@ struct linetable_entry
|
||||
CORE_ADDR pc;
|
||||
};
|
||||
|
||||
/* The order of entries in the linetable is significant.
|
||||
|
||||
It should generally be in ascending line number order. Line table
|
||||
entries for a function at lines 10-40 should come before entries
|
||||
for a function at lines 50-70.
|
||||
|
||||
A for statement looks like this
|
||||
|
||||
10 0x100 - for the init/test part of a for stmt.
|
||||
20 0x200
|
||||
30 0x300
|
||||
10 0x400 - for the increment part of a for stmt.
|
||||
|
||||
FIXME: this description is incomplete. coffread.c is said to get
|
||||
the linetable order wrong (would arrange_linenos from xcoffread.c
|
||||
work for normal COFF too?). */
|
||||
|
||||
struct linetable
|
||||
{
|
||||
int nitems;
|
||||
@ -1041,8 +1059,10 @@ symbol_file_add PARAMS ((char *, int, CORE_ADDR, int, int, int));
|
||||
|
||||
/* source.c */
|
||||
|
||||
extern int frame_file_full_name; /* in stack.c */
|
||||
|
||||
extern int
|
||||
identify_source_line PARAMS ((struct symtab *, int, int));
|
||||
identify_source_line PARAMS ((struct symtab *, int, int, CORE_ADDR));
|
||||
|
||||
extern void
|
||||
print_source_lines PARAMS ((struct symtab *, int, int, int));
|
||||
|
Loading…
Reference in New Issue
Block a user