Re: [PATCH] [SH] Prologue skipping if there is none

Thomas Schwinge
2012-02-21T14:15:26Z

[-- Attachment #1: Type: text/plain, Size: 33780 bytes --]

Hi Kevin!

On Thu, 16 Feb 2012 18:25:44 -0700, Kevin Buettner <kevinb@redhat.com> wrote:
> On Thu, 16 Feb 2012 17:32:18 +0100
> Thomas Schwinge <thomas@codesourcery.com> wrote:
>
> > I now have (on a SH7785-based board). My patch fixes a few more failures
> > than yours. ;-P
>
> This will require more study and discussion then. I tested against
> the simulator using the default multilib. I compared results using
> each of our patches to an unpatched sh-tdep.c.

I'm now comparing your findings to mine, based on my 2012-02-16 test
results.

> Here are the FAILs that my patch fixed. There are 246 of them.

> FAIL: gdb.arch/gdb1291.exp: set breakpoint
> FAIL: gdb.arch/gdb1291.exp: get to sub1 (the program exited)
> FAIL: gdb.arch/gdb1291.exp: backtrace with local variable less than or equal to 256 bytes
> FAIL: gdb.arch/gdb1291.exp: set breakpoint
> FAIL: gdb.arch/gdb1291.exp: get to sub2 (the program is no longer running)
> FAIL: gdb.arch/gdb1291.exp: backtrace with local variable larger than 256 bytes
> FAIL: gdb.arch/gdb1431.exp: get to sub1
> FAIL: gdb.arch/gdb1431.exp: advance returns from sub1 frame
> FAIL: gdb.arch/gdb1431.exp: get to sub2

Are you sure these are releated to the patch you've sent? For me, these
failures look the same with and without your patch; and that doesn't very
much look like a prologue analysis issue:

Running /scratch/tschwing/FM_sh-linux-gnu/src/gdb-mainline/gdb/testsuite/gdb.arch/gdb1291.exp ...
gdb compile failed, /scratch/tschwing/FM_sh-linux-gnu/install/bin/../sh-linux-gnu/libc/usr/lib/crt1.o: In function `L_main':
(.text+0x1c): undefined reference to `main'
/tmp/ccmGUZOl.o: In function `_main':
gdb1291.c:(.text+0x2c): undefined reference to `_printf'
collect2: error: ld returned 1 exit status
UNTESTED: gdb.arch/gdb1291.exp: gdb1291.exp

> FAIL: gdb.base/arrayidx.exp: Print array with array-indexes off
> FAIL: gdb.base/arrayidx.exp: Print array with array-indexes on
> FAIL: gdb.base/break-always.exp: continue to breakpoint: bar

Ack.

> FAIL: gdb.base/break-inline.exp: start

Again, (at least in my case) not related to the patch we're discussing:

Running /scratch/tschwing/FM_sh-linux-gnu/src/gdb-mainline/gdb/testsuite/gdb.base/break-inline.exp ...
ERROR: tcl error sourcing /scratch/tschwing/FM_sh-linux-gnu/src/gdb-mainline/gdb/testsuite/gdb.base/break-inline.exp.
ERROR: gdbserver does not support start without extended-remote

> FAIL: gdb.base/break.exp: next over recursive call
> FAIL: gdb.base/break.exp: backtrace from factorial(5.1)

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tc
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tc
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ts
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ts
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ti
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ti
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tl
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tl
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tll
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tll
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tf
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tf
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-td
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-td
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tld
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tld
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-te
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-te
> FAIL: gdb.base/chng-syms.exp: running to stop_here first time
> FAIL: gdb.base/chng-syms.exp: continue until exit at breakpoint first time through (the program is no longer running)
> FAIL: gdb.base/gdb11531.exp: watchpoint variable triggers at next

Ack.

At this point, your patch also causes this progression:

-FAIL: gdb.base/gdb1250.exp: setting breakpoint at abort
+PASS: gdb.base/gdb1250.exp: backtrace from abort

> FAIL: gdb.base/longjmp.exp: next over setjmp (1)
> FAIL: gdb.base/longjmp.exp: next to longjmp (1)
> FAIL: gdb.base/longjmp.exp: next over setjmp (2)
> FAIL: gdb.base/nodebug.exp: backtrace from inner in nodebug.exp
> FAIL: gdb.base/nodebug.exp: backtrace from middle in nodebug.exp

These still FAIL for me with your patch.

> FAIL: gdb.base/pc-fp.exp: get hexadecimal valueof "$fp" (timeout)
> FAIL: gdb.base/pc-fp.exp: display/i $pc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/reread.exp: breakpoint foo in first file
> FAIL: gdb.base/reread.exp: run to foo()

Ack.

> FAIL: gdb.base/return-nodebug.exp: signed-char: return from function with no debug info with a cast
> FAIL: gdb.base/return-nodebug.exp: signed-char: full width of the returned result
> FAIL: gdb.base/return-nodebug.exp: short: return from function with no debug info with a cast
> FAIL: gdb.base/return-nodebug.exp: short: full width of the returned result
> FAIL: gdb.base/return-nodebug.exp: int: return from function with no debug info with a cast
> FAIL: gdb.base/return-nodebug.exp: int: full width of the returned result
> FAIL: gdb.base/return-nodebug.exp: long: return from function with no debug info with a cast
> FAIL: gdb.base/return-nodebug.exp: long: full width of the returned result
> FAIL: gdb.base/return-nodebug.exp: long-long: return from function with no debug info with a cast
> FAIL: gdb.base/return-nodebug.exp: long-long: full width of the returned result

These still FAIL for me with your patch.

> FAIL: gdb.base/return.exp: continue to return of -5
> FAIL: gdb.base/return.exp: continue to return of -5.0
> FAIL: gdb.base/return2.exp: void function returned successfully
> FAIL: gdb.base/scope.exp: print funclocal at bar
> FAIL: gdb.base/scope.exp: print funclocal_bss at bar

Ack.

> FAIL: gdb.base/sepdebug.exp: next over recursive call
> FAIL: gdb.base/sepdebug.exp: backtrace from factorial(5.1)

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/skip.exp: step after deleting 1 (3)
> FAIL: gdb.base/skip.exp: step after disabling 3 (5)
> FAIL: gdb.base/skip.exp: step after enable 3 (3)
> FAIL: gdb.base/step-resume-infcall.exp: step
> FAIL: gdb.base/step-test.exp: step into

Ack.

> FAIL: gdb.base/step-test.exp: large struct by value

This one still FAILs for me with your patch.

> FAIL: gdb.base/store.exp: var struct 2 u; next to add_struct_2 call
> FAIL: gdb.base/store.exp: var struct 2 u; print old u, expecting {s = \{0, 0}}
> FAIL: gdb.base/store.exp: var struct 2 u; set u to s_2
> FAIL: gdb.base/store.exp: var struct 2 u; print new u, expecting {s = \{1, 2}}

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/store.exp: var struct 3 u; next to add_struct_3 call
> FAIL: gdb.base/store.exp: var struct 3 u; print old u, expecting {s = \{0, 0, 0}}
> FAIL: gdb.base/store.exp: var struct 3 u; set u to s_3
> FAIL: gdb.base/store.exp: var struct 3 u; print new u, expecting {s = \{1, 2, 3}}

These still FAIL for me with your patch.

> FAIL: gdb.base/store.exp: var struct 4 u; next to add_struct_4 call
> FAIL: gdb.base/store.exp: var struct 4 u; print old u, expecting {s = \{0, 0, 0, 0}}
> FAIL: gdb.base/store.exp: var struct 4 u; set u to s_4
> FAIL: gdb.base/store.exp: var struct 4 u; print new u, expecting {s = \{1, 2, 3, 4}}

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tc

Ack.

> FAIL: gdb.base/structs.exp: return foo<n>; return 2 structs-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 3 structs-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 3 structs-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 3 structs-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 4 structs-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 4 structs-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 4 structs-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 5 structs-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 5 structs-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 5 structs-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 5 structs-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 5 structs-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 6 structs-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 6 structs-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 6 structs-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 6 structs-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 6 structs-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 7 structs-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 7 structs-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 7 structs-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 7 structs-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 7 structs-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 8 structs-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 8 structs-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 8 structs-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 8 structs-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 8 structs-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ts
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ts

Ack.

> FAIL: gdb.base/structs.exp: return foo<n>; return 2 structs-ts

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts
> FAIL: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 3 structs-ts

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-ts
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-ts
> FAIL: gdb.base/structs.exp: finish foo<n>; return 3 structs-ts
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 3 structs-ts

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: return foo<n>; return 4 structs-ts

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-ts
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-ts
> FAIL: gdb.base/structs.exp: finish foo<n>; return 4 structs-ts
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 4 structs-ts

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tll
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tll
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-td
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-td
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tld
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tld

Ack.

> FAIL: gdb.base/structs.exp: return foo<n>; return 2 structs-ts-tc

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts-tc
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts-tc
> FAIL: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts-tc
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts-tc

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-tc

Ack.

> FAIL: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-ts

This one still FAILs for me with your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ts
> FAIL: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-ts
> FAIL: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-ts
> FAIL: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-ts

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-tl
> FAIL: gdb.base/value-double-free.exp: continue

Ack.

> FAIL: gdb.base/watch-cond-infcall.exp: hw: continue

This is is not tested in my configuration/with my target (no hardware
watchpoints).

> FAIL: gdb.base/watch-cond-infcall.exp: sw: continue

Ack.

> FAIL: gdb.base/watchpoint-cond-gone.exp: Place the watchpoint
> FAIL: gdb.base/watchpoint-cond-gone.exp: Catch the no longer valid watchpoint

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.base/watchpoint.exp: global_ptr next
> FAIL: gdb.base/watchpoint.exp: next over ptr init
> FAIL: gdb.base/watchpoint.exp: next over buffer set
> FAIL: gdb.base/watchpoint.exp: global_ptr_ptr next
> FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr init
> FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr buffer set
> FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr pointer advance

These still FAIL for me with your patch.

> FAIL: gdb.base/watchpoint.exp: no-hw: global_ptr next
> FAIL: gdb.base/watchpoint.exp: no-hw: next over ptr init
> FAIL: gdb.base/watchpoint.exp: no-hw: next over buffer set
> FAIL: gdb.base/watchpoint.exp: no-hw: global_ptr_ptr next
> FAIL: gdb.base/watchpoint.exp: no-hw: next over global_ptr_ptr init
> FAIL: gdb.base/watchpoint.exp: no-hw: next over global_ptr_ptr buffer set
> FAIL: gdb.base/watchpoint.exp: no-hw: next over global_ptr_ptr pointer advance

Actually, these are the ones that still FAIL for me with your patch; the
other ones (with ``no-hw'' prefix) are with hardware watchpoints, which
is not applicable for my target.

> FAIL: gdb.base/watchpoints.exp: watchpoint ival1 hit, second time
> FAIL: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 2
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, second time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 2
> FAIL: gdb.base/watchpoints.exp: watchpoint ival1 hit, third time
> FAIL: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 3
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, third time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 3
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, fourth time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 4
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, fifth time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 5
> FAIL: gdb.cp/expand-sals.exp: continue to breakpoint: func
> FAIL: gdb.cp/expand-sals.exp: continue to breakpoint: next caller func
> FAIL: gdb.cp/extern-c.exp: continue to breakpoint: c_func
> FAIL: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_1
> FAIL: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_2
> FAIL: gdb.cp/namespace-nested-import.exp: print C::x

Ack.

> FAIL: gdb.dwarf2/dw2-cp-infcall-ref-static.exp: p f()
> FAIL: gdb.dwarf2/dw2-ref-missing-frame.exp: func_nofb backtrace
> FAIL: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb backtrace

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> FAIL: gdb.linespec/linespec.exp: set breakpoint at lspec.cc instance of NameSpace::overload
> FAIL: gdb.linespec/linespec.exp: set breakpoint at specific instance of NameSpace::overload

Ack.

> FAIL: gdb.mi/dw2-ref-missing-frame.exp: test func_nofb_marker
> FAIL: gdb.mi/mi-var-display.exp: print FP register
> FAIL: gdb.mi/mi2-var-display.exp: print FP register
> FAIL: gdb.opt/inline-bt.exp: continue to bar (1)
> FAIL: gdb.opt/inline-bt.exp: continue to bar (2)
> FAIL: gdb.opt/inline-bt.exp: continue to bar (3)
> FAIL: gdb.opt/inline-cmds.exp: continue to bar (1)
> FAIL: gdb.opt/inline-cmds.exp: continue to bar (2)
> FAIL: gdb.opt/inline-cmds.exp: continue to marker
> FAIL: gdb.opt/inline-cmds.exp: next over inlined functions
> FAIL: gdb.opt/inline-cmds.exp: next past inlined func1
> FAIL: gdb.opt/inline-cmds.exp: step into finish marker
> FAIL: gdb.opt/inline-cmds.exp: enter inlined_fn from noinline
> FAIL: gdb.opt/inline-cmds.exp: backtrace at inlined_fn from noinline
> FAIL: gdb.opt/inline-cmds.exp: inlined_fn from noinline inlined
> FAIL: gdb.opt/inline-cmds.exp: up to noinline
> FAIL: gdb.opt/inline-cmds.exp: noinline from outer_inline1 not inlined
> FAIL: gdb.opt/inline-cmds.exp: up to outer_inline1
> FAIL: gdb.opt/inline-cmds.exp: outer_inline1 inlined
> FAIL: gdb.opt/inline-cmds.exp: up to outer_inline2
> FAIL: gdb.opt/inline-cmds.exp: outer_inline2 inlined
> FAIL: gdb.opt/inline-cmds.exp: up from outer_inline2
> FAIL: gdb.opt/inline-cmds.exp: main not inlined
> FAIL: gdb.opt/inline-locals.exp: continue to bar (1)
> FAIL: gdb.opt/inline-locals.exp: continue to bar (2)
> FAIL: gdb.opt/inline-locals.exp: continue to bar (3)
> FAIL: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs (the program exited)
> FAIL: gdb.stabs/gdb11479.exp: Inspect t in test2 forced_stabs
> FAIL: gdb.stabs/gdb11479.exp: sizeof (e) in test2 forced_stabs
> FAIL: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs (the program is no longer running)
> FAIL: gdb.stabs/gdb11479.exp: Inspect t in test forced_stabs
> FAIL: gdb.stabs/gdb11479.exp: sizeof (e) in test forced_stabs

These didn't originally FAIL for me, but already PASSed; no change with
your patch.

> Here is a list of FAILs that my patch introduced (regressions). There
> are 9 of them:

> FAIL: gdb.base/store.exp: continue to add_charest
> FAIL: gdb.base/store.exp: continue to add_short
> FAIL: gdb.base/store.exp: continue to add_int
> FAIL: gdb.base/store.exp: continue to add_long
> FAIL: gdb.base/store.exp: continue to add_longest

Ack. Additional regressions for my testing with your patch:

FAIL: gdb.base/store.exp: continue to add_float
FAIL: gdb.base/store.exp: continue to add_double
FAIL: gdb.base/store.exp: continue to add_doublest

> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-td-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-td-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-td
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-td

Ack.

Additional regressions for my testing with your patch:

Running /scratch/tschwing/FM_sh-linux-gnu/src/gdb-mainline/gdb/testsuite/gdb.threads/staticthreads.exp ...
PASS: gdb.threads/staticthreads.exp: successfully compiled posix threads test case
PASS: gdb.threads/staticthreads.exp: set print sevenbit-strings
PASS: gdb.threads/staticthreads.exp: break sem_post
-PASS: gdb.threads/staticthreads.exp: Continue to main's call of sem_post
+FAIL: gdb.threads/staticthreads.exp: Continue to main's call of sem_post (the program exited)
PASS: gdb.threads/staticthreads.exp: rerun to main
PASS: gdb.threads/staticthreads.exp: handle SIG32 nostop noprint pass
-PASS: gdb.threads/staticthreads.exp: handle SIG32 helps
-PASS: gdb.threads/staticthreads.exp: info threads
+FAIL: gdb.threads/staticthreads.exp: handle SIG32 helps (the program exited)
+KFAIL: gdb.threads/staticthreads.exp: info threads (PRMS: gdb/1328)
PASS: gdb.threads/staticthreads.exp: GDB exits with static thread program

> Here are the FAILs that your patch fixed. There are 127 of them.

> FAIL: gdb.base/arrayidx.exp: Print array with array-indexes off
> FAIL: gdb.base/arrayidx.exp: Print array with array-indexes on
> FAIL: gdb.base/break-always.exp: continue to breakpoint: bar

Ack.

> FAIL: gdb.base/break-inline.exp: start

As above, I'm still seeing this:

Running /scratch/tschwing/FM_sh-linux-gnu/src/gdb-mainline/gdb/testsuite/gdb.base/break-inline.exp ...
ERROR: tcl error sourcing /scratch/tschwing/FM_sh-linux-gnu/src/gdb-mainline/gdb/testsuite/gdb.base/break-inline.exp.
ERROR: gdbserver does not support start without extended-remote

> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tc
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tc
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ts
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ts
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ti
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ti
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tl
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tl
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tll
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tll
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tf
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tf
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-td
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-td
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tld
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tld
> FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-te
> FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-te
> FAIL: gdb.base/chng-syms.exp: running to stop_here first time
> FAIL: gdb.base/chng-syms.exp: continue until exit at breakpoint first time through (the program is no longer running)
> FAIL: gdb.base/gdb11531.exp: watchpoint variable triggers at next
> FAIL: gdb.base/reread.exp: breakpoint foo in first file
> FAIL: gdb.base/reread.exp: run to foo()
> FAIL: gdb.base/return.exp: continue to return of -5
> FAIL: gdb.base/return.exp: continue to return of -5.0
> FAIL: gdb.base/return2.exp: void function returned successfully
> FAIL: gdb.base/scope.exp: print funclocal at bar
> FAIL: gdb.base/scope.exp: print funclocal_bss at bar
> FAIL: gdb.base/skip.exp: step after deleting 1 (3)
> FAIL: gdb.base/skip.exp: step after disabling 3 (5)
> FAIL: gdb.base/skip.exp: step after enable 3 (3)
> FAIL: gdb.base/step-resume-infcall.exp: step
> FAIL: gdb.base/step-test.exp: step into
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ts
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ts
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tll
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tll
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-td
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-td
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tld
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tld
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-tc
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ti
> FAIL: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-tl
> FAIL: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-tl
> FAIL: gdb.base/value-double-free.exp: continue

Ack.

> FAIL: gdb.base/watch-cond-infcall.exp: hw: continue

As above, this is is not tested in my configuration/with my target (no
hardware watchpoints).

> FAIL: gdb.base/watch-cond-infcall.exp: sw: continue

Ack.

> FAIL: gdb.base/watchpoint.exp: global_ptr next
> FAIL: gdb.base/watchpoint.exp: next over ptr init
> FAIL: gdb.base/watchpoint.exp: next over buffer set
> FAIL: gdb.base/watchpoint.exp: global_ptr_ptr next
> FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr init
> FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr buffer set
> FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr pointer advance

As above, these still FAIL for me with your patch.

> FAIL: gdb.base/watchpoint.exp: no-hw: global_ptr next
> FAIL: gdb.base/watchpoint.exp: no-hw: next over ptr init
> FAIL: gdb.base/watchpoint.exp: no-hw: next over buffer set
> FAIL: gdb.base/watchpoint.exp: no-hw: global_ptr_ptr next
> FAIL: gdb.base/watchpoint.exp: no-hw: next over global_ptr_ptr init
> FAIL: gdb.base/watchpoint.exp: no-hw: next over global_ptr_ptr buffer set
> FAIL: gdb.base/watchpoint.exp: no-hw: next over global_ptr_ptr pointer advance

As above, actually, these are the ones that still FAIL for me with your
patch; the other ones (with ``no-hw'' prefix) are with hardware
watchpoints, which is not applicable for my target.

> FAIL: gdb.base/watchpoints.exp: watchpoint ival1 hit, second time
> FAIL: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 2
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, second time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 2
> FAIL: gdb.base/watchpoints.exp: watchpoint ival1 hit, third time
> FAIL: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 3
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, third time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 3
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, fourth time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 4
> FAIL: gdb.base/watchpoints.exp: watchpoint hit, fifth time
> FAIL: gdb.base/watchpoints.exp: Watchpoint hit count is 5
> FAIL: gdb.cp/expand-sals.exp: continue to breakpoint: func
> FAIL: gdb.cp/expand-sals.exp: continue to breakpoint: next caller func
> FAIL: gdb.cp/extern-c.exp: continue to breakpoint: c_func
> FAIL: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_1
> FAIL: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_2
> FAIL: gdb.cp/namespace-nested-import.exp: print C::x
> FAIL: gdb.linespec/linespec.exp: set breakpoint at lspec.cc instance of NameSpace::overload
> FAIL: gdb.linespec/linespec.exp: set breakpoint at specific instance of NameSpace::overload

Ack.

> FAIL: gdb.opt/inline-bt.exp: continue to bar (1)
> FAIL: gdb.opt/inline-bt.exp: continue to bar (2)
> FAIL: gdb.opt/inline-bt.exp: continue to bar (3)
> FAIL: gdb.opt/inline-cmds.exp: continue to bar (1)
> FAIL: gdb.opt/inline-cmds.exp: continue to bar (2)
> FAIL: gdb.opt/inline-cmds.exp: continue to marker
> FAIL: gdb.opt/inline-cmds.exp: step into finish marker
> FAIL: gdb.opt/inline-cmds.exp: enter inlined_fn from noinline
> FAIL: gdb.opt/inline-cmds.exp: backtrace at inlined_fn from noinline
> FAIL: gdb.opt/inline-cmds.exp: inlined_fn from noinline inlined
> FAIL: gdb.opt/inline-cmds.exp: up to noinline
> FAIL: gdb.opt/inline-cmds.exp: noinline from outer_inline1 not inlined
> FAIL: gdb.opt/inline-cmds.exp: up to outer_inline1
> FAIL: gdb.opt/inline-cmds.exp: outer_inline1 inlined
> FAIL: gdb.opt/inline-cmds.exp: up to outer_inline2
> FAIL: gdb.opt/inline-cmds.exp: outer_inline2 inlined
> FAIL: gdb.opt/inline-cmds.exp: up from outer_inline2
> FAIL: gdb.opt/inline-cmds.exp: main not inlined
> FAIL: gdb.opt/inline-locals.exp: continue to bar (1)
> FAIL: gdb.opt/inline-locals.exp: continue to bar (2)
> FAIL: gdb.opt/inline-locals.exp: continue to bar (3)

As above, these didn't originally FAIL for me, but already PASSed; no
change with my patch.

> Your patch did not introduce any regressions.

Ack.