[libcxx-commits] [PATCH] D110936: [libcxx][pretty printers] Report not being able to trace test program

David Spickett via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Oct 1 07:37:12 PDT 2021


DavidSpickett created this revision.
DavidSpickett requested review of this revision.
Herald added a project: libc++.
Herald added a subscriber: libcxx-commits.
Herald added a reviewer: libc++.

If you don't have ptrace permissions this test will fail to run
silently, this adds a check for that and anything else that
might do similar things.

The output will now be:

  FAILED test program did not run correctly, check gdb warnings
  
  /usr/bin/gdb: warning: Couldn't determine a path for the index cache
  directory.
  No symbol table is loaded.  Use the "file" command.
  warning: Error disabling address space randomization: Operation not
  permitted
  warning: Could not trace the inferior process.
  warning: ptrace: Operation not permitted
  
  error: command failed with exit status: 255

We already have a feature to check for a compatible python enabled
gdb, so I think it's reasonable to check for this at test runtime.

Note that this is different to the catch all at the end of the test
script. That would be a case where you can trace but something else
made it stop mid way that wasn't our test breakpoints.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D110936

Files:
  libcxx/test/libcxx/gdb/gdb_pretty_printer_test.py


Index: libcxx/test/libcxx/gdb/gdb_pretty_printer_test.py
===================================================================
--- libcxx/test/libcxx/gdb/gdb_pretty_printer_test.py
+++ libcxx/test/libcxx/gdb/gdb_pretty_printer_test.py
@@ -20,6 +20,14 @@
 import sys
 
 test_failures = 0
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
 
 
 class CheckResult(gdb.Command):
@@ -30,6 +38,8 @@
 
     def invoke(self, arg, from_tty):
         try:
+            has_run_tests = True
+
             # Stack frame is:
             # 0. StopForDebugger
             # 1. ComparePrettyPrintToChars or ComparePrettyPrintToRegex
@@ -89,7 +99,12 @@
 
 def exit_handler(event=None):
     global test_failures
-    if test_failures:
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check gdb warnings")
+        test_failures = -1
+    elif test_failures:
         print("FAILED %d cases" % test_failures)
     exit(test_failures)
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110936.376528.patch
Type: text/x-patch
Size: 1331 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20211001/47a2aa40/attachment.bin>


More information about the libcxx-commits mailing list