aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2023-04-24 22:08:53 +0200
committerTom de Vries <tdevries@suse.de>2023-04-24 22:08:53 +0200
commit60732b42936b322a30d2d08618432eabb94b5a67 (patch)
treee128130ab0d2db4493b6b7fd5fcdd1f537a33ecd
parent4fa173cfd79f8a00c091f8a5a119bc2b064cc716 (diff)
downloadfsf-binutils-gdb-60732b42936b322a30d2d08618432eabb94b5a67.zip
fsf-binutils-gdb-60732b42936b322a30d2d08618432eabb94b5a67.tar.gz
fsf-binutils-gdb-60732b42936b322a30d2d08618432eabb94b5a67.tar.bz2
[gdb/testsuite] Fix gdb.gdb/python-helper.exp with -O2 -flto
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.
-rw-r--r--gdb/testsuite/gdb.gdb/python-helper.exp77
1 files changed, 58 insertions, 19 deletions
diff --git a/gdb/testsuite/gdb.gdb/python-helper.exp b/gdb/testsuite/gdb.gdb/python-helper.exp
index a58e3b6..a2dbeee 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}.*\\}"