public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: [PATCH 2/3] [gdb/testsuite] Fix gdb.gdb/python-helper.exp with -O2 -flto
Date: Fri, 21 Apr 2023 16:58:32 +0200	[thread overview]
Message-ID: <20230421145833.24521-3-tdevries@suse.de> (raw)
In-Reply-To: <20230421145833.24521-1-tdevries@suse.de>

On openSUSE Leap 15.4, with gcc 7.5.0, when building gdb with
-O2 -g -flto=auto, I run into:
...
FAIL: gdb.gdb/python-helper.exp: hit breakpoint in outer gdb
FAIL: gdb.gdb/python-helper.exp: print integer from DWARF info
FAIL: gdb.gdb/python-helper.exp: print *type->main_type
...

Fix the first two FAILs by using $bkptno_numopt_re.

The last FAIL is due to:
...
(outer-gdb) print *type->main_type^M
A syntax error in expression, near `->main_type'.^M
(outer-gdb) FAIL: gdb.gdb/python-helper.exp: print *type->main_type
...
because:
...
(outer-gdb) print type^M
Attempt to use a type name as an expression^M
...

Fix this by making the test unresolved if "print type" or
"print type->main_type" doesn't succeed.

On openSUSE Tumbleweed, with gcc 13.0.1, when building gdb with
-O2 -g -flto=auto, I run into timeouts due to the breakpoint in c_print_type
not hitting.  Fix this by detecting the situation and bailing out.

Tested on x86_64-linux.
---
 gdb/testsuite/gdb.gdb/python-helper.exp | 77 +++++++++++++++++++------
 1 file changed, 58 insertions(+), 19 deletions(-)

diff --git a/gdb/testsuite/gdb.gdb/python-helper.exp b/gdb/testsuite/gdb.gdb/python-helper.exp
index a58e3b601df..a2dbeee4815 100644
--- a/gdb/testsuite/gdb.gdb/python-helper.exp
+++ b/gdb/testsuite/gdb.gdb/python-helper.exp
@@ -124,7 +124,9 @@ proc test_python_helper {} {
     # GDB, this should result in the outer GDB stopping at one of the
     # breakpoints we created..
     send_inferior "print 1\n"
-    gdb_test -prompt $outer_prompt_re "" "Breakpoint $decimal, value_print.*" "hit breakpoint in outer gdb"
+    gdb_test -prompt $outer_prompt_re "" \
+	"Breakpoint $bkptno_numopt_re, value_print.*" \
+	"hit breakpoint in outer gdb"
 
     # Now inspect the type of parameter VAL, this should trigger the
     # pretty printers.
@@ -162,8 +164,10 @@ proc test_python_helper {} {
     # information, this will include the TYPE_SPECIFIC_INT
     # information.
     send_inferior "print global_c.m_val\n"
-    gdb_test -prompt $outer_prompt_re "" "Breakpoint $decimal, value_print.*" "print integer from DWARF info"
-	
+    gdb_test -prompt $outer_prompt_re "" \
+	"Breakpoint $bkptno_numopt_re, value_print.*" \
+	"print integer from DWARF info"
+
     set answer [multi_line \
 		    "$decimal = " \
 		    "{name = $hex \"int\"," \
@@ -187,23 +191,58 @@ proc test_python_helper {} {
     # Send a command to the inner GDB, this should result in the outer
     # GDB stopping at the value_print breakpoint again.
     send_inferior "ptype global_c\n"
-    gdb_test -prompt $outer_prompt_re "" "Breakpoint $bkptno_numopt_re, c_print_type.*" "hit breakpoint in outer gdb again"
+    set test "hit breakpoint in outer gdb again"
+    set in_outer_gdb 0
+    gdb_test_multiple "" $test  -prompt $outer_prompt_re {
+	-re -wrap "Breakpoint $bkptno_numopt_re, c_print_type.*" {
+	    pass $gdb_test_name
+	    set in_outer_gdb 1
+	}
+	-re "\r\n$gdb_prompt $" {
+	    unsupported $gdb_test_name
+	}
+    }
 
-    set answer [multi_line \
-		    "$decimal = " \
-		    "{name = $hex \"CC\"," \
-		    " code = TYPE_CODE_STRUCT," \
-		    " flags = \[^\r\n\]+," \
-		    " owner = $hex \\(objfile\\)," \
-		    " target_type = 0x0," \
-		    " flds_bnds\\.fields\\\[0\\\]:" \
-		    "  {m_name = $hex \"m_val\"," \
-		    "   m_type = $hex," \
-		    "   m_loc_kind = FIELD_LOC_KIND_BITPOS," \
-		    "   bitsize = 0," \
-		    "   bitpos = 0}," \
-		    " cplus_stuff = $hex}"]
-    gdb_test -prompt $outer_prompt_re "print *type->main_type" $answer
+    if { ! $in_outer_gdb } {
+	return 0
+    }
+
+    set cmd "print *type->main_type"
+    set cmd_supported 1
+    foreach sub_expr { type type->main_type } {
+	set ok 0
+	gdb_test_multiple "print $sub_expr" "" -prompt $outer_prompt_re {
+	    -re -wrap " = \\(\[^\r\n\]+ \\*\\) $hex" {
+		set ok 1
+	    }
+	    -re -wrap "" {
+	    }
+	}
+	if { ! $ok } {
+	    set cmd_supported 0
+	    break
+	}
+    }
+
+    if { $cmd_supported } {
+	set answer [multi_line \
+			"$decimal = " \
+			"{name = $hex \"CC\"," \
+			" code = TYPE_CODE_STRUCT," \
+			" flags = \[^\r\n\]+," \
+			" owner = $hex \\(objfile\\)," \
+			" target_type = 0x0," \
+			" flds_bnds\\.fields\\\[0\\\]:" \
+			"  {m_name = $hex \"m_val\"," \
+			"   m_type = $hex," \
+			"   m_loc_kind = FIELD_LOC_KIND_BITPOS," \
+			"   bitsize = 0," \
+			"   bitpos = 0}," \
+			" cplus_stuff = $hex}"]
+	gdb_test -prompt $outer_prompt_re $cmd $answer
+    } else {
+	unsupported $cmd
+    }
 
     # Test the htab_t pretty-printer.
     gdb_test -prompt $outer_prompt_re "print all_bfds" "htab_t with ${::decimal} elements = \\{${::hex}.*\\}"
-- 
2.35.3


  parent reply	other threads:[~2023-04-21 14:58 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-21 14:58 [PATCH 0/3] " Tom de Vries
2023-04-21 14:58 ` [PATCH 1/3] [gdb/testsuite] Fix -wrap in presence of -prompt in gdb_test_multiple Tom de Vries
2023-04-21 14:58 ` Tom de Vries [this message]
2023-04-21 14:58 ` [PATCH 3/3] [gdb/testsuite] Fix auto-indent in gdb.gdb/python-helper.exp Tom de Vries
2023-04-24 17:09 ` [PATCH 0/3] [gdb/testsuite] Fix gdb.gdb/python-helper.exp with -O2 -flto Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230421145833.24521-3-tdevries@suse.de \
    --to=tdevries@suse.de \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).