gdb/testsuite: remove gdb.python/pretty-print-call-by-hand.exp

This test was added without a corresponding fix, with some setup_kfails.
However, it results in UNRESOLVED results when GDB is built with ASan.

  ERROR: GDB process no longer exists
  GDB process exited with wait status 1946871 exp7 0 1
  UNRESOLVED: gdb.python/pretty-print-call-by-hand.exp: frame print: backtrace test (PRMS gdb/28856)

Remove the test from the tree, I'll attach it to the Bugzilla bug
instead [1].

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=28856

Change-Id: Id95d8949fb8742874bd12aeac758aa4d7564d678
This commit is contained in:
Simon Marchi 2022-03-24 10:21:10 -04:00
parent e961c696dc
commit ba7789a316
3 changed files with 0 additions and 225 deletions

View file

@ -1,53 +0,0 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2022 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
struct mytype
{
char *x;
};
void
rec (int i)
{
if (i <= 0)
return;
rec (i-1);
}
int
f ()
{
rec (100);
return 2;
}
void
g (struct mytype mt, int depth)
{
if (depth <= 0)
return; /* TAG: final frame */
g (mt, depth - 1); /* TAG: first frame */
}
int
main ()
{
struct mytype mt;
mt.x = "hello world";
g (mt, 10); /* TAG: outside the frame */
return 0;
}

View file

@ -1,127 +0,0 @@
# Copyright (C) 2022 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This file is part of the GDB testsuite. It tests a pretty printer that
# calls an inferior function by hand, triggering a Use-after-Free bug
# (PR gdb/28856).
load_lib gdb-python.exp
standard_testfile
# gdb needs to be started here for skip_python_tests to work.
# prepare_for_testing could be used instead, but it could compile the program
# unnecessarily, so starting GDB like this is preferable.
gdb_start
# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }
if { [prepare_for_testing "failed to prepare" $testfile $srcfile debug] } {
untested "failed to compile"
return -1
}
# This proc restarts GDB, makes the inferior reach the desired spot - marked
# by a comment in the .c file - and turns on the pretty printer for testing.
# Starting with a new GDB is important because the test may crash GDB. The
# return values are here to avoid us trying to test the pretty printer if
# there was a problem getting to main.
proc start_test { breakpoint_comment } {
global srcdir subdir testfile binfile
# Start with a fresh gdb.
# This is important because the test can crash GDB.
clean_restart ${binfile}
if { ![runto_main] } then {
untested "couldn't run to breakpoint"
return -1
}
# Let GDB get to the return line.
gdb_breakpoint [gdb_get_line_number ${breakpoint_comment} ${testfile}.c ]
gdb_continue_to_breakpoint ${breakpoint_comment} ".*"
gdb_test_no_output "set print pretty on" "starting to pretty print"
set remote_python_file [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
gdb_test_no_output "source ${remote_python_file}" "load python file"
return 0
}
# Testing the backtrace command.
with_test_prefix "frame print" {
if { [start_test "TAG: final frame"] == 0 } {
setup_kfail gdb/28856 "*-*-*"
gdb_test "backtrace -frame-arguments all" [multi_line \
"#0 .*g \\(mt=mytype is .*\\).*"\
"#1 .*g \\(mt=mytype is .*\\).*"\
"#2 .*g \\(mt=mytype is .*\\).*"\
"#3 .*g \\(mt=mytype is .*\\).*"\
"#4 .*g \\(mt=mytype is .*\\).*"\
"#5 .*g \\(mt=mytype is .*\\).*"\
"#6 .*g \\(mt=mytype is .*\\).*"\
"#7 .*g \\(mt=mytype is .*\\).*"\
"#8 .*g \\(mt=mytype is .*\\).*"\
"#9 .*g \\(mt=mytype is .*\\).*"\
"#10 .*g \\(mt=mytype is .*\\).*"\
"#11 .*main \\(\\).*"] \
"backtrace test"
}
}
# Testing the down command.
with_test_prefix "frame movement down" {
if { [start_test "TAG: first frame"] == 0 } {
gdb_test "up" [multi_line "#1 .*in main \\(\\) at .*" ".*outside the frame.*"]
setup_kfail gdb/28856 "*-*-*"
gdb_test "down" [multi_line "#0\\s+g \\(mt=mytype is .*\\).*" ".*first frame.*"]
}
}
# Testing the up command.
with_test_prefix "frame movement up" {
if { [start_test "TAG: final frame"] == 0 } {
setup_kfail gdb/28856 "*-*-*"
gdb_test "up" [multi_line "#1 .*in g \\(mt=mytype is .*\\).*" ".*first frame.*"]
}
}
# Testing the finish command.
with_test_prefix "frame exit through finish" {
if { [start_test "TAG: final frame"] == 0 } {
setup_kfail gdb/28856 "*-*-*"
gdb_test "finish" [multi_line "Run till exit from #0 .*" ".* g \\(mt=mytype is .*\\, depth=1\\).*" ".*first frame.*"]
}
}
# Testing the step command.
with_test_prefix "frame enter through step" {
if { [start_test "TAG: outside the frame"] == 0 } {
setup_kfail gdb/28856 "*-*-*"
gdb_test "step" [multi_line "g \\(mt=mytype is .*\\, depth=10\\).*" "41.*if \\(depth \\<= 0\\)"]
}
}
# Testing the continue command.
with_test_prefix "frame enter through continue" {
if { [start_test "TAG: outside the frame"] == 0 } {
setup_kfail gdb/28856 "*-*-*"
gdb_breakpoint [gdb_get_line_number "TAG: first frame" ${testfile}.c ]
gdb_continue_to_breakpoint "TAG: first frame" ".*TAG: first frame.*"
}
}

View file

@ -1,45 +0,0 @@
# Copyright (C) 2022 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
class MytypePrinter:
"""pretty print my type"""
def __init__(self, val):
self.val = val
def to_string(self):
calls = gdb.parse_and_eval("f()")
return "mytype is %s" % self.val["x"]
def ec_lookup_function(val):
typ = val.type
if typ.code == gdb.TYPE_CODE_REF:
typ = typ.target()
if str(typ) == "struct mytype":
return MytypePrinter(val)
return None
def disable_lookup_function():
ec_lookup_function.enabled = False
def enable_lookup_function():
ec_lookup_function.enabled = True
gdb.pretty_printers.append(ec_lookup_function)