From 3a77aa28110170f079bf4e5835ca55136be0a2d3 Mon Sep 17 00:00:00 2001 From: Michael Chastain Date: Thu, 26 Aug 2004 18:02:59 +0000 Subject: [PATCH] 2004-08-26 Paul Gilliam * gdb.base/call-sc.exp (test_scalar_returns): Make sure PC is synchronized after the "return". --- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/call-sc.exp | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index f0cfc40..ad44310 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-08-26 Paul Gilliam + + * gdb.base/call-sc.exp (test_scalar_returns): Make sure PC is + synchronized after the "return". + 2004-08-26 Michael Chastain * gdb.mi/basics.c: Include . diff --git a/gdb/testsuite/gdb.base/call-sc.exp b/gdb/testsuite/gdb.base/call-sc.exp index d42e725..01a9f15 100644 --- a/gdb/testsuite/gdb.base/call-sc.exp +++ b/gdb/testsuite/gdb.base/call-sc.exp @@ -281,6 +281,30 @@ proc test_scalar_returns { } { } } + # If the previous test did not work, the program counter might + # still be inside foo() rather than main(). Make sure the program + # counter is is main(). + # + # This happens on ppc64 GNU/Linux with gcc 3.4.1 and a buggy GDB + + set test "return foo; synchronize pc to main()" + for {set loop_count 0} {$loop_count < 2} {incr loop_count} { + gdb_test_multiple "backtrace 1" $test { + -re "#0.*main \\(\\).*${gdb_prompt} $" { + pass $test + set loop_count 2 + } + -re "#0.*fun \\(\\).*${gdb_prompt} $" { + if {$loop_count < 1} { + gdb_test "finish" ".*" "" + } else { + fail $test + set loop_count 2 + } + } + } + } + # Check that the return-value is as expected. At this stage we're # just checking that GDB has returned a value consistent with # "return_value_unknown" set above. -- 2.7.4