summaryrefslogtreecommitdiff
path: root/gdb-rhbz2257562-cp-namespace-null-ptr-check.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-06 05:48:09 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-06 05:48:09 +0000
commitab322c77aab87050c6ca0ce58e18f31e269e519b (patch)
tree7ff9c6a18efd867f35cb6f8fb08893c6b655376f /gdb-rhbz2257562-cp-namespace-null-ptr-check.patch
parent19677e130f0cd283f7884cc4b6b3d52f8812dae5 (diff)
automatic import of gdbopeneuler24.03_LTS
Diffstat (limited to 'gdb-rhbz2257562-cp-namespace-null-ptr-check.patch')
-rw-r--r--gdb-rhbz2257562-cp-namespace-null-ptr-check.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/gdb-rhbz2257562-cp-namespace-null-ptr-check.patch b/gdb-rhbz2257562-cp-namespace-null-ptr-check.patch
new file mode 100644
index 0000000..f868e6f
--- /dev/null
+++ b/gdb-rhbz2257562-cp-namespace-null-ptr-check.patch
@@ -0,0 +1,113 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Kevin Buettner <kevinb@redhat.com>
+Date: Tue, 16 Jan 2024 20:07:53 -0700
+Subject: gdb-rhbz2257562-cp-namespace-null-ptr-check.patch
+
+;; Backport potential fix for RH BZ 2257562.
+
+Fix printing of global variable stubs if no inferior is running
+
+Since 3c45e9f915ae4aeab7312d6fc55a947859057572 gdb crashes when trying
+to print a global variable stub without a running inferior, because of
+a missing nullptr-check (the block_scope function took care of that
+check before it was converted to a method).
+
+With this check it works again:
+```
+(gdb) print s
+$1 = <incomplete type>
+```
+
+Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31128
+Approved-By: Tom Tromey <tom@tromey.com>
+(cherry picked from commit 576745e26c0ec76a53ba45b20af464628a50b3e4)
+
+diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
+--- a/gdb/cp-namespace.c
++++ b/gdb/cp-namespace.c
+@@ -1026,7 +1026,11 @@ cp_lookup_transparent_type (const char *name)
+
+ /* If that doesn't work and we're within a namespace, look there
+ instead. */
+- scope = get_selected_block (0)->scope ();
++ const block *block = get_selected_block (0);
++ if (block == nullptr)
++ return nullptr;
++
++ scope = block->scope ();
+
+ if (scope[0] == '\0')
+ return NULL;
+diff --git a/gdb/testsuite/gdb.cp/print-global-stub.cc b/gdb/testsuite/gdb.cp/print-global-stub.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/print-global-stub.cc
+@@ -0,0 +1,31 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2023 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 S
++{
++ S (int);
++ virtual ~S ();
++
++ int m_i;
++};
++
++S s (5);
++
++int main ()
++{
++ return 0;
++}
+diff --git a/gdb/testsuite/gdb.cp/print-global-stub.exp b/gdb/testsuite/gdb.cp/print-global-stub.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/print-global-stub.exp
+@@ -0,0 +1,32 @@
++# Copyright (C) 2023 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 printing of a global stub without inferior.
++
++require allow_cplus_tests
++
++standard_testfile .cc
++set objfile [standard_output_file ${testfile}.o]
++
++if { [gdb_compile $srcdir/$subdir/$srcfile $objfile object \
++ {c++ debug}] != "" } {
++ untested "failed to compile"
++ return -1
++}
++
++clean_restart $objfile
++
++gdb_test "print s" " = <incomplete type>"