Compare commits

...

8 Commits
master ... f16

28 changed files with 6252 additions and 258 deletions

View File

@ -1,243 +0,0 @@
http://sourceware.org/ml/gdb-patches/2005-05/threads.html#00637
Proposed upstream but never committed upstream.
2005-06-09 Jeff Johnston <jjohnstn@redhat.com>
* gdb.base/gdbinit.exp: New testcase.
* gdb.base/gdbinit.sample: Sample .gdbinit for gdbinit.exp.
2005-06-08 Daniel Jacobowitz <dan@codesourcery.com>
Jeff Johnston <jjohnstn@redhat.com>
* Makefile.in (cli-cmds.o): Update.
* configure.in: Add check for getuid.
* configure: Regenerated.
* config.in: Ditto.
* main.c (captured_main): Pass -1 to source_command when loading
gdbinit files.
* cli/cli-cmds.c: Include "gdb_stat.h" and <fcntl.h>.
(source_command): Update documentation. Check permissions if
FROM_TTY is -1.
Index: gdb-7.3.50.20110722/gdb/cli/cli-cmds.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/cli/cli-cmds.c 2011-06-07 19:26:46.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/cli/cli-cmds.c 2011-07-22 19:14:25.000000000 +0200
@@ -39,6 +39,7 @@
#include "source.h"
#include "disasm.h"
#include "tracepoint.h"
+#include "gdb_stat.h"
#include "ui-out.h"
@@ -489,7 +490,7 @@ show_script_ext_mode (struct ui_file *fi
int
find_and_open_script (const char *script_file, int search_path,
- FILE **streamp, char **full_pathp)
+ FILE **streamp, char **full_pathp, int from_tty)
{
char *file;
int fd;
@@ -515,6 +516,32 @@ find_and_open_script (const char *script
return 0;
}
+#ifdef HAVE_GETUID
+ if (from_tty == -1)
+ {
+ struct stat statbuf;
+
+ if (fstat (fd, &statbuf) < 0)
+ {
+ int save_errno = errno;
+
+ close (fd);
+ do_cleanups (old_cleanups);
+ errno = save_errno;
+ return 0;
+ }
+ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
+ {
+ /* FILE gets freed by do_cleanups (old_cleanups). */
+ warning (_("not using untrusted file \"%s\""), file);
+ close (fd);
+ do_cleanups (old_cleanups);
+ errno = EPERM;
+ return 0;
+ }
+ }
+#endif
+
do_cleanups (old_cleanups);
*streamp = fdopen (fd, FOPEN_RT);
@@ -574,13 +601,14 @@ source_script_with_search (const char *f
if (file == NULL || *file == 0)
error (_("source command requires file name of file to source."));
- if (!find_and_open_script (file, search_path, &stream, &full_path))
+ if (!find_and_open_script (file, search_path, &stream, &full_path,
+ from_tty))
{
/* The script wasn't found, or was otherwise inaccessible.
If the source command was invoked interactively, throw an
error. Otherwise (e.g. if it was invoked by a script),
silently ignore the error. */
- if (from_tty)
+ if (from_tty > 0)
perror_with_name (file);
else
return;
Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.base/gdbinit.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.3.50.20110722/gdb/testsuite/gdb.base/gdbinit.exp 2011-07-22 19:14:25.000000000 +0200
@@ -0,0 +1,91 @@
+# Copyright 2005
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was written by Jeff Johnston <jjohnstn@redhat.com>.
+
+# are we on a target board
+if [is_remote target] {
+ return
+}
+
+
+global verbose
+global GDB
+global GDBFLAGS
+global gdb_prompt
+global timeout
+global gdb_spawn_id;
+
+gdb_stop_suppressing_tests;
+
+verbose "Spawning $GDB -nw"
+
+if [info exists gdb_spawn_id] {
+ return 0;
+}
+
+if ![is_remote host] {
+ if { [which $GDB] == 0 } then {
+ perror "$GDB does not exist."
+ exit 1
+ }
+}
+
+set env(HOME) [pwd]
+remote_exec build "rm .gdbinit"
+remote_exec build "cp ${srcdir}/${subdir}/gdbinit.sample .gdbinit"
+remote_exec build "chmod 646 .gdbinit"
+
+set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
+if { $res < 0 || $res == "" } {
+ perror "Spawning $GDB failed."
+ return 1;
+}
+gdb_expect 360 {
+ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
+ pass "untrusted .gdbinit caught."
+ }
+ -re "$gdb_prompt $" {
+ fail "untrusted .gdbinit caught."
+ }
+ timeout {
+ fail "(timeout) untrusted .gdbinit caught."
+ }
+}
+
+remote_exec build "chmod 644 .gdbinit"
+set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
+if { $res < 0 || $res == "" } {
+ perror "Spawning $GDB failed."
+ return 1;
+}
+gdb_expect 360 {
+ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
+ fail "trusted .gdbinit allowed."
+ }
+ -re "in gdbinit.*$gdb_prompt $" {
+ pass "trusted .gdbinit allowed."
+ }
+ timeout {
+ fail "(timeout) trusted .gdbinit allowed."
+ }
+}
+
+remote_exec build "rm .gdbinit"
Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.base/gdbinit.sample
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.3.50.20110722/gdb/testsuite/gdb.base/gdbinit.sample 2011-07-22 19:14:25.000000000 +0200
@@ -0,0 +1 @@
+echo "\nin gdbinit"
Index: gdb-7.3.50.20110722/gdb/main.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/main.c 2011-07-22 19:08:19.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/main.c 2011-07-22 19:14:25.000000000 +0200
@@ -849,7 +849,7 @@ captured_main (void *data)
debugging or what directory you are in. */
if (home_gdbinit && !inhibit_gdbinit)
- catch_command_errors (source_script, home_gdbinit, 0, RETURN_MASK_ALL);
+ catch_command_errors (source_script, home_gdbinit, -1, RETURN_MASK_ALL);
/* Now perform all the actions indicated by the arguments. */
if (cdarg != NULL)
@@ -928,7 +928,7 @@ captured_main (void *data)
/* Read the .gdbinit file in the current directory, *if* it isn't
the same as the $HOME/.gdbinit file (it should exist, also). */
if (local_gdbinit && !inhibit_gdbinit)
- catch_command_errors (source_script, local_gdbinit, 0, RETURN_MASK_ALL);
+ catch_command_errors (source_script, local_gdbinit, -1, RETURN_MASK_ALL);
/* Now that all .gdbinit's have been read and all -d options have been
processed, we can read any scripts mentioned in SYMARG.
Index: gdb-7.3.50.20110722/gdb/python/py-auto-load.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/py-auto-load.c 2011-05-16 18:33:57.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/py-auto-load.c 2011-07-22 19:14:54.000000000 +0200
@@ -284,7 +284,7 @@ source_section_scripts (struct objfile *
}
opened = find_and_open_script (file, 1 /*search_path*/,
- &stream, &full_path);
+ &stream, &full_path, 1 /* from_tty */);
/* If one script isn't found it's not uncommon for more to not be
found either. We don't want to print an error message for each
Index: gdb-7.3.50.20110722/gdb/cli/cli-cmds.h
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/cli/cli-cmds.h 2011-01-01 16:33:20.000000000 +0100
+++ gdb-7.3.50.20110722/gdb/cli/cli-cmds.h 2011-07-22 19:14:25.000000000 +0200
@@ -127,7 +127,8 @@ extern void source_script (char *, int);
/* Exported to objfiles.c. */
extern int find_and_open_script (const char *file, int search_path,
- FILE **streamp, char **full_path);
+ FILE **streamp, char **full_path,
+ int from_tty);
/* Command tracing state. */

View File

@ -0,0 +1,60 @@
--- gdb-7.2/gdb/solib-svr4.c.orig 2012-03-17 09:39:54.874090162 +0100
+++ gdb-7.2/gdb/solib-svr4.c 2012-03-17 09:42:12.561810807 +0100
@@ -1179,14 +1179,30 @@ svr4_current_sos (void)
safe_strerror (errcode));
else
{
- struct build_id *build_id;
+ struct build_id *build_id = NULL;
strncpy (new->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
new->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
/* May get overwritten below. */
strcpy (new->so_name, new->so_original_name);
- build_id = build_id_addr_get (lm_dynamic_from_link_map (new));
+ /* In the case the main executable was found according to its
+ build-id (from a core file) prevent loading a different build
+ of a library with accidentally the same SO_NAME.
+
+ It suppresses bogus backtraces (and prints "??" there instead)
+ if the on-disk files no longer match the running program
+ version.
+
+ If the main executable was not loaded according to its
+ build-id do not do any build-id checking of the libraries.
+ There may be missing build-ids dumped in the core file and we
+ would map all the libraries to the only existing file loaded
+ that time - the executable. */
+
+ if (symfile_objfile != NULL
+ && (symfile_objfile->flags & OBJF_BUILD_ID_CORE_LOADED) != 0)
+ build_id = build_id_addr_get (lm_dynamic_from_link_map (new));
if (build_id != NULL)
{
char *name, *build_id_filename;
@@ -1224,23 +1240,7 @@ svr4_current_sos (void)
xfree (name);
}
else
- {
- debug_print_missing (new->so_name, build_id_filename);
-
- /* In the case the main executable was found according to
- its build-id (from a core file) prevent loading
- a different build of a library with accidentally the
- same SO_NAME.
-
- It suppresses bogus backtraces (and prints "??" there
- instead) if the on-disk files no longer match the
- running program version. */
-
- if (symfile_objfile != NULL
- && (symfile_objfile->flags
- & OBJF_BUILD_ID_CORE_LOADED) != 0)
- new->so_name[0] = 0;
- }
+ debug_print_missing (new->so_name, build_id_filename);
xfree (build_id_filename);
xfree (build_id);

70
gdb-autoload-01of22.patch Normal file
View File

@ -0,0 +1,70 @@
http://sourceware.org/ml/gdb-cvs/2011-09/msg00121.html
### src/gdb/ChangeLog 2011/09/19 10:50:53 1.13352
### src/gdb/ChangeLog 2011/09/19 19:01:38 1.13353
## -1,3 +1,9 @@
+2011-09-19 Doug Evans <dje@google.com>
+
+ * python/py-auto-load.c (source_section_scripts): Fix file
+ descriptor leak.
+ * python/python.c (source_python_script_for_objfile): Tweak comments.
+
2011-09-18 Yao Qi <yao@codesourcery.com>
Ulrich Weigand <ulrich.weigand@linaro.org>
--- src/gdb/python/python.c 2011/09/15 12:42:30 1.72
+++ src/gdb/python/python.c 2011/09/19 19:01:40 1.73
@@ -903,7 +903,10 @@
static struct objfile *gdbpy_current_objfile;
/* Set the current objfile to OBJFILE and then read STREAM,FILE as
- Python code. */
+ Python code.
+ STREAM is left open, it is up to the caller to close it.
+ If an exception occurs python will print the traceback and
+ clear the error indicator. */
void
source_python_script_for_objfile (struct objfile *objfile,
@@ -914,8 +917,6 @@
cleanups = ensure_python_env (get_objfile_arch (objfile), current_language);
gdbpy_current_objfile = objfile;
- /* Note: If an exception occurs python will print the traceback and
- clear the error indicator. */
PyRun_SimpleFile (stream, file);
do_cleanups (cleanups);
--- src/gdb/python/py-auto-load.c 2011/08/04 19:10:14 1.12
+++ src/gdb/python/py-auto-load.c 2011/09/19 19:01:40 1.13
@@ -296,9 +296,6 @@
in_hash_table = maybe_add_script (pspace_info->loaded_scripts, file,
opened ? full_path : NULL);
- if (opened)
- free (full_path);
-
if (! opened)
{
/* We don't throw an error, the program is still debuggable. */
@@ -310,12 +307,15 @@
GDBPY_AUTO_SECTION_NAME, objfile->name);
pspace_info->script_not_found_warning_printed = TRUE;
}
- continue;
}
-
- /* If this file is not currently loaded, load it. */
- if (! in_hash_table)
- source_python_script_for_objfile (objfile, stream, file);
+ else
+ {
+ /* If this file is not currently loaded, load it. */
+ if (! in_hash_table)
+ source_python_script_for_objfile (objfile, stream, file);
+ fclose (stream);
+ free (full_path);
+ }
}
}

81
gdb-autoload-02of22.patch Normal file
View File

@ -0,0 +1,81 @@
http://sourceware.org/ml/gdb-cvs/2011-10/msg00012.html
### src/gdb/ChangeLog 2011/10/03 16:14:39 1.13370
### src/gdb/ChangeLog 2011/10/03 20:46:18 1.13371
## -1,3 +1,10 @@
+2011-10-03 Joel Brobecker <brobecker@adacore.com>
+
+ * python/python.c (python_run_simple_file): New function.
+ (source_python_script, source_python_script_for_objfile):
+ Replace call to PyRun_SimpleFile by call to
+ python_run_simple_file.
+
2011-10-03 Paul Koning <paul_koning@dell.com>
* python/py-value.c (valpy_get_address): Use Py_XINCREF.
--- src/gdb/python/python.c 2011/09/19 19:01:40 1.73
+++ src/gdb/python/python.c 2011/10/03 20:46:19 1.74
@@ -134,6 +134,45 @@
return make_cleanup (restore_python_env, env);
}
+/* A wrapper around PyRun_SimpleFile. FILENAME is the name of
+ the Python script to run.
+
+ One of the parameters of PyRun_SimpleFile is a FILE *.
+ The problem is that type FILE is extremely system and compiler
+ dependent. So, unless the Python library has been compiled using
+ the same build environment as GDB, we run the risk of getting
+ a crash due to inconsistencies between the definition used by GDB,
+ and the definition used by Python. A mismatch can very likely
+ lead to a crash.
+
+ There is also the situation where the Python library and GDB
+ are using two different versions of the C runtime library.
+ This is particularly visible on Windows, where few users would
+ build Python themselves (this is no trivial task on this platform),
+ and thus use binaries built by someone else instead. Python,
+ being built with VC, would use one version of the msvcr DLL
+ (Eg. msvcr100.dll), while MinGW uses msvcrt.dll. A FILE *
+ from one runtime does not necessarily operate correctly in
+ the other runtime.
+
+ To work around this potential issue, we create the FILE object
+ using Python routines, thus making sure that it is compatible
+ with the Python library. */
+
+static void
+python_run_simple_file (const char *filename)
+{
+ char *filename_copy;
+ PyObject *python_file;
+ struct cleanup *cleanup;
+
+ filename_copy = xstrdup (filename);
+ cleanup = make_cleanup (xfree, filename_copy);
+ python_file = PyFile_FromString (filename_copy, "r");
+ make_cleanup_py_decref (python_file);
+ PyRun_SimpleFile (PyFile_AsFile (python_file), filename);
+ do_cleanups (cleanup);
+}
/* Given a command_line, return a command string suitable for passing
to Python. Lines in the string are separated by newlines. The
@@ -573,7 +612,7 @@
/* Note: If an exception occurs python will print the traceback and
clear the error indicator. */
- PyRun_SimpleFile (stream, file);
+ python_run_simple_file (file);
do_cleanups (cleanup);
}
@@ -917,7 +956,7 @@
cleanups = ensure_python_env (get_objfile_arch (objfile), current_language);
gdbpy_current_objfile = objfile;
- PyRun_SimpleFile (stream, file);
+ python_run_simple_file (file);
do_cleanups (cleanups);
gdbpy_current_objfile = NULL;

179
gdb-autoload-03of22.patch Normal file
View File

@ -0,0 +1,179 @@
http://sourceware.org/ml/gdb-cvs/2011-10/msg00197.html
### src/gdb/ChangeLog 2011/10/27 15:32:10 1.13467
### src/gdb/ChangeLog 2011/10/27 15:46:07 1.13468
## -1,3 +1,15 @@
+2011-10-27 Doug Evans <dje@google.com>
+
+ * cli/cli-cmds.c (source_script_with_search): Pass full path to
+ source_script_from_stream if it may have been found on the search path.
+ * python/py-auto-load.c (source_section_scripts): Pass full path to
+ source_python_script_for_objfile.
+ * python/python.c (source_python_script): Delete stream parameter.
+ All callers updated.
+ (source_python_script_for_objfile): Ditto.
+ * python/python-internal.h (source_python_script_for_objfile): Update.
+ * python/python.h (source_python_script): Update.
+
2011-10-27 Tom Tromey <tromey@redhat.com>
* ada-lang.h (ada_start_decode_line_1, ada_finish_decode_line_1)
Index: gdb-7.3.50.20110722/gdb/cli/cli-cmds.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/cli/cli-cmds.c 2011-06-07 19:26:46.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/cli/cli-cmds.c 2012-04-18 23:38:50.808994431 +0200
@@ -534,7 +534,9 @@ source_script_from_stream (FILE *stream,
TRY_CATCH (e, RETURN_MASK_ERROR)
{
- source_python_script (stream, file);
+ /* The python support reopens the file using python functions,
+ so there's no point in passing STREAM here. */
+ source_python_script (file);
}
if (e.reason < 0)
{
@@ -576,7 +578,7 @@ source_script_with_search (const char *f
if (!find_and_open_script (file, search_path, &stream, &full_path))
{
- /* The script wasn't found, or was otherwise inaccessible.
+ /* The script wasn't found, or was otherwise inaccessible.
If the source command was invoked interactively, throw an
error. Otherwise (e.g. if it was invoked by a script),
silently ignore the error. */
@@ -587,7 +589,12 @@ source_script_with_search (const char *f
}
old_cleanups = make_cleanup (xfree, full_path);
- source_script_from_stream (stream, file);
+ /* The python support reopens the file, so we need to pass full_path here
+ in case the file was found on the search path. It's useful to do this
+ anyway so that error messages show the actual file used. But only do
+ this if we (may have) used search_path, as printing the full path in
+ errors for the non-search case can be more noise than signal. */
+ source_script_from_stream (stream, search_path ? full_path : file);
do_cleanups (old_cleanups);
}
Index: gdb-7.3.50.20110722/gdb/python/py-auto-load.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/py-auto-load.c 2012-04-18 23:38:42.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/py-auto-load.c 2012-04-18 23:38:50.809994429 +0200
@@ -312,7 +312,7 @@ Use `info auto-load-scripts [REGEXP]' to
{
/* If this file is not currently loaded, load it. */
if (! in_hash_table)
- source_python_script_for_objfile (objfile, stream, file);
+ source_python_script_for_objfile (objfile, full_path);
fclose (stream);
free (full_path);
}
@@ -431,7 +431,7 @@ auto_load_objfile_script (struct objfile
It's highly unlikely that we'd ever load it twice,
and these scripts are required to be idempotent under multiple
loads anyway. */
- source_python_script_for_objfile (objfile, input, debugfile);
+ source_python_script_for_objfile (objfile, debugfile);
fclose (input);
}
Index: gdb-7.3.50.20110722/gdb/python/python.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/python.c 2012-04-18 23:38:42.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/python.c 2012-04-18 23:38:50.809994429 +0200
@@ -594,21 +594,18 @@ gdbpy_parse_and_eval (PyObject *self, Py
return value_to_value_object (result);
}
-/* Read a file as Python code. STREAM is the input file; FILE is the
- name of the file.
- STREAM is not closed, that is the caller's responsibility. */
+/* Read a file as Python code.
+ FILE is the name of the file.
+ This does not throw any errors. If an exception occurs python will print
+ the traceback and clear the error indicator. */
void
-source_python_script (FILE *stream, const char *file)
+source_python_script (const char *file)
{
struct cleanup *cleanup;
cleanup = ensure_python_env (get_current_arch (), current_language);
-
- /* Note: If an exception occurs python will print the traceback and
- clear the error indicator. */
python_run_simple_file (file);
-
do_cleanups (cleanup);
}
@@ -983,15 +980,12 @@ gdbpy_progspaces (PyObject *unused1, PyO
source_python_script_for_objfile; it is NULL at other times. */
static struct objfile *gdbpy_current_objfile;
-/* Set the current objfile to OBJFILE and then read STREAM,FILE as
- Python code.
- STREAM is left open, it is up to the caller to close it.
- If an exception occurs python will print the traceback and
- clear the error indicator. */
+/* Set the current objfile to OBJFILE and then read FILE as Python code.
+ This does not throw any errors. If an exception occurs python will print
+ the traceback and clear the error indicator. */
void
-source_python_script_for_objfile (struct objfile *objfile,
- FILE *stream, const char *file)
+source_python_script_for_objfile (struct objfile *objfile, const char *file)
{
struct cleanup *cleanups;
@@ -1074,7 +1068,7 @@ eval_python_from_control_command (struct
}
void
-source_python_script (FILE *stream, const char *file)
+source_python_script (const char *file)
{
throw_error (UNSUPPORTED_ERROR,
_("Python scripting is not supported in this copy of GDB."));
Index: gdb-7.3.50.20110722/gdb/python/python.h
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/python.h 2012-04-18 23:38:41.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/python.h 2012-04-18 23:38:50.809994429 +0200
@@ -30,7 +30,7 @@ extern void finish_python_initialization
void eval_python_from_control_command (struct command_line *);
-void source_python_script (FILE *stream, const char *file);
+void source_python_script (const char *file);
void run_python_script (int argc, char **argv);
Index: gdb-7.3.50.20110722/gdb/python/python-internal.h
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/python-internal.h 2011-06-28 15:09:12.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/python-internal.h 2012-04-18 23:38:50.809994429 +0200
@@ -242,7 +242,7 @@ extern const struct language_defn *pytho
void gdbpy_print_stack (void);
void source_python_script_for_objfile (struct objfile *objfile,
- FILE *stream, const char *file);
+ const char *file);
PyObject *python_string_to_unicode (PyObject *obj);
char *unicode_to_target_string (PyObject *unicode_str);
Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.python/python.exp
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/testsuite/gdb.python/python.exp 2011-07-21 13:03:48.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/testsuite/gdb.python/python.exp 2012-04-18 23:38:50.810994427 +0200
@@ -75,6 +75,8 @@ gdb_py_test_multiple "indented multi-lin
gdb_test "source $srcdir/$subdir/source2.py" "yes"
+gdb_test "source -s source2.py" "yes" "source -s source2.py"
+
gdb_test "python print gdb.current_objfile()" "None"
gdb_test "python print gdb.objfiles()" "\\\[\\\]"

40
gdb-autoload-04of22.patch Normal file
View File

@ -0,0 +1,40 @@
http://sourceware.org/ml/gdb-cvs/2011-12/msg00201.html
### src/gdb/ChangeLog 2011/12/19 22:20:05 1.13649
### src/gdb/ChangeLog 2011/12/20 04:29:33 1.13650
## -1,3 +1,9 @@
+2011-12-19 Doug Evans <dje@google.com>
+
+ * python/py-auto-load.c (info_auto_load_scripts): Pass address of
+ scripts vector to collect_matching_scripts.
+ (collect_matching_scripts): Update.
+
2011-12-19 Jan Kratochvil <jan.kratochvil@redhat.com>
* symfile.c (reread_symbols): Move free_objfile_separate_debug,
--- src/gdb/python/py-auto-load.c 2011/12/10 22:51:47 1.15
+++ src/gdb/python/py-auto-load.c 2011/12/20 04:29:35 1.16
@@ -481,10 +481,10 @@
collect_matching_scripts (void **slot, void *info)
{
struct loaded_script *script = *slot;
- VEC (loaded_script_ptr) *scripts = info;
+ VEC (loaded_script_ptr) **scripts_ptr = info;
if (re_exec (script->name))
- VEC_safe_push (loaded_script_ptr, scripts, script);
+ VEC_safe_push (loaded_script_ptr, *scripts_ptr, script);
return 1;
}
@@ -563,8 +563,9 @@
if (pspace_info != NULL && pspace_info->loaded_scripts != NULL)
{
immediate_quit++;
+ /* Pass a pointer to scripts as VEC_safe_push can realloc space. */
htab_traverse_noresize (pspace_info->loaded_scripts,
- collect_matching_scripts, scripts);
+ collect_matching_scripts, &scripts);
immediate_quit--;
}

69
gdb-autoload-05of22.patch Normal file
View File

@ -0,0 +1,69 @@
http://sourceware.org/ml/gdb-cvs/2012-01/msg00202.html
### src/gdb/ChangeLog 2012/01/24 19:12:31 1.13771
### src/gdb/ChangeLog 2012/01/24 20:56:33 1.13772
## -1,3 +1,12 @@
+2012-01-24 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Code cleanup.
+ * cli/cli-cmds.c (source_script_from_stream): Never fclose STREAM.
+ Update the function comment for it.
+ (source_script_with_search): Call make_cleanup_fclose for STREAM.
+ * cli/cli-script.c (script_from_file): Do not call make_cleanup_fclose
+ for STREAM.
+
2012-01-24 Pedro Alves <palves@redhat.com>
* breakpoint.c (bpstat_stop_status): Moving clearing print_it
Index: gdb-7.3.50.20110722/gdb/cli/cli-cmds.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/cli/cli-cmds.c 2012-04-18 23:38:50.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/cli/cli-cmds.c 2012-04-18 23:39:52.709847704 +0200
@@ -521,8 +521,7 @@ find_and_open_script (const char *script
return 1;
}
-/* Load script FILE, which has already been opened as STREAM.
- STREAM is closed before we return. */
+/* Load script FILE, which has already been opened as STREAM. */
static void
source_script_from_stream (FILE *stream, const char *file)
@@ -550,12 +549,9 @@ source_script_from_stream (FILE *stream,
else
{
/* Nope, just punt. */
- fclose (stream);
throw_exception (e);
}
}
- else
- fclose (stream);
}
else
script_from_file (stream, file);
@@ -589,6 +585,7 @@ source_script_with_search (const char *f
}
old_cleanups = make_cleanup (xfree, full_path);
+ make_cleanup_fclose (stream);
/* The python support reopens the file, so we need to pass full_path here
in case the file was found on the search path. It's useful to do this
anyway so that error messages show the actual file used. But only do
Index: gdb-7.3.50.20110722/gdb/cli/cli-script.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/cli/cli-script.c 2011-06-27 21:21:50.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/cli/cli-script.c 2012-04-18 23:39:22.845918492 +0200
@@ -1600,11 +1600,9 @@ script_from_file (FILE *stream, const ch
if (stream == NULL)
internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
- old_cleanups = make_cleanup_fclose (stream);
-
old_lines.old_line = source_line_number;
old_lines.old_file = source_file_name;
- make_cleanup (source_cleanup_lines, &old_lines);
+ old_cleanups = make_cleanup (source_cleanup_lines, &old_lines);
source_line_number = 0;
source_file_name = file;
/* This will get set every time we read a line. So it won't stay ""

103
gdb-autoload-06of22.patch Normal file
View File

@ -0,0 +1,103 @@
http://sourceware.org/ml/gdb-cvs/2012-01/msg00205.html
--- src/gdb/gdb_vecs.h
+++ src/gdb/gdb_vecs.h 2012-04-17 22:04:23.818666000 +0000
@@ -0,0 +1,28 @@
+/* Some commonly-used VEC types.
+
+ Copyright (C) 2012 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+
+#ifndef GDB_VECS_H
+#define GDB_VECS_H
+
+#include "vec.h"
+
+DEF_VEC_P (char_ptr);
+
+#endif /* GDB_VECS_H */
### src/gdb/ChangeLog 2012/01/24 21:32:56 1.13774
### src/gdb/ChangeLog 2012/01/24 21:36:37 1.13775
## -1,3 +1,10 @@
+2012-01-24 Tom Tromey <tromey@redhat.com>
+
+ * ada-lang.c: Include gdb_vecs.h.
+ * charset.c: Include gdb_vecs.h.
+ * tracepoint.h: Include gdb_vecs.h.
+ * gdb_vecs.h: New file.
+
2012-01-24 Pedro Alves <pedro@codesourcery.com>
* breakpoint.c (breakpoint_hit_catch_fork)
--- src/gdb/ada-lang.c 2012/01/06 03:34:45 1.330
+++ src/gdb/ada-lang.c 2012/01/24 21:36:37 1.331
@@ -57,6 +57,7 @@
#include "observer.h"
#include "vec.h"
#include "stack.h"
+#include "gdb_vecs.h"
#include "psymtab.h"
#include "value.h"
@@ -5628,8 +5629,6 @@
return sym_name;
}
-DEF_VEC_P (char_ptr);
-
/* A companion function to ada_make_symbol_completion_list().
Check if SYM_NAME represents a symbol which name would be suitable
to complete TEXT (TEXT_LEN is the length of TEXT), in which case
--- src/gdb/charset.c 2012/01/04 08:17:00 1.46
+++ src/gdb/charset.c 2012/01/24 21:36:37 1.47
@@ -27,6 +27,7 @@
#include "vec.h"
#include "environ.h"
#include "arch-utils.h"
+#include "gdb_vecs.h"
#include <stddef.h>
#include "gdb_string.h"
@@ -717,8 +718,6 @@
extern initialize_file_ftype _initialize_charset; /* -Wmissing-prototype */
-DEF_VEC_P (char_ptr);
-
static VEC (char_ptr) *charsets;
#ifdef PHONY_ICONV
--- src/gdb/tracepoint.h 2012/01/04 08:27:57 1.46
+++ src/gdb/tracepoint.h 2012/01/24 21:36:37 1.47
@@ -22,6 +22,7 @@
#include "breakpoint.h"
#include "target.h"
#include "memrange.h"
+#include "gdb_vecs.h"
/* A trace state variable is a value managed by a target being
traced. A trace state variable (or tsv for short) can be accessed
@@ -143,8 +144,6 @@
/* Struct to collect random info about tracepoints on the target. */
-DEF_VEC_P (char_ptr);
-
struct uploaded_tp
{
int number;

216
gdb-autoload-07of22.patch Normal file
View File

@ -0,0 +1,216 @@
http://sourceware.org/ml/gdb-cvs/2012-01/msg00219.html
### src/gdb/ChangeLog 2012/01/26 16:44:29 1.13780
### src/gdb/ChangeLog 2012/01/26 21:54:42 1.13781
## -1,3 +1,22 @@
+2012-01-26 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Do not open script filenames twice.
+ * cli/cli-cmds.c (source_script_from_stream): Pass to
+ source_python_script also STREAM.
+ * python/py-auto-load.c (source_section_scripts): Pass to
+ source_python_script_for_objfile also STREAM.
+ (auto_load_objfile_script): Pass to source_python_script_for_objfile
+ also INPUT.
+ * python/python-internal.h (source_python_script_for_objfile): New
+ parameter file, rename parameter file to filename.
+ * python/python.c (python_run_simple_file): Call PyRun_SimpleFile
+ instead if !_WIN32. Update the function comment.
+ (source_python_script, source_python_script_for_objfile)
+ (source_python_script): New parameter file, rename parameter file to
+ filename. Pass FILENAME to python_run_simple_file.
+ * python/python.h (source_python_script): New parameter file, rename
+ parameter file to filename.
+
2012-01-26 Pedro Alves <palves@redhat.com>
* corelow.c (core_has_fake_pid): Delete.
Index: gdb-7.3.50.20110722/gdb/cli/cli-cmds.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/cli/cli-cmds.c 2012-04-18 23:39:52.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/cli/cli-cmds.c 2012-04-18 23:40:19.179784960 +0200
@@ -533,9 +533,7 @@ source_script_from_stream (FILE *stream,
TRY_CATCH (e, RETURN_MASK_ERROR)
{
- /* The python support reopens the file using python functions,
- so there's no point in passing STREAM here. */
- source_python_script (file);
+ source_python_script (stream, file);
}
if (e.reason < 0)
{
Index: gdb-7.3.50.20110722/gdb/python/py-auto-load.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/py-auto-load.c 2012-04-18 23:38:50.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/py-auto-load.c 2012-04-18 23:40:45.197723289 +0200
@@ -312,7 +312,7 @@ Use `info auto-load-scripts [REGEXP]' to
{
/* If this file is not currently loaded, load it. */
if (! in_hash_table)
- source_python_script_for_objfile (objfile, full_path);
+ source_python_script_for_objfile (objfile, stream, full_path);
fclose (stream);
free (full_path);
}
@@ -431,7 +431,7 @@ auto_load_objfile_script (struct objfile
It's highly unlikely that we'd ever load it twice,
and these scripts are required to be idempotent under multiple
loads anyway. */
- source_python_script_for_objfile (objfile, debugfile);
+ source_python_script_for_objfile (objfile, input, debugfile);
fclose (input);
}
Index: gdb-7.3.50.20110722/gdb/python/python-internal.h
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/python-internal.h 2012-04-18 23:38:50.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/python-internal.h 2012-04-18 23:40:19.180784958 +0200
@@ -241,8 +241,8 @@ extern const struct language_defn *pytho
void gdbpy_print_stack (void);
-void source_python_script_for_objfile (struct objfile *objfile,
- const char *file);
+void source_python_script_for_objfile (struct objfile *objfile, FILE *file,
+ const char *filename);
PyObject *python_string_to_unicode (PyObject *obj);
char *unicode_to_target_string (PyObject *unicode_str);
Index: gdb-7.3.50.20110722/gdb/python/python.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/python.c 2012-04-18 23:38:50.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/python.c 2012-04-18 23:42:01.188543162 +0200
@@ -136,34 +136,31 @@ ensure_python_env (struct gdbarch *gdbar
return make_cleanup (restore_python_env, env);
}
-/* A wrapper around PyRun_SimpleFile. FILENAME is the name of
- the Python script to run.
+/* A wrapper around PyRun_SimpleFile. FILE is the Python script to run
+ named FILENAME.
- One of the parameters of PyRun_SimpleFile is a FILE *.
- The problem is that type FILE is extremely system and compiler
- dependent. So, unless the Python library has been compiled using
- the same build environment as GDB, we run the risk of getting
- a crash due to inconsistencies between the definition used by GDB,
- and the definition used by Python. A mismatch can very likely
- lead to a crash.
-
- There is also the situation where the Python library and GDB
- are using two different versions of the C runtime library.
- This is particularly visible on Windows, where few users would
- build Python themselves (this is no trivial task on this platform),
- and thus use binaries built by someone else instead. Python,
- being built with VC, would use one version of the msvcr DLL
- (Eg. msvcr100.dll), while MinGW uses msvcrt.dll. A FILE *
- from one runtime does not necessarily operate correctly in
+ On Windows hosts few users would build Python themselves (this is no
+ trivial task on this platform), and thus use binaries built by
+ someone else instead. There may happen situation where the Python
+ library and GDB are using two different versions of the C runtime
+ library. Python, being built with VC, would use one version of the
+ msvcr DLL (Eg. msvcr100.dll), while MinGW uses msvcrt.dll.
+ A FILE * from one runtime does not necessarily operate correctly in
the other runtime.
- To work around this potential issue, we create the FILE object
- using Python routines, thus making sure that it is compatible
- with the Python library. */
-
+ To work around this potential issue, we create on Windows hosts the
+ FILE object using Python routines, thus making sure that it is
+ compatible with the Python library. */
+
static void
-python_run_simple_file (const char *filename)
+python_run_simple_file (FILE *file, const char *filename)
{
+#ifndef _WIN32
+
+ PyRun_SimpleFile (file, filename);
+
+#else /* _WIN32 */
+
char *filename_copy;
PyObject *python_file;
struct cleanup *cleanup;
@@ -174,6 +171,8 @@ python_run_simple_file (const char *file
make_cleanup_py_decref (python_file);
PyRun_SimpleFile (PyFile_AsFile (python_file), filename);
do_cleanups (cleanup);
+
+#endif /* _WIN32 */
}
/* Given a command_line, return a command string suitable for passing
@@ -595,17 +594,17 @@ gdbpy_parse_and_eval (PyObject *self, Py
}
/* Read a file as Python code.
- FILE is the name of the file.
+ FILE is the file to run. FILENAME is name of the file FILE.
This does not throw any errors. If an exception occurs python will print
the traceback and clear the error indicator. */
void
-source_python_script (const char *file)
+source_python_script (FILE *file, const char *filename)
{
struct cleanup *cleanup;
cleanup = ensure_python_env (get_current_arch (), current_language);
- python_run_simple_file (file);
+ python_run_simple_file (file, filename);
do_cleanups (cleanup);
}
@@ -980,19 +979,20 @@ gdbpy_progspaces (PyObject *unused1, PyO
source_python_script_for_objfile; it is NULL at other times. */
static struct objfile *gdbpy_current_objfile;
-/* Set the current objfile to OBJFILE and then read FILE as Python code.
- This does not throw any errors. If an exception occurs python will print
- the traceback and clear the error indicator. */
+/* Set the current objfile to OBJFILE and then read FILE named FILENAME
+ as Python code. This does not throw any errors. If an exception
+ occurs python will print the traceback and clear the error indicator. */
void
-source_python_script_for_objfile (struct objfile *objfile, const char *file)
+source_python_script_for_objfile (struct objfile *objfile, FILE *file,
+ const char *filename)
{
struct cleanup *cleanups;
cleanups = ensure_python_env (get_objfile_arch (objfile), current_language);
gdbpy_current_objfile = objfile;
- python_run_simple_file (file);
+ python_run_simple_file (file, filename);
do_cleanups (cleanups);
gdbpy_current_objfile = NULL;
@@ -1068,7 +1068,7 @@ eval_python_from_control_command (struct
}
void
-source_python_script (const char *file)
+source_python_script (FILE *file, const char *filename)
{
throw_error (UNSUPPORTED_ERROR,
_("Python scripting is not supported in this copy of GDB."));
Index: gdb-7.3.50.20110722/gdb/python/python.h
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/python.h 2012-04-18 23:38:50.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/python.h 2012-04-18 23:40:19.181784956 +0200
@@ -30,7 +30,7 @@ extern void finish_python_initialization
void eval_python_from_control_command (struct command_line *);
-void source_python_script (const char *file);
+void source_python_script (FILE *file, const char *filename);
void run_python_script (int argc, char **argv);

141
gdb-autoload-08of22.patch Normal file
View File

@ -0,0 +1,141 @@
http://sourceware.org/ml/gdb-cvs/2012-03/msg00234.html
### src/gdb/ChangeLog 2012/03/19 18:13:39 1.14025
### src/gdb/ChangeLog 2012/03/19 18:16:17 1.14026
## -1,3 +1,14 @@
+2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Code cleanup.
+ * main.c (struct cmdarg): Move it here from main. Add more comments.
+ (cmdarg_s, VEC (cmdarg_s)): New.
+ (main): Move struct cmdarg from here. New variables cmdarg_vec and
+ cmdarg_p. Remove variables cmdsize and ncmd and their initialization.
+ Install cleanup for cmdarg_vec. Update filling for options 'x' and
+ 'X'. Replace cmdarg processing by cmdarg_vec processing. Remove xfree
+ of CMDARG.
+
2012-03-19 Tom Tromey <tromey@redhat.com>
* gnu-v3-abi.c (gnuv3_print_vtable): Initialize 'result_vec'.
Index: gdb-7.3.50.20110722/gdb/main.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/main.c 2012-04-18 23:38:42.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/main.c 2012-04-18 23:42:28.152479249 +0200
@@ -275,6 +275,25 @@ exec_or_core_file_attach (char *filename
}
}
+/* Arguments of --command option and its counterpart. */
+typedef struct cmdarg {
+ /* Type of this option. */
+ enum {
+ /* Option type -x. */
+ CMDARG_FILE,
+
+ /* Option type -ex. */
+ CMDARG_COMMAND
+ } type;
+
+ /* Value of this option - filename or the GDB command itself. String memory
+ is not owned by this structure despite it is 'const'. */
+ char *string;
+} cmdarg_s;
+
+/* Define type VEC (cmdarg_s). */
+DEF_VEC_O (cmdarg_s);
+
static int
captured_main (void *data)
{
@@ -301,17 +320,8 @@ captured_main (void *data)
static int print_version;
/* Pointers to all arguments of --command option. */
- struct cmdarg {
- enum {
- CMDARG_FILE,
- CMDARG_COMMAND
- } type;
- char *string;
- } *cmdarg;
- /* Allocated size of cmdarg. */
- int cmdsize;
- /* Number of elements of cmdarg used. */
- int ncmd;
+ VEC (cmdarg_s) *cmdarg_vec = NULL;
+ struct cmdarg *cmdarg_p;
/* Indices of all arguments of --directory option. */
char **dirarg;
@@ -344,9 +354,7 @@ captured_main (void *data)
lim_at_start = (char *) sbrk (0);
#endif
- cmdsize = 1;
- cmdarg = (struct cmdarg *) xmalloc (cmdsize * sizeof (*cmdarg));
- ncmd = 0;
+ make_cleanup (VEC_cleanup (cmdarg_s), &cmdarg_vec);
dirsize = 1;
dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
ndir = 0;
@@ -577,24 +585,19 @@ captured_main (void *data)
pidarg = optarg;
break;
case 'x':
- cmdarg[ncmd].type = CMDARG_FILE;
- cmdarg[ncmd++].string = optarg;
- if (ncmd >= cmdsize)
- {
- cmdsize *= 2;
- cmdarg = xrealloc ((char *) cmdarg,
- cmdsize * sizeof (*cmdarg));
- }
+ {
+ struct cmdarg cmdarg = { CMDARG_FILE, optarg };
+
+ VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+ }
break;
case 'X':
- cmdarg[ncmd].type = CMDARG_COMMAND;
- cmdarg[ncmd++].string = optarg;
- if (ncmd >= cmdsize)
- {
- cmdsize *= 2;
- cmdarg = xrealloc ((char *) cmdarg,
- cmdsize * sizeof (*cmdarg));
- }
+ {
+ struct cmdarg cmdarg = { CMDARG_COMMAND, optarg };
+
+ VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+ }
+ break;
break;
case 'B':
batch_flag = batch_silent = 1;
@@ -985,16 +988,18 @@ captured_main (void *data)
ALL_OBJFILES (objfile)
load_auto_scripts_for_objfile (objfile);
- for (i = 0; i < ncmd; i++)
+ for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
+ switch (cmdarg_p->type)
{
- if (cmdarg[i].type == CMDARG_FILE)
- catch_command_errors (source_script, cmdarg[i].string,
+ case CMDARG_FILE:
+ catch_command_errors (source_script, cmdarg_p->string,
!batch_flag, RETURN_MASK_ALL);
- else /* cmdarg[i].type == CMDARG_COMMAND */
- catch_command_errors (execute_command, cmdarg[i].string,
+ break;
+ case CMDARG_COMMAND:
+ catch_command_errors (execute_command, cmdarg_p->string,
!batch_flag, RETURN_MASK_ALL);
+ break;
}
- xfree (cmdarg);
/* Read in the old history after all the command files have been
read. */

244
gdb-autoload-09of22.patch Normal file
View File

@ -0,0 +1,244 @@
http://sourceware.org/ml/gdb-cvs/2012-03/msg00235.html
### src/gdb/ChangeLog 2012/03/19 18:16:17 1.14026
### src/gdb/ChangeLog 2012/03/19 18:19:23 1.14027
## -1,5 +1,18 @@
2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com>
+ * NEWS: Describe new options --init-command=FILE, -ix and
+ --init-eval-command=COMMAND, -iex.
+ * main.c (struct cmdarg): New enum items CMDARG_INIT_FILE and
+ CMDARG_INIT_COMMAND.
+ (captured_main): New enum items OPT_IX and OPT_IEX. Add
+ "init-command", "init-eval-command", "ix" and "iex" to the variable
+ long_options. Handle OPT_IX and OPT_IEX. Process them from CMDARG_VEC.
+ New comment for CMDARG_FILE and CMDARG_COMMAND processing.
+ (print_gdb_help): Describe --init-command=FILE, -ix and
+ --init-eval-command=COMMAND, -iex.
+
+2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Code cleanup.
* main.c (struct cmdarg): Move it here from main. Add more comments.
(cmdarg_s, VEC (cmdarg_s)): New.
Index: gdb-7.3.50.20110722/gdb/NEWS
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/NEWS 2012-04-18 23:38:41.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/NEWS 2012-04-18 23:43:14.356369737 +0200
@@ -79,6 +79,13 @@ QTDisable
Dynamically disable a tracepoint in a started trace experiment.
+* New command line options
+
+--init-command=FILE, -ix Like --command, -x but execute it
+ before loading inferior.
+--init-eval-command=COMMAND, -iex Like --eval-command=COMMAND, -ex but
+ execute it before loading inferior.
+
*** Changes in GDB 7.3
* GDB has a new command: "thread find [REGEXP]".
Index: gdb-7.3.50.20110722/gdb/main.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/main.c 2012-04-18 23:42:28.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/main.c 2012-04-18 23:42:44.053441559 +0200
@@ -283,7 +283,13 @@ typedef struct cmdarg {
CMDARG_FILE,
/* Option type -ex. */
- CMDARG_COMMAND
+ CMDARG_COMMAND,
+
+ /* Option type -ix. */
+ CMDARG_INIT_FILE,
+
+ /* Option type -iex. */
+ CMDARG_INIT_COMMAND
} type;
/* Value of this option - filename or the GDB command itself. String memory
@@ -429,7 +435,9 @@ captured_main (void *data)
OPT_STATISTICS,
OPT_TUI,
OPT_NOWINDOWS,
- OPT_WINDOWS
+ OPT_WINDOWS,
+ OPT_IX,
+ OPT_IEX
};
static struct option long_options[] =
{
@@ -470,6 +478,10 @@ captured_main (void *data)
{"version", no_argument, &print_version, 1},
{"x", required_argument, 0, 'x'},
{"ex", required_argument, 0, 'X'},
+ {"init-command", required_argument, 0, OPT_IX},
+ {"init-eval-command", required_argument, 0, OPT_IEX},
+ {"ix", required_argument, 0, OPT_IX},
+ {"iex", required_argument, 0, OPT_IEX},
#ifdef GDBTK
{"tclcommand", required_argument, 0, 'z'},
{"enable-external-editor", no_argument, 0, 'y'},
@@ -598,6 +610,19 @@ captured_main (void *data)
VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
}
break;
+ case OPT_IX:
+ {
+ struct cmdarg cmdarg = { CMDARG_INIT_FILE, optarg };
+
+ VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+ }
+ break;
+ case OPT_IEX:
+ {
+ struct cmdarg cmdarg = { CMDARG_INIT_COMMAND, optarg };
+
+ VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+ }
break;
case 'B':
batch_flag = batch_silent = 1;
@@ -872,6 +897,20 @@ captured_main (void *data)
quit_pre_print = error_pre_print;
warning_pre_print = _("\nwarning: ");
+ /* Process '-ix' and '-iex' options early. */
+ for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
+ switch (cmdarg_p->type)
+ {
+ case CMDARG_INIT_FILE:
+ catch_command_errors (source_script, cmdarg_p->string,
+ !batch_flag, RETURN_MASK_ALL);
+ break;
+ case CMDARG_INIT_COMMAND:
+ catch_command_errors (execute_command, cmdarg_p->string,
+ !batch_flag, RETURN_MASK_ALL);
+ break;
+ }
+
/* Read and execute the system-wide gdbinit file, if it exists.
This is done *before* all the command line arguments are
processed; it sets global parameters, which are independent of
@@ -988,6 +1027,7 @@ captured_main (void *data)
ALL_OBJFILES (objfile)
load_auto_scripts_for_objfile (objfile);
+ /* Process '-x' and '-ex' options. */
for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
switch (cmdarg_p->type)
{
@@ -1088,6 +1128,8 @@ Options:\n\n\
Execute a single GDB command.\n\
May be used multiple times and in conjunction\n\
with --command.\n\
+ --init-command=FILE, -ix Like -x but execute it before loading inferior.\n\
+ --init-eval-command=COMMAND, -iex Like -ex but before loading inferior.\n\
--core=COREFILE Analyze the core dump COREFILE.\n\
--pid=PID Attach to running process PID.\n\
"), stream);
Index: gdb-7.3.50.20110722/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/doc/gdb.texinfo 2012-04-18 23:38:42.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/doc/gdb.texinfo 2012-04-18 23:42:44.061441539 +0200
@@ -991,6 +991,22 @@ also be interleaved with @samp{-command}
-x setbreakpoints -ex 'run' a.out
@end smallexample
+@item -init-command @var{file}
+@itemx -ix @var{file}
+@cindex @code{--init-command}
+@cindex @code{-ix}
+Execute commands from file @var{file} before loading gdbinit files or the
+inferior.
+@xref{Startup}.
+
+@item -init-eval-command @var{command}
+@itemx -iex @var{command}
+@cindex @code{--init-eval-command}
+@cindex @code{-iex}
+Execute a single @value{GDBN} command before loading gdbinit files or the
+inferior.
+@xref{Startup}.
+
@item -directory @var{directory}
@itemx -d @var{directory}
@cindex @code{--directory}
@@ -1253,6 +1269,13 @@ Sets up the command interpreter as speci
(@pxref{Mode Options, interpreter}).
@item
+Executes commands and command files specified by the @samp{-iex} and
+@samp{-ix} options in their specified order. Usually you should use the
+@samp{-ex} and @samp{-x} options instead, but this way you can apply
+settings before @value{GDBN} init files get executed and before inferior
+gets loaded.
+
+@item
@cindex init file
Reads the system-wide @dfn{init file} (if @option{--with-system-gdbinit} was
used when building @value{GDBN}; @pxref{System-wide configuration,
@@ -1286,14 +1309,11 @@ If you wish to disable the auto-loading
you must do something like the following:
@smallexample
-$ gdb -ex "set auto-load-scripts off" -ex "file myprogram"
+$ gdb -iex "set auto-load-scripts off" myprogram
@end smallexample
-The following does not work because the auto-loading is turned off too late:
-
-@smallexample
-$ gdb -ex "set auto-load-scripts off" myprogram
-@end smallexample
+Option @samp{-ex} does not work because the auto-loading is then turned
+off too late.
@item
Reads command files specified by the @samp{-x} option. @xref{Command
Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.gdb/selftest.exp
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/testsuite/gdb.gdb/selftest.exp 2012-04-18 23:38:41.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/testsuite/gdb.gdb/selftest.exp 2012-04-18 23:42:44.062441537 +0200
@@ -96,6 +96,10 @@ proc do_steps_and_nexts {} {
set description "step over python_script initialization"
set command "step"
}
+ -re ".*cmdarg_vec = NULL.*$gdb_prompt $" {
+ set description "step over cmdarg_vec initialization"
+ set command "step"
+ }
-re ".*pre_stat_chain = make_command_stats_cleanup.*$gdb_prompt $" {
set description "next over make_command_stats_cleanup and everything it calls"
set command "next"
@@ -132,18 +136,6 @@ proc do_steps_and_nexts {} {
set description "next over conditional stack alignment alloca"
set command "next"
}
- -re ".*cmdsize = 1.*$gdb_prompt $" {
- set description "step over cmdsize initialization"
- set command "next"
- }
- -re ".*cmdarg = .* xmalloc.*$gdb_prompt $" {
- set description "next over cmdarg initialization via xmalloc"
- set command "next"
- }
- -re ".*ncmd = 0.*$gdb_prompt $" {
- set description "next over ncmd initialization"
- set command "next"
- }
-re ".*dirsize = 1.*$gdb_prompt $" {
set description "next over dirsize initialization"
set command "next"
@@ -167,6 +159,10 @@ proc do_steps_and_nexts {} {
set description "next over textdomain PACKAGE"
set command "next"
}
+ -re ".*VEC_cleanup .cmdarg_s.*$gdb_prompt $" {
+ set description "next over cmdarg_s VEC_cleanup"
+ set command "next"
+ }
-re "\[0-9\]+\[\t \]+\{\r\n$gdb_prompt $" {
set description "step over initial brace"
set command "step"

73
gdb-autoload-10of22.patch Normal file
View File

@ -0,0 +1,73 @@
http://sourceware.org/ml/gdb-cvs/2012-03/msg00236.html
### src/gdb/ChangeLog 2012/03/19 18:19:23 1.14027
### src/gdb/ChangeLog 2012/03/19 18:23:51 1.14028
## -1,5 +1,13 @@
2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Code cleanup.
+ * python/py-auto-load.c (source_section_scripts): New variable back_to.
+ Turn fclose and xfree calls into make_cleanup_fclose and make_cleanup
+ with xfree.
+ (auto_load_objfile_script): Turn fclose into make_cleanup_fclose.
+
+2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com>
+
* NEWS: Describe new options --init-command=FILE, -ix and
--init-eval-command=COMMAND, -iex.
* main.c (struct cmdarg): New enum items CMDARG_INIT_FILE and
Index: gdb-7.3.50.20110722/gdb/python/py-auto-load.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/python/py-auto-load.c 2012-04-18 23:40:45.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/python/py-auto-load.c 2012-04-18 23:43:59.643262382 +0200
@@ -254,6 +254,7 @@ source_section_scripts (struct objfile *
FILE *stream;
char *full_path;
int opened, in_hash_table;
+ struct cleanup *back_to;
if (*p != 1)
{
@@ -286,6 +287,13 @@ source_section_scripts (struct objfile *
opened = find_and_open_script (file, 1 /*search_path*/,
&stream, &full_path);
+ back_to = make_cleanup (null_cleanup, NULL);
+ if (opened)
+ {
+ make_cleanup_fclose (stream);
+ make_cleanup (xfree, full_path);
+ }
+
/* If one script isn't found it's not uncommon for more to not be
found either. We don't want to print an error message for each
script, too much noise. Instead, we print the warning once and tell
@@ -313,9 +321,9 @@ Use `info auto-load-scripts [REGEXP]' to
/* If this file is not currently loaded, load it. */
if (! in_hash_table)
source_python_script_for_objfile (objfile, stream, full_path);
- fclose (stream);
- free (full_path);
}
+
+ do_cleanups (back_to);
}
}
@@ -420,6 +428,8 @@ auto_load_objfile_script (struct objfile
{
struct auto_load_pspace_info *pspace_info;
+ make_cleanup_fclose (input);
+
/* Add this script to the hash table too so "info auto-load-scripts"
can print it. */
pspace_info =
@@ -432,7 +442,6 @@ auto_load_objfile_script (struct objfile
and these scripts are required to be idempotent under multiple
loads anyway. */
source_python_script_for_objfile (objfile, input, debugfile);
- fclose (input);
}
do_cleanups (cleanups);

59
gdb-autoload-11of22.patch Normal file
View File

@ -0,0 +1,59 @@
http://sourceware.org/ml/gdb-cvs/2012-03/msg00296.html
### src/gdb/doc/ChangeLog 2012/03/22 08:10:41 1.1289
### src/gdb/doc/ChangeLog 2012/03/27 20:15:20 1.1290
## -1,3 +1,12 @@
+2012-03-27 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.texinfo (Auto-loading): Rename node reference
+ '.debug_gdb_scripts section' to 'dotdebug_gdb_scripts section'.
+ Twice.
+ (.debug_gdb_scripts section): Rename the node ...
+ (dotdebug_gdb_scripts section): ... here.
+ (Maintenance Commands): Also rename this node reference.
+
2012-03-22 Siva Chandra Reddy <sivachandra@google.com>
* gdb.texinfo (Python API/Values From Inferior): Add description
Index: gdb-7.3.50.20110722/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/doc/gdb.texinfo 2012-04-18 23:42:44.061441539 +0200
+++ gdb-7.3.50.20110722/gdb/doc/gdb.texinfo 2012-04-18 23:44:21.023211705 +0200
@@ -23791,8 +23791,8 @@ command, or because the inferior has loa
@file{@var{objfile}-gdb.py} and @code{.debug_gdb_scripts} section.
@menu
-* objfile-gdb.py file:: The @file{@var{objfile}-gdb.py} file
-* .debug_gdb_scripts section:: The @code{.debug_gdb_scripts} section
+* objfile-gdb.py file:: The @file{@var{objfile}-gdb.py} file
+* dotdebug_gdb_scripts section:: The @code{.debug_gdb_scripts} section
* Which flavor to choose?::
@end menu
@@ -23818,7 +23818,7 @@ Print the list of all scripts that @valu
Also printed is the list of scripts that were mentioned in
the @code{.debug_gdb_scripts} section and were not found
-(@pxref{.debug_gdb_scripts section}).
+(@pxref{dotdebug_gdb_scripts section}).
This is useful because their names are not printed when @value{GDBN}
tries to load them and fails. There may be many of them, and printing
an error message for each one is problematic.
@@ -23869,7 +23869,7 @@ is the object file's real name, as descr
So your @file{-gdb.py} file should be careful to avoid errors if it
is evaluated more than once.
-@node .debug_gdb_scripts section
+@node dotdebug_gdb_scripts section
@subsubsection The @code{.debug_gdb_scripts} section
@cindex @code{.debug_gdb_scripts} section
@@ -32091,7 +32091,7 @@ If @var{regexp} is specified, only print
matching @var{regexp}.
For each script, this command prints its name as specified in the objfile,
and the full path if known.
-@xref{.debug_gdb_scripts section}.
+@xref{dotdebug_gdb_scripts section}.
@kindex maint print statistics
@cindex bcache statistics

171
gdb-autoload-12of22.patch Normal file
View File

@ -0,0 +1,171 @@
[patch#4 2/8] Code cleanup: new path to VEC in utils.c
http://sourceware.org/ml/gdb-patches/2012-04/msg00086.html
http://sourceware.org/ml/gdb-cvs/2012-04/msg00111.html
- reduced for the backport
### src/gdb/ChangeLog 2012/04/17 15:45:05 1.14110
### src/gdb/ChangeLog 2012/04/17 15:47:08 1.14111
## -1,6 +1,34 @@
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
Code cleanup.
+ * charset.c (find_charset_names): Remove variables ix and elt.
+ Use free_char_ptr_vec.
+ * elfread.c (build_id_to_debug_filename): New variables debugdir_vec,
+ back_to and ix. Use dirnames_to_char_ptr_vec. Remove variable
+ debugdir_end. New variable debugdir_len.
+ * gdb_vecs.h (free_char_ptr_vec, make_cleanup_free_char_ptr_vec)
+ (dirnames_to_char_ptr_vec_append, dirnames_to_char_ptr_vec): New
+ declarations.
+ * progspace.c (clear_program_space_solib_cache): Remove variables ix
+ and elt. Use free_char_ptr_vec.
+ * source.c (add_path): Remove variables argv, arg and argv_index.
+ New variables dir_vec, back_to, ix and name.
+ Use dirnames_to_char_ptr_vec_append. Use freeargv instead of
+ make_cleanup_freeargv. Remove variable separator. Simplify the code
+ no longer expecting DIRNAME_SEPARATOR.
+ (openp): Remove variable p, p1 and len. New variables dir_vec,
+ back_to, ix and dir. Use dirnames_to_char_ptr_vec. Simplify the code
+ no longer expecting DIRNAME_SEPARATOR.
+ * symfile.c (find_separate_debug_file): New variables debugdir_vec,
+ back_to and ix. Use dirnames_to_char_ptr_vec. Remove variable
+ debugdir_end.
+ * utils.c (free_char_ptr_vec, do_free_char_ptr_vec)
+ (make_cleanup_free_char_ptr_vec, dirnames_to_char_ptr_vec_append)
+ (dirnames_to_char_ptr_vec): New functions.
+
+2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Code cleanup.
* source.c (add_path): Remove always true conditional 'p == 0' and
unindent its code block.
Index: gdb-7.3.50.20110722/gdb/gdb_vecs.h
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/gdb_vecs.h 2012-04-18 23:40:04.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/gdb_vecs.h 2012-04-18 23:44:35.195178113 +0200
@@ -25,4 +25,16 @@
DEF_VEC_P (char_ptr);
+/* From utils.c: */
+
+extern void free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec);
+
+extern struct cleanup *
+ make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec);
+
+extern void dirnames_to_char_ptr_vec_append (VEC (char_ptr) **vecp,
+ const char *dirnames);
+
+extern VEC (char_ptr) *dirnames_to_char_ptr_vec (const char *dirnames);
+
#endif /* GDB_VECS_H */
Index: gdb-7.3.50.20110722/gdb/utils.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/utils.c 2012-04-18 23:38:42.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/utils.c 2012-04-18 23:45:43.106017137 +0200
@@ -29,6 +29,7 @@
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif /* HAVE_SYS_RESOURCE_H */
+#include "gdb_vecs.h"
#ifdef TUI
#include "tui/tui.h" /* For tui_get_command_dimension. */
@@ -3707,6 +3708,95 @@ parse_pid_to_attach (char *args)
return pid;
}
+/* Call xfree for each element of CHAR_PTR_VEC and final VEC_free for
+ CHAR_PTR_VEC itself.
+
+ You must not modify CHAR_PTR_VEC after it got registered with this function
+ by make_cleanup as the CHAR_PTR_VEC base address may change on its updates.
+ Contrary to VEC_free this function does not (cannot) clear the pointer. */
+
+void
+free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
+{
+ int ix;
+ char *name;
+
+ for (ix = 0; VEC_iterate (char_ptr, char_ptr_vec, ix, name); ++ix)
+ xfree (name);
+ VEC_free (char_ptr, char_ptr_vec);
+}
+
+/* Helper for make_cleanup_free_char_ptr_vec. */
+
+static void
+do_free_char_ptr_vec (void *arg)
+{
+ VEC (char_ptr) *char_ptr_vec = arg;
+
+ free_char_ptr_vec (char_ptr_vec);
+}
+
+/* Make cleanup handler calling xfree for each element of CHAR_PTR_VEC and
+ final VEC_free for CHAR_PTR_VEC itself.
+
+ You must not modify CHAR_PTR_VEC after this cleanup registration as the
+ CHAR_PTR_VEC base address may change on its updates. Contrary to VEC_free
+ this function does not (cannot) clear the pointer. */
+
+struct cleanup *
+make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
+{
+ return make_cleanup (do_free_char_ptr_vec, char_ptr_vec);
+}
+
+/* Extended version of dirnames_to_char_ptr_vec - additionally if *VECP is
+ non-NULL the new list elements from DIRNAMES are appended to the existing
+ *VECP list of entries. *VECP address will be updated by this call. */
+
+void
+dirnames_to_char_ptr_vec_append (VEC (char_ptr) **vecp, const char *dirnames)
+{
+ do
+ {
+ size_t this_len;
+ char *next_dir, *this_dir;
+
+ next_dir = strchr (dirnames, DIRNAME_SEPARATOR);
+ if (next_dir == NULL)
+ this_len = strlen (dirnames);
+ else
+ {
+ this_len = next_dir - dirnames;
+ next_dir++;
+ }
+
+ this_dir = xmalloc (this_len + 1);
+ memcpy (this_dir, dirnames, this_len);
+ this_dir[this_len] = '\0';
+ VEC_safe_push (char_ptr, *vecp, this_dir);
+
+ dirnames = next_dir;
+ }
+ while (dirnames != NULL);
+}
+
+/* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the
+ elements in their original order. For empty string ("") DIRNAMES return
+ list of one empty string ("") element.
+
+ You may modify the returned strings.
+ Read free_char_ptr_vec for its cleanup. */
+
+VEC (char_ptr) *
+dirnames_to_char_ptr_vec (const char *dirnames)
+{
+ VEC (char_ptr) *retval = NULL;
+
+ dirnames_to_char_ptr_vec_append (&retval, dirnames);
+
+ return retval;
+}
+
/* Provide a prototype to silence -Wmissing-prototypes. */
extern initialize_file_ftype _initialize_utils;

1164
gdb-autoload-13of22.patch Normal file

File diff suppressed because it is too large Load Diff

1702
gdb-autoload-14of22.patch Normal file

File diff suppressed because it is too large Load Diff

744
gdb-autoload-15of22.patch Normal file
View File

@ -0,0 +1,744 @@
[patch#4 5/8] set auto-load safe-path
http://sourceware.org/ml/gdb-patches/2012-04/msg00092.html
http://sourceware.org/ml/gdb-cvs/2012-04/msg00114.html
### src/gdb/ChangeLog 2012/04/17 15:51:41 1.14113
### src/gdb/ChangeLog 2012/04/17 15:54:28 1.14114
## -1,5 +1,39 @@
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+ New option "set auto-load safe-path".
+ * NEWS: New commands "set auto-load safe-path"
+ and "show auto-load safe-path".
+ * auto-load.c: Include gdb_vecs.h, readline/tilde.h and completer.h.
+ (auto_load_safe_path, auto_load_safe_path_vec)
+ (auto_load_safe_path_vec_update, set_auto_load_safe_path)
+ (show_auto_load_safe_path, add_auto_load_safe_path, filename_is_in_dir)
+ (filename_is_in_auto_load_safe_path_vec, file_is_auto_load_safe): New.
+ (source_gdb_script_for_objfile): New variable is_safe. Call
+ file_is_auto_load_safe. Return if it is not.
+ (struct loaded_script): New field loaded.
+ (maybe_add_script): Add parameter loaded. Initialize SLOT with it.
+ (print_script): Use LOADED indicator instead of FULL_PATH. Change
+ output "Missing" to "No".
+ (_initialize_auto_load): New variable cmd. Initialize
+ auto_load_safe_path. Register "set auto-load safe-path",
+ "show auto-load safe-path" and "add-auto-load-safe-path".
+ * auto-load.h (maybe_add_script): Add parameter loaded.
+ (file_is_auto_load_safe): New declaration.
+ * config.in: Regenerate.
+ * configure: Regenerate.
+ * configure.ac: New parameters --with-auto-load-safe-path
+ and --without-auto-load-safe-path.
+ * linux-thread-db.c (try_thread_db_load_from_pdir_1)
+ (try_thread_db_load_from_dir): Check file_is_auto_load_safe first.
+ * main.c (captured_main): Check file_is_auto_load_safe for
+ LOCAL_GDBINIT.
+ * python/py-auto-load.c (gdbpy_load_auto_script_for_objfile): New
+ variable is_safe. Call file_is_auto_load_safe. Return if it is not.
+ (source_section_scripts): Call file_is_auto_load_safe. Return if it is
+ not.
+
+2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
auto-load: Implementation.
* NEWS: New descriptions for "info auto-load",
"info auto-load gdb-scripts", "info auto-load python-scripts",
Index: gdb-7.4.50.20120120/gdb/NEWS
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/NEWS 2012-04-18 00:49:02.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/NEWS 2012-04-18 00:49:33.282706319 +0200
@@ -67,6 +67,11 @@ set auto-load libthread-db on|off
show auto-load libthread-db
Control auto-loading of inferior specific thread debugging shared library.
+set auto-load safe-path <dir1>[:<dir2>...]
+show auto-load safe-path
+ Set a list of directories from which it is safe to auto-load files.
+ The delimiter (':' above) may differ according to the host platform.
+
* New command line options
--init-command=FILE, -ix Like --command, -x but execute it
Index: gdb-7.4.50.20120120/gdb/auto-load.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/auto-load.c 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/auto-load.c 2012-04-18 00:49:21.607736020 +0200
@@ -32,6 +32,9 @@
#include "gdbcmd.h"
#include "cli/cli-decode.h"
#include "cli/cli-setshow.h"
+#include "gdb_vecs.h"
+#include "readline/tilde.h"
+#include "completer.h"
/* The suffix of per-objfile scripts to auto-load as non-Python command files.
E.g. When the program loads libfoo.so, look for libfoo-gdb.gdb. */
@@ -90,6 +93,181 @@ show_auto_load_local_gdbinit (struct ui_
value);
}
+/* Directory list safe to hold auto-loaded files. It is not checked for
+ absolute paths but they are strongly recommended. It is initialized by
+ _initialize_auto_load. */
+static char *auto_load_safe_path;
+
+/* Vector of directory elements of AUTO_LOAD_SAFE_PATH with each one normalized
+ by tilde_expand and possibly each entries has added its gdb_realpath
+ counterpart. */
+static VEC (char_ptr) *auto_load_safe_path_vec;
+
+/* Update auto_load_safe_path_vec from current AUTO_LOAD_SAFE_PATH. */
+
+static void
+auto_load_safe_path_vec_update (void)
+{
+ VEC (char_ptr) *dir_vec = NULL;
+ unsigned len;
+ int ix;
+
+ free_char_ptr_vec (auto_load_safe_path_vec);
+
+ auto_load_safe_path_vec = dirnames_to_char_ptr_vec (auto_load_safe_path);
+ len = VEC_length (char_ptr, auto_load_safe_path_vec);
+
+ /* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
+ element. */
+ for (ix = 0; ix < len; ix++)
+ {
+ char *dir = VEC_index (char_ptr, auto_load_safe_path_vec, ix);
+ char *expanded = tilde_expand (dir);
+ char *real_path = gdb_realpath (expanded);
+
+ /* Ensure the current entry is at least tilde_expand-ed. */
+ xfree (dir);
+ VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
+
+ /* If gdb_realpath returns a different content, append it. */
+ if (strcmp (real_path, expanded) == 0)
+ xfree (real_path);
+ else
+ VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
+ }
+}
+
+/* "set" command for the auto_load_safe_path configuration variable. */
+
+static void
+set_auto_load_safe_path (char *args, int from_tty, struct cmd_list_element *c)
+{
+ auto_load_safe_path_vec_update ();
+}
+
+/* "show" command for the auto_load_safe_path configuration variable. */
+
+static void
+show_auto_load_safe_path (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ if (*value == 0)
+ fprintf_filtered (file, _("Auto-load files are safe to load from any "
+ "directory.\n"));
+ else
+ fprintf_filtered (file, _("List of directories from which it is safe to "
+ "auto-load files is %s.\n"),
+ value);
+}
+
+/* "add-auto-load-safe-path" command for the auto_load_safe_path configuration
+ variable. */
+
+static void
+add_auto_load_safe_path (char *args, int from_tty)
+{
+ char *s;
+
+ if (args == NULL || *args == 0)
+ error (_("\
+Adding empty directory element disables the auto-load safe-path security. \
+Use 'set auto-load safe-path' instead if you mean that."));
+
+ s = xstrprintf ("%s%c%s", auto_load_safe_path, DIRNAME_SEPARATOR, args);
+ xfree (auto_load_safe_path);
+ auto_load_safe_path = s;
+
+ auto_load_safe_path_vec_update ();
+}
+
+/* Return 1 if FILENAME is equal to DIR or if FILENAME belongs to the
+ subdirectory DIR. Return 0 otherwise. gdb_realpath normalization is never
+ done here. */
+
+static ATTRIBUTE_PURE int
+filename_is_in_dir (const char *filename, const char *dir)
+{
+ size_t dir_len = strlen (dir);
+
+ while (dir_len && IS_DIR_SEPARATOR (dir[dir_len - 1]))
+ dir_len--;
+
+ return (filename_ncmp (dir, filename, dir_len) == 0
+ && (IS_DIR_SEPARATOR (filename[dir_len])
+ || filename[dir_len] == '\0'));
+}
+
+/* Return 1 if FILENAME belongs to one of directory components of
+ AUTO_LOAD_SAFE_PATH_VEC. Return 0 otherwise.
+ auto_load_safe_path_vec_update is never called.
+ *FILENAME_REALP may be updated by gdb_realpath of FILENAME - it has to be
+ freed by the caller. */
+
+static int
+filename_is_in_auto_load_safe_path_vec (const char *filename,
+ char **filename_realp)
+{
+ char *dir;
+ int ix;
+
+ for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir); ++ix)
+ if (*filename_realp == NULL && filename_is_in_dir (filename, dir))
+ break;
+
+ if (dir == NULL)
+ {
+ if (*filename_realp == NULL)
+ *filename_realp = gdb_realpath (filename);
+
+ for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir);
+ ++ix)
+ if (filename_is_in_dir (*filename_realp, dir))
+ break;
+ }
+
+ if (dir != NULL)
+ return 1;
+
+ return 0;
+}
+
+/* Return 1 if FILENAME is located in one of the directories of
+ AUTO_LOAD_SAFE_PATH. Otherwise call warning and return 0. FILENAME does
+ not have to be an absolute path.
+
+ Existence of FILENAME is not checked. Function will still give a warning
+ even if the caller would quietly skip non-existing file in unsafe
+ directory. */
+
+int
+file_is_auto_load_safe (const char *filename)
+{
+ char *filename_real = NULL;
+ struct cleanup *back_to;
+
+ back_to = make_cleanup (free_current_contents, &filename_real);
+
+ if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
+ {
+ do_cleanups (back_to);
+ return 1;
+ }
+
+ auto_load_safe_path_vec_update ();
+ if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
+ {
+ do_cleanups (back_to);
+ return 1;
+ }
+
+ warning (_("File \"%s\" auto-loading has been declined by your "
+ "`auto-load safe-path' set to \"%s\"."),
+ filename_real, auto_load_safe_path);
+
+ do_cleanups (back_to);
+ return 0;
+}
+
/* Definition of script language for GDB canned sequences of commands. */
static const struct script_language script_language_gdb
@@ -99,13 +277,20 @@ static void
source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
const char *filename)
{
+ int is_safe;
struct auto_load_pspace_info *pspace_info;
volatile struct gdb_exception e;
+ is_safe = file_is_auto_load_safe (filename);
+
/* Add this script to the hash table too so "info auto-load gdb-scripts"
can print it. */
pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
- maybe_add_script (pspace_info, filename, filename, &script_language_gdb);
+ maybe_add_script (pspace_info, is_safe, filename, filename,
+ &script_language_gdb);
+
+ if (!is_safe)
+ return;
TRY_CATCH (e, RETURN_MASK_ALL)
{
@@ -140,6 +325,9 @@ struct loaded_script
inaccessible). */
const char *full_path;
+ /* Non-zero if this script has been loaded. */
+ int loaded;
+
const struct script_language *language;
};
@@ -232,12 +420,13 @@ get_auto_load_pspace_data_for_loading (s
return info;
}
-/* Add script NAME in LANGUAGE to hash table of PSPACE_INFO.
- FULL_PATH is NULL if the script wasn't found. The result is
+/* Add script NAME in LANGUAGE to hash table of PSPACE_INFO. LOADED 1 if the
+ script has been (is going to) be loaded, 0 otherwise (such as if it has not
+ been found). FULL_PATH is NULL if the script wasn't found. The result is
true if the script was already in the hash table. */
int
-maybe_add_script (struct auto_load_pspace_info *pspace_info,
+maybe_add_script (struct auto_load_pspace_info *pspace_info, int loaded,
const char *name, const char *full_path,
const struct script_language *language)
{
@@ -271,6 +460,7 @@ maybe_add_script (struct auto_load_pspac
}
else
(*slot)->full_path = NULL;
+ (*slot)->loaded = loaded;
(*slot)->language = language;
}
@@ -432,7 +622,7 @@ print_script (struct loaded_script *scri
chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
- ui_out_field_string (uiout, "loaded", script->full_path ? "Yes" : "Missing");
+ ui_out_field_string (uiout, "loaded", script->loaded ? "Yes" : "No");
ui_out_field_string (uiout, "script", script->name);
ui_out_text (uiout, "\n");
@@ -718,6 +908,8 @@ void _initialize_auto_load (void);
void
_initialize_auto_load (void)
{
+ struct cmd_list_element *cmd;
+
auto_load_pspace_data
= register_program_space_data_with_cleanup (auto_load_pspace_data_cleanup);
@@ -757,4 +949,30 @@ This options has security implications f
_("Print whether current directory .gdbinit file has been loaded.\n\
Usage: info auto-load local-gdbinit"),
auto_load_info_cmdlist_get ());
+
+ auto_load_safe_path = xstrdup (DEFAULT_AUTO_LOAD_SAFE_PATH);
+ auto_load_safe_path_vec_update ();
+ add_setshow_optional_filename_cmd ("safe-path", class_support,
+ &auto_load_safe_path, _("\
+Set the list of directories from which it is safe to auto-load files."), _("\
+Show the list of directories from which it is safe to auto-load files."), _("\
+Various files loaded automatically for the 'set auto-load ...' options must\n\
+be located in one of the directories listed by this option. Warning will be\n\
+printed and file will not be used otherwise. Use empty string (or even\n\
+empty directory entry) to allow any file for the 'set auto-load ...' options.\n\
+This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
+This options has security implications for untrusted inferiors."),
+ set_auto_load_safe_path,
+ show_auto_load_safe_path,
+ auto_load_set_cmdlist_get (),
+ auto_load_show_cmdlist_get ());
+
+ cmd = add_cmd ("add-auto-load-safe-path", class_support,
+ add_auto_load_safe_path,
+ _("Add entries to the list of directories from which it is safe "
+ "to auto-load files.\n\
+See the commands 'set auto-load safe-path' and 'show auto-load safe-path' to\n\
+access the current full list setting."),
+ &cmdlist);
+ set_cmd_completer (cmd, filename_completer);
}
Index: gdb-7.4.50.20120120/gdb/auto-load.h
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/auto-load.h 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/auto-load.h 2012-04-18 00:49:21.607736020 +0200
@@ -39,7 +39,8 @@ extern int auto_load_local_gdbinit_loade
extern struct auto_load_pspace_info *
get_auto_load_pspace_data_for_loading (struct program_space *pspace);
extern int maybe_add_script (struct auto_load_pspace_info *pspace_info,
- const char *name, const char *full_path,
+ int loaded, const char *name,
+ const char *full_path,
const struct script_language *language);
extern void auto_load_objfile_script (struct objfile *objfile,
const struct script_language *language);
@@ -54,4 +55,6 @@ extern struct cmd_list_element **auto_lo
extern struct cmd_list_element **auto_load_show_cmdlist_get (void);
extern struct cmd_list_element **auto_load_info_cmdlist_get (void);
+extern int file_is_auto_load_safe (const char *filename);
+
#endif /* AUTO_LOAD_H */
Index: gdb-7.4.50.20120120/gdb/config.in
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/config.in 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/config.in 2012-04-18 00:49:21.607736020 +0200
@@ -43,6 +43,9 @@
moved. */
#undef DEBUGDIR_RELOCATABLE
+/* Directories safe to hold auto-loaded files. */
+#undef DEFAULT_AUTO_LOAD_SAFE_PATH
+
/* Define to BFD's default architecture. */
#undef DEFAULT_BFD_ARCH
Index: gdb-7.4.50.20120120/gdb/configure
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/configure 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/configure 2012-04-18 00:49:21.611736010 +0200
@@ -955,6 +955,7 @@ with_separate_debug_dir
with_gdb_datadir
with_relocated_sources
with_rpm
+with_auto_load_safe_path
enable_targets
enable_64_bit_bfd
enable_gdbcli
@@ -1666,6 +1667,10 @@ Optional Packages:
automatically relocate this path for source files
--with-rpm query rpm database for missing debuginfos (yes/no,
def. auto=librpm.so)
+ --with-auto-load-safe-path=PATH
+ directories safe to hold auto-loaded files
+ --without-auto-load-safe-path
+ do not restrict auto-loaded files locations
--with-libunwind use libunwind frame unwinding support
--with-curses use the curses library instead of the termcap
library
@@ -8477,6 +8482,32 @@ $as_echo "$as_me: WARNING: $RPM_PKG_ERRO
fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default auto-load safe-path" >&5
+$as_echo_n "checking for default auto-load safe-path... " >&6; }
+
+# Check whether --with-auto-load-safe-path was given.
+if test "${with_auto_load_safe_path+set}" = set; then :
+ withval=$with_auto_load_safe_path; if test "$with_auto_load_safe_path" = "no"; then
+ with_auto_load_safe_path=""
+ fi
+else
+ with_auto_load_safe_path="$prefix"
+fi
+
+
+ test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+ ac_define_dir=`eval echo $with_auto_load_safe_path`
+ ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_AUTO_LOAD_SAFE_PATH "$ac_define_dir"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5
+$as_echo "$with_auto_load_safe_path" >&6; }
+
subdirs="$subdirs testsuite"
Index: gdb-7.4.50.20120120/gdb/configure.ac
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/configure.ac 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/configure.ac 2012-04-18 00:49:21.611736010 +0200
@@ -339,6 +339,18 @@ extern rpmdbMatchIterator rpmtsInitItera
fi
fi
+AC_MSG_CHECKING([for default auto-load safe-path])
+AC_ARG_WITH(auto-load-safe-path,
+AS_HELP_STRING([--with-auto-load-safe-path=PATH], [directories safe to hold auto-loaded files])
+AS_HELP_STRING([--without-auto-load-safe-path], [do not restrict auto-loaded files locations]),
+[if test "$with_auto_load_safe_path" = "no"; then
+ with_auto_load_safe_path=""
+ fi],
+[with_auto_load_safe_path="$prefix"])
+AC_DEFINE_DIR(DEFAULT_AUTO_LOAD_SAFE_PATH, with_auto_load_safe_path,
+ [Directories safe to hold auto-loaded files.])
+AC_MSG_RESULT([$with_auto_load_safe_path])
+
AC_CONFIG_SUBDIRS(testsuite)
# Check whether to support alternative target configurations
Index: gdb-7.4.50.20120120/gdb/linux-thread-db.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/linux-thread-db.c 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/linux-thread-db.c 2012-04-18 00:49:21.612736007 +0200
@@ -868,7 +868,11 @@ try_thread_db_load_from_pdir_1 (struct o
/* This should at minimum hit the first character. */
gdb_assert (cp != NULL);
strcpy (cp + 1, LIBTHREAD_DB_SO);
- result = try_thread_db_load (path);
+
+ if (!file_is_auto_load_safe (path))
+ result = 0;
+ else
+ result = try_thread_db_load (path);
do_cleanups (cleanup);
return result;
@@ -934,7 +938,11 @@ try_thread_db_load_from_dir (const char
memcpy (path, dir, dir_len);
path[dir_len] = '/';
strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
- result = try_thread_db_load (path);
+
+ if (!file_is_auto_load_safe (path))
+ result = 0;
+ else
+ result = try_thread_db_load (path);
do_cleanups (cleanup);
return result;
Index: gdb-7.4.50.20120120/gdb/main.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/main.c 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/main.c 2012-04-18 00:49:21.612736007 +0200
@@ -1026,7 +1026,8 @@ captured_main (void *data)
{
auto_load_local_gdbinit_pathname = gdb_realpath (local_gdbinit);
- if (!inhibit_gdbinit && auto_load_local_gdbinit)
+ if (!inhibit_gdbinit && auto_load_local_gdbinit
+ && file_is_auto_load_safe (local_gdbinit))
{
auto_load_local_gdbinit_loaded = 1;
Index: gdb-7.4.50.20120120/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/doc/gdb.texinfo 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/doc/gdb.texinfo 2012-04-18 00:49:21.620735987 +0200
@@ -20801,6 +20801,8 @@ gdb-scripts: Auto-loading of canned seq
libthread-db: Auto-loading of inferior specific libthread_db is on.
local-gdbinit: Auto-loading of .gdbinit script from current directory is on.
python-scripts: Auto-loading of Python scripts is on.
+safe-path: List of directories from which it is safe to auto-load files
+ is /usr/local.
@end smallexample
@anchor{info auto-load}
@@ -20872,12 +20874,19 @@ These are @value{GDBN} control commands
@tab Show setting of thread debugging library.
@item @xref{info auto-load libthread-db}.
@tab Show state of thread debugging library.
+@item @xref{set auto-load safe-path}.
+@tab Control directories trusted for automatic loading.
+@item @xref{show auto-load safe-path}.
+@tab Show directories trusted for automatic loading.
+@item @xref{add-auto-load-safe-path}.
+@tab Add directory trusted for automatic loading.
@end multitable
@menu
* Init File in the Current Directory:: @samp{set/show/info auto-load local-gdbinit}
* libthread_db.so.1 file:: @samp{set/show/info auto-load libthread-db}
* objfile-gdb.gdb file:: @samp{set/show/info auto-load gdb-script}
+* Auto-loading safe path:: @samp{set/show/info auto-load safe-path}
@xref{Python Auto-loading}.
@end menu
@@ -20978,6 +20987,104 @@ auto-loaded.
If @var{regexp} is supplied only canned sequences of commands scripts with
matching names are printed.
+@node Auto-loading safe path
+@subsection Security restriction for auto-loading
+@cindex auto-loading safe-path
+
+As the files of inferior can come from untrusted source (such as submitted by
+an application user) @value{GDBN} does not always load any files automatically.
+@value{GDBN} provides the @samp{set auto-load safe-path} setting to list
+directories trusted for loading files not explicitly requested by user.
+
+If the path is not set properly you will see a warning and the file will not
+get loaded:
+
+@smallexample
+$ ./gdb -q ./gdb
+Reading symbols from /home/user/gdb/gdb...done.
+warning: File "/home/user/gdb/gdb-gdb.gdb" auto-loading has been
+ declined by your `auto-load safe-path' set to "/usr/local".
+warning: File "/home/user/gdb/gdb-gdb.py" auto-loading has been
+ declined by your `auto-load safe-path' set to "/usr/local".
+@end smallexample
+
+The list of trusted directories is controlled by the following commands:
+
+@table @code
+@anchor{set auto-load safe-path}
+@kindex set auto-load safe-path
+@item set auto-load safe-path @var{directories}
+Set the list of directories (and their subdirectories) trusted for automatic
+loading and execution of scripts. You can also enter a specific trusted file.
+The list of directories uses directory separator (@samp{:} on GNU and Unix
+systems, @samp{;} on MS-Windows and MS-DOS) to separate directories, similarly
+to the @env{PATH} environment variable.
+
+@anchor{show auto-load safe-path}
+@kindex show auto-load safe-path
+@item show auto-load safe-path
+Show the list of directories trusted for automatic loading and execution of
+scripts.
+
+@anchor{add-auto-load-safe-path}
+@kindex add-auto-load-safe-path
+@item add-auto-load-safe-path
+Add an entry (or list of entries) the list of directories trusted for automatic
+loading and execution of scripts. Multiple entries may be delimited by the
+host platform directory separator in use.
+@end table
+
+Setting this variable to an empty string disables this security protection.
+This variable is supposed to be set to the system directories writable by the
+system superuser only. Users can add their source directories in init files in
+their home directories (@pxref{Home Directory Init File}). See also deprecated
+init file in the current directory
+(@pxref{Init File in the Current Directory during Startup}).
+
+To force @value{GDBN} to load the files it declined to load in the previous
+example, you could use one of the following ways:
+
+@itemize @bullet
+@item ~/.gdbinit: add-auto-load-safe-path ~/src/gdb
+Specify this trusted directory (or a file) as additional component of the list.
+You have to specify also any existing directories displayed by
+by @samp{show auto-load safe-path} (such as @samp{/usr:/bin} in this example).
+
+@item @kbd{gdb -iex "set auto-load safe-path /usr:/bin:~/src/gdb" [@dots{}]}
+Specify this directory as in the previous case but just for a single
+@value{GDBN} session.
+
+@item @kbd{gdb -iex "set auto-load safe-path" [@dots{}]}
+Disable auto-loading safety for a single @value{GDBN} session.
+This assumes all the files you debug during this @value{GDBN} session will come
+from trusted sources.
+
+@item @kbd{./configure --without-auto-load-safe-path}
+During compilation of @value{GDBN} you may disable any auto-loading safety.
+This assumes all the files you will ever debug with this @value{GDBN} come from
+trusted sources.
+@end itemize
+
+On the other hand you can also explicitly forbid automatic files loading which
+also suppresses any such warning messages:
+
+@itemize @bullet
+@item @kbd{gdb -iex "set auto-load no" [@dots{}]}
+You can use @value{GDBN} command-line option for a single @value{GDBN} session.
+
+@item @samp{~/.gdbinit}: @samp{set auto-load no}
+Disable auto-loading globally for the user
+(@pxref{Home Directory Init File}). While it is improbable, you could also
+use system init file instead (@pxref{System-wide configuration}).
+@end itemize
+
+This setting applies to the file names as entered by user. If no entry matches
+@value{GDBN} tries as a last resort to also resolve all the file names into
+their canonical form (typically resolving symbolic links) and compare the
+entries again. @value{GDBN} already canonicalizes most of the filenames on its
+own before starting the comparison so a canonical form of directories is
+recommended to be entered.
+
@node Messages/Warnings
@section Optional Warnings and Messages
@@ -24955,10 +25062,10 @@ Example:
@smallexample
(gdb) info auto-load python-scripts
-Loaded Script
-Yes py-section-script.py
- full name: /tmp/py-section-script.py
-Missing my-foo-pretty-printers.py
+Loaded Script
+Yes py-section-script.py
+ full name: /tmp/py-section-script.py
+No my-foo-pretty-printers.py
@end smallexample
@end table
Index: gdb-7.4.50.20120120/gdb/python/py-auto-load.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/python/py-auto-load.c 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/python/py-auto-load.c 2012-04-18 00:49:21.621735985 +0200
@@ -72,14 +72,19 @@ static void
gdbpy_load_auto_script_for_objfile (struct objfile *objfile, FILE *file,
const char *filename)
{
+ int is_safe;
struct auto_load_pspace_info *pspace_info;
+ is_safe = file_is_auto_load_safe (filename);
+
/* Add this script to the hash table too so "info auto-load python-scripts"
can print it. */
pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
- maybe_add_script (pspace_info, filename, filename, &script_language_python);
+ maybe_add_script (pspace_info, is_safe, filename, filename,
+ &script_language_python);
- source_python_script_for_objfile (objfile, file, filename);
+ if (is_safe)
+ source_python_script_for_objfile (objfile, file, filename);
}
/* Load scripts specified in OBJFILE.
@@ -147,6 +152,9 @@ source_section_scripts (struct objfile *
{
make_cleanup_fclose (stream);
make_cleanup (xfree, full_path);
+
+ if (!file_is_auto_load_safe (full_path))
+ opened = 0;
}
else
{
@@ -167,7 +175,7 @@ Use `info auto-load python [REGEXP]' to
IWBN if complaints.c were more general-purpose. */
- in_hash_table = maybe_add_script (pspace_info, file, full_path,
+ in_hash_table = maybe_add_script (pspace_info, opened, file, full_path,
&script_language_python);
/* If this file is not currently loaded, load it. */
Index: gdb-7.4.50.20120120/gdb/testsuite/gdb.python/py-objfile-script.exp
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/testsuite/gdb.python/py-objfile-script.exp 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/testsuite/gdb.python/py-objfile-script.exp 2012-04-18 00:49:21.621735985 +0200
@@ -37,6 +37,7 @@ if { [skip_python_tests] } { continue }
set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}-gdb.py.in ${subdir}/${testfile}-gdb.py]
gdb_reinitialize_dir $srcdir/$subdir
+gdb_test_no_output "set auto-load safe-path ${remote_python_file}" "set auto-load safe-path"
gdb_load ${binfile}
# Verify gdb loaded the script.
Index: gdb-7.4.50.20120120/gdb/testsuite/gdb.python/py-section-script.exp
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/testsuite/gdb.python/py-section-script.exp 2012-04-18 00:46:47.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/testsuite/gdb.python/py-section-script.exp 2012-04-18 00:49:21.621735985 +0200
@@ -49,6 +49,7 @@ if { [skip_python_tests] } { continue }
set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py]
gdb_reinitialize_dir $srcdir/$subdir
+gdb_test_no_output "set auto-load safe-path ${remote_python_file}" "set auto-load safe-path"
gdb_load ${binfile}
# Verify gdb loaded the script.

352
gdb-autoload-16of22.patch Normal file
View File

@ -0,0 +1,352 @@
[patch#4 6/8] set debug auto-load
http://sourceware.org/ml/gdb-patches/2012-04/msg00089.html
http://sourceware.org/ml/gdb-cvs/2012-04/msg00115.html
### src/gdb/ChangeLog 2012/04/17 15:54:28 1.14114
### src/gdb/ChangeLog 2012/04/17 15:56:20 1.14115
## -1,5 +1,27 @@
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+ New option "set debug auto-load".
+ * NEWS: New commands "set debug auto-load" and "show debug auto-load".
+ * auto-load.c (debug_auto_load, show_debug_auto_load: New.
+ (auto_load_safe_path_vec_update)
+ (filename_is_in_auto_load_safe_path_vec): Call fprintf_unfiltered
+ if DEBUG_AUTO_LOAD.
+ (file_is_auto_load_safe): New parameters debug_fmt and ....
+ Call fprintf_unfiltered if DEBUG_AUTO_LOAD.
+ (source_gdb_script_for_objfile): Extend the file_is_auto_load_safe
+ caller by explanatory string.
+ (_initialize_auto_load): Register "set debug auto-load".
+ * auto-load.h (file_is_auto_load_safe): New parameters debug_fmt
+ and ....
+ * linux-thread-db.c (try_thread_db_load_from_pdir_1)
+ (try_thread_db_load_from_dir): Extend the file_is_auto_load_safe caller
+ by explanatory string.
+ * main.c (captured_main): Likewise.
+ * python/py-auto-load.c (gdbpy_load_auto_script_for_objfile)
+ (source_section_scripts): Likewise.
+
+2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
New option "set auto-load safe-path".
* NEWS: New commands "set auto-load safe-path"
and "show auto-load safe-path".
Index: gdb-7.4.50.20120120/gdb/NEWS
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/NEWS 2012-04-18 00:49:33.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/NEWS 2012-04-18 00:50:15.018600282 +0200
@@ -72,6 +72,10 @@ show auto-load safe-path
Set a list of directories from which it is safe to auto-load files.
The delimiter (':' above) may differ according to the host platform.
+set debug auto-load on|off
+show debug auto-load
+ Control display of debugging info for auto-loading the files above.
+
* New command line options
--init-command=FILE, -ix Like --command, -x but execute it
Index: gdb-7.4.50.20120120/gdb/auto-load.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/auto-load.c 2012-04-18 00:49:21.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/auto-load.c 2012-04-18 00:50:04.801626235 +0200
@@ -43,6 +43,20 @@
static void source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
const char *filename);
+/* Value of the 'set debug auto-load' configuration variable. */
+static int debug_auto_load = 0;
+
+/* "show" command for the debug_auto_load configuration variable. */
+
+static void
+show_debug_auto_load (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ fprintf_filtered (file, _("Debugging output for files "
+ "of 'set auto-load ...' is %s.\n"),
+ value);
+}
+
/* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
scripts:
set auto-load gdb-scripts on|off
@@ -112,6 +126,11 @@ auto_load_safe_path_vec_update (void)
unsigned len;
int ix;
+ if (debug_auto_load)
+ fprintf_unfiltered (gdb_stdlog,
+ _("auto-load: Updating directories of \"%s\".\n"),
+ auto_load_safe_path);
+
free_char_ptr_vec (auto_load_safe_path_vec);
auto_load_safe_path_vec = dirnames_to_char_ptr_vec (auto_load_safe_path);
@@ -126,14 +145,34 @@ auto_load_safe_path_vec_update (void)
char *real_path = gdb_realpath (expanded);
/* Ensure the current entry is at least tilde_expand-ed. */
- xfree (dir);
VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
+ if (debug_auto_load)
+ {
+ if (strcmp (expanded, dir) == 0)
+ fprintf_unfiltered (gdb_stdlog,
+ _("auto-load: Using directory \"%s\".\n"),
+ expanded);
+ else
+ fprintf_unfiltered (gdb_stdlog,
+ _("auto-load: Resolved directory \"%s\" "
+ "as \"%s\".\n"),
+ dir, expanded);
+ }
+ xfree (dir);
+
/* If gdb_realpath returns a different content, append it. */
if (strcmp (real_path, expanded) == 0)
xfree (real_path);
else
- VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
+ {
+ VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
+
+ if (debug_auto_load)
+ fprintf_unfiltered (gdb_stdlog,
+ _("auto-load: And canonicalized as \"%s\".\n"),
+ real_path);
+ }
}
}
@@ -217,16 +256,30 @@ filename_is_in_auto_load_safe_path_vec (
if (dir == NULL)
{
if (*filename_realp == NULL)
- *filename_realp = gdb_realpath (filename);
+ {
+ *filename_realp = gdb_realpath (filename);
+ if (debug_auto_load && strcmp (*filename_realp, filename) != 0)
+ fprintf_unfiltered (gdb_stdlog,
+ _("auto-load: Resolved "
+ "file \"%s\" as \"%s\".\n"),
+ filename, *filename_realp);
+ }
- for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir);
- ++ix)
- if (filename_is_in_dir (*filename_realp, dir))
- break;
+ if (strcmp (*filename_realp, filename) != 0)
+ for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir);
+ ++ix)
+ if (filename_is_in_dir (*filename_realp, dir))
+ break;
}
if (dir != NULL)
- return 1;
+ {
+ if (debug_auto_load)
+ fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
+ "directory \"%s\".\n"),
+ filename, dir);
+ return 1;
+ }
return 0;
}
@@ -240,11 +293,20 @@ filename_is_in_auto_load_safe_path_vec (
directory. */
int
-file_is_auto_load_safe (const char *filename)
+file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
{
char *filename_real = NULL;
struct cleanup *back_to;
+ if (debug_auto_load)
+ {
+ va_list debug_args;
+
+ va_start (debug_args, debug_fmt);
+ vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args);
+ va_end (debug_args);
+ }
+
back_to = make_cleanup (free_current_contents, &filename_real);
if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
@@ -281,7 +343,10 @@ source_gdb_script_for_objfile (struct ob
struct auto_load_pspace_info *pspace_info;
volatile struct gdb_exception e;
- is_safe = file_is_auto_load_safe (filename);
+ is_safe = file_is_auto_load_safe (filename, _("auto-load: Loading canned "
+ "sequences of commands script "
+ "\"%s\" for objfile \"%s\".\n"),
+ filename, objfile->name);
/* Add this script to the hash table too so "info auto-load gdb-scripts"
can print it. */
@@ -975,4 +1040,13 @@ See the commands 'set auto-load safe-pat
access the current full list setting."),
&cmdlist);
set_cmd_completer (cmd, filename_completer);
+
+ add_setshow_boolean_cmd ("auto-load", class_maintenance,
+ &debug_auto_load, _("\
+Set auto-load verifications debugging."), _("\
+Show auto-load verifications debugging."), _("\
+When non-zero, debugging output for files of 'set auto-load ...'\n\
+is displayed."),
+ NULL, show_debug_auto_load,
+ &setdebuglist, &showdebuglist);
}
Index: gdb-7.4.50.20120120/gdb/auto-load.h
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/auto-load.h 2012-04-18 00:49:21.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/auto-load.h 2012-04-18 00:50:04.801626235 +0200
@@ -55,6 +55,7 @@ extern struct cmd_list_element **auto_lo
extern struct cmd_list_element **auto_load_show_cmdlist_get (void);
extern struct cmd_list_element **auto_load_info_cmdlist_get (void);
-extern int file_is_auto_load_safe (const char *filename);
+extern int file_is_auto_load_safe (const char *filename,
+ const char *debug_fmt, ...);
#endif /* AUTO_LOAD_H */
Index: gdb-7.4.50.20120120/gdb/linux-thread-db.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/linux-thread-db.c 2012-04-18 00:49:21.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/linux-thread-db.c 2012-04-18 00:50:04.801626235 +0200
@@ -869,7 +869,9 @@ try_thread_db_load_from_pdir_1 (struct o
gdb_assert (cp != NULL);
strcpy (cp + 1, LIBTHREAD_DB_SO);
- if (!file_is_auto_load_safe (path))
+ if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
+ "library \"%s\" from $pdir.\n"),
+ path))
result = 0;
else
result = try_thread_db_load (path);
@@ -939,7 +941,10 @@ try_thread_db_load_from_dir (const char
path[dir_len] = '/';
strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
- if (!file_is_auto_load_safe (path))
+ if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
+ "library \"%s\" from explicit "
+ "directory.\n"),
+ path))
result = 0;
else
result = try_thread_db_load (path);
Index: gdb-7.4.50.20120120/gdb/main.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/main.c 2012-04-18 00:49:21.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/main.c 2012-04-18 00:50:04.801626235 +0200
@@ -1027,7 +1027,10 @@ captured_main (void *data)
auto_load_local_gdbinit_pathname = gdb_realpath (local_gdbinit);
if (!inhibit_gdbinit && auto_load_local_gdbinit
- && file_is_auto_load_safe (local_gdbinit))
+ && file_is_auto_load_safe (local_gdbinit,
+ _("auto-load: Loading .gdbinit "
+ "file \"%s\".\n"),
+ local_gdbinit))
{
auto_load_local_gdbinit_loaded = 1;
Index: gdb-7.4.50.20120120/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/doc/gdb.texinfo 2012-04-18 00:49:21.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/doc/gdb.texinfo 2012-04-18 00:50:04.809626215 +0200
@@ -20887,6 +20887,7 @@ These are @value{GDBN} control commands
* libthread_db.so.1 file:: @samp{set/show/info auto-load libthread-db}
* objfile-gdb.gdb file:: @samp{set/show/info auto-load gdb-script}
* Auto-loading safe path:: @samp{set/show/info auto-load safe-path}
+* Auto-loading verbose mode:: @samp{set/show debug auto-load}
@xref{Python Auto-loading}.
@end menu
@@ -21085,6 +21086,45 @@ entries again. @value{GDBN} already can
own before starting the comparison so a canonical form of directories is
recommended to be entered.
+@node Auto-loading verbose mode
+@subsection Displaying files tried for auto-load
+@cindex auto-loading verbose mode
+
+For better visibility of all the file locations where you can place scripts to
+be auto-loaded with inferior --- or to protect yourself against accidental
+execution of untrusted scripts --- @value{GDBN} provides a feature for printing
+all the files attempted to be loaded. Both existing and non-existing files may
+be printed.
+
+For example the list of directories from which it is safe to auto-load files
+(@pxref{Auto-loading safe path}) applies also to canonicalized filenames which
+may not be too obvious while setting it up.
+
+@smallexample
+(gdb) set debug auto-load ues
+(gdb) file ~/src/t/true
+auto-load: Loading canned sequences of commands script "/tmp/true-gdb.gdb"
+ for objfile "/tmp/true".
+auto-load: Updating directories of "/usr:/opt".
+auto-load: Using directory "/usr".
+auto-load: Using directory "/opt".
+warning: File "/tmp/true-gdb.gdb" auto-loading has been declined
+ by your `auto-load safe-path' set to "/usr:/opt".
+@end smallexample
+
+@table @code
+@anchor{set debug auto-load}
+@kindex set debug auto-load
+@item set debug auto-load [on|off]
+Set whether to print the filenames attempted to be auto-loaded.
+
+@anchor{show debug auto-load}
+@kindex show debug auto-load
+@item show debug auto-load
+Show whether printing of the filenames attempted to be auto-loaded is turned
+on or off.
+@end table
+
@node Messages/Warnings
@section Optional Warnings and Messages
Index: gdb-7.4.50.20120120/gdb/python/py-auto-load.c
===================================================================
--- gdb-7.4.50.20120120.orig/gdb/python/py-auto-load.c 2012-04-18 00:49:21.000000000 +0200
+++ gdb-7.4.50.20120120/gdb/python/py-auto-load.c 2012-04-18 00:50:04.810626212 +0200
@@ -75,7 +75,10 @@ gdbpy_load_auto_script_for_objfile (stru
int is_safe;
struct auto_load_pspace_info *pspace_info;
- is_safe = file_is_auto_load_safe (filename);
+ is_safe = file_is_auto_load_safe (filename,
+ _("auto-load: Loading Python script \"%s\" "
+ "by extension for objfile \"%s\".\n"),
+ filename, objfile->name);
/* Add this script to the hash table too so "info auto-load python-scripts"
can print it. */
@@ -153,7 +156,12 @@ source_section_scripts (struct objfile *
make_cleanup_fclose (stream);
make_cleanup (xfree, full_path);
- if (!file_is_auto_load_safe (full_path))
+ if (!file_is_auto_load_safe (full_path,
+ _("auto-load: Loading Python script "
+ "\"%s\" from section \"%s\" of "
+ "objfile \"%s\".\n"),
+ full_path, GDBPY_AUTO_SECTION_NAME,
+ objfile->name))
opened = 0;
}
else

23
gdb-autoload-17of22.patch Normal file
View File

@ -0,0 +1,23 @@
http://sourceware.org/ml/gdb-cvs/2012-04/msg00130.html
### src/gdb/doc/ChangeLog 2012/04/17 15:56:21 1.1297
### src/gdb/doc/ChangeLog 2012/04/18 07:03:57 1.1298
## -1,3 +1,7 @@
+2012-04-18 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.texinfo (Auto-loading verbose mode): Fix smallexample typo.
+
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
New option "set debug auto-load".
--- src/gdb/doc/gdb.texinfo 2012/04/17 15:56:21 1.944
+++ src/gdb/doc/gdb.texinfo 2012/04/18 07:03:58 1.945
@@ -21192,7 +21192,7 @@
may not be too obvious while setting it up.
@smallexample
-(gdb) set debug auto-load ues
+(gdb) set debug auto-load on
(gdb) file ~/src/t/true
auto-load: Loading canned sequences of commands script "/tmp/true-gdb.gdb"
for objfile "/tmp/true".

51
gdb-autoload-18of22.patch Normal file
View File

@ -0,0 +1,51 @@
http://sourceware.org/ml/gdb-cvs/2012-04/msg00178.html
### src/gdb/doc/ChangeLog 2012/04/18 07:03:57 1.1298
### src/gdb/doc/ChangeLog 2012/04/22 15:49:21 1.1299
## -1,3 +1,8 @@
+2012-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.texinfo (Auto-loading safe path): Replace @itemize @bullet
+ by @table @asis. Fix formatting of one item.
+
2012-04-18 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.texinfo (Auto-loading verbose mode): Fix smallexample typo.
--- src/gdb/doc/gdb.texinfo 2012/04/18 07:03:58 1.945
+++ src/gdb/doc/gdb.texinfo 2012/04/22 15:49:21 1.946
@@ -21136,8 +21136,8 @@
To force @value{GDBN} to load the files it declined to load in the previous
example, you could use one of the following ways:
-@itemize @bullet
-@item ~/.gdbinit: add-auto-load-safe-path ~/src/gdb
+@table @asis
+@item @file{~/.gdbinit}: @samp{add-auto-load-safe-path ~/src/gdb}
Specify this trusted directory (or a file) as additional component of the list.
You have to specify also any existing directories displayed by
by @samp{show auto-load safe-path} (such as @samp{/usr:/bin} in this example).
@@ -21155,20 +21155,20 @@
During compilation of @value{GDBN} you may disable any auto-loading safety.
This assumes all the files you will ever debug with this @value{GDBN} come from
trusted sources.
-@end itemize
+@end table
On the other hand you can also explicitly forbid automatic files loading which
also suppresses any such warning messages:
-@itemize @bullet
+@table @asis
@item @kbd{gdb -iex "set auto-load no" [@dots{}]}
You can use @value{GDBN} command-line option for a single @value{GDBN} session.
-@item @samp{~/.gdbinit}: @samp{set auto-load no}
+@item @file{~/.gdbinit}: @samp{set auto-load no}
Disable auto-loading globally for the user
(@pxref{Home Directory Init File}). While it is improbable, you could also
use system init file instead (@pxref{System-wide configuration}).
-@end itemize
+@end table
This setting applies to the file names as entered by user. If no entry matches
@value{GDBN} tries as a last resort to also resolve all the file names into

38
gdb-autoload-19of22.patch Normal file
View File

@ -0,0 +1,38 @@
http://sourceware.org/ml/gdb-cvs/2012-04/msg00183.html
### src/gdb/doc/ChangeLog 2012/04/22 15:49:21 1.1299
### src/gdb/doc/ChangeLog 2012/04/23 17:20:56 1.1300
## -1,3 +1,8 @@
+2012-04-23 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.texinfo (Auto-loading safe path): Remove trailing [@dots{}].
+ Three times.
+
2012-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.texinfo (Auto-loading safe path): Replace @itemize @bullet
--- src/gdb/doc/gdb.texinfo 2012/04/22 15:49:21 1.946
+++ src/gdb/doc/gdb.texinfo 2012/04/23 17:20:56 1.947
@@ -21142,11 +21142,11 @@
You have to specify also any existing directories displayed by
by @samp{show auto-load safe-path} (such as @samp{/usr:/bin} in this example).
-@item @kbd{gdb -iex "set auto-load safe-path /usr:/bin:~/src/gdb" [@dots{}]}
+@item @kbd{gdb -iex "set auto-load safe-path /usr:/bin:~/src/gdb"}
Specify this directory as in the previous case but just for a single
@value{GDBN} session.
-@item @kbd{gdb -iex "set auto-load safe-path" [@dots{}]}
+@item @kbd{gdb -iex "set auto-load safe-path"}
Disable auto-loading safety for a single @value{GDBN} session.
This assumes all the files you debug during this @value{GDBN} session will come
from trusted sources.
@@ -21161,7 +21161,7 @@
also suppresses any such warning messages:
@table @asis
-@item @kbd{gdb -iex "set auto-load no" [@dots{}]}
+@item @kbd{gdb -iex "set auto-load no"}
You can use @value{GDBN} command-line option for a single @value{GDBN} session.
@item @file{~/.gdbinit}: @samp{set auto-load no}

39
gdb-autoload-20of22.patch Normal file
View File

@ -0,0 +1,39 @@
http://sourceware.org/ml/gdb-cvs/2012-04/msg00184.html
### src/gdb/doc/ChangeLog 2012/04/23 17:20:56 1.1300
### src/gdb/doc/ChangeLog 2012/04/23 17:26:00 1.1301
## -3,6 +3,9 @@
* gdb.texinfo (Auto-loading safe path): Remove trailing [@dots{}].
Three times.
+ * gdb.texinfo (Auto-loading safe path): Add trailing @dots{}.
+ Three times.
+
2012-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.texinfo (Auto-loading safe path): Replace @itemize @bullet
--- src/gdb/doc/gdb.texinfo 2012/04/23 17:20:56 1.947
+++ src/gdb/doc/gdb.texinfo 2012/04/23 17:26:01 1.948
@@ -21142,11 +21142,11 @@
You have to specify also any existing directories displayed by
by @samp{show auto-load safe-path} (such as @samp{/usr:/bin} in this example).
-@item @kbd{gdb -iex "set auto-load safe-path /usr:/bin:~/src/gdb"}
+@item @kbd{gdb -iex "set auto-load safe-path /usr:/bin:~/src/gdb" @dots{}}
Specify this directory as in the previous case but just for a single
@value{GDBN} session.
-@item @kbd{gdb -iex "set auto-load safe-path"}
+@item @kbd{gdb -iex "set auto-load safe-path" @dots{}}
Disable auto-loading safety for a single @value{GDBN} session.
This assumes all the files you debug during this @value{GDBN} session will come
from trusted sources.
@@ -21161,7 +21161,7 @@
also suppresses any such warning messages:
@table @asis
-@item @kbd{gdb -iex "set auto-load no"}
+@item @kbd{gdb -iex "set auto-load no" @dots{}}
You can use @value{GDBN} command-line option for a single @value{GDBN} session.
@item @file{~/.gdbinit}: @samp{set auto-load no}

158
gdb-autoload-21of22.patch Normal file
View File

@ -0,0 +1,158 @@
http://sourceware.org/ml/gdb-patches/2012-04/msg00756.html
Subject: Re: [patch] auto-load safe-path reset back by set ""
- Patched out "(without the quotes)".
On Sun, 22 Apr 2012 22:16:32 +0200, Eli Zaretskii wrote:
> > +@item set auto-load safe-path [@var{directories}]
>
> You need @r{} around [ and ].
>
> > +Setting this variable to @code{"/"} (without the quotes) disables this security
> ^^^^^^^^^^
> Why not @file{/}? The quotes are not needed in any case.
done.
In fact this patch is unrelated to the Doug's suggestion, reposting it only
with the doc update.
Thanks,
Jan
gdb/
2012-04-23 Jan Kratochvil <jan.kratochvil@redhat.com>
* auto-load.c (set_auto_load_safe_path): Reset AUTO_LOAD_SAFE_PATH
back to DEFAULT_AUTO_LOAD_SAFE_PATH if it is being set to "".
(show_auto_load_safe_path): Check any-directory by comparison with "/".
(add_auto_load_safe_path): Change the error message.
(_initialize_auto_load): Change the "safe-path" help text.
* configure: Regenerate
* configure.ac (--without-auto-load-safe-path): Set
WITH_AUTO_LOAD_SAFE_PATH to /.
gdb/doc/
2012-04-23 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.texinfo (Auto-loading safe path): Make 'directories'
for 'set auto-load safe-path' optional. Mention if it is omitted.
Change disabling security protection condition to "/", twice.
diff --git a/gdb/auto-load.c b/gdb/auto-load.c
index 9d19179..6c1309f 100644
--- a/gdb/auto-load.c
+++ b/gdb/auto-load.c
@@ -181,6 +181,12 @@ auto_load_safe_path_vec_update (void)
static void
set_auto_load_safe_path (char *args, int from_tty, struct cmd_list_element *c)
{
+ if (auto_load_safe_path[0] == '\0')
+ {
+ xfree (auto_load_safe_path);
+ auto_load_safe_path = xstrdup (DEFAULT_AUTO_LOAD_SAFE_PATH);
+ }
+
auto_load_safe_path_vec_update ();
}
@@ -190,7 +196,7 @@ static void
show_auto_load_safe_path (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- if (*value == 0)
+ if (strcmp (value, "/") == 0)
fprintf_filtered (file, _("Auto-load files are safe to load from any "
"directory.\n"));
else
@@ -209,8 +215,9 @@ add_auto_load_safe_path (char *args, int from_tty)
if (args == NULL || *args == 0)
error (_("\
-Adding empty directory element disables the auto-load safe-path security. \
-Use 'set auto-load safe-path' instead if you mean that."));
+Directory argument required.\n\
+Use 'set auto-load safe-path /' for disabling the auto-load safe-path security.\
+"));
s = xstrprintf ("%s%c%s", auto_load_safe_path, DIRNAME_SEPARATOR, args);
xfree (auto_load_safe_path);
@@ -1023,8 +1030,10 @@ Set the list of directories from which it is safe to auto-load files."), _("\
Show the list of directories from which it is safe to auto-load files."), _("\
Various files loaded automatically for the 'set auto-load ...' options must\n\
be located in one of the directories listed by this option. Warning will be\n\
-printed and file will not be used otherwise. Use empty string (or even\n\
-empty directory entry) to allow any file for the 'set auto-load ...' options.\n\
+printed and file will not be used otherwise.\n\
+Setting this parameter to an empty list resets it to its default value.\n\
+Setting this parameter to '/' (without the quotes) allows any file\n\
+for the 'set auto-load ...' options.\n\
This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
This options has security implications for untrusted inferiors."),
set_auto_load_safe_path,
diff --git a/gdb/configure b/gdb/configure
index 54c2399..42d2fbd 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -4949,7 +4949,7 @@ $as_echo_n "checking for default auto-load safe-path... " >&6; }
# Check whether --with-auto-load-safe-path was given.
if test "${with_auto_load_safe_path+set}" = set; then :
withval=$with_auto_load_safe_path; if test "$with_auto_load_safe_path" = "no"; then
- with_auto_load_safe_path=""
+ with_auto_load_safe_path="/"
fi
else
with_auto_load_safe_path="$prefix"
diff --git a/gdb/configure.ac b/gdb/configure.ac
index a40c2e5..9bde18f 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -140,7 +140,7 @@ AC_ARG_WITH(auto-load-safe-path,
AS_HELP_STRING([--with-auto-load-safe-path=PATH], [directories safe to hold auto-loaded files])
AS_HELP_STRING([--without-auto-load-safe-path], [do not restrict auto-loaded files locations]),
[if test "$with_auto_load_safe_path" = "no"; then
- with_auto_load_safe_path=""
+ with_auto_load_safe_path="/"
fi],
[with_auto_load_safe_path="$prefix"])
AC_DEFINE_DIR(DEFAULT_AUTO_LOAD_SAFE_PATH, with_auto_load_safe_path,
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index a2a4eb3..46dde27 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -21105,9 +21105,12 @@ The list of trusted directories is controlled by the following commands:
@table @code
@anchor{set auto-load safe-path}
@kindex set auto-load safe-path
-@item set auto-load safe-path @var{directories}
+@item set auto-load safe-path @r{[}@var{directories}@r{]}
Set the list of directories (and their subdirectories) trusted for automatic
loading and execution of scripts. You can also enter a specific trusted file.
+If you omit @var{directories}, @samp{auto-load safe-path} will be reset to
+its default value as specified during @value{GDBN} compilation.
+
The list of directories uses directory separator (@samp{:} on GNU and Unix
systems, @samp{;} on MS-Windows and MS-DOS) to separate directories, similarly
to the @env{PATH} environment variable.
@@ -21126,7 +21129,8 @@ loading and execution of scripts. Multiple entries may be delimited by the
host platform directory separator in use.
@end table
-Setting this variable to an empty string disables this security protection.
+Setting this variable to @file{/} disables this security
+protection.
This variable is supposed to be set to the system directories writable by the
system superuser only. Users can add their source directories in init files in
their home directories (@pxref{Home Directory Init File}). See also deprecated
@@ -21146,7 +21150,7 @@ by @samp{show auto-load safe-path} (such as @samp{/usr:/bin} in this example).
Specify this directory as in the previous case but just for a single
@value{GDBN} session.
-@item @kbd{gdb -iex "set auto-load safe-path" @dots{}}
+@item @kbd{gdb -iex "set auto-load safe-path /" @dots{}}
Disable auto-loading safety for a single @value{GDBN} session.
This assumes all the files you debug during this @value{GDBN} session will come
from trusted sources.

231
gdb-autoload-22of22.patch Normal file
View File

@ -0,0 +1,231 @@
http://sourceware.org/ml/gdb-patches/2012-04/msg00758.html
Subject: [patch] auto-load safe-path default=$ddir/auto-load [Re: [patch] auto-load safe-path reset back by set ""]
On Sun, 22 Apr 2012 23:26:16 +0200, Doug Evans wrote:
> A thought occurred to me regarding the default value of auto-load-path
> = ${prefix}.
This is unrelated to this patch but thanks for the suggestion.
> So I was wondering if we really want security to be on by default,
> should the default value be gdb's data-directory (e.g.,
> $prefix/share/gdb) + $exec_prefix/lib{,32,64} + ???
Made it therefore $ddir/auto-load, on an ideal system/distro we can change all
the auto-loaded GDB files to be located under $ddir/auto-load. I have filed
for the only remaining violation (/usr/bin/mono-gdb.py) known to me:
https://bugzilla.redhat.com/show_bug.cgi?id=815501
(Sure I will ask about upstreaming of the change.)
> Plus, it seems like at least data-directory should be relocatable.
> Implementing this might be cumbersome unless data-directory was
> represented as something like "$ddir".
Done. Unfortunately this still does not fix the "./gdb" run for a newly built
GDB. Newly built GDB probably could use "-data-directory $PWD/data-directory"
(if GDB's program dir contains "data-directory" sort of relocation).
We could then change current
gdb-gdb.gdb.in -> gdb-gdb.gdb
to
gdb-gdb.gdb.in -> data-directory/auto-load/$PWD/gdb-gdb.gdb
and even install the file (with proper installation directories) as:
/usr/share/gdb/usr/bin/gdb-gdb.gdb
(additionally ensuring for example in Fedora - in its .spec file
@srcdir@ gets substituted right for Fedora *-debuginfo.rpm)
Would it make everyone happy?
Thanks,
Jan
gdb/
2012-04-23 Jan Kratochvil <jan.kratochvil@redhat.com>
Change auto-load safe-path default to $ddir/auto-load.
* auto-load.c (auto_load_safe_path_vec_update): Call
substitute_path_component for $ddir.
* configure: Regenerate.
* configure.ac (--with-auto-load-safe-path): Suggest $ddir syntax.
Change the default to \\\$ddir/auto-load.
* defs.h (substitute_path_component): New declaration.
* utils.c (substitute_path_component): New function.
gdb/doc/
2012-04-23 Jan Kratochvil <jan.kratochvil@redhat.com>
Change auto-load safe-path default to $ddir/auto-load.
* gdb.texinfo (Auto-loading): Change shown safe-path default to
$ddir/auto-load.
(Auto-loading safe path): Change the sample warning to $ddir/auto-load.
Twice. Mention the $ddir substitution.
Index: gdb-7.3.50.20110722/gdb/auto-load.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/auto-load.c 2012-04-24 20:37:48.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/auto-load.c 2012-04-24 20:37:53.902703805 +0200
@@ -141,8 +141,12 @@ auto_load_safe_path_vec_update (void)
for (ix = 0; ix < len; ix++)
{
char *dir = VEC_index (char_ptr, auto_load_safe_path_vec, ix);
- char *expanded = tilde_expand (dir);
- char *real_path = gdb_realpath (expanded);
+ char *expanded, *real_path;
+
+ expanded = tilde_expand (dir);
+ substitute_path_component (&expanded, "$ddir", gdb_datadir);
+
+ real_path = gdb_realpath (expanded);
/* Ensure the current entry is at least tilde_expand-ed. */
VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
Index: gdb-7.3.50.20110722/gdb/configure
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/configure 2012-04-24 20:37:48.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/configure 2012-04-24 20:37:53.904703800 +0200
@@ -1664,7 +1664,8 @@ Optional Packages:
--with-rpm query rpm database for missing debuginfos (yes/no,
def. auto=librpm.so)
--with-auto-load-safe-path=PATH
- directories safe to hold auto-loaded files
+ directories safe to hold auto-loaded files, use
+ '\\\$ddir' for -data-directory
--without-auto-load-safe-path
do not restrict auto-loaded files locations
--with-libunwind use libunwind frame unwinding support
@@ -8392,7 +8393,7 @@ if test "${with_auto_load_safe_path+set}
with_auto_load_safe_path="/"
fi
else
- with_auto_load_safe_path="$prefix"
+ with_auto_load_safe_path='\\\$ddir/auto-load'
fi
Index: gdb-7.3.50.20110722/gdb/configure.ac
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/configure.ac 2012-04-24 20:37:48.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/configure.ac 2012-04-24 20:37:53.904703800 +0200
@@ -303,12 +303,13 @@ fi
AC_MSG_CHECKING([for default auto-load safe-path])
AC_ARG_WITH(auto-load-safe-path,
-AS_HELP_STRING([--with-auto-load-safe-path=PATH], [directories safe to hold auto-loaded files])
+AS_HELP_STRING([--with-auto-load-safe-path=PATH],
+ [directories safe to hold auto-loaded files, use '\\\$ddir' for -data-directory])
AS_HELP_STRING([--without-auto-load-safe-path], [do not restrict auto-loaded files locations]),
[if test "$with_auto_load_safe_path" = "no"; then
with_auto_load_safe_path="/"
fi],
-[with_auto_load_safe_path="$prefix"])
+[with_auto_load_safe_path='\\\$ddir/auto-load'])
AC_DEFINE_DIR(DEFAULT_AUTO_LOAD_SAFE_PATH, with_auto_load_safe_path,
[Directories safe to hold auto-loaded files.])
AC_MSG_RESULT([$with_auto_load_safe_path])
Index: gdb-7.3.50.20110722/gdb/defs.h
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/defs.h 2012-04-24 20:37:47.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/defs.h 2012-04-24 20:38:42.944581730 +0200
@@ -432,6 +432,9 @@ extern const char *gdb_bfd_errmsg (bfd_e
extern int parse_pid_to_attach (char *args);
+extern void substitute_path_component (char **stringp, const char *from,
+ const char *to);
+
/* From demangle.c */
extern void set_demangling_style (char *);
Index: gdb-7.3.50.20110722/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/doc/gdb.texinfo 2012-04-24 20:37:48.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/doc/gdb.texinfo 2012-04-24 20:37:53.909703788 +0200
@@ -20113,7 +20113,7 @@ libthread-db: Auto-loading of inferior
local-gdbinit: Auto-loading of .gdbinit script from current directory is on.
python-scripts: Auto-loading of Python scripts is on.
safe-path: List of directories from which it is safe to auto-load files
- is /usr/local.
+ is $ddir/auto-load.
@end smallexample
@anchor{info auto-load}
@@ -20315,9 +20315,9 @@ get loaded:
$ ./gdb -q ./gdb
Reading symbols from /home/user/gdb/gdb...done.
warning: File "/home/user/gdb/gdb-gdb.gdb" auto-loading has been
- declined by your `auto-load safe-path' set to "/usr/local".
+ declined by your `auto-load safe-path' set to "$ddir/auto-load".
warning: File "/home/user/gdb/gdb-gdb.py" auto-loading has been
- declined by your `auto-load safe-path' set to "/usr/local".
+ declined by your `auto-load safe-path' set to "$ddir/auto-load".
@end smallexample
The list of trusted directories is controlled by the following commands:
@@ -20349,6 +20349,11 @@ loading and execution of scripts. Multi
host platform directory separator in use.
@end table
+Any used string @file{$ddir} will get replaced by @var{data-directory} which is
+determined at @value{GDBN} startup (@pxref{Data Files}). @file{$ddir} must be
+be placed as a directory component - either alone or delimited by @file{/} or
+@file{\} directory separators, depending on the host platform.
+
Setting this variable to @file{/} disables this security
protection.
This variable is supposed to be set to the system directories writable by the
Index: gdb-7.3.50.20110722/gdb/utils.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/utils.c 2012-04-24 20:37:48.000000000 +0200
+++ gdb-7.3.50.20110722/gdb/utils.c 2012-04-24 20:39:12.745507543 +0200
@@ -3797,6 +3797,48 @@ dirnames_to_char_ptr_vec (const char *di
return retval;
}
+/* Substitute all occurences of string FROM by string TO in *STRINGP. *STRINGP
+ must come from xrealloc-compatible allocator and it may be updated. FROM
+ needs to be delimited by IS_DIR_SEPARATOR (or be located at the start or
+ end of *STRINGP. */
+
+void
+substitute_path_component (char **stringp, const char *from, const char *to)
+{
+ char *string = *stringp, *s;
+ const size_t from_len = strlen (from);
+ const size_t to_len = strlen (to);
+
+ for (s = string;;)
+ {
+ s = strstr (s, from);
+ if (s == NULL)
+ break;
+
+ if ((s == string || IS_DIR_SEPARATOR (s[-1]))
+ && (s[from_len] == '\0' || IS_DIR_SEPARATOR (s[from_len])))
+ {
+ char *string_new;
+
+ string_new = xrealloc (string, (strlen (string) + to_len + 1));
+
+ /* Relocate the current S pointer. */
+ s = s - string + string_new;
+ string = string_new;
+
+ /* Replace from by to. */
+ memmove (&s[to_len], &s[from_len], strlen (&s[from_len]) + 1);
+ memcpy (s, to, to_len);
+
+ s += to_len;
+ }
+ else
+ s++;
+ }
+
+ *stringp = string;
+}
+
/* Provide a prototype to silence -Wmissing-prototypes. */
extern initialize_file_ftype _initialize_utils;

View File

@ -57,7 +57,7 @@ Index: gdb-7.3.50.20110722/gdb/solib-svr4.c
+ }
else
{
struct build_id *build_id;
struct build_id *build_id = NULL;
Index: gdb-7.3.50.20110722/gdb/solib.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/solib.c 2011-06-30 21:29:54.000000000 +0200

View File

@ -0,0 +1,80 @@
http://sourceware.org/ml/gdb-patches/2012-04/msg00058.html
Subject: [downstream patch FYI] workaround stale frame_info * (PR 13866)
Hi,
I did not look at which commit caused this regression but apparently it was
introduced at least with multi-inferiors.
I understand this fix is not right fix of the crash; but in most GDB cases one
does not use multi-inferior so why to regress single-inferior by it.
Some more simple solutions still fix the single-inferior mode but they
regressed the multi-inferior mode
gdb.threads/no-unwaited-for-left.exp
gdb.multi/base.exp
so I had to put there that sorting magic.
With proper C++ sanity check of stale live frame_info references the testcase
would be simple without the "frame_garbage_collection" reproducer below.
It is also reproducible just with valgrind but regularly running the whole
testsuite under valgrind I did not find feasible.
No regressions on {x86_64,x86_64-m32,i686}-fedora17-linux-gnu.
Thanks,
Jan
gdb/
2012-04-04 Jan Kratochvil <jan.kratochvil@redhat.com>
Workaround PR backtrace/13866.
* progspace.c (switch_to_program_space_and_thread): Try not to call
switch_to_thread.
Index: gdb-7.3.50.20110722/gdb/progspace.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/progspace.c 2011-01-05 23:22:50.000000000 +0100
+++ gdb-7.3.50.20110722/gdb/progspace.c 2012-04-04 23:07:16.329038403 +0200
@@ -480,17 +480,36 @@ save_current_space_and_thread (void)
void
switch_to_program_space_and_thread (struct program_space *pspace)
{
- struct inferior *inf;
+ struct inferior *inf = current_inferior ();
- inf = find_inferior_for_program_space (pspace);
+ if (inf->pspace != pspace)
+ inf = find_inferior_for_program_space (pspace);
if (inf != NULL)
{
- struct thread_info *tp;
+ struct thread_info *tp, *current_tp = NULL;
+
+ if (ptid_get_pid (inferior_ptid) == inf->pid)
+ current_tp = find_thread_ptid (inferior_ptid);
tp = any_live_thread_of_process (inf->pid);
if (tp != NULL)
{
- switch_to_thread (tp->ptid);
+ /* thread.c */
+ enum thread_state
+ {
+ THREAD_STOPPED,
+ THREAD_RUNNING,
+ THREAD_EXITED,
+ };
+
+ /* Prefer primarily thread not THREAD_EXITED and secondarily thread
+ not EXECUTING. */
+ if (current_tp == NULL
+ || (tp->state_ != THREAD_EXITED
+ && current_tp->state_ == THREAD_EXITED)
+ || (!tp->executing_ && current_tp->executing_))
+ switch_to_thread (tp->ptid);
+
/* Switching thread switches pspace implicitly. We're
done. */
return;

View File

@ -0,0 +1,75 @@
Index: gdb-7.3.50.20110722/gdb/elfread.c
===================================================================
--- gdb-7.3.50.20110722.orig/gdb/elfread.c 2012-02-29 15:26:27.445214760 -0300
+++ gdb-7.3.50.20110722/gdb/elfread.c 2012-02-29 15:27:46.556248946 -0300
@@ -2612,30 +2612,31 @@
bfd *abfd = objfile->obfd;
int size = bfd_get_arch_size (abfd) / 8;
struct gdbarch *gdbarch = get_objfile_arch (objfile);
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
CORE_ADDR base_ref;
/* Provider and the name of the probe. */
- ret->provider = (const char *) &el->data[3 * size];
+ ret->provider = &el->data[3 * size];
ret->name = memchr (ret->provider, '\0',
- (unsigned long *) el->data
- + el->size - (unsigned long *) ret->provider);
+ (char *) el->data + el->size - ret->provider);
/* Making sure there is a name. */
if (!ret->name)
- complaint (&symfile_complaints, _("corrupt probe when reading `%s'"),
- objfile->name);
+ {
+ complaint (&symfile_complaints, _("corrupt probe when reading `%s'"),
+ objfile->name);
+ ret->provider = NULL;
+ ret->name = NULL;
+ }
else
++ret->name;
/* Retrieving the probe's address. */
- ret->address = extract_typed_address ((const gdb_byte *) &el->data[0],
- ptr_type);
+ ret->address = extract_typed_address (&el->data[0], ptr_type);
/* Link-time sh_addr of `.stapsdt.base' section. */
- base_ref = extract_typed_address ((const gdb_byte *) &el->data[size],
- ptr_type);
+ base_ref = extract_typed_address (&el->data[size], ptr_type);
/* Semaphore address. */
- ret->sem_addr = extract_typed_address ((const gdb_byte *) &el->data[2 * size],
- ptr_type);
+ ret->sem_addr = extract_typed_address (&el->data[2 * size], ptr_type);
ret->address += (ANOFFSET (objfile->section_offsets,
SECT_OFF_TEXT (objfile))
@@ -2650,15 +2651,19 @@
if (ret->name)
{
ret->args = memchr (ret->name, '\0',
- (unsigned long *) el->data
- + el->size - (unsigned long *) ret->name);
+ (char *) el->data + el->size - ret->name);
- if (ret->args++ != NULL
- || memchr (ret->args, '\0', (unsigned long *) el->data
- + el->size - (unsigned long *) ret->name)
- != el->data + el->size - 1)
- complaint (&symfile_complaints, _("corrupt probe when reading `%s'"),
- objfile->name);
+ if (ret->args != NULL)
+ ++ret->args;
+ if (ret->args == NULL
+ || (memchr (ret->args, '\0',
+ (char *) el->data + el->size - ret->name)
+ != el->data + el->size - 1))
+ {
+ complaint (&symfile_complaints, _("corrupt probe when reading `%s'"),
+ objfile->name);
+ ret->args = NULL;
+ }
}
else
ret->args = NULL;

102
gdb.spec
View File

@ -27,7 +27,7 @@ Version: 7.3.50.20110722
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
Release: 10%{?_with_upstream:.upstream}%{?dist}
Release: 16%{?_with_upstream:.upstream}%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
Group: Development/Debuggers
@ -172,10 +172,6 @@ Patch145: gdb-6.3-threaded-watchpoints2-20050225.patch
#=ia64
Patch153: gdb-6.3-ia64-gcore-page0-20050421.patch
# Security errata for untrusted .gdbinit
#=push
Patch157: gdb-6.3-security-errata-20050610.patch
# IA64 sigtramp prev register patch
#=ia64
Patch158: gdb-6.3-ia64-sigtramp-frame-20050708.patch
@ -297,6 +293,9 @@ Patch271: gdb-6.5-bz243845-stale-testing-zombie-test.patch
# New locating of the matching binaries from the pure core file (build-id).
#=push
Patch274: gdb-6.6-buildid-locate.patch
# Fix loading of core files without build-ids but with build-ids in executables.
#=push
Patch659: gdb-6.6-buildid-locate-solib-missing-ids.patch
#=push
Patch353: gdb-6.6-buildid-locate-rpm.patch
#=push
@ -556,6 +555,37 @@ Patch632: gdb-optimized-out-internal-error.patch
# Hack for proper PIE run of the testsuite.
Patch634: gdb-runtest-pie-override.patch
# Fix `corrupt probe' warnings for SystemTap probes.
Patch647: gdb-stap-corrupt-probes-fix.patch
# Workaround crashes from stale frame_info pointer (BZ 804256).
Patch661: gdb-stale-frame_info.patch
# Security fix for loading untrusted inferiors, see "set auto-load" (BZ 756117).
#=push
Patch662: gdb-autoload-01of22.patch
Patch663: gdb-autoload-02of22.patch
Patch664: gdb-autoload-03of22.patch
Patch665: gdb-autoload-04of22.patch
Patch666: gdb-autoload-05of22.patch
Patch667: gdb-autoload-06of22.patch
Patch668: gdb-autoload-07of22.patch
Patch669: gdb-autoload-08of22.patch
Patch670: gdb-autoload-09of22.patch
Patch671: gdb-autoload-10of22.patch
Patch672: gdb-autoload-11of22.patch
Patch673: gdb-autoload-12of22.patch
Patch674: gdb-autoload-13of22.patch
Patch675: gdb-autoload-14of22.patch
Patch676: gdb-autoload-15of22.patch
Patch677: gdb-autoload-16of22.patch
Patch678: gdb-autoload-17of22.patch
Patch679: gdb-autoload-18of22.patch
Patch680: gdb-autoload-19of22.patch
Patch681: gdb-autoload-20of22.patch
Patch682: gdb-autoload-21of22.patch
Patch683: gdb-autoload-22of22.patch
BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa}
# --without-system-readline
# Requires: readline%{?_isa}
@ -576,12 +606,12 @@ Requires: python-libs%{?_isa}
Requires: python-libs-%{_arch} >= 2.4.3-32.el5
%endif
BuildRequires: python-devel%{?_isa}
%if 0%{?rhel:1}
%if 0%{?rhel:1} && 0%{?rhel} <= 6
# Temporarily before python files get moved to libstdc++.rpm
# libstdc++%{bits_other} is not present in Koji, the .spec script generating
# gdb/python/libstdcxx/ also does not depend on the %{bits_other} files.
BuildRequires: libstdc++%{?_isa}
%endif # 0%{?rhel:1}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
%endif # 0%{!?_without_python:1}
# gdb-doc in PDF:
BuildRequires: texinfo-tex
@ -699,10 +729,10 @@ Requires(preun): /sbin/install-info
%setup -q -n %{gdb_src}
%if 0%{?rhel:1}
%if 0%{?rhel:1} && 0%{?rhel} <= 6
# libstdc++ pretty printers.
tar xjf %{SOURCE5}
%endif # 0%{?rhel:1}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
# Files have `# <number> <file>' statements breaking VPATH / find-debuginfo.sh .
rm -f gdb/ada-exp.c gdb/ada-lex.c gdb/c-exp.c gdb/cp-name-parser.c gdb/f-exp.c
@ -734,7 +764,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch259 -p1
%patch145 -p1
%patch153 -p1
%patch157 -p1
%patch158 -p1
%patch160 -p1
%patch161 -p1
@ -765,6 +794,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch263 -p1
%patch271 -p1
%patch274 -p1
%patch659 -p1
%patch353 -p1
%patch282 -p1
%patch284 -p1
@ -829,6 +859,30 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch631 -p1
%patch632 -p1
%patch634 -p1
%patch647 -p1
%patch661 -p1
%patch662 -p1
%patch663 -p1
%patch664 -p1
%patch665 -p1
%patch666 -p1
%patch667 -p1
%patch668 -p1
%patch669 -p1
%patch670 -p1
%patch671 -p1
%patch672 -p1
%patch673 -p1
%patch674 -p1
%patch675 -p1
%patch676 -p1
%patch677 -p1
%patch678 -p1
%patch679 -p1
%patch680 -p1
%patch681 -p1
%patch682 -p1
%patch683 -p1
%patch393 -p1
%patch335 -p1
@ -836,9 +890,9 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch393 -p1 -R
%patch335 -p1 -R
%endif
%if 0%{?rhel:1}
%if 0%{?rhel:1} && 0%{?rhel} <= 6
%patch487 -p1
%endif # 0%{?rhel:1}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
find -name "*.orig" | xargs rm -f
! find -name "*.rej" # Should not happen.
@ -942,6 +996,8 @@ $(: RHEL-5 librpm has incompatible API. ) \
%if 0%{?_with_debug:1}
--enable-static --disable-shared --enable-debug \
%endif
$(: %{_bindir}/mono-gdb.py is workaround for mono BZ 815501. ) \
--with-auto-load-safe-path=%{_datadir}/gdb/auto-load:/usr/lib/debug:%{_bindir}/mono-gdb.py \
%ifarch sparc sparcv9
sparc-%{_vendor}-%{_target_os}%{?_gnu}
%else
@ -1121,7 +1177,7 @@ do
touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
done
%if 0%{?rhel:1}
%if 0%{?rhel:1} && 0%{?rhel} <= 6
%if 0%{!?_without_python:1}
# Temporarily now:
for LIB in lib lib64;do
@ -1137,7 +1193,7 @@ test ! -e $RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/libstdcxx \
$RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
%endif # 0%{!?_without_python:1}
%endif # 0%{?rhel:1}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
# Remove the files that are part of a gdb build but that are owned and
# provided by other packages.
@ -1252,6 +1308,24 @@ fi
%{_infodir}/gdb.info*
%changelog
* Tue Apr 24 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-16.fc16
- Update "set auto-load" patchset and the --with-auto-load-safe-path setting.
* Thu Apr 19 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-15.fc16
- Security fix for loading untrusted inferiors, see "set auto-load" (BZ 756117).
* Wed Apr 4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-14.fc16
- Workaround crashes from stale frame_info pointer (BZ 804256).
* Sat Mar 17 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-13.fc16
- Fix loading of core files without build-ids but with build-ids in executables.
* Wed Mar 1 2012 Sergio Durigan Junior <sergiodj@redhat.com> - 7.3.50.20110722-12.fc16
- Fix `corrupt probe' complaint when reading SystemTap probes.
* Tue Nov 29 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-11.fc16
- No longer build bundled libstdc++ pretty printers on RHELs >= 7.
* Sat Nov 5 2011 Sergio Durigan Junior <sergiodj@redhat.com> - 7.3.50.20110722-10.fc16
- Backport fix for crash in cp_scan_for_anonymous_namespace
(Aleksandar Ristovski, BZ 750341).