gdb/gdb-autoload-03of22.patch

180 lines
7.5 KiB
Diff

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()" "\\\[\\\]"