GDB 7.5: Problems with the auto-load safe-path feature

Eli Zaretskii eliz@gnu.org
Sat Aug 18 12:32:00 GMT 2012


This new feature in GDB 7.5 looks like a nuisance in my (short)
experience.

First, on MS-Windows the file gdb/gdb-gdb.gdb is not loaded, because
GDB wants it to be named gdb.exe-gdb.gdb.  I think the .exe suffix
should be ignored in this case, so I suggest the patch below.  OK to
commit?

Next, I have trouble understanding how we are supposed to deal with
this in, e.g., the Emacs distribution, which comes with a heavily
customized .gdbinit file.  There seems to be no way of telling GDB
that this .gdbinit is safe, except (a) through command-line arguments,
or (b) by adding settings to global or user-private init files.  How
can other projects allow seamless loading of their GDB init files, in
a way that is compatible with previous GDB versions, and without
requiring each user to hack their global/private GDB init files?  (If
there is such a way, it should be prominently described in the GDB
manual.)

Another problem is that the error message displayed when GDB rejects
to auto-load a file, viz.:

   warning: File "D:\gnu\bzr\emacs\trunk\src\.gdbinit" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".

leaves it to the user to find out where are those safe directories.
Is there an easy way of displaying $datadir and $debugdir?  Trying the
obvious, I get:

  (gdb) p $datadir
  $1 = void

Is that a bug?  For $datadir, I can do this:

  (gdb) show data-directory
  GDB's data directory is "d:\usr\share\gdb".

But for $debugdir, there's no "show debug-directory"; instead I need
to do this:

  (gdb) show debug-file-directory
  The directory where separate debug symbols are searched for is "d:\usr\lib\debug".

and the description does not make me sure this is the right directory,
since it does not mention anything about scripts.  At the very least,
we should fix the description to mention the scripts.

Finally, "apropos director" reveals another problem:

  (gdb) apropos director
  [...]
  info auto-load local-gdbinit -- Print whether current directory
  [...]
  set auto-load local-gdbinit -- Enable or disable auto-loading of
  [...]
  show auto-load local-gdbinit -- Show whether auto-loading

These truncated descriptions are caused by using ".gdbinit" in the
first line of the doc string.  To fix this, we should either use "GDB
init" instead of .gdbinit, or remove the code that stops on the first
period or comma altogether.

Here's the patch I suggest for the first problem described above:

2012-08-18  Eli Zaretskii  <eliz@gnu.org>

	* auto-load.c (auto_load_objfile_script): If OBJFILE specifies a
	DOS/Windows-style .exe executable program, remove the .exe suffix
	when generating the script file name.

--- gdb/auto-load.c~	2012-07-02 13:57:33.000000000 +0300
+++ gdb/auto-load.c	2012-08-18 13:54:33.578125000 +0300
@@ -708,6 +708,20 @@ auto_load_objfile_script (struct objfile
 
   realname = gdb_realpath (objfile->name);
   len = strlen (realname);
+#if defined (__MSDOS__) || defined(__MINGW32__)
+  /* For Windows/DOS .exe executables, strip the .exe suffix, so that
+     FOO-gdb.gdb could be used for FOO.exe.  */
+  {
+    const size_t lexe = sizeof (".exe") - 1;
+
+    if (len > lexe
+	&& strcasecmp (realname + len - lexe, ".exe") == 0)
+      {
+	len -= lexe;
+	realname[len] = '\0';
+      }
+  }
+#endif
   filename = xmalloc (len + strlen (language->suffix) + 1);
   memcpy (filename, realname, len);
   strcpy (filename + len, language->suffix);



More information about the Gdb-patches mailing list