This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Enhance gdb.base/print-file-var.exp testcase (Re: [PATCH V4] symlookup: improves symbol lookup when a file is specified.)
On 10/20/2017 04:28 PM, Pedro Alves wrote:
> Actually, the patch introduces what looks like a related clear
> regression to me. With the print-file-var.exp test program, try
> stepping into get_version_2, and printing the this_version_id
> global. And then type finish. Vis:
>
> (gdb) s
> get_version_2 () at gdb.base/print-file-var-lib2.c:22
> 22 return this_version_id;
> (gdb) p this_version_id
> $1 = 203
> (gdb) finish
> Run till exit from #0 get_version_2 () at gdb.base/print-file-var-lib2.c:22
> 0x000000000040073b in main () at gdb.base/print-file-var-main.c:24
> 24 int v2 = get_version_2 ();
> Value returned is $2 = 104
> (gdb)
>
> GDB says "203", while the program returns "104".
> That looks like a bug to me. I'd expect the print
> to show me the current value of the variable in scope.
>
> In current master (without the patch), we get:
>
> (gdb) s
> get_version_2 () at gdb.base/print-file-var-lib2.c:22
> 22 return this_version_id;
> (gdb) p this_version_id
> $1 = 104
> (gdb) finish
> Run till exit from #0 get_version_2 () at gdb.base/print-file-var-lib2.c:22
> 0x000000000040073b in main () at gdb.base/print-file-var-main.c:24
> 24 int v2 = get_version_2 ();
> Value returned is $2 = 104
Now in testsuite patch form... This is against master, where it passes
cleanly. Walfred's patch results in:
FAIL: gdb.base/print-file-var.exp: GDB sees same value as inferior sees while stopped in lib2
(Note: I haven't really looked deep in detail on why that is so.)
>From c389985174ac2b87d14e864d1eff9b5a7e9051db Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Fri, 20 Oct 2017 16:30:46 +0100
Subject: [PATCH] Enhance gdb.base/print-file-var.exp testcase
Make sure that GDB sees the same value the inferior sees when stopped
in each library.
gdb/testsuite/ChangeLog:
2017-10-20 Pedro Alves <palves@redhat.com>
* gdb.base/print-file-var.exp: Check that GDB sees same value as
inferior in each library.
---
gdb/testsuite/gdb.base/print-file-var.exp | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/gdb/testsuite/gdb.base/print-file-var.exp b/gdb/testsuite/gdb.base/print-file-var.exp
index 223a67d..60b8e08 100644
--- a/gdb/testsuite/gdb.base/print-file-var.exp
+++ b/gdb/testsuite/gdb.base/print-file-var.exp
@@ -74,6 +74,17 @@ if ![runto_main] {
set bp_location \
[gdb_get_line_number "STOP" "${executable}.c"]
+
+# Stop in both libraries and save the value of 'this_version_id' as
+# seen from those contexts.
+gdb_breakpoint "get_version_1"
+gdb_test "continue" "Breakpoint .* get_version_1.*"
+set v1_lib1 [get_integer_valueof "this_version_id" -1]
+
+gdb_breakpoint "get_version_2"
+gdb_test "continue" "Breakpoint .* get_version_2.*"
+set v2_lib2 [get_integer_valueof "this_version_id" -1]
+
gdb_test "break $executable.c:$bp_location" \
"Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \
"breapoint past v1 & v2 initialization"
@@ -82,6 +93,16 @@ gdb_test "continue" \
"Breakpoint \[0-9\]+, main \\(\\) at.*STOP.*" \
"continue to STOP marker"
+# Check that the values of 'this_version_id' that we saved above when
+# stopped in both print-file-var-lib1.c:get_version_1 and
+# print-file-var-lib2.c:get_version_2 match what those functions
+# actually returned.
+
+gdb_test "print v1" " = $v1_lib1" \
+ "GDB sees same value as inferior sees while stopped in lib1"
+gdb_test "print v2" " = $v2_lib2" \
+ "GDB sees same value as inferior sees while stopped in lib2"
+
# Now check the value of this_version_id in both print-file-var-lib1.c
# and print-file-var-lib2.c.
--
2.5.5