216 lines
8.9 KiB
Diff
216 lines
8.9 KiB
Diff
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.4.50.20120120/gdb/cli/cli-cmds.c
|
|
===================================================================
|
|
--- gdb-7.4.50.20120120.orig/gdb/cli/cli-cmds.c 2012-01-04 09:17:16.000000000 +0100
|
|
+++ gdb-7.4.50.20120120/gdb/cli/cli-cmds.c 2012-04-18 00:41:42.696855430 +0200
|
|
@@ -529,9 +529,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.4.50.20120120/gdb/python/py-auto-load.c
|
|
===================================================================
|
|
--- gdb-7.4.50.20120120.orig/gdb/python/py-auto-load.c 2012-01-04 09:17:25.000000000 +0100
|
|
+++ gdb-7.4.50.20120120/gdb/python/py-auto-load.c 2012-04-18 00:41:42.696855430 +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);
|
|
xfree (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.4.50.20120120/gdb/python/python-internal.h
|
|
===================================================================
|
|
--- gdb-7.4.50.20120120.orig/gdb/python/python-internal.h 2012-01-04 09:17:25.000000000 +0100
|
|
+++ gdb-7.4.50.20120120/gdb/python/python-internal.h 2012-04-18 00:41:42.696855430 +0200
|
|
@@ -289,8 +289,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.4.50.20120120/gdb/python/python.c
|
|
===================================================================
|
|
--- gdb-7.4.50.20120120.orig/gdb/python/python.c 2012-04-18 00:41:30.000000000 +0200
|
|
+++ gdb-7.4.50.20120120/gdb/python/python.c 2012-04-18 00:41:42.696855430 +0200
|
|
@@ -154,34 +154,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 *full_path;
|
|
PyObject *python_file;
|
|
struct cleanup *cleanup;
|
|
@@ -201,6 +198,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
|
|
@@ -623,17 +622,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);
|
|
}
|
|
|
|
@@ -1041,19 +1040,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;
|
|
@@ -1129,7 +1129,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.4.50.20120120/gdb/python/python.h
|
|
===================================================================
|
|
--- gdb-7.4.50.20120120.orig/gdb/python/python.h 2012-04-18 00:41:30.000000000 +0200
|
|
+++ gdb-7.4.50.20120120/gdb/python/python.h 2012-04-18 00:41:42.697855427 +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);
|
|
|