Blob Blame History Raw
From e97f7a6cf2315908fb0a9b900f1de87a155c9df1 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Sun, 14 May 2023 23:34:05 +0200
Subject: [PATCH] Add --with-gdbscripts-dir=PATH configure option

Currently the gdb valgrind scripts are installed under VG_LIBDIR
which is normally pkglibexecdir which is likely not in the default
gdb safe-path (a list of directories from which it is safe to
auto-load files). So users will have to add the directory to their
.gdbinit file.

This patch adds a --with-gdbscripts-dir=PATH configure option that
sets VG_GDBSCRIPTS_DIR to the given PATH (${libexecdir}/valgrind if
not given).

Use VG_GDBSCRIPTS_DIR as gdbscriptsdir to install the valgrind-monitor
python files and pass it with CPPFLAGS when building vg_preloaded.c
and vgdb.c to use instead of VG_LIBDIR.
---
 configure.ac             | 11 +++++++++++
 coregrind/Makefile.am    | 15 ++++++++++-----
 coregrind/vg_preloaded.c |  2 +-
 coregrind/vgdb.c         |  2 +-
 4 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index 15fbf5ea2..223ab4529 100755
--- a/configure.ac
+++ b/configure.ac
@@ -1198,6 +1198,17 @@ AC_MSG_RESULT([$xcodedir])
 AC_DEFINE_UNQUOTED(XCODE_DIR, "$xcodedir", [xcode sdk include directory])
 AC_SUBST(XCODE_DIR, [$xcodedir])])
 
+#----------------------------------------------------------------------------
+# Where to install gdb scripts, defaults to VG_LIBDIR (pkglibexecdir)
+#----------------------------------------------------------------------------
+AC_MSG_CHECKING([where gdb scripts are installed])
+AC_ARG_WITH(gdbscripts-dir,
+   [  --with-gdbscripts-dir=PATH  Specify path to install gdb scripts],
+   [gdbscriptsdir=${withval}],
+   [gdbscriptsdir=${libexecdir}/valgrind])
+AC_MSG_RESULT([$gdbscriptsdir])
+AC_SUBST(VG_GDBSCRIPTS_DIR, [$gdbscriptsdir])
+
 #----------------------------------------------------------------------------
 # Libc and suppressions
 #----------------------------------------------------------------------------
diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am
index 553211782..64d593b08 100644
--- a/coregrind/Makefile.am
+++ b/coregrind/Makefile.am
@@ -101,7 +101,8 @@
 vgdb_SOURCES += vgdb-invoker-freebsd.c
 endif
 
-vgdb_CPPFLAGS  = $(AM_CPPFLAGS_PRI)
+vgdb_CPPFLAGS  = $(AM_CPPFLAGS_PRI) \
+		 -DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\""
 vgdb_CFLAGS    = $(AM_CFLAGS_PRI) $(LTO_CFLAGS) -fstack-protector-strong
 vgdb_CCASFLAGS = $(AM_CCASFLAGS_PRI)
 vgdb_LDFLAGS   = $(AM_CFLAGS_PRI) @LIB_UBSAN@ -Wl,-z,now
@@ -626,7 +627,8 @@
 
 vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_SOURCES = vg_preloaded.c
 vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CPPFLAGS = \
-	$(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+	$(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) \
+	-DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\""
 vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CFLAGS = \
 	$(AM_CFLAGS_PSO_@VGCONF_PLATFORM_PRI_CAPS@)
 vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_LDFLAGS = \
@@ -634,7 +636,8 @@
 if VGCONF_HAVE_PLATFORM_SEC
 vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_SOURCES = vg_preloaded.c
 vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CPPFLAGS = \
-	$(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
+	$(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) \
+	-DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\""
 vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CFLAGS = \
 	$(AM_CFLAGS_PSO_@VGCONF_PLATFORM_SEC_CAPS@)
 vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDFLAGS = \
@@ -766,8 +769,10 @@
 # so as to make sure these get copied into the install tree
 vglibdir = $(pkglibexecdir)
 vglib_DATA  = $(GDBSERVER_XML_FILES)
-vglib_DATA  += m_gdbserver/valgrind-monitor.py
-vglib_DATA  += m_gdbserver/valgrind-monitor-def.py
+
+gdbscriptsdir = @VG_GDBSCRIPTS_DIR@
+gdbscripts_DATA  = m_gdbserver/valgrind-monitor.py
+gdbscripts_DATA += m_gdbserver/valgrind-monitor-def.py
 
 # so as to make sure these get copied into the tarball
 EXTRA_DIST  += $(GDBSERVER_XML_FILES)
diff --git a/coregrind/vg_preloaded.c b/coregrind/vg_preloaded.c
index d6e05898c..bff76b81b 100644
--- a/coregrind/vg_preloaded.c
+++ b/coregrind/vg_preloaded.c
@@ -61,7 +61,7 @@
 .popsection \n\
 ");
 
-DEFINE_GDB_PY_SCRIPT(VG_LIBDIR "/valgrind-monitor.py")
+DEFINE_GDB_PY_SCRIPT(VG_GDBSCRIPTS_DIR "/valgrind-monitor.py")
 #endif
 
 #if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd)
diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c
index 8ec424077..a449b86e0 100644
--- a/coregrind/vgdb.c
+++ b/coregrind/vgdb.c
@@ -1984,7 +1984,7 @@ void usage(void)
 "  -h --help shows this message\n"
 "  The GDB python code defining GDB front end valgrind commands is:\n       %s\n"
 "  To get help from the Valgrind gdbserver, use vgdb help\n"
-"\n", vgdb_prefix_default(), VG_LIBDIR "/valgrind-monitor.py"
+"\n", vgdb_prefix_default(), VG_GDBSCRIPTS_DIR "/valgrind-monitor.py"
            );
    invoker_restrictions_msg();
 }
-- 
2.40.0