[libcxx-commits] [PATCH] D110334: [libcxx][pretty printers] Check GDB Python scripting support

David Spickett via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Thu Sep 23 07:39:58 PDT 2021


DavidSpickett updated this revision to Diff 374543.
DavidSpickett added a comment.

Remove stray newline.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D110334/new/

https://reviews.llvm.org/D110334

Files:
  libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
  libcxx/utils/libcxx/test/features.py


Index: libcxx/utils/libcxx/test/features.py
===================================================================
--- libcxx/utils/libcxx/test/features.py
+++ libcxx/utils/libcxx/test/features.py
@@ -10,6 +10,7 @@
 import re
 import shutil
 import sys
+from subprocess import check_output, CalledProcessError, DEVNULL
 
 _isClang      = lambda cfg: '__clang__' in compilerMacros(cfg) and '__apple_build_version__' not in compilerMacros(cfg)
 _isAppleClang = lambda cfg: '__apple_build_version__' in compilerMacros(cfg)
@@ -159,10 +160,36 @@
   Feature(name='buildhost=windows', when=lambda cfg: platform.system().lower().startswith('windows'))
 ]
 
-# Detect whether GDB is on the system, and if so add a substitution to access it.
+# Detect whether GDB is on the system, has Python scripting and supports
+# adding breakpoint commands. If so add a substitution to access it.
+def check_gdb(cfg):
+  gdb_path = shutil.which('gdb')
+  if gdb_path is None:
+    return False
+
+  # Check that we can set breakpoint commands, which was added in 8.3.
+  # Using the quit command here means that gdb itself exits, not just
+  # the "python <...>" command.
+  test_src = """\
+try:
+  gdb.Breakpoint(\"main\").commands=\"foo\"
+except AttributeError:
+  gdb.execute(\"quit 1\")
+gdb.execute(\"quit\")"""
+
+  try:
+    stdout = check_output([gdb_path, "-ex", "python " + test_src, "--batch"],
+                          stderr=DEVNULL, universal_newlines=True)
+  except CalledProcessError:
+    # We can't set breakpoint commands
+    return False
+
+  # Check we actually ran the Python
+  return not "Python scripting is not supported" in stdout
+
 DEFAULT_FEATURES += [
-  Feature(name='host-has-gdb',
-    when=lambda cfg: shutil.which('gdb') is not None,
+  Feature(name='host-has-gdb-with-python',
+    when=check_gdb,
     actions=[AddSubstitution('%{gdb}', lambda cfg: shutil.which('gdb'))]
   )
 ]
Index: libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
===================================================================
--- libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
+++ libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-// REQUIRES: host-has-gdb
+// REQUIRES: host-has-gdb-with-python
 // UNSUPPORTED: libcpp-has-no-localization
 // UNSUPPORTED: c++03
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110334.374543.patch
Type: text/x-patch
Size: 2384 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210923/6cb6558c/attachment.bin>


More information about the libcxx-commits mailing list