From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: [PATCH][gdb/testsuite] Fix gdb.python/py-finish-breakpoint2.exp with -m32
Date: Mon, 18 Jan 2021 11:31:03 +0100 [thread overview]
Message-ID: <20210118103101.GA29963@delia> (raw)
Hi,
When running test-case gdb.python/py-finish-breakpoint2.exp with target board
unix/-m32, we run into:
...
(gdb) continue^M
Continuing.^M
Exception #10^M
^M
Breakpoint 3, throw_exception_1 (e=10) at py-finish-breakpoint2.cc:23^M
23 throw new int (e);^M
(gdb) FAIL: gdb.python/py-finish-breakpoint2.exp: \
check FinishBreakpoint in catch()
...
With -m64, the test passes.
Relevant bit of the source:
...
36 try
37 {
38 throw_exception_1 (10);
39 }
40 catch (const int *e)
41 {
42 std::cerr << "Exception #" << *e << std::endl;
43 }
44 i += 1; /* Break after exception 1. */
...
The -m64 scenario in more detail:
- the test-case runs to throw_exception_1.
- it installs a FinishBreakpoint, which is a temporary breakpoint set at the
return address of a frame.
- for -m64, that address is:
400c47: 83 45 e4 01 addl $0x1,-0x1c(%rbp)
which corresponds the "i += 1 at line 44"
- the test-case then continues
- an exception is throw in throw_exection_1
- the exception is caught at line 40, and a message is printed
- line 44 is executed, and the FinishBreakpoint triggers.
With -m32, we have instead:
- the address where the finish breakpoint is set is:
8048a0a: 83 c4 10 add $0x10,%esp
which is the lasn insn generated for the call at line 38
- the test-case continues
- an exception is throw in throw_exection_1
- consequently, the FinishBreakpoint is not triggered.
In conclusion, the test worked by accident for -m64, because the first insn
after the call to throw_exception_1 is also the first insn after the try.
And that just happens to be not the case for -m32.
Fix this by removing this part of the test.
Tested on x86_64-linux.
Any comments?
Thanks,
- Tom
[gdb/testsuite] Fix gdb.python/py-finish-breakpoint2.exp with -m32
gdb/testsuite/ChangeLog:
2021-01-18 Tom de Vries <tdevries@suse.de>
* gdb.python/py-finish-breakpoint2.exp: Remove part of test that
works by accident.
---
gdb/testsuite/gdb.python/py-finish-breakpoint2.exp | 6 ------
1 file changed, 6 deletions(-)
diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp b/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
index 10c4b6e81b8..4193f073996 100644
--- a/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
+++ b/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
@@ -46,12 +46,6 @@ gdb_test "source $pyfile" ".*Python script imported.*" \
gdb_breakpoint "throw_exception_1"
gdb_test "continue" "Breakpoint .*throw_exception_1.*" "run to exception 1"
-
-gdb_test "python print (len(gdb.breakpoints()))" "3" "check BP count"
-gdb_test "python ExceptionFinishBreakpoint(gdb.newest_frame())" "init ExceptionFinishBreakpoint" "set FinishBP after the exception"
-gdb_test "continue" ".*stopped at ExceptionFinishBreakpoint.*" "check FinishBreakpoint in catch()"
-gdb_test "python print (len(gdb.breakpoints()))" "3" "check finish BP removal"
-
gdb_test "continue" ".*Breakpoint.* throw_exception_1.*" "continue to second exception"
gdb_test "python ExceptionFinishBreakpoint(gdb.newest_frame())" "init ExceptionFinishBreakpoint" "set FinishBP after the exception"
gdb_test "continue" ".*exception did not finish.*" "FinishBreakpoint with exception thrown not caught"
next reply other threads:[~2021-01-18 10:31 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-18 10:31 Tom de Vries [this message]
2021-01-21 7:04 ` Simon Marchi via Gdb-patches
2021-01-21 8:29 ` Tom de Vries
2021-01-21 8:45 ` Tom de Vries
2021-01-21 14:22 ` Simon Marchi via Gdb-patches
2021-09-28 14:33 ` [RFC][gdb/python] FinishBreakPoint update Tom de Vries via Gdb-patches
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210118103101.GA29963@delia \
--to=tdevries@suse.de \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox