* gdb.base/cursal.exp: New file.
        * gdb.base/cursal.c: New file.
This commit is contained in:
Felix Lee
2004-11-05 08:53:19 +00:00
parent d3ed111c8c
commit c789492af8
5 changed files with 154 additions and 10 deletions

View File

@@ -1,3 +1,9 @@
2004-11-05 Felix Lee <felix+log1@specifixinc.com>
* stack.c (set_current_sal_from_frame): New function.
(print_args_stub): Use it.
(print_frame_info): Don't set sal here.
2004-11-04 Mark Kettenis <kettenis@gnu.org>
* dwarf2-frame.c (read_encoded_value): Change type of third

View File

@@ -100,6 +100,8 @@ static void print_frame (struct frame_info *fi,
int print_args,
struct symtab_and_line sal);
static void set_current_sal_from_frame (struct frame_info *, int);
static void backtrace_command (char *, int);
static void frame_info (char *, int);
@@ -128,9 +130,12 @@ struct print_stack_frame_args
static int
print_stack_frame_stub (void *args)
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
struct print_stack_frame_args *p = args;
int center = (p->print_what == SRC_LINE
|| p->print_what == SRC_AND_LOC);
print_frame_info (p->fi, p->print_level, p->print_what, p->print_args);
set_current_sal_from_frame (p->fi, center);
return 0;
}
@@ -401,6 +406,24 @@ print_args_stub (void *args)
return 0;
}
/* Set the current source and line to the location of the given
frame, if possible. When CENTER is true, adjust so the
relevant line is in the center of the next 'list'. */
static void
set_current_sal_from_frame (struct frame_info *fi, int center)
{
struct symtab_and_line sal;
find_frame_sal (fi, &sal);
if (sal.symtab)
{
if (center)
sal.line = max (sal.line - get_lines_to_list () / 2, 1);
set_current_source_symtab_and_line (&sal);
}
}
/* Print information about a frame for frame "fi" at level "level".
Used in "where" output, also used to emit breakpoint or step
messages.
@@ -477,12 +500,8 @@ print_frame_info (struct frame_info *fi, int print_level,
source_print = (print_what == SRC_LINE || print_what == SRC_AND_LOC);
if (sal.symtab)
set_current_source_symtab_and_line (&sal);
if (source_print && sal.symtab)
{
struct symtab_and_line cursal;
int done = 0;
int mid_statement = ((print_what == SRC_LINE)
&& (get_frame_pc (fi) != sal.pc));
@@ -513,11 +532,6 @@ print_frame_info (struct frame_info *fi, int print_level,
print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
}
}
/* Make sure we have at least a default source file */
set_default_source_symtab_and_line ();
cursal = get_current_source_symtab_and_line ();
cursal.line = max (sal.line - get_lines_to_list () / 2, 1);
set_current_source_symtab_and_line (&cursal);
}
if (print_what != LOCATION)

View File

@@ -1,3 +1,8 @@
2004-11-05 Felix Lee <felix+log1@specifixinc.com>
* gdb.base/cursal.exp: New file.
* gdb.base/cursal.c: New file.
2004-11-03 Andrew Cagney <cagney@gnu.org>
* gdb.base/savedregs.exp, gdb.base/savedregs.c: New files.

View File

@@ -0,0 +1,39 @@
/* Copyright 2004 Free Software Foundation, Inc.
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 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. */
void
func2 ()
{
int v2 = 2;
}
void
func1 ()
{
func2 ();
}
int
main ()
{
int v0 = 0;
func1 ();
}

View File

@@ -0,0 +1,80 @@
# Copyright 2004 Free Software Foundation, Inc.
#
# 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.
#
# 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.
if $tracelevel {
strace $tracelevel
}
set prms_id 0
set bug_id 0
set testfile "cursal"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != ""} {
untested "Couldn't compile $srcfile"
return -1
}
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_test "set listsize 1" \
".*"
# initial sal should be first statement in main
gdb_test "list" \
"v0 = 0;" \
"list before run"
if {! [runto_main]} {
return -1
}
gdb_test "list" \
"v0 = 0;" \
"list in main"
if {! [runto "func2"]} {
return -1
}
gdb_test "list" \
"v2 = 2;" \
"list in func2"
# make sure backtrace doesn't change current source location.
gdb_test "backtrace" \
".*"
gdb_test "list -1" \
"v2 = 2;" \
"list after backtrace"
# check the window
gdb_test "set listsize 3" \
".*"
if {! [runto_main]} {
return -1
}
gdb_test "list" \
"func1 \\(\\);" \
"list size 3"
return 0