[_Complex test 3/4] Isolate each test's effect in callfuncs.exp

Yao Qi
2011-05-19T04:46:19Z

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

When I was writing patch 4/4 in callfuncs.exp, a fatal fail will make
the rest of tests failed as well.

In this patch, some code is moved to proc rerun_and_prepare, which is
called some times at the beginning of each tests. Also, fetch registers
before each test starts, and then, compare with the register state after
test is done.

This patch is not about _Complex type testing. With this patch, test
result of patch 4/4 looks more reasonable.

--
Yao (é½å°§)

[-- Attachment #2: 0003-prepare-for-test.patch --]
[-- Type: text/x-patch, Size: 4622 bytes --]

gdb/testsuite/

* gdb.base/callfuncs.exp (rerun_and_prepare): New.
Call rerun_and_prepare for each test to isolate effects.

From 461e0c6aac5ed689bae57f3995e073769288d235 Mon Sep 17 00:00:00 2001
From: Yao Qi <yao@codesourcery.com>
Date: Wed, 18 May 2011 23:12:18 +0800
Subject: [PATCH 3/4] prepare for test

---
gdb/testsuite/gdb.base/callfuncs.exp | 82 ++++++++++++++++++++++------------
1 files changed, 54 insertions(+), 28 deletions(-)

diff --git a/gdb/testsuite/gdb.base/callfuncs.exp b/gdb/testsuite/gdb.base/callfuncs.exp
index 27ebd1e..ff86eb8 100644
--- a/gdb/testsuite/gdb.base/callfuncs.exp
+++ b/gdb/testsuite/gdb.base/callfuncs.exp
@@ -273,6 +273,39 @@ proc fetch_all_registers {test} {
return $all_registers_lines
}

+proc rerun_and_prepare {} {
+ global hp_aCC_compiler
+
+ if { $hp_aCC_compiler } {
+ # Do not set language explicitly to 'C'. This will cause aCC
+ # tests to fail because promotion rules are different. Just let
+ # the language be set to the default.
+
+ if { ![runto_main] } {
+ gdb_suppress_tests;
+ }
+
+ # However, turn off overload-resolution for aCC. Having it on causes
+ # a lot of failures.
+
+ gdb_test_no_output "set overload-resolution 0"
+ } else {
+ gdb_test_no_output "set language c"
+ if { ![runto_main] } {
+ gdb_suppress_tests;
+ }
+ }
+
+ get_debug_format
+
+ # Make sure that malloc gets called and that the floating point unit
+ # is initialized via a call to t_double_values.
+ gdb_test "next" "t_double_values\\(double_val1, double_val2\\);.*" \
+ "next to t_double_values"
+ gdb_test "next" "t_structs_c\\(struct_val1\\);.*" \
+ "next to t_structs_c"
+}
+

# Start with a fresh gdb.

@@ -285,34 +318,7 @@ gdb_test_no_output "set print sevenbit-strings"
gdb_test_no_output "set print address off"
gdb_test_no_output "set width 0"

-if { $hp_aCC_compiler } {
- # Do not set language explicitly to 'C'. This will cause aCC
- # tests to fail because promotion rules are different. Just let
- # the language be set to the default.
-
- if { ![runto_main] } {
- gdb_suppress_tests;
- }
-
- # However, turn off overload-resolution for aCC. Having it on causes
- # a lot of failures.
-
- gdb_test_no_output "set overload-resolution 0"
-} else {
- gdb_test_no_output "set language c"
- if { ![runto_main] } {
- gdb_suppress_tests;
- }
-}
-
-get_debug_format
-
-# Make sure that malloc gets called and that the floating point unit
-# is initialized via a call to t_double_values.
-gdb_test "next" "t_double_values\\(double_val1, double_val2\\);.*" \
- "next to t_double_values"
-gdb_test "next" "t_structs_c\\(struct_val1\\);.*" \
- "next to t_structs_c"
+rerun_and_prepare

# Save all register contents.
set old_reg_content [fetch_all_registers "retrieve original register contents"]
@@ -330,6 +336,10 @@ if {$old_reg_content == $new_reg_content} then {
fail "gdb function calls preserve register contents"
}

+rerun_and_prepare
+# Save all register contents.
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Set breakpoint at a function we will call from gdb.
gdb_breakpoint add

@@ -351,6 +361,12 @@ if ![gdb_test "bt 2" \
}
}

+rerun_and_prepare
+# Set breakpoint at a function we will call from gdb.
+gdb_breakpoint add
+# Save all register contents.
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Call function (causing a breakpoint hit in the call dummy) and do a finish,
# make sure we are back at main and still have the same register contents.
gdb_test "print add(4,5)" "The program being debugged stopped while.*" \
@@ -370,6 +386,12 @@ if ![gdb_test "bt 2" \
}
}

+rerun_and_prepare
+# Set breakpoint at a function we will call from gdb.
+gdb_breakpoint add
+# Save all register contents.
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Call function (causing a breakpoint hit in the call dummy) and do a return
# with a value, make sure we are back at main with the same register contents.
gdb_test "print add(4,5)" "The program being debugged stopped while.*" \
@@ -388,6 +410,10 @@ if ![gdb_test "return 7" \
}
}

+rerun_and_prepare
+# Set breakpoint at a function we will call from gdb.
+gdb_breakpoint add
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Call function (causing a breakpoint hit in the call dummy), and
# call another function from the call dummy frame (thereby setting up
# several nested call dummy frames). Test that backtrace and finish
--
1.7.0.4