This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch] infcall: Remove gdb_assert ($sp underflow)
On Sun, 28 Feb 2010 15:35:09 +0100, Daniel Jacobowitz wrote:
> On Sat, Feb 27, 2010 at 01:46:34AM +0100, Jan Kratochvil wrote:
> > + gdb_test {sp == 0: call doubleit (1)}
>
> Except what does this do? I've never seen this syntax before, I'm
> surprised that it works.
It generated false PASS - not testing the internal error at all.
Undefined command: "sp". Try "help".
Thanks for catching it.
> I think the patch is otherwise OK.
Checked-in.
Thanks,
Jan
http://sourceware.org/ml/gdb-cvs/2010-02/msg00222.html
--- src/gdb/ChangeLog 2010/02/28 15:04:10 1.11406
+++ src/gdb/ChangeLog 2010/02/28 17:56:36 1.11407
@@ -1,3 +1,8 @@
+2010-02-28 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * infcall.c (call_function_by_hand): Remove gdb_assert on sp and old_sp.
+ New comment.
+
2010-02-28 Corinna Vinschen <vinschen@redhat.com>
* Makefile.in (SUBDIR_MI_OBS): Move mi-common.o from here...
--- src/gdb/infcall.c 2010/01/28 22:07:58 1.126
+++ src/gdb/infcall.c 2010/02/28 17:56:36 1.127
@@ -518,10 +518,9 @@
/* Stack grows up. */
sp = gdbarch_frame_align (gdbarch, old_sp + 1);
}
- gdb_assert ((gdbarch_inner_than (gdbarch, 1, 2)
- && sp <= old_sp)
- || (gdbarch_inner_than (gdbarch, 2, 1)
- && sp >= old_sp));
+ /* SP may have underflown address zero here from OLD_SP. Memory access
+ functions will probably fail in such case but that is a target's
+ problem. */
}
else
/* FIXME: cagney/2002-09-18: Hey, you loose!
--- src/gdb/testsuite/ChangeLog 2010/02/26 05:50:35 1.2154
+++ src/gdb/testsuite/ChangeLog 2010/02/28 17:56:37 1.2155
@@ -1,3 +1,8 @@
+2010-02-28 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * gdb.base/callfuncs.exp: New tests for $spval 0 and -1. Remove return.
+
2010-02-25 David S. Miller <davem@davemloft.net>
* gdb.base/catch-syscall.exp: Allow to run on sparc*-*-linux and
--- src/gdb/testsuite/gdb.base/callfuncs.exp 2010/01/01 07:32:00 1.31
+++ src/gdb/testsuite/gdb.base/callfuncs.exp 2010/02/28 17:56:37 1.32
@@ -469,5 +469,17 @@
fail "nested call dummies preserve register contents"
}
-return 0
+# GDB should not crash by internal error on $sp underflow during the inferior
+# call. It is OK it will stop on some: Cannot access memory at address 0x$hex.
+if {![target_info exists gdb,nosignals] && ![istarget "*-*-uclinux*"]} {
+ gdb_test {set $old_sp = $sp}
+
+ gdb_test {set $sp = 0}
+ gdb_test "call doubleit (1)" "" "sp == 0: call doubleit (1)"
+
+ gdb_test {set $sp = -1}
+ gdb_test "call doubleit (1)" "" "sp == -1: call doubleit (1)"
+
+ gdb_test {set $sp = $old_sp}
+}