[pushed] -Wwrite-strings: Fix Solaris "set procfs-file"

Pedro Alves palves@redhat.com
Wed Apr 5 18:23:00 GMT 2017


Compiling GDB with -Wwrite-strings flags this code in gdb/proc-api.c:

  static char *procfs_filename = "procfs_trace";

as needing a cast.  However, this variable is a command variable, and
as such it's incorrect to initialize it to a literal, since when you
use the corresponding set command, gdb frees the old string...

I didn't manage to fully build Solaris gdb (fails for other reasons),
but I confirmed that the system GDB on Solaris 11 crashes when running
this command:

 (gdb) set procfs-file foo
 Segmentation Fault (core dumped)

So I don't think this commit can make it worse than the status quo.

gdb/ChangeLog:
2017-04-05  Pedro Alves  <palves@redhat.com>

	* proc-api.c (procfs_filename): Don't initialize
        procfs_filename.
	(prepare_to_trace): Assume procfs_filename is non-NULL.
	(_initialize_proc_api): Give procfs_filename a default value here.
---
 gdb/ChangeLog  | 7 +++++++
 gdb/proc-api.c | 6 +++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d391859..f4e9562 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,12 @@
 2017-04-05  Pedro Alves  <palves@redhat.com>
 
+	* proc-api.c (procfs_filename): Don't initialize
+        procfs_filename.
+	(prepare_to_trace): Assume procfs_filename is non-NULL.
+	(_initialize_proc_api): Give procfs_filename a default value here.
+
+2017-04-05  Pedro Alves  <palves@redhat.com>
+
 	* break-catch-throw.c (handle_gnu_v3_exceptions): Constify
 	'cond_string' parameter.
 	(extract_exception_regexp): Constify 'string' parameter.
diff --git a/gdb/proc-api.c b/gdb/proc-api.c
index 72746ce..dbadd55 100644
--- a/gdb/proc-api.c
+++ b/gdb/proc-api.c
@@ -60,15 +60,14 @@ struct trans {
 
 static int   procfs_trace    = 0;
 static FILE *procfs_file     = NULL;
-static char *procfs_filename = "procfs_trace";
+static char *procfs_filename;
 
 static void
 prepare_to_trace (void)
 {
   if (procfs_trace)			/* if procfs tracing turned on */
     if (procfs_file == NULL)		/* if output file not yet open */
-      if (procfs_filename != NULL)	/* if output filename known */
-	procfs_file = fopen (procfs_filename, "a");	/* open output file */
+      procfs_file = fopen (procfs_filename, "a");	/* open output file */
 }
 
 static void
@@ -785,6 +784,7 @@ Show tracing for /proc api calls."), NULL,
 			   NULL, /* FIXME: i18n: */
 			   &setlist, &showlist);
 
+  procfs_filename = xstrdup ("procfs_trace");
   add_setshow_filename_cmd ("procfs-file", no_class, &procfs_filename, _("\
 Set filename for /proc tracefile."), _("\
 Show filename for /proc tracefile."), NULL,
-- 
2.5.5



More information about the Gdb-patches mailing list