diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0bab843f0ab..dd870e72461 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2012-06-05 Joel Brobecker + + * gdb.base/ctxobj-f.c (GET_VERSION): Introduce local variable + and add comment. + * gdb.base/ctxobj-m.c (main): Rewrite, and add comment. + * gdb.base/ctxobj.exp: Insert breakpoint in ctxobj-f.c using + "STOP" marker. Adjust testing strategy to make it work on + all targets. + + * gdb.base/print-file-var-main.c (main): Rewrite using local + variables and adjust get_version_2's return value check. + Add small comment. + * gdb.base/print-file-var.exp: Insert breakpoint using "STOP" + marker. Adjust testing strategy to make it work on all targets. + 2012-06-05 Joel Brobecker * gdb.ada/bad-task-bp-keyword: New testcase. diff --git a/gdb/testsuite/gdb.base/ctxobj-f.c b/gdb/testsuite/gdb.base/ctxobj-f.c index 43cc3286154..56d1aba3aa5 100644 --- a/gdb/testsuite/gdb.base/ctxobj-f.c +++ b/gdb/testsuite/gdb.base/ctxobj-f.c @@ -23,5 +23,10 @@ extern int this_version_num; int GET_VERSION (void) { - return this_version_num; + int v = this_version_num; + + if (v > 999) + v = 999; + + return v; /* STOP */ } diff --git a/gdb/testsuite/gdb.base/ctxobj-m.c b/gdb/testsuite/gdb.base/ctxobj-m.c index 203f8380734..97710011ff3 100644 --- a/gdb/testsuite/gdb.base/ctxobj-m.c +++ b/gdb/testsuite/gdb.base/ctxobj-m.c @@ -20,10 +20,16 @@ extern int get_version_2 (void); int main (void) { - if (get_version_1 () != 104) + int v1 = get_version_1 (); + int v2 = get_version_2 (); + + if (v1 != 104) return 1; - if (get_version_2 () != 203) + /* The value returned by get_version_2 depends on the target. + On GNU/Linux, for instance, it should return 104. But on + x86-windows, for instance, it will return 203. */ + if (v2 != 104 && v2 != 203) return 2; return 0; diff --git a/gdb/testsuite/gdb.base/ctxobj.exp b/gdb/testsuite/gdb.base/ctxobj.exp index 57ed4c1ec51..391ac380fc2 100644 --- a/gdb/testsuite/gdb.base/ctxobj.exp +++ b/gdb/testsuite/gdb.base/ctxobj.exp @@ -57,38 +57,53 @@ if ![runto_main] { return -1 } -gdb_breakpoint "get_version_1" +set bp_location [gdb_get_line_number "STOP" "ctxobj-f.c"] +gdb_test "break ctxobj-f.c:$bp_location" \ + "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \ + "break in get_version functions" + gdb_test "continue" \ "Breakpoint $decimal, get_version_1 \\(\\).*" \ "continue to get_version_1" # Try printing "this_version_num". There are two global variables -# with that name, but we should pick the one in the shared library -# we are currently debugging. We will know we picked the correct one -# if the value printed is 104. The first print test verifies that -# we're doing things right when the partial symtab hasn't been -# expanded. And the second print test will do the same, but after -# the partial symtab has been expanded. +# with that name, and some systems such as GNU/Linux merge them +# into one single entity, while some other systems such as Windows +# keep them separate. In the first situation, we have to verify +# that GDB does not randomly select the wrong instance. And in +# the second case, we have to verify that GDB prints the value +# of the instance from the current debugging context (the shared +# library currently being debugged). +# +# We perform two tests: The first print test verifies that we are +# doing things right when the partial symtab hasn't been expanded. +# And the second print test will do the same, but after the partial +# symtab has been expanded. +# +# To avoid adding target-specific code in this testcase, the program +# sets a local variable named 'v' with the value of the global +# variable 'this_version_number'. This allows us to compare the value +# that GDB thinks 'this_version_num' has, against the actual value +# seen by the program itself. -gdb_test "print this_version_num" \ - " = 104" \ +gdb_test "print this_version_num == v" \ + " = 1" \ "print libctxobj1's this_version_num from partial symtab" -gdb_test "print this_version_num" \ - " = 104" \ +gdb_test "print this_version_num == v" \ + " = 1" \ "print libctxobj1's this_version_num from symtab" # Do the same, but from get_version_2. -gdb_breakpoint "get_version_2" gdb_test "continue" \ "Breakpoint $decimal, get_version_2 \\(\\).*" \ "continue to get_version_2" -gdb_test "print this_version_num" \ - " = 203" \ +gdb_test "print this_version_num == v" \ + " = 1" \ "print libctxobj2's this_version_num from partial symtab" -gdb_test "print this_version_num" \ - " = 203" \ +gdb_test "print this_version_num == v" \ + " = 1" \ "print libctxobj2's this_version_num from symtab" diff --git a/gdb/testsuite/gdb.base/print-file-var-main.c b/gdb/testsuite/gdb.base/print-file-var-main.c index b8baf0f530e..04e45e3fce8 100644 --- a/gdb/testsuite/gdb.base/print-file-var-main.c +++ b/gdb/testsuite/gdb.base/print-file-var-main.c @@ -20,10 +20,15 @@ extern int get_version_2 (void); int main (void) { - if (get_version_1 () != 104) + int v1 = get_version_1 (); + int v2 = get_version_2 (); + + if (v1 != 104) /* STOP */ return 1; - if (get_version_2 () != 104) + /* The value returned by get_version_2 depends on the target system. */ + if (v2 != 104 || v2 != 203) return 2; + return 0; } diff --git a/gdb/testsuite/gdb.base/print-file-var.exp b/gdb/testsuite/gdb.base/print-file-var.exp index 67c3ac481c3..d0ab575c6ab 100644 --- a/gdb/testsuite/gdb.base/print-file-var.exp +++ b/gdb/testsuite/gdb.base/print-file-var.exp @@ -48,8 +48,39 @@ if ![runto_main] { return -1 } -gdb_test "print 'print-file-var-lib1.c'::this_version_id" \ - " = 104" +# Try printing "this_version_num" qualified with the name of the file +# where the variables are defined. There are two global variables +# with that name, and some systems such as GNU/Linux merge them +# into one single entity, while some other systems such as Windows +# keep them separate. In the first situation, we have to verify +# that GDB does not randomly select the wrong instance, even when +# a specific filename is used to qualified the lookup. And in the +# second case, we have to verify that GDB does select the instance +# defined in the given filename. +# +# To avoid adding target-specific code in this testcase, the program +# sets two local variable named 'v1' and 'v2' with the value of +# our global variables. This allows us to compare the value that +# GDB returns for each query against the actual value seen by +# the program itself. -gdb_test "print 'print-file-var-lib2.c'::this_version_id" \ - " = 203" +# Get past the initialization of variables 'v1' and 'v2'. + +set bp_location \ + [gdb_get_line_number "STOP" "${executable}.c"] +gdb_test "break $executable.c:$bp_location" \ + "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \ + "breapoint past v1 & v2 initialization" + +gdb_test "continue" \ + "Breakpoint \[0-9\]+, main \\(\\) at.*" \ + "continue to STOP marker" + +# Now check the value of this_version_id in both print-file-var-lib1.c +# and print-file-var-lib2.c. + +gdb_test "print 'print-file-var-lib1.c'::this_version_id == v1" \ + " = 1" + +gdb_test "print 'print-file-var-lib2.c'::this_version_id == v2" \ + " = 1"