From 78c6a5ad4969582bba00fbeaa817d70fcaf2be82 Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Sun, 16 Feb 2025 04:15:25 +0530 Subject: [PATCH] sysprof-recording-template: add debugdirs property for external debug directories Signed-off-by: varun-r-mallya --- src/sysprof/sysprof-recording-template.c | 25 +++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/sysprof/sysprof-recording-template.c b/src/sysprof/sysprof-recording-template.c index 3d7646de..ea01e094 100644 --- a/src/sysprof/sysprof-recording-template.c +++ b/src/sysprof/sysprof-recording-template.c @@ -35,6 +35,7 @@ struct _SysprofRecordingTemplate char *cwd; char *power_profile; char **environ; + char **debugdirs; guint stack_size; @@ -65,6 +66,7 @@ enum { PROP_BATTERY_CHARGE, PROP_BUNDLE_SYMBOLS, PROP_DEBUGINFOD, + PROP_DEBUGDIRS, PROP_CLEAR_ENVIRON, PROP_COMMAND_LINE, PROP_CPU_USAGE, @@ -103,6 +105,7 @@ sysprof_recording_template_finalize (GObject *object) g_clear_pointer (&self->cwd, g_free); g_clear_pointer (&self->power_profile, g_free); g_clear_pointer (&self->environ, g_free); + g_clear_pointer (&self->debugdirs, g_free); G_OBJECT_CLASS (sysprof_recording_template_parent_class)->finalize (object); } @@ -156,6 +159,10 @@ sysprof_recording_template_get_property (GObject *object, case PROP_ENVIRON: g_value_set_boxed (value, self->environ); break; + + case PROP_DEBUGDIRS: + g_value_set_boxed (value, self->debugdirs); + break; case PROP_FRAME_TIMINGS: g_value_set_boolean (value, self->frame_timings); @@ -272,6 +279,11 @@ sysprof_recording_template_set_property (GObject *object, g_clear_pointer (&self->environ, g_strfreev); self->environ = g_value_dup_boxed (value); break; + + case PROP_DEBUGDIRS: + g_clear_pointer (&self->debugdirs, g_strfreev); + self->environ = g_value_dup_boxed (value); + break; case PROP_FRAME_TIMINGS: self->frame_timings = g_value_get_boolean (value); @@ -396,6 +408,11 @@ sysprof_recording_template_class_init (SysprofRecordingTemplateClass *klass) g_param_spec_boxed ("environ", NULL, NULL, G_TYPE_STRV, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + properties[PROP_DEBUGDIRS] = + g_param_spec_boxed ("debugdirs", NULL, NULL, + G_TYPE_STRV, + (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); properties[PROP_FRAME_TIMINGS] = g_param_spec_boolean ("frame-timings", NULL, NULL, @@ -783,9 +800,11 @@ sysprof_recording_template_create_loader (SysprofRecordingTemplate *self, multi = sysprof_multi_symbolizer_new (); elf = SYSPROF_ELF_SYMBOLIZER (sysprof_elf_symbolizer_new ()); - /* TODO: add extra-debug-directories property and use that to - * call sysprof_elf_symbolizer_set_external_debug_dirs(elf,...) - */ + + if (self->debugdirs) + { + sysprof_elf_symbolizer_set_external_debug_dirs (elf, (const char * const *)self->debugdirs); + } /* Add in order of priority */ sysprof_multi_symbolizer_take (multi, sysprof_bundled_symbolizer_new ());