From e96877996081948d7f0f9ee2152b2e409781def3 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Mon, 27 Aug 2012 16:50:54 +0000 Subject: [PATCH] gdb/ * auto-load.c (auto_load_objfile_script): Rename to ... (auto_load_objfile_script_1): ... here, change variable realname to parameter realname, document it, add return value, add variable retval. (auto_load_objfile_script): New function. gdb/doc/ * gdb.texinfo (objfile-gdb.py file): New paragraph for .exe stripping. --- gdb/ChangeLog | 8 +++++++ gdb/auto-load.c | 54 +++++++++++++++++++++++++++++++++++++-------- gdb/doc/ChangeLog | 4 ++++ gdb/doc/gdb.texinfo | 7 ++++++ 4 files changed, 64 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 081e82bd62..1b478ea8f9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2012-08-27 Eli Zaretskii + Jan Kratochvil + + * auto-load.c (auto_load_objfile_script): Rename to ... + (auto_load_objfile_script_1): ... here, change variable realname to + parameter realname, document it, add return value, add variable retval. + (auto_load_objfile_script): New function. + 2012-08-27 Jan Kratochvil * cli/cli-decode.c (print_doc_line): Keep skipping '.' and ',' not diff --git a/gdb/auto-load.c b/gdb/auto-load.c index 29711832b6..b314ad65b9 100644 --- a/gdb/auto-load.c +++ b/gdb/auto-load.c @@ -693,27 +693,25 @@ clear_section_scripts (void) } } -/* Look for the auto-load script in LANGUAGE associated with OBJFILE and load - it. */ +/* Look for the auto-load script in LANGUAGE associated with OBJFILE where + OBJFILE's gdb_realpath is REALNAME and load it. Return 1 if we found any + matching script, return 0 otherwise. */ -void -auto_load_objfile_script (struct objfile *objfile, - const struct script_language *language) +static int +auto_load_objfile_script_1 (struct objfile *objfile, const char *realname, + const struct script_language *language) { - char *realname; char *filename, *debugfile; - int len; + int len, retval; FILE *input; struct cleanup *cleanups; - realname = gdb_realpath (objfile->name); len = strlen (realname); filename = xmalloc (len + strlen (language->suffix) + 1); memcpy (filename, realname, len); strcpy (filename + len, language->suffix); cleanups = make_cleanup (xfree, filename); - make_cleanup (xfree, realname); input = fopen (filename, "r"); debugfile = filename; @@ -768,6 +766,44 @@ auto_load_objfile_script (struct objfile *objfile, and these scripts are required to be idempotent under multiple loads anyway. */ language->source_script_for_objfile (objfile, input, debugfile); + + retval = 1; + } + else + retval = 0; + + do_cleanups (cleanups); + return retval; +} + +/* Look for the auto-load script in LANGUAGE associated with OBJFILE and load + it. */ + +void +auto_load_objfile_script (struct objfile *objfile, + const struct script_language *language) +{ + char *realname = gdb_realpath (objfile->name); + struct cleanup *cleanups = make_cleanup (xfree, realname); + + if (!auto_load_objfile_script_1 (objfile, realname, language)) + { + /* For Windows/DOS .exe executables, strip the .exe suffix, so that + FOO-gdb.gdb could be used for FOO.exe, and try again. */ + + size_t len = strlen (realname); + const size_t lexe = sizeof (".exe") - 1; + + if (len > lexe && strcasecmp (realname + len - lexe, ".exe") == 0) + { + len -= lexe; + realname[len] = '\0'; + if (debug_auto_load) + fprintf_unfiltered (gdb_stdlog, _("auto-load: Stripped .exe suffix, " + "retrying with \"%s\".\n"), + realname); + auto_load_objfile_script_1 (objfile, realname, language); + } } do_cleanups (cleanups); diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 10fd3b57b6..d6adef4c82 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2012-08-27 Jan Kratochvil + + * gdb.texinfo (objfile-gdb.py file): New paragraph for .exe stripping. + 2012-08-23 Khoo Yit Phang Document how to return from "python-interactive" to GDB. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 534b2184cc..2d49e13509 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -25784,6 +25784,13 @@ If this file does not exist, then @value{GDBN} will look for Note that loading of this script file also requires accordingly configured @code{auto-load safe-path} (@pxref{Auto-loading safe path}). +For object files using @file{.exe} suffix @value{GDBN} tries to load first the +scripts normally according to its @file{.exe} filename. But if no scripts are +found @value{GDBN} also tries script filenames matching the object file without +its @file{.exe} suffix. This @file{.exe} stripping is case insensitive and it +is attempted on any platform. This makes the script filenames compatible +between Unix and MS-Windows hosts. + @table @code @anchor{set auto-load scripts-directory} @kindex set auto-load scripts-directory -- 2.34.1