From 37ad7041867352eec0d181de18f910492585647c Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Fri, 2 Jun 2023 17:09:44 -0700 Subject: [PATCH] libsysprof-profile: add ld_preload helper This is to be used by instruments to adjust the spawnable to inject preload into the spawned environment. --- src/libsysprof-profile/sysprof-spawnable.c | 16 ++++++++++++++++ src/libsysprof-profile/sysprof-spawnable.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/src/libsysprof-profile/sysprof-spawnable.c b/src/libsysprof-profile/sysprof-spawnable.c index 631c82ad..733b0080 100644 --- a/src/libsysprof-profile/sysprof-spawnable.c +++ b/src/libsysprof-profile/sysprof-spawnable.c @@ -378,3 +378,19 @@ sysprof_spawnable_add_trace_fd (SysprofSpawnable *self, return g_steal_fd (&fd); } + +void +sysprof_spawnable_add_ld_preload (SysprofSpawnable *self, + const char *library_path) +{ + g_autofree char *amended = NULL; + const char *val; + + g_return_if_fail (SYSPROF_IS_SPAWNABLE (self)); + g_return_if_fail (library_path != NULL); + + if ((val = sysprof_spawnable_getenv (self, "LD_PRELOAD"))) + library_path = amended = g_strdup_printf ("%s:%s", val, library_path); + + sysprof_spawnable_setenv (self, "LD_PRELOAD", library_path); +} diff --git a/src/libsysprof-profile/sysprof-spawnable.h b/src/libsysprof-profile/sysprof-spawnable.h index 5aca47a6..9f14b560 100644 --- a/src/libsysprof-profile/sysprof-spawnable.h +++ b/src/libsysprof-profile/sysprof-spawnable.h @@ -78,6 +78,9 @@ SYSPROF_AVAILABLE_IN_ALL int sysprof_spawnable_add_trace_fd (SysprofSpawnable *self, const char *envvar); SYSPROF_AVAILABLE_IN_ALL +void sysprof_spawnable_add_ld_preload (SysprofSpawnable *self, + const char *library_path); +SYSPROF_AVAILABLE_IN_ALL GSubprocess *sysprof_spawnable_spawn (SysprofSpawnable *self, GError **error); SYSPROF_AVAILABLE_IN_ALL