-Wwrite-strings: Fix Solaris "set procfs-file"

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.
This commit is contained in:
Pedro Alves 2017-04-05 19:21:36 +01:00
parent 63160a4350
commit 3e83a92009
2 changed files with 10 additions and 3 deletions

View File

@ -1,3 +1,10 @@
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

View File

@ -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,