Blob Blame History Raw
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Fedora Python maintainers <python-devel@lists.fedoraproject.org>
Date: Wed, 15 Jul 2020 15:39:42 +0200
Subject: [PATCH] 00156-gdb-autoload-safepath.patch

00156 #
Recent builds of gdb will only auto-load scripts from certain safe
locations.  Turn off this protection when running test_gdb in the selftest
suite to ensure that it can load our -gdb.py script (rhbz#817072):
Not yet sent upstream
---
 Lib/test/test_gdb.py | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index b96acc09884..360bad18465 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -132,6 +132,19 @@ def gdb_has_frame_select():
 
 HAS_PYUP_PYDOWN = gdb_has_frame_select()
 
+def gdb_has_autoload_safepath():
+    # Recent GDBs will only auto-load scripts from certain safe
+    # locations, so we will need to turn off this protection.
+    # However, if the GDB doesn't have it, then the following
+    # command will generate noise on stderr (rhbz#817072):
+    cmd = "--eval-command=set auto-load safe-path /"
+    p = subprocess.Popen(["gdb", "--batch", cmd],
+                         stderr=subprocess.PIPE)
+    _, stderr = p.communicate()
+    return '"on" or "off" expected.' not in stderr
+    
+HAS_AUTOLOAD_SAFEPATH = gdb_has_autoload_safepath()
+
 class DebuggerTests(unittest.TestCase):
 
     """Test that the debugger can debug Python."""
@@ -178,6 +191,17 @@ class DebuggerTests(unittest.TestCase):
 
                     'run']
 
+        if HAS_AUTOLOAD_SAFEPATH:
+            # Recent GDBs will only auto-load scripts from certain safe
+            # locations.
+            # Where necessary, turn off this protection to ensure that
+            # our -gdb.py script can be loaded - but not on earlier gdb builds
+            # as this would generate noise on stderr (rhbz#817072):
+            init_commands = ['set auto-load safe-path /']
+        else:
+            init_commands = []
+
+
         # GDB as of 7.4 onwards can distinguish between the
         # value of a variable at entry vs current value:
         #   http://sourceware.org/gdb/onlinedocs/gdb/Variables.html
@@ -198,10 +222,11 @@ class DebuggerTests(unittest.TestCase):
         else:
             commands += ['backtrace']
 
-        # print commands
+        # print init_commands
 
         # Use "commands" to generate the arguments with which to invoke "gdb":
         args = ["gdb", "--batch", "-nx"]
+        args += ['--init-eval-command=%s' % cmd for cmd in init_commands]
         args += ['--eval-command=%s' % cmd for cmd in commands]
         args += ["--args",
                  sys.executable]