https://gcc.gnu.org/g:08cc516a8cfe553064f84a86be4c30f05a614342

commit r15-2714-g08cc516a8cfe553064f84a86be4c30f05a614342
Author: Alex Coplan <alex.cop...@arm.com>
Date:   Mon Aug 5 08:45:29 2024 +0100

    gdbhooks: Make dot viewer configurable
    
    This adds a new GDB parameter 'gcc-dot-cmd' which allows the user to
    configure the command used to render the CFG within dot-fn.
    
    E.g. with this patch the user can change their dot viewer like so:
    
    (gdb) show gcc-dot-cmd
    The current value of 'gcc-dot-cmd' is "dot -Tx11".
    (gdb) set gcc-dot-cmd xdot
    (gdb) dot-fn # opens in xdot
    
    The second patch in this series adds a hook which users can define in
    their .gdbinit in order to be called when the GCC extensions have
    finished loading, thus allowing users to automatically configure
    gcc-dot-cmd as desired in their .gdbinit.
    
    gcc/ChangeLog:
    
            * gdbhooks.py (GCCDotCmd): New.
            (gcc_dot_cmd): New. Use it ...
            (DotFn.invoke): ... here.

Diff:
---
 gcc/gdbhooks.py | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/gcc/gdbhooks.py b/gcc/gdbhooks.py
index 92e38880a70a..db8ce0d071bb 100644
--- a/gcc/gdbhooks.py
+++ b/gcc/gdbhooks.py
@@ -783,6 +783,18 @@ class DumpFn(gdb.Command):
 
 DumpFn()
 
+class GCCDotCmd(gdb.Parameter):
+    """
+    This parameter controls the command used to render dot files within
+    GCC's dot-fn command.  It will be invoked as gcc-dot-cmd <dot-file>.
+    """
+    def __init__(self):
+        super(GCCDotCmd, self).__init__('gcc-dot-cmd',
+                gdb.COMMAND_NONE, gdb.PARAM_STRING)
+        self.value = "dot -Tx11"
+
+gcc_dot_cmd = GCCDotCmd()
+
 class DotFn(gdb.Command):
     """
     A custom command to show a gimple/rtl function control flow graph.
@@ -848,7 +860,8 @@ class DotFn(gdb.Command):
             return
 
         # Show graph in temp file
-        os.system("( dot -Tx11 \"%s\"; rm \"%s\" ) &" % (filename, filename))
+        dot_cmd = gcc_dot_cmd.value
+        os.system("( %s \"%s\"; rm \"%s\" ) &" % (dot_cmd, filename, filename))
 
 DotFn()

Reply via email to