Remove Python 2.4 and 2.5 support

This removes all the remainings spots I could find that work around
issues in Python 2.4 and 2.5.

I don't have a good way to test that Python 2.6 still works.

Tested by the buildbot.

gdb/ChangeLog
2019-02-27  Tom Tromey  <tromey@adacore.com>

	* config.in, configure: Rebuild.
	* configure.ac (HAVE_LIBPYTHON2_4, HAVE_LIBPYTHON2_5): Never
	define.
	* python/py-value.c: Remove Python 2.4 workaround.
	* python/py-utils.c (gdb_pymodule_addobject): Remove Python 2.4
	workaround.
	* python/py-type.c (convert_field, gdbpy_initialize_types): Remove
	Python 2.4 workaround.
	* python/python-internal.h: Remove Python 2.4 comment.
	(Py_ssize_t): Don't define.
	(PyVarObject_HEAD_INIT, Py_TYPE): Don't define.
	(gdb_Py_DECREF): Remove Python 2.4 workaround.
	(gdb_PyObject_GetAttrString, PyObject_GetAttrString): Remove.
	(gdb_PyObject_HasAttrString, PyObject_HasAttrString): Remove.
	* python/python.c (do_start_initialization): Remove Python 2.4
	workaround.
	* python/py-prettyprint.c (class dummy_python_frame): Remove.
	(print_children): Remove Python 2.4 workaround.
	* python/py-inferior.c (buffer_procs): Remove Python 2.4
	workaround.
	(CHARBUFFERPROC_NAME): Remove.
	* python/py-breakpoint.c (gdbpy_initialize_breakpoints): Remove
	Python 2.4 workaround.

gdb/testsuite/ChangeLog
2019-02-27  Tom Tromey  <tromey@adacore.com>

	* lib/gdb.exp (skip_python_tests_prompt): Don't check for Python
	2.4.
	* gdb.python/py-finish-breakpoint.exp: Remove Python 2.4
	workaround.

gdb/ChangeLog
2019-02-27  Tom Tromey  <tromey@adacore.com>

	* config.in, configure: Rebuild.
	* configure.ac (HAVE_LIBPYTHON2_4, HAVE_LIBPYTHON2_5): Never
	define.
	* python/py-value.c: Remove Python 2.4 workaround.
	* python/py-utils.c (gdb_pymodule_addobject): Remove Python 2.4
	workaround.
	* python/py-type.c (convert_field, gdbpy_initialize_types): Remove
	Python 2.4 workaround.
	* python/python-internal.h: Remove Python 2.4 comment.
	(Py_ssize_t): Don't define.
	(PyVarObject_HEAD_INIT, Py_TYPE): Don't define.
	(gdb_Py_DECREF): Remove Python 2.4 workaround.
	(gdb_PyObject_GetAttrString, PyObject_GetAttrString): Remove.
	(gdb_PyObject_HasAttrString, PyObject_HasAttrString): Remove.
	* python/python.c (do_start_initialization): Remove Python 2.4
	workaround.
	* python/py-prettyprint.c (class dummy_python_frame): Remove.
	(print_children): Remove Python 2.4 workaround.
	* python/py-inferior.c (buffer_procs): Remove Python 2.4
	workaround.
	(CHARBUFFERPROC_NAME): Remove.
	* python/py-breakpoint.c (gdbpy_initialize_breakpoints): Remove
	Python 2.4 workaround.
This commit is contained in:
Tom Tromey 2019-02-26 11:58:47 -07:00
parent 2c3fc25dd1
commit 6c28e44a35
15 changed files with 46 additions and 303 deletions

View file

@ -1138,9 +1138,7 @@ gdbpy_initialize_breakpoints (void)
/* Add breakpoint types constants. */
for (i = 0; pybp_codes[i].name; ++i)
{
if (PyModule_AddIntConstant (gdb_module,
/* Cast needed for Python 2.4. */
(char *) pybp_codes[i].name,
if (PyModule_AddIntConstant (gdb_module, pybp_codes[i].name,
pybp_codes[i].code) < 0)
return -1;
}
@ -1148,9 +1146,7 @@ gdbpy_initialize_breakpoints (void)
/* Add watchpoint types constants. */
for (i = 0; pybp_watch_types[i].name; ++i)
{
if (PyModule_AddIntConstant (gdb_module,
/* Cast needed for Python 2.4. */
(char *) pybp_watch_types[i].name,
if (PyModule_AddIntConstant (gdb_module, pybp_watch_types[i].name,
pybp_watch_types[i].code) < 0)
return -1;
}

View file

@ -1002,20 +1002,11 @@ static PyBufferProcs buffer_procs =
#else
/* Python doesn't provide a decent way to get compatibility here. */
#if HAVE_LIBPYTHON2_4
#define CHARBUFFERPROC_NAME getcharbufferproc
#else
#define CHARBUFFERPROC_NAME charbufferproc
#endif
static PyBufferProcs buffer_procs = {
get_read_buffer,
get_write_buffer,
get_seg_count,
/* The cast here works around a difference between Python 2.4 and
Python 2.5. */
(CHARBUFFERPROC_NAME) get_char_buffer
get_char_buffer
};
#endif /* IS_PY3K */

View file

@ -350,88 +350,6 @@ print_string_repr (PyObject *printer, const char *hint,
return result;
}
#ifndef IS_PY3K
/* Create a dummy PyFrameObject, needed to work around
a Python-2.4 bug with generators. */
class dummy_python_frame
{
public:
dummy_python_frame ();
~dummy_python_frame ()
{
if (m_valid)
m_tstate->frame = m_saved_frame;
}
bool failed () const
{
return !m_valid;
}
private:
bool m_valid;
PyFrameObject *m_saved_frame;
gdbpy_ref<> m_frame;
PyThreadState *m_tstate;
};
dummy_python_frame::dummy_python_frame ()
: m_valid (false),
m_saved_frame (NULL),
m_tstate (NULL)
{
PyCodeObject *code;
PyFrameObject *frame;
gdbpy_ref<> empty_string (PyString_FromString (""));
if (empty_string == NULL)
return;
gdbpy_ref<> null_tuple (PyTuple_New (0));
if (null_tuple == NULL)
return;
code = PyCode_New (0, /* argcount */
0, /* locals */
0, /* stacksize */
0, /* flags */
empty_string.get (), /* code */
null_tuple.get (), /* consts */
null_tuple.get (), /* names */
null_tuple.get (), /* varnames */
#if PYTHON_API_VERSION >= 1010
null_tuple.get (), /* freevars */
null_tuple.get (), /* cellvars */
#endif
empty_string.get (), /* filename */
empty_string.get (), /* name */
1, /* firstlineno */
empty_string.get () /* lnotab */
);
if (code == NULL)
return;
gdbpy_ref<> code_holder ((PyObject *) code);
gdbpy_ref<> globals (PyDict_New ());
if (globals == NULL)
return;
m_tstate = PyThreadState_GET ();
frame = PyFrame_New (m_tstate, code, globals.get (), NULL);
if (frame == NULL)
return;
m_frame.reset ((PyObject *) frame);
m_tstate->frame = frame;
m_saved_frame = frame->f_back;
m_valid = true;
}
#endif
/* Helper for gdbpy_apply_val_pretty_printer that formats children of the
printer, if any exist. If is_py_none is true, then nothing has
been printed by to_string, and format output accordingly. */
@ -480,18 +398,6 @@ print_children (PyObject *printer, const char *hint,
pretty = options->prettyformat_structs;
}
/* Manufacture a dummy Python frame to work around Python 2.4 bug,
where it insists on having a non-NULL tstate->frame when
a generator is called. */
#ifndef IS_PY3K
dummy_python_frame frame;
if (frame.failed ())
{
gdbpy_print_stack ();
return;
}
#endif
done_flag = 0;
for (i = 0; i < options->print_max; ++i)
{

View file

@ -198,9 +198,7 @@ convert_field (struct type *type, int field)
if (arg == NULL)
return NULL;
/* At least python-2.4 had the second parameter non-const. */
if (PyObject_SetAttrString (result.get (), (char *) attrstring,
arg.get ()) < 0)
if (PyObject_SetAttrString (result.get (), attrstring, arg.get ()) < 0)
return NULL;
}
@ -1408,9 +1406,7 @@ gdbpy_initialize_types (void)
for (i = 0; pyty_codes[i].name; ++i)
{
if (PyModule_AddIntConstant (gdb_module,
/* Cast needed for Python 2.4. */
(char *) pyty_codes[i].name,
if (PyModule_AddIntConstant (gdb_module, pyty_codes[i].name,
pyty_codes[i].code) < 0)
return -1;
}

View file

@ -382,8 +382,7 @@ gdb_pymodule_addobject (PyObject *module, const char *name, PyObject *object)
int result;
Py_INCREF (object);
/* Python 2.4 did not have a 'const' here. */
result = PyModule_AddObject (module, (char *) name, object);
result = PyModule_AddObject (module, name, object);
if (result < 0)
Py_DECREF (object);
return result;

View file

@ -2001,10 +2001,7 @@ static PyNumberMethods value_object_as_number = {
valpy_divide, /* nb_true_divide */
NULL, /* nb_inplace_floor_divide */
NULL, /* nb_inplace_true_divide */
#ifndef HAVE_LIBPYTHON2_4
/* This was added in Python 2.5. */
valpy_long, /* nb_index */
#endif /* HAVE_LIBPYTHON2_4 */
};
static PyMappingMethods value_object_as_mapping = {

View file

@ -51,8 +51,6 @@
#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
#endif
/* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t
needed by pyport.h. */
/* /usr/include/features.h on linux systems will define _POSIX_C_SOURCE
if it sees _GNU_SOURCE (which config.h will define).
pyconfig.h defines _POSIX_C_SOURCE to a different value than
@ -109,26 +107,6 @@
#define PyString_Check PyUnicode_Check
#endif
#if HAVE_LIBPYTHON2_4
/* Py_ssize_t is not defined until 2.5.
Logical type for Py_ssize_t is Py_intptr_t, but that fails in 64-bit
compilation due to several apparent mistakes in python2.4 API, so we
use 'int' instead. */
typedef int Py_ssize_t;
#endif
#ifndef PyVarObject_HEAD_INIT
/* Python 2.4 does not define PyVarObject_HEAD_INIT. */
#define PyVarObject_HEAD_INIT(type, size) \
PyObject_HEAD_INIT(type) size,
#endif
#ifndef Py_TYPE
/* Python 2.4 does not define Py_TYPE. */
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
#endif
/* If Python.h does not define WITH_THREAD, then the various
GIL-related functions will not be defined. However,
PyGILState_STATE will be. */
@ -183,41 +161,12 @@ typedef long Py_hash_t;
static inline void
gdb_Py_DECREF (void *op) /* ARI: editCase function */
{
/* ... and Python 2.4 didn't cast OP to PyObject pointer on the
'(op)->ob_refcnt' references within the macro. Cast it ourselves
too. */
Py_DECREF ((PyObject *) op);
Py_DECREF (op);
}
#undef Py_DECREF
#define Py_DECREF(op) gdb_Py_DECREF (op)
/* The second argument to PyObject_GetAttrString was missing the 'const'
qualifier in Python-2.4. Hence, we wrap it in a function to avoid errors
when compiled with -Werror. */
static inline PyObject *
gdb_PyObject_GetAttrString (PyObject *obj,
const char *attr) /* ARI: editCase function */
{
return PyObject_GetAttrString (obj, (char *) attr);
}
#define PyObject_GetAttrString(obj, attr) gdb_PyObject_GetAttrString (obj, attr)
/* The second argument to PyObject_HasAttrString was also missing the 'const'
qualifier in Python-2.4. Hence, we wrap it also in a function to avoid
errors when compiled with -Werror. */
static inline int
gdb_PyObject_HasAttrString (PyObject *obj,
const char *attr) /* ARI: editCase function */
{
return PyObject_HasAttrString (obj, (char *) attr);
}
#define PyObject_HasAttrString(obj, attr) gdb_PyObject_HasAttrString (obj, attr)
/* PyObject_CallMethod's 'method' and 'format' parameters were missing
the 'const' qualifier before Python 3.4. Hence, we wrap the
function in our own version to avoid errors with string literals.

View file

@ -1646,12 +1646,10 @@ do_start_initialization ()
if (gdb_module == NULL)
return false;
/* The casts to (char*) are for python 2.4. */
if (PyModule_AddStringConstant (gdb_module, "VERSION", (char*) version) < 0
|| PyModule_AddStringConstant (gdb_module, "HOST_CONFIG",
(char*) host_name) < 0
if (PyModule_AddStringConstant (gdb_module, "VERSION", version) < 0
|| PyModule_AddStringConstant (gdb_module, "HOST_CONFIG", host_name) < 0
|| PyModule_AddStringConstant (gdb_module, "TARGET_CONFIG",
(char*) target_name) < 0)
target_name) < 0)
return false;
/* Add stream constants. */