Re: [PATCH v3] Add a 'starti' command.

John Baldwin
2017-11-15T23:32:05Z

On Wednesday, November 15, 2017 08:23:41 PM Pedro Alves wrote:
> On 11/15/2017 08:11 PM, John Baldwin wrote:
> > On Friday, November 03, 2017 01:00:18 PM Yao Qi wrote:
> >> John Baldwin <jhb@FreeBSD.org> writes:
> >>
> >>> +# Continue to the start of main(). The constructor should have run so
> >>> +# 'x' should be 1.
> >>> +
> >>> +gdb_breakpoint main
> >>> +gdb_test_sequence "continue" "" {
> >>> + "\\$2 = 1"
> >>> + ".*Breakpoint .*main \\(\\) at .*starti.c.*"
> >>
> >> Here is a test failure, captured by buildbot,
> >> https://sourceware.org/ml/gdb-testers/2017-q3/msg04381.html
> >>
> >> (gdb) gdb_expect_list pattern: /\$2 = 1/
> >> continue^M
> >> Continuing.^M
> >> $2 = 1^M
> >> gdb_expect_list pattern: /.*Breakpoint .*main \(\) at .*starti.c.*/
> >> ^M
> >> Breakpoint 1, Python Exception <type 'exceptions.NameError'> Installation error: gdb.execute_unwinders function is missing: ^M
> >> main () at /home/yao/SourceCode/gnu/gdb/git/gdb/testsuite/gdb.base/starti.c:29^M
> >> 29 return 0;^M
> >> (gdb) gdb_expect_list pattern: //
> >> FAIL: gdb.base/starti.exp: continue (pattern 3 + sentinel) (timeout)
> >>
> >> Can you take a look?
> >
> > Hmm, so it seems the python exception adds a newline which throws the regex
> > match off as 'main \(\)' is now on a second line. The 'start.exp' test
> > only looks for the 'main' bit and not the preceding 'Breakpoint', so
> > something like this instead?
>
> But is the Python exception expected? From Yao's earlier paste:
>
> (gdb) gdb_expect_list pattern: /\$2 = 1/
> continue^M
> Continuing.^M
> $2 = 1^M
> gdb_expect_list pattern: /.*Breakpoint .*main \(\) at .*starti.c.*/
> ^M
> Breakpoint 1, Python Exception <type 'exceptions.NameError'> Installation error: gdb.execute_unwinders function is missing: ^M
> main () at /home/yao/SourceCode/gnu/gdb/git/gdb/testsuite/gdb.base/starti.c:29^M
> 29 return 0;^M
> (gdb) gdb_expect_list pattern: //
> FAIL: gdb.base/starti.exp: continue (pattern 3 + sentinel) (timeout)
>
> "Installation error" looks quite odd to me. Why did that happen?

That I don't know. I think I have seen similar exceptions in the past if the
python scripts were not installed to the shared data directory but python was
enabled via --with-python. I wouldn't expect a buildbot to be in that
situation.

I looked at some of the other failures referenced at the URL and found some
other results I don't quite understand. For example, for Fedora-x86_64-m32,
a test run from earlier today passed starti.exp without issues, but the test
linked above failed differently:

(gdb) gdb_expect_list pattern: /\$2 = 1/
continue
Continuing.
$2 = 1

gdb_expect_list pattern: /.*Breakpoint .*main \(\) at .*starti.c.*/
Breakpoint 1, main () at /home/gdb-buildbot-2/fedora-x86-64-4/fedora-x86-64-m32/build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.base/starti.c:29
29 return 0;
(gdb) gdb_expect_list pattern: //
FAIL: gdb.base/starti.exp: continue (pattern 3 + sentinel) (timeout)
testcase /home/gdb-buildbot-2/fedora-x86-64-4/fedora-x86-64-m32/build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.base/starti.exp completed in 10 seconds

Here the 'Breakpoint' pattern should have matched and it appears that the
implicit empty pattern used to match the prompt didn't match?

Trying to test the patch I posted earlier today I had an odd failure where
'gdb_breakpoint main' failed, but only the first time I ran the test. The
failure seemed to involve expect missing the line confirming the breakpoint
was set. Ehen I tried to reproduce this all my other trials of running the
modified test succeeded. It does look like the Fedora-i686 test from the
link failed in this way, but the failure doesn't make sense to me. It FAILs
the setting of the breakpoint before it tries to set the breakpoint:

0xf7fd5ad0 in _start () from /lib/ld-linux.so.2
(gdb) PASS: gdb.base/starti.exp: starti

(gdb) FAIL: gdb.base/starti.exp: setting breakpoint at main
gdb_expect_list pattern: /\$2 = 1/
break main
Breakpoint 1 at 0x80483f9: file /home/gdb-buildbot/fedora-x86-64-1/fedora-i686/build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.base/starti.c, line 29.
(gdb) FAIL: gdb.base/starti.exp: continue (pattern 1)
gdb_expect_list pattern: /.*Breakpoint .*main \(\) at .*starti.c.*/
gdb_expect_list pattern: //
testcase /home/gdb-buildbot/fedora-x86-64-1/fedora-i686/build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.base/starti.exp completed in 0 seconds

(Here it never runs "continue" after setting the breakpoint either, though
"continue" is the action that has the \$2 = 1 pattern in its list of
expected responses.)

--
John Baldwin