Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d3d45871c3 | ||
|
8a9e237582 | ||
|
eeab48e583 | ||
|
47a8f2fb72 | ||
|
d44acb3a33 | ||
|
815858a515 | ||
|
b3beac1a00 | ||
|
772af43e7d |
@ -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. */
|
|
||||||
|
|
60
gdb-6.6-buildid-locate-solib-missing-ids.patch
Normal file
60
gdb-6.6-buildid-locate-solib-missing-ids.patch
Normal 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
70
gdb-autoload-01of22.patch
Normal 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
81
gdb-autoload-02of22.patch
Normal 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
179
gdb-autoload-03of22.patch
Normal 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
40
gdb-autoload-04of22.patch
Normal 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
69
gdb-autoload-05of22.patch
Normal 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
103
gdb-autoload-06of22.patch
Normal 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
216
gdb-autoload-07of22.patch
Normal 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
141
gdb-autoload-08of22.patch
Normal 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
244
gdb-autoload-09of22.patch
Normal 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
73
gdb-autoload-10of22.patch
Normal 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
59
gdb-autoload-11of22.patch
Normal 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
171
gdb-autoload-12of22.patch
Normal 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
1164
gdb-autoload-13of22.patch
Normal file
File diff suppressed because it is too large
Load Diff
1702
gdb-autoload-14of22.patch
Normal file
1702
gdb-autoload-14of22.patch
Normal file
File diff suppressed because it is too large
Load Diff
744
gdb-autoload-15of22.patch
Normal file
744
gdb-autoload-15of22.patch
Normal 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
352
gdb-autoload-16of22.patch
Normal 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
23
gdb-autoload-17of22.patch
Normal 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
51
gdb-autoload-18of22.patch
Normal 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
38
gdb-autoload-19of22.patch
Normal 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
39
gdb-autoload-20of22.patch
Normal 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
158
gdb-autoload-21of22.patch
Normal 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
231
gdb-autoload-22of22.patch
Normal 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;
|
||||||
|
|
@ -57,7 +57,7 @@ Index: gdb-7.3.50.20110722/gdb/solib-svr4.c
|
|||||||
+ }
|
+ }
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct build_id *build_id;
|
struct build_id *build_id = NULL;
|
||||||
Index: gdb-7.3.50.20110722/gdb/solib.c
|
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
|
--- gdb-7.3.50.20110722.orig/gdb/solib.c 2011-06-30 21:29:54.000000000 +0200
|
||||||
|
80
gdb-stale-frame_info.patch
Normal file
80
gdb-stale-frame_info.patch
Normal 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;
|
75
gdb-stap-corrupt-probes-fix.patch
Normal file
75
gdb-stap-corrupt-probes-fix.patch
Normal 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
102
gdb.spec
@ -27,7 +27,7 @@ Version: 7.3.50.20110722
|
|||||||
|
|
||||||
# The release always contains a leading reserved number, start it at 1.
|
# 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.
|
# `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
|
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
|
||||||
Group: Development/Debuggers
|
Group: Development/Debuggers
|
||||||
@ -172,10 +172,6 @@ Patch145: gdb-6.3-threaded-watchpoints2-20050225.patch
|
|||||||
#=ia64
|
#=ia64
|
||||||
Patch153: gdb-6.3-ia64-gcore-page0-20050421.patch
|
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 sigtramp prev register patch
|
||||||
#=ia64
|
#=ia64
|
||||||
Patch158: gdb-6.3-ia64-sigtramp-frame-20050708.patch
|
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).
|
# New locating of the matching binaries from the pure core file (build-id).
|
||||||
#=push
|
#=push
|
||||||
Patch274: gdb-6.6-buildid-locate.patch
|
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
|
#=push
|
||||||
Patch353: gdb-6.6-buildid-locate-rpm.patch
|
Patch353: gdb-6.6-buildid-locate-rpm.patch
|
||||||
#=push
|
#=push
|
||||||
@ -556,6 +555,37 @@ Patch632: gdb-optimized-out-internal-error.patch
|
|||||||
# Hack for proper PIE run of the testsuite.
|
# Hack for proper PIE run of the testsuite.
|
||||||
Patch634: gdb-runtest-pie-override.patch
|
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}
|
BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa}
|
||||||
# --without-system-readline
|
# --without-system-readline
|
||||||
# Requires: readline%{?_isa}
|
# Requires: readline%{?_isa}
|
||||||
@ -576,12 +606,12 @@ Requires: python-libs%{?_isa}
|
|||||||
Requires: python-libs-%{_arch} >= 2.4.3-32.el5
|
Requires: python-libs-%{_arch} >= 2.4.3-32.el5
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: python-devel%{?_isa}
|
BuildRequires: python-devel%{?_isa}
|
||||||
%if 0%{?rhel:1}
|
%if 0%{?rhel:1} && 0%{?rhel} <= 6
|
||||||
# Temporarily before python files get moved to libstdc++.rpm
|
# Temporarily before python files get moved to libstdc++.rpm
|
||||||
# libstdc++%{bits_other} is not present in Koji, the .spec script generating
|
# libstdc++%{bits_other} is not present in Koji, the .spec script generating
|
||||||
# gdb/python/libstdcxx/ also does not depend on the %{bits_other} files.
|
# gdb/python/libstdcxx/ also does not depend on the %{bits_other} files.
|
||||||
BuildRequires: libstdc++%{?_isa}
|
BuildRequires: libstdc++%{?_isa}
|
||||||
%endif # 0%{?rhel:1}
|
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
|
||||||
%endif # 0%{!?_without_python:1}
|
%endif # 0%{!?_without_python:1}
|
||||||
# gdb-doc in PDF:
|
# gdb-doc in PDF:
|
||||||
BuildRequires: texinfo-tex
|
BuildRequires: texinfo-tex
|
||||||
@ -699,10 +729,10 @@ Requires(preun): /sbin/install-info
|
|||||||
|
|
||||||
%setup -q -n %{gdb_src}
|
%setup -q -n %{gdb_src}
|
||||||
|
|
||||||
%if 0%{?rhel:1}
|
%if 0%{?rhel:1} && 0%{?rhel} <= 6
|
||||||
# libstdc++ pretty printers.
|
# libstdc++ pretty printers.
|
||||||
tar xjf %{SOURCE5}
|
tar xjf %{SOURCE5}
|
||||||
%endif # 0%{?rhel:1}
|
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
|
||||||
|
|
||||||
# Files have `# <number> <file>' statements breaking VPATH / find-debuginfo.sh .
|
# 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
|
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
|
%patch259 -p1
|
||||||
%patch145 -p1
|
%patch145 -p1
|
||||||
%patch153 -p1
|
%patch153 -p1
|
||||||
%patch157 -p1
|
|
||||||
%patch158 -p1
|
%patch158 -p1
|
||||||
%patch160 -p1
|
%patch160 -p1
|
||||||
%patch161 -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
|
%patch263 -p1
|
||||||
%patch271 -p1
|
%patch271 -p1
|
||||||
%patch274 -p1
|
%patch274 -p1
|
||||||
|
%patch659 -p1
|
||||||
%patch353 -p1
|
%patch353 -p1
|
||||||
%patch282 -p1
|
%patch282 -p1
|
||||||
%patch284 -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
|
%patch631 -p1
|
||||||
%patch632 -p1
|
%patch632 -p1
|
||||||
%patch634 -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
|
%patch393 -p1
|
||||||
%patch335 -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
|
%patch393 -p1 -R
|
||||||
%patch335 -p1 -R
|
%patch335 -p1 -R
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?rhel:1}
|
%if 0%{?rhel:1} && 0%{?rhel} <= 6
|
||||||
%patch487 -p1
|
%patch487 -p1
|
||||||
%endif # 0%{?rhel:1}
|
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
|
||||||
|
|
||||||
find -name "*.orig" | xargs rm -f
|
find -name "*.orig" | xargs rm -f
|
||||||
! find -name "*.rej" # Should not happen.
|
! find -name "*.rej" # Should not happen.
|
||||||
@ -942,6 +996,8 @@ $(: RHEL-5 librpm has incompatible API. ) \
|
|||||||
%if 0%{?_with_debug:1}
|
%if 0%{?_with_debug:1}
|
||||||
--enable-static --disable-shared --enable-debug \
|
--enable-static --disable-shared --enable-debug \
|
||||||
%endif
|
%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
|
%ifarch sparc sparcv9
|
||||||
sparc-%{_vendor}-%{_target_os}%{?_gnu}
|
sparc-%{_vendor}-%{_target_os}%{?_gnu}
|
||||||
%else
|
%else
|
||||||
@ -1121,7 +1177,7 @@ do
|
|||||||
touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
|
touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
|
||||||
done
|
done
|
||||||
|
|
||||||
%if 0%{?rhel:1}
|
%if 0%{?rhel:1} && 0%{?rhel} <= 6
|
||||||
%if 0%{!?_without_python:1}
|
%if 0%{!?_without_python:1}
|
||||||
# Temporarily now:
|
# Temporarily now:
|
||||||
for LIB in lib lib64;do
|
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 \
|
cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/libstdcxx \
|
||||||
$RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
|
$RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
|
||||||
%endif # 0%{!?_without_python:1}
|
%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
|
# Remove the files that are part of a gdb build but that are owned and
|
||||||
# provided by other packages.
|
# provided by other packages.
|
||||||
@ -1252,6 +1308,24 @@ fi
|
|||||||
%{_infodir}/gdb.info*
|
%{_infodir}/gdb.info*
|
||||||
|
|
||||||
%changelog
|
%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
|
* 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
|
- Backport fix for crash in cp_scan_for_anonymous_namespace
|
||||||
(Aleksandar Ristovski, BZ 750341).
|
(Aleksandar Ristovski, BZ 750341).
|
||||||
|
Loading…
Reference in New Issue
Block a user