Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Side by Side Diff: gdb/python/python.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/python/python.h ('k') | gdb/python/python-internal.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
None
OLDNEW
1 /* General python/gdb code 1 /* General python/gdb code
2 2
3 Copyright (C) 2008-2012 Free Software Foundation, Inc. 3 Copyright (C) 2008-2012 Free Software Foundation, Inc.
4 4
5 This file is part of GDB. 5 This file is part of GDB.
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or 9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
(...skipping 23 matching lines...) Expand all
34 #include "python.h" 34 #include "python.h"
35 35
36 #include <ctype.h> 36 #include <ctype.h>
37 37
38 /* Declared constants and enum for python stack printing. */ 38 /* Declared constants and enum for python stack printing. */
39 static const char python_excp_none[] = "none"; 39 static const char python_excp_none[] = "none";
40 static const char python_excp_full[] = "full"; 40 static const char python_excp_full[] = "full";
41 static const char python_excp_message[] = "message"; 41 static const char python_excp_message[] = "message";
42 42
43 /* "set python print-stack" choices. */ 43 /* "set python print-stack" choices. */
44 static const char *python_excp_enums[] = 44 static const char *const python_excp_enums[] =
45 { 45 {
46 python_excp_none, 46 python_excp_none,
47 python_excp_full, 47 python_excp_full,
48 python_excp_message, 48 python_excp_message,
49 NULL 49 NULL
50 }; 50 };
51 51
52 /* The exception printing variable. 'full' if we want to print the 52 /* The exception printing variable. 'full' if we want to print the
53 error message and stack, 'none' if we want to print nothing, and 53 error message and stack, 'none' if we want to print nothing, and
54 'message' if we only want to print the error message. 'message' is 54 'message' if we only want to print the error message. 'message' is
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 144
145 python_gdbarch = gdbarch; 145 python_gdbarch = gdbarch;
146 python_language = language; 146 python_language = language;
147 147
148 /* Save it and ensure ! PyErr_Occurred () afterwards. */ 148 /* Save it and ensure ! PyErr_Occurred () afterwards. */
149 PyErr_Fetch (&env->error_type, &env->error_value, &env->error_traceback); 149 PyErr_Fetch (&env->error_type, &env->error_value, &env->error_traceback);
150 150
151 return make_cleanup (restore_python_env, env); 151 return make_cleanup (restore_python_env, env);
152 } 152 }
153 153
154 /* A wrapper around PyRun_SimpleFile. FILENAME is the name of 154 /* A wrapper around PyRun_SimpleFile. FILE is the Python script to run
155 the Python script to run. 155 named FILENAME.
156 156
157 One of the parameters of PyRun_SimpleFile is a FILE *. 157 On Windows hosts few users would build Python themselves (this is no
158 The problem is that type FILE is extremely system and compiler 158 trivial task on this platform), and thus use binaries built by
159 dependent. So, unless the Python library has been compiled using 159 someone else instead. There may happen situation where the Python
160 the same build environment as GDB, we run the risk of getting 160 library and GDB are using two different versions of the C runtime
161 a crash due to inconsistencies between the definition used by GDB, 161 library. Python, being built with VC, would use one version of the
162 and the definition used by Python. A mismatch can very likely 162 msvcr DLL (Eg. msvcr100.dll), while MinGW uses msvcrt.dll.
163 lead to a crash. 163 A FILE * from one runtime does not necessarily operate correctly in
164
165 There is also the situation where the Python library and GDB
166 are using two different versions of the C runtime library.
167 This is particularly visible on Windows, where few users would
168 build Python themselves (this is no trivial task on this platform),
169 and thus use binaries built by someone else instead. Python,
170 being built with VC, would use one version of the msvcr DLL
171 (Eg. msvcr100.dll), while MinGW uses msvcrt.dll. A FILE *
172 from one runtime does not necessarily operate correctly in
173 the other runtime. 164 the other runtime.
174 165
175 To work around this potential issue, we create the FILE object 166 To work around this potential issue, we create on Windows hosts the
176 using Python routines, thus making sure that it is compatible 167 FILE object using Python routines, thus making sure that it is
177 with the Python library. */ 168 compatible with the Python library. */
178 169
179 static void 170 static void
180 python_run_simple_file (const char *filename) 171 python_run_simple_file (FILE *file, const char *filename)
181 { 172 {
173 #ifndef _WIN32
174
175 PyRun_SimpleFile (file, filename);
176
177 #else /* _WIN32 */
178
182 char *full_path; 179 char *full_path;
183 PyObject *python_file; 180 PyObject *python_file;
184 struct cleanup *cleanup; 181 struct cleanup *cleanup;
185 182
186 /* Because we have a string for a filename, and are using Python to 183 /* Because we have a string for a filename, and are using Python to
187 open the file, we need to expand any tilde in the path first. */ 184 open the file, we need to expand any tilde in the path first. */
188 full_path = tilde_expand (filename); 185 full_path = tilde_expand (filename);
189 cleanup = make_cleanup (xfree, full_path); 186 cleanup = make_cleanup (xfree, full_path);
190 python_file = PyFile_FromString (full_path, "r"); 187 python_file = PyFile_FromString (full_path, "r");
191 if (! python_file) 188 if (! python_file)
192 { 189 {
193 do_cleanups (cleanup); 190 do_cleanups (cleanup);
194 gdbpy_print_stack (); 191 gdbpy_print_stack ();
195 error (_("Error while opening file: %s"), full_path); 192 error (_("Error while opening file: %s"), full_path);
196 } 193 }
197 194
198 make_cleanup_py_decref (python_file); 195 make_cleanup_py_decref (python_file);
199 PyRun_SimpleFile (PyFile_AsFile (python_file), filename); 196 PyRun_SimpleFile (PyFile_AsFile (python_file), filename);
200 do_cleanups (cleanup); 197 do_cleanups (cleanup);
198
199 #endif /* _WIN32 */
201 } 200 }
202 201
203 /* Given a command_line, return a command string suitable for passing 202 /* Given a command_line, return a command string suitable for passing
204 to Python. Lines in the string are separated by newlines. The 203 to Python. Lines in the string are separated by newlines. The
205 return value is allocated using xmalloc and the caller is 204 return value is allocated using xmalloc and the caller is
206 responsible for freeing it. */ 205 responsible for freeing it. */
207 206
208 static char * 207 static char *
209 compute_python_string (struct command_line *l) 208 compute_python_string (struct command_line *l)
210 { 209 {
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 } 493 }
495 494
496 return str_obj; 495 return str_obj;
497 } 496 }
498 497
499 /* A Python function which is a wrapper for decode_line_1. */ 498 /* A Python function which is a wrapper for decode_line_1. */
500 499
501 static PyObject * 500 static PyObject *
502 gdbpy_decode_line (PyObject *self, PyObject *args) 501 gdbpy_decode_line (PyObject *self, PyObject *args)
503 { 502 {

error: old chunk mismatch

OLDNEW
« no previous file with comments | « gdb/python/python.h ('k') | gdb/python/python-internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698