diff options
28 files changed, 61 insertions, 502 deletions
@@ -5,6 +5,9 @@ * GDB now supports hardware watchpoints on FreeBSD/Aarch64. +* Remove support for building against Python 2, it is now only possible to + build GDB against Python 3. + * Python API ** New function gdb.format_address(ADDRESS, PROGSPACE, ARCHITECTURE), @@ -506,7 +506,7 @@ more obscure GDB `configure' options are not listed here. GDB scripting much more powerful than the restricted CLI scripting language. If your host does not have Python installed, you can find it on `http://www.python.org/download/'. The oldest - version of Python supported by GDB is 2.6. The optional argument + version of Python supported by GDB is 3.2. The optional argument PYTHON is used to find the Python headers and libraries. It can be either the name of a Python executable, or the name of the directory in which Python is installed. diff --git a/gdb/configure b/gdb/configure index b34baff..7ae8a2a 100755 --- a/gdb/configure +++ b/gdb/configure @@ -11262,81 +11262,12 @@ $as_echo_n "checking for python... " >&6; } int main () { -Py_Initialize (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_libpython=yes - found_usable_python=yes - PYTHON_CPPFLAGS=$new_CPPFLAGS - PYTHON_LIBS=$new_LIBS -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS=$save_CPPFLAGS - LIBS=$save_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5 -$as_echo "${found_usable_python}" >&6; } - - elif test "${have_python_config}" != failed; then - if test "${have_libpython}" = no; then - - - new_CPPFLAGS=${python_includes} - new_LIBS="-lpython2.7 ${python_libs}" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python" >&5 -$as_echo_n "checking for python... " >&6; } - save_CPPFLAGS=$CPPFLAGS - save_LIBS=$LIBS - CPPFLAGS="$CPPFLAGS $new_CPPFLAGS" - LIBS="$new_LIBS $LIBS" - found_usable_python=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "Python.h" -int -main () -{ -Py_Initialize (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_libpython=yes - found_usable_python=yes - PYTHON_CPPFLAGS=$new_CPPFLAGS - PYTHON_LIBS=$new_LIBS -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS=$save_CPPFLAGS - LIBS=$save_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5 -$as_echo "${found_usable_python}" >&6; } - fi - if test "${have_libpython}" = no; then + #if PY_MAJOR_VERSION != 3 + # error "We only support Python 3" + #endif + Py_Initialize (); - - new_CPPFLAGS=${python_includes} - new_LIBS="-lpython2.6 ${python_libs}" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python" >&5 -$as_echo_n "checking for python... " >&6; } - save_CPPFLAGS=$CPPFLAGS - save_LIBS=$LIBS - CPPFLAGS="$CPPFLAGS $new_CPPFLAGS" - LIBS="$new_LIBS $LIBS" - found_usable_python=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "Python.h" -int -main () -{ -Py_Initialize (); ; return 0; } @@ -11354,7 +11285,6 @@ rm -f core conftest.err conftest.$ac_objext \ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5 $as_echo "${found_usable_python}" >&6; } - fi fi if test "${have_libpython}" = no; then diff --git a/gdb/configure.ac b/gdb/configure.ac index bc8925d..310c765 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -717,7 +717,12 @@ AC_DEFUN([AC_TRY_LIBPYTHON], LIBS="$new_LIBS $LIBS" found_usable_python=no AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "Python.h"]], - [[Py_Initialize ();]])], + [[ + #if PY_MAJOR_VERSION != 3 + # error "We only support Python 3" + #endif + Py_Initialize (); + ]])], [have_libpython_var=yes found_usable_python=yes PYTHON_CPPFLAGS=$new_CPPFLAGS @@ -733,7 +738,6 @@ dnl no - Don't include python support. dnl yes - Include python support, error if it's missing. dnl If we find python in $PATH, use it to fetch configure options, dnl otherwise assume the compiler can find it with no help from us. -dnl Python 2.7 and 2.6 are tried in turn. dnl auto - Same as "yes", but if python is missing from the system, dnl fall back to "no". dnl /path/to/python/exec-prefix - @@ -742,7 +746,6 @@ dnl If /path/to/python/exec-prefix/bin/python exists, use it to find dnl the compilation parameters. Otherwise use dnl -I/path/to/python/exec-prefix/include, dnl -L/path/to/python/exec-prefix/lib. -dnl Python 2.7 and 2.6 are tried in turn. dnl NOTE: This case is historical. It is what was done for 7.0/7.1 dnl but is deprecated. dnl /path/to/python/executable - @@ -877,15 +880,6 @@ else if test "${have_python_config}" = yes; then AC_TRY_LIBPYTHON(have_libpython, ${python_includes}, ${python_libs}) - elif test "${have_python_config}" != failed; then - if test "${have_libpython}" = no; then - AC_TRY_LIBPYTHON(have_libpython, - ${python_includes}, "-lpython2.7 ${python_libs}") - fi - if test "${have_libpython}" = no; then - AC_TRY_LIBPYTHON(have_libpython, - ${python_includes}, "-lpython2.6 ${python_libs}") - fi fi if test "${have_libpython}" = no; then diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 50b0fc8..7c414b0 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -18,8 +18,6 @@ You can extend @value{GDBN} using the @uref{http://www.python.org/, Python programming language}. This feature is available only if @value{GDBN} was configured using @option{--with-python}. -@value{GDBN} can be built against either Python 2 or Python 3; which -one you have depends on this configure-time option. @cindex python directory Python scripts used by @value{GDBN} should be installed in diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py index 5f63bce..a52f6b4 100644 --- a/gdb/python/lib/gdb/__init__.py +++ b/gdb/python/lib/gdb/__init__.py @@ -22,7 +22,7 @@ from contextlib import contextmanager # Python 3 moved "reload" if sys.version_info >= (3, 4): from importlib import reload -elif sys.version_info[0] > 2: +else: from imp import reload from _gdb import * diff --git a/gdb/python/lib/gdb/command/explore.py b/gdb/python/lib/gdb/command/explore.py index ea49c38..c03bef3 100644 --- a/gdb/python/lib/gdb/command/explore.py +++ b/gdb/python/lib/gdb/command/explore.py @@ -19,10 +19,6 @@ import gdb import sys -if sys.version_info[0] > 2: - # Python 3 renamed raw_input to input - raw_input = input - class Explorer(object): """Internal class which invokes other explorers.""" @@ -172,7 +168,7 @@ class Explorer(object): so that the exploration session can shift back to the parent value. Useful when exploring values. """ - raw_input("\nPress enter to return to parent value: ") + input("\nPress enter to return to parent value: ") @staticmethod def return_to_enclosing_type(): @@ -187,7 +183,7 @@ class Explorer(object): so that the exploration session can shift back to the enclosing type. Useful when exploring types. """ - raw_input("\nPress enter to return to enclosing type: ") + input("\nPress enter to return to enclosing type: ") class ScalarExplorer(object): @@ -244,7 +240,7 @@ class PointerExplorer(object): "'%s' is a pointer to a value of type '%s'" % (expr, str(value.type.target())) ) - option = raw_input( + option = input( "Continue exploring it as a pointer to a single " "value [y/n]: " ) if option == "y": @@ -264,13 +260,13 @@ class PointerExplorer(object): ) return False - option = raw_input("Continue exploring it as a pointer to an " "array [y/n]: ") + option = input("Continue exploring it as a pointer to an " "array [y/n]: ") if option == "y": while True: index = 0 try: index = int( - raw_input( + input( "Enter the index of the element you " "want to explore in '%s': " % expr ) @@ -338,7 +334,7 @@ class ArrayExplorer(object): index = 0 try: index = int( - raw_input( + input( "Enter the index of the element you want to " "explore in '%s': " % expr ) @@ -354,7 +350,7 @@ class ArrayExplorer(object): str(element) except gdb.MemoryError: print("Cannot read value at index %d." % index) - raw_input("Press enter to continue... ") + input("Press enter to continue... ") return True Explorer.explore_expr( @@ -474,7 +470,7 @@ class CompoundExplorer(object): print("") if has_explorable_fields: - choice = raw_input("Enter the field number of choice: ") + choice = input("Enter the field number of choice: ") if choice in choice_to_compound_field_map: Explorer.explore_expr( choice_to_compound_field_map[choice][0], @@ -550,7 +546,7 @@ class CompoundExplorer(object): print("") if len(choice_to_compound_field_map) > 0: - choice = raw_input("Enter the field number of choice: ") + choice = input("Enter the field number of choice: ") if choice in choice_to_compound_field_map: if is_child: new_name = "%s '%s' of %s" % ( diff --git a/gdb/python/lib/gdb/printer/bound_registers.py b/gdb/python/lib/gdb/printer/bound_registers.py index f8ce9ea..7cb6e8f 100644 --- a/gdb/python/lib/gdb/printer/bound_registers.py +++ b/gdb/python/lib/gdb/printer/bound_registers.py @@ -18,11 +18,6 @@ import sys import gdb.printing -if sys.version_info[0] > 2: - # Python 3 removed basestring and long - basestring = str - long = int - class MpxBound128Printer: """Adds size field to a mpx __gdb_builtin_type_bound128 type.""" @@ -33,7 +28,7 @@ class MpxBound128Printer: def to_string(self): upper = self.val["ubound"] lower = self.val["lbound"] - size = (long)((upper) - (lower)) + size = upper - lower if size > -1: size = size + 1 result = "{lbound = %s, ubound = %s} : size %s" % (lower, upper, size) diff --git a/gdb/python/lib/gdb/printing.py b/gdb/python/lib/gdb/printing.py index 93d61f1..e208e88 100644 --- a/gdb/python/lib/gdb/printing.py +++ b/gdb/python/lib/gdb/printing.py @@ -21,11 +21,6 @@ import gdb.types import re import sys -if sys.version_info[0] > 2: - # Python 3 removed basestring and long - basestring = str - long = int - class PrettyPrinter(object): """A basic pretty-printer. @@ -132,7 +127,7 @@ def register_pretty_printer(obj, printer, replace=False): # Printers implemented as functions are old-style. In order to not risk # breaking anything we do not check __name__ here. if hasattr(printer, "name"): - if not isinstance(printer.name, basestring): + if not isinstance(printer.name, str): raise TypeError("printer name is not a string") # If printer provides a name, make sure it doesn't contain ";". # Semicolon is used by the info/enable/disable pretty-printer commands @@ -232,7 +227,7 @@ class _EnumInstance: def to_string(self): flag_list = [] - v = long(self.val) + v = int(self.val) any_found = False for (e_name, e_value) in self.enumerators: if v & e_value != 0: diff --git a/gdb/python/lib/gdb/xmethod.py b/gdb/python/lib/gdb/xmethod.py index 4c3a522..c69ea99 100644 --- a/gdb/python/lib/gdb/xmethod.py +++ b/gdb/python/lib/gdb/xmethod.py @@ -21,12 +21,6 @@ import re import sys -if sys.version_info[0] > 2: - # Python 3 removed basestring and long - basestring = str - long = int - - class XMethod(object): """Base class (or a template) for an xmethod description. @@ -223,7 +217,7 @@ def _validate_xmethod_matcher(matcher): return TypeError("Xmethod matcher is missing attribute: name") if not hasattr(matcher, "enabled"): return TypeError("Xmethod matcher is missing attribute: enabled") - if not isinstance(matcher.name, basestring): + if not isinstance(matcher.name, str): return TypeError("Attribute 'name' of xmethod matcher is not a " "string") if matcher.name.find(";") >= 0: return ValueError("Xmethod matcher name cannot contain ';' in it") diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c index e6dfb24..cc217df 100644 --- a/gdb/python/py-arch.c +++ b/gdb/python/py-arch.c @@ -148,12 +148,6 @@ archpy_disassemble (PyObject *self, PyObject *args, PyObject *kw) conversion process. */ if (PyLong_Check (end_obj)) end = PyLong_AsUnsignedLongLong (end_obj); -#if PY_MAJOR_VERSION == 2 - else if (PyInt_Check (end_obj)) - /* If the end_pc value is specified without a trailing 'L', end_obj will - be an integer and not a long integer. */ - end = PyInt_AsLong (end_obj); -#endif else { PyErr_SetString (PyExc_TypeError, diff --git a/gdb/python/py-evts.c b/gdb/python/py-evts.c index 457825c..23a5d75 100644 --- a/gdb/python/py-evts.c +++ b/gdb/python/py-evts.c @@ -20,7 +20,6 @@ #include "defs.h" #include "py-events.h" -#ifdef IS_PY3K static struct PyModuleDef EventModuleDef = { PyModuleDef_HEAD_INIT, @@ -33,7 +32,6 @@ static struct PyModuleDef EventModuleDef = NULL, NULL }; -#endif /* Initialize python events. */ @@ -53,11 +51,7 @@ add_new_registry (eventregistry_object **registryp, const char *name) int gdbpy_initialize_py_events (void) { -#ifdef IS_PY3K gdb_py_events.module = PyModule_Create (&EventModuleDef); -#else - gdb_py_events.module = Py_InitModule ("events", NULL); -#endif if (!gdb_py_events.module) return -1; diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c index e6eb1ec..0170fe6 100644 --- a/gdb/python/py-framefilter.c +++ b/gdb/python/py-framefilter.c @@ -920,11 +920,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags, function = function_to_free.get (); } - else if (PyLong_Check (py_func.get ()) -#if PY_MAJOR_VERSION == 2 - || PyInt_Check (py_func.get ()) -#endif - ) + else if (PyLong_Check (py_func.get ())) { CORE_ADDR addr; struct bound_minimal_symbol msymbol; diff --git a/gdb/python/py-membuf.c b/gdb/python/py-membuf.c index 74cc0fb..348dfa3 100644 --- a/gdb/python/py-membuf.c +++ b/gdb/python/py-membuf.c @@ -54,15 +54,7 @@ gdbpy_buffer_to_membuf (gdb::unique_xmalloc_ptr<gdb_byte> buffer, membuf_obj->addr = address; membuf_obj->length = length; - PyObject *result; -#ifdef IS_PY3K - result = PyMemoryView_FromObject ((PyObject *) membuf_obj.get ()); -#else - result = PyBuffer_FromReadWriteObject ((PyObject *) membuf_obj.get (), 0, - Py_END_OF_BUFFER); -#endif - - return result; + return PyMemoryView_FromObject ((PyObject *) membuf_obj.get ()); } /* Destructor for gdb.Membuf objects. */ @@ -88,8 +80,6 @@ which is %s bytes long."), pulongest (membuf_obj->length)); } -#ifdef IS_PY3K - static int get_buffer (PyObject *self, Py_buffer *buf, int flags) { @@ -107,54 +97,6 @@ get_buffer (PyObject *self, Py_buffer *buf, int flags) return ret; } -#else - -static Py_ssize_t -get_read_buffer (PyObject *self, Py_ssize_t segment, void **ptrptr) -{ - membuf_object *membuf_obj = (membuf_object *) self; - - if (segment) - { - PyErr_SetString (PyExc_SystemError, - _("The memory buffer supports only one segment.")); - return -1; - } - - *ptrptr = membuf_obj->buffer; - - return membuf_obj->length; -} - -static Py_ssize_t -get_write_buffer (PyObject *self, Py_ssize_t segment, void **ptrptr) -{ - return get_read_buffer (self, segment, ptrptr); -} - -static Py_ssize_t -get_seg_count (PyObject *self, Py_ssize_t *lenp) -{ - if (lenp) - *lenp = ((membuf_object *) self)->length; - - return 1; -} - -static Py_ssize_t -get_char_buffer (PyObject *self, Py_ssize_t segment, char **ptrptr) -{ - void *ptr = nullptr; - Py_ssize_t ret; - - ret = get_read_buffer (self, segment, &ptr); - *ptrptr = (char *) ptr; - - return ret; -} - -#endif /* IS_PY3K */ - /* General Python initialization callback. */ int @@ -168,24 +110,11 @@ gdbpy_initialize_membuf (void) (PyObject *) &membuf_object_type); } -#ifdef IS_PY3K - static PyBufferProcs buffer_procs = { get_buffer }; -#else - -static PyBufferProcs buffer_procs = { - get_read_buffer, - get_write_buffer, - get_seg_count, - get_char_buffer -}; - -#endif /* IS_PY3K */ - PyTypeObject membuf_object_type = { PyVarObject_HEAD_INIT (nullptr, 0) "gdb.Membuf", /*tp_name*/ diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c index 00f917e..6be771c 100644 --- a/gdb/python/py-param.c +++ b/gdb/python/py-param.c @@ -126,11 +126,7 @@ static PyObject * get_attr (PyObject *obj, PyObject *attr_name) { if (PyString_Check (attr_name) -#ifdef IS_PY3K && ! PyUnicode_CompareWithASCIIString (attr_name, "value")) -#else - && ! strcmp (PyString_AsString (attr_name), "value")) -#endif { parmpy_object *self = (parmpy_object *) obj; @@ -313,11 +309,7 @@ static int set_attr (PyObject *obj, PyObject *attr_name, PyObject *val) { if (PyString_Check (attr_name) -#ifdef IS_PY3K && ! PyUnicode_CompareWithASCIIString (attr_name, "value")) -#else - && ! strcmp (PyString_AsString (attr_name), "value")) -#endif { if (!val) { diff --git a/gdb/python/py-record-btrace.c b/gdb/python/py-record-btrace.c index 2a0e89d..bee17e0 100644 --- a/gdb/python/py-record-btrace.c +++ b/gdb/python/py-record-btrace.c @@ -28,16 +28,6 @@ #include "disasm.h" #include "gdbarch.h" -#if defined (IS_PY3K) - -#define BTPY_PYSLICE(x) (x) - -#else - -#define BTPY_PYSLICE(x) ((PySliceObject *) x) - -#endif - /* Python object for btrace record lists. */ struct btpy_list_object { @@ -295,12 +285,7 @@ recpy_bt_insn_data (PyObject *self, void *closure) if (object == NULL) return NULL; -#ifdef IS_PY3K return PyMemoryView_FromObject (object); -#else - return PyBuffer_FromObject (object, 0, Py_END_OF_BUFFER); -#endif - } /* Implementation of RecordInstruction.decoded [str] for btrace. @@ -500,7 +485,7 @@ btpy_list_slice (PyObject *self, PyObject *value) if (!PySlice_Check (value)) return PyErr_Format (PyExc_TypeError, _("Index must be int or slice.")); - if (0 != PySlice_GetIndicesEx (BTPY_PYSLICE (value), length, &start, &stop, + if (0 != PySlice_GetIndicesEx (value, length, &start, &stop, &step, &slicelength)) return NULL; diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 7be3f32..8838884 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -1610,9 +1610,6 @@ static PyNumberMethods type_object_as_number = { NULL, /* nb_add */ NULL, /* nb_subtract */ NULL, /* nb_multiply */ -#ifndef IS_PY3K - NULL, /* nb_divide */ -#endif NULL, /* nb_remainder */ NULL, /* nb_divmod */ NULL, /* nb_power */ @@ -1626,19 +1623,9 @@ static PyNumberMethods type_object_as_number = { NULL, /* nb_and */ NULL, /* nb_xor */ NULL, /* nb_or */ -#ifdef IS_PY3K NULL, /* nb_int */ NULL, /* reserved */ -#else - NULL, /* nb_coerce */ - NULL, /* nb_int */ - NULL, /* nb_long */ -#endif NULL, /* nb_float */ -#ifndef IS_PY3K - NULL, /* nb_oct */ - NULL /* nb_hex */ -#endif }; static PyMappingMethods typy_mapping = { diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c index 838853c..e7b147c 100644 --- a/gdb/python/py-utils.c +++ b/gdb/python/py-utils.c @@ -45,14 +45,10 @@ python_string_to_unicode (PyObject *obj) unicode_str = obj; Py_INCREF (obj); } -#ifndef IS_PY3K - else if (PyString_Check (obj)) - unicode_str = PyUnicode_FromEncodedObject (obj, host_charset (), NULL); -#endif else { PyErr_SetString (PyExc_TypeError, - _("Expected a string or unicode object.")); + _("Expected a string object.")); unicode_str = NULL; } @@ -166,11 +162,7 @@ host_string_to_python_string (const char *str) int gdbpy_is_string (PyObject *obj) { -#ifdef IS_PY3K return PyUnicode_Check (obj); -#else - return PyString_Check (obj) || PyUnicode_Check (obj); -#endif } /* Return the string representation of OBJ, i.e., str (obj). @@ -182,17 +174,7 @@ gdbpy_obj_to_string (PyObject *obj) gdbpy_ref<> str_obj (PyObject_Str (obj)); if (str_obj != NULL) - { - gdb::unique_xmalloc_ptr<char> msg; - -#ifdef IS_PY3K - msg = python_string_to_host_string (str_obj.get ()); -#else - msg.reset (xstrdup (PyString_AsString (str_obj.get ()))); -#endif - - return msg; - } + return python_string_to_host_string (str_obj.get ()); return NULL; } @@ -296,20 +278,9 @@ get_addr_from_python (PyObject *obj, CORE_ADDR *addr) gdbpy_ref<> gdb_py_object_from_longest (LONGEST l) { -#ifdef IS_PY3K if (sizeof (l) > sizeof (long)) return gdbpy_ref<> (PyLong_FromLongLong (l)); return gdbpy_ref<> (PyLong_FromLong (l)); -#else -#ifdef HAVE_LONG_LONG /* Defined by Python. */ - /* If we have 'long long', and the value overflows a 'long', use a - Python Long; otherwise use a Python Int. */ - if (sizeof (l) > sizeof (long) - && (l > PyInt_GetMax () || l < (- (LONGEST) PyInt_GetMax ()) - 1)) - return gdbpy_ref<> (PyLong_FromLongLong (l)); -#endif - return gdbpy_ref<> (PyInt_FromLong (l)); -#endif } /* Convert a ULONGEST to the appropriate Python object -- either an @@ -318,23 +289,9 @@ gdb_py_object_from_longest (LONGEST l) gdbpy_ref<> gdb_py_object_from_ulongest (ULONGEST l) { -#ifdef IS_PY3K if (sizeof (l) > sizeof (unsigned long)) return gdbpy_ref<> (PyLong_FromUnsignedLongLong (l)); return gdbpy_ref<> (PyLong_FromUnsignedLong (l)); -#else -#ifdef HAVE_LONG_LONG /* Defined by Python. */ - /* If we have 'long long', and the value overflows a 'long', use a - Python Long; otherwise use a Python Int. */ - if (sizeof (l) > sizeof (unsigned long) && l > PyInt_GetMax ()) - return gdbpy_ref<> (PyLong_FromUnsignedLongLong (l)); -#endif - - if (l > PyInt_GetMax ()) - return gdbpy_ref<> (PyLong_FromUnsignedLong (l)); - - return gdbpy_ref<> (PyInt_FromLong (l)); -#endif } /* Like PyInt_AsLong, but returns 0 on failure, 1 on success, and puts diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c index b546344..e779f49 100644 --- a/gdb/python/py-value.c +++ b/gdb/python/py-value.c @@ -1695,41 +1695,6 @@ valpy_richcompare (PyObject *self, PyObject *other, int op) Py_RETURN_FALSE; } -#ifndef IS_PY3K -/* Implements conversion to int. */ -static PyObject * -valpy_int (PyObject *self) -{ - struct value *value = ((value_object *) self)->value; - struct type *type = value_type (value); - LONGEST l = 0; - - try - { - if (is_floating_value (value)) - { - type = builtin_type_pylong; - value = value_cast (type, value); - } - - if (!is_integral_type (type) - && type->code () != TYPE_CODE_PTR) - error (_("Cannot convert value to int.")); - - l = value_as_long (value); - } - catch (const gdb_exception &except) - { - GDB_PY_HANDLE_EXCEPTION (except); - } - - if (type->is_unsigned ()) - return gdb_py_object_from_ulongest (l).release (); - else - return gdb_py_object_from_longest (l).release (); -} -#endif - /* Implements conversion to long. */ static PyObject * valpy_long (PyObject *self) @@ -1914,15 +1879,6 @@ convert_value_from_python (PyObject *obj) else value = value_from_longest (builtin_type_pylong, l); } -#if PY_MAJOR_VERSION == 2 - else if (PyInt_Check (obj)) - { - long l = PyInt_AsLong (obj); - - if (! PyErr_Occurred ()) - value = value_from_longest (builtin_type_pyint, l); - } -#endif else if (PyFloat_Check (obj)) { double d = PyFloat_AsDouble (obj); @@ -1948,14 +1904,8 @@ convert_value_from_python (PyObject *obj) value = value_copy (((value_object *) result)->value); } else -#ifdef IS_PY3K PyErr_Format (PyExc_TypeError, _("Could not convert Python object: %S."), obj); -#else - PyErr_Format (PyExc_TypeError, - _("Could not convert Python object: %s."), - PyString_AsString (PyObject_Str (obj))); -#endif } catch (const gdb_exception &except) { @@ -2176,9 +2126,6 @@ static PyNumberMethods value_object_as_number = { valpy_add, valpy_subtract, valpy_multiply, -#ifndef IS_PY3K - valpy_divide, -#endif valpy_remainder, NULL, /* nb_divmod */ valpy_power, /* nb_power */ @@ -2192,25 +2139,12 @@ static PyNumberMethods value_object_as_number = { valpy_and, /* nb_and */ valpy_xor, /* nb_xor */ valpy_or, /* nb_or */ -#ifdef IS_PY3K valpy_long, /* nb_int */ NULL, /* reserved */ -#else - NULL, /* nb_coerce */ - valpy_int, /* nb_int */ - valpy_long, /* nb_long */ -#endif valpy_float, /* nb_float */ -#ifndef IS_PY3K - NULL, /* nb_oct */ - NULL, /* nb_hex */ -#endif NULL, /* nb_inplace_add */ NULL, /* nb_inplace_subtract */ NULL, /* nb_inplace_multiply */ -#ifndef IS_PY3K - NULL, /* nb_inplace_divide */ -#endif NULL, /* nb_inplace_remainder */ NULL, /* nb_inplace_power */ NULL, /* nb_inplace_lshift */ diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 7d1e425..ccf440c 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -87,11 +87,6 @@ #include <frameobject.h> #include "py-ref.h" -#if PY_MAJOR_VERSION >= 3 -#define IS_PY3K 1 -#endif - -#ifdef IS_PY3K #define Py_TPFLAGS_CHECKTYPES 0 #define PyInt_Check PyLong_Check @@ -102,7 +97,6 @@ #define PyString_Decode PyUnicode_Decode #define PyString_FromFormat PyUnicode_FromFormat #define PyString_Check PyUnicode_Check -#endif /* If Python.h does not define WITH_THREAD, then the various GIL-related functions will not be defined. However, @@ -209,11 +203,7 @@ gdb_PySys_GetObject (const char *name) before Python 3.6. Hence, we wrap it in a function to avoid errors when compiled with -Werror. */ -#ifdef IS_PY3K # define GDB_PYSYS_SETPATH_CHAR wchar_t -#else -# define GDB_PYSYS_SETPATH_CHAR char -#endif static inline void gdb_PySys_SetPath (const GDB_PYSYS_SETPATH_CHAR *path) diff --git a/gdb/python/python.c b/gdb/python/python.c index 541227d..dc4edaa 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -317,11 +317,6 @@ eval_python_command (const char *command) if (v == NULL) return -1; -#ifndef IS_PY3K - if (Py_FlushLine ()) - PyErr_Clear (); -#endif - return 0; } @@ -1904,7 +1899,6 @@ finalize_python (void *ignore) restore_active_ext_lang (previous_active); } -#ifdef IS_PY3K static struct PyModuleDef python_GdbModuleDef = { PyModuleDef_HEAD_INIT, @@ -1927,7 +1921,6 @@ init__gdb_module (void) { return PyModule_Create (&python_GdbModuleDef); } -#endif /* Emit a gdb.GdbExitingEvent, return a negative value if there are any errors, otherwise, return 0. */ @@ -1974,7 +1967,6 @@ do_start_initialization () gdb::unique_xmalloc_ptr<char> progname (concat (ldirname (python_libdir.c_str ()).c_str (), SLASH_STRING, "bin", SLASH_STRING, "python", (char *) NULL)); -#ifdef IS_PY3K /* Python documentation indicates that the memory given to Py_SetProgramName cannot be freed. However, it seems that at least Python 3.7.4 Py_SetProgramName takes a copy of the @@ -2003,9 +1995,6 @@ do_start_initialization () /* Define _gdb as a built-in module. */ PyImport_AppendInittab ("_gdb", init__gdb_module); -#else - Py_SetProgramName (progname.release ()); -#endif #endif Py_Initialize (); @@ -2016,11 +2005,7 @@ do_start_initialization () PyEval_InitThreads (); #endif -#ifdef IS_PY3K gdb_module = PyImport_ImportModule ("_gdb"); -#else - gdb_module = Py_InitModule ("_gdb", python_GdbMethods); -#endif if (gdb_module == NULL) return false; @@ -2321,11 +2306,7 @@ do_initialize (const struct extension_language_defn *extlang) /* If sys.path is not defined yet, define it first. */ if (!(sys_path && PyList_Check (sys_path))) { -#ifdef IS_PY3K PySys_SetPath (L""); -#else - PySys_SetPath (""); -#endif sys_path = PySys_GetObject ("path"); } if (sys_path && PyList_Check (sys_path)) diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp index aa78a15..552f9b1 100644 --- a/gdb/testsuite/gdb.python/py-inferior.exp +++ b/gdb/testsuite/gdb.python/py-inferior.exp @@ -77,11 +77,7 @@ gdb_py_test_silent_cmd "python addr = gdb.selected_frame ().read_var ('str')" \ "read str address" 0 gdb_py_test_silent_cmd "python str = gdb.inferiors()\[0\].read_memory (addr, 5); print(str)" \ "read str contents" 1 -if { $gdb_py_is_py3k == 0 } { - gdb_py_test_silent_cmd "python a = 'a'" "" 0 -} else { - gdb_py_test_silent_cmd "python a = bytes('a', 'ascii')" "" 0 -} +gdb_py_test_silent_cmd "python a = bytes('a', 'ascii')" "" 0 gdb_py_test_silent_cmd "python str\[1\] = a" "change str" 0 gdb_py_test_silent_cmd "python gdb.inferiors()\[0\].write_memory (addr, str)" \ "write str" 1 diff --git a/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py index dfc2ebd..035478f 100644 --- a/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py +++ b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py @@ -17,27 +17,23 @@ import sys import gdb import gdb.types -# Following is for Python 3 compatibility... -if sys.version_info[0] > 2: - long = int - class cons_pp(object): def __init__(self, val): self._val = val def to_string(self): - if long(self._val) == 0: + if int(self._val) == 0: return "nil" - elif long(self._val["type"]) == 0: + elif int(self._val["type"]) == 0: return "( . )" else: return "%d" % self._val["atom"]["ival"] def children(self): - if long(self._val) == 0: + if int(self._val) == 0: return [] - elif long(self._val["type"]) == 0: + elif int(self._val["type"]) == 0: return [("atom", self._val["atom"])] else: return [ diff --git a/gdb/testsuite/gdb.python/py-record-btrace.exp b/gdb/testsuite/gdb.python/py-record-btrace.exp index 8204577..e9fdd06 100644 --- a/gdb/testsuite/gdb.python/py-record-btrace.exp +++ b/gdb/testsuite/gdb.python/py-record-btrace.exp @@ -85,11 +85,7 @@ with_test_prefix "instruction " { gdb_test "python print(i.number)" "1" gdb_test "python print(i.sal)" "symbol and line for .*" gdb_test "python print(i.pc)" "$decimal" - if { $gdb_py_is_py3k == 0 } { - gdb_test "python print(repr(i.data))" "<read-only buffer for $hex,.*>" - } else { - gdb_test "python print(repr(i.data))" "<memory at $hex>" - } + gdb_test "python print(repr(i.data))" "<memory at $hex>" gdb_test "python print(i.decoded)" ".*" gdb_test "python print(i.size)" "$decimal" gdb_test "python print(i.is_speculative)" "False" diff --git a/gdb/testsuite/gdb.python/py-send-packet.py b/gdb/testsuite/gdb.python/py-send-packet.py index 4966688..a6adc82 100644 --- a/gdb/testsuite/gdb.python/py-send-packet.py +++ b/gdb/testsuite/gdb.python/py-send-packet.py @@ -81,17 +81,9 @@ def run_send_packet_test(): # the 'maint packet' command so that the output from the two sources # can be compared. def bytes_to_string(byte_array): - - # Python 2/3 compatibility. We need a function that can give us - # the value of a single element in BYTE_ARRAY as an integer. - if sys.version_info[0] > 2: - value_of_single_byte = int - else: - value_of_single_byte = ord - res = "" for b in byte_array: - b = value_of_single_byte(b) + b = int(b) if b >= 32 and b <= 126: res = res + ("%c" % b) else: @@ -136,39 +128,23 @@ def run_set_global_var_test(): res = conn.send_packet(b"X%x,4:\x02\x02\x02\x02" % addr) assert isinstance(res, bytes) check_global_var(0x02020202) - if sys.version_info[0] > 2: - # On Python 3 this first attempt will not work as we're - # passing a Unicode string containing non-ascii characters. - saw_error = False - try: - res = conn.send_packet("X%x,4:\xff\xff\xff\xff" % addr) - except UnicodeError: - saw_error = True - except: - assert False - assert saw_error - check_global_var(0x02020202) - # Now we pass a bytes object, which will work. - res = conn.send_packet(b"X%x,4:\xff\xff\xff\xff" % addr) - check_global_var(0xFFFFFFFF) - else: - # On Python 2 we need to force the creation of a Unicode - # string, but, with that done, we expect to see the same error - # as on Python 3; the unicode string contains non-ascii - # characters. - saw_error = False - try: - res = conn.send_packet(unicode("X%x,4:\xff\xff\xff\xff") % addr) - except UnicodeError: - saw_error = True - except: - assert False - assert saw_error - check_global_var(0x02020202) - # Now we pass a plain string, which, on Python 2, is the same - # as a bytes object, this, we expect to work. + + # This first attempt will not work as we're passing a Unicode string + # containing non-ascii characters. + saw_error = False + try: res = conn.send_packet("X%x,4:\xff\xff\xff\xff" % addr) - check_global_var(0xFFFFFFFF) + except UnicodeError: + saw_error = True + except: + assert False + + assert saw_error + check_global_var(0x02020202) + # Now we pass a bytes object, which will work. + res = conn.send_packet(b"X%x,4:\xff\xff\xff\xff" % addr) + check_global_var(0xFFFFFFFF) + print("set global_var test passed") diff --git a/gdb/testsuite/gdb.python/py-shared.exp b/gdb/testsuite/gdb.python/py-shared.exp index 61c057a..2d33902 100644 --- a/gdb/testsuite/gdb.python/py-shared.exp +++ b/gdb/testsuite/gdb.python/py-shared.exp @@ -57,14 +57,11 @@ runto [gdb_get_line_number "Break to end."] # Test gdb.solib_name gdb_test "p &func1" "" "func1 address" gdb_py_test_silent_cmd "python func1 = gdb.history(0)" "Aquire func1 address" 1 -if { $gdb_py_is_py3k == 1 } { - gdb_py_test_silent_cmd "python long = int" "" 0 -} -gdb_test "python print (gdb.solib_name(long(func1)))" "py-shared-sl.sl" "test func1 solib location" +gdb_test "python print (gdb.solib_name(int(func1)))" "py-shared-sl.sl" "test func1 solib location" gdb_test "p &main" "" "main address" gdb_py_test_silent_cmd "python main = gdb.history(0)" "Aquire main address" 1 -gdb_test "python print (gdb.solib_name(long(main)))" "None" "test main solib location" +gdb_test "python print (gdb.solib_name(int(main)))" "None" "test main solib location" if {[is_lp64_target]} { gdb_test "python print (len(\[gdb.solib_name(0xffffffffffffffff)\]))" "1" diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp index 60039c9..5d77b0c 100644 --- a/gdb/testsuite/gdb.python/py-value.exp +++ b/gdb/testsuite/gdb.python/py-value.exp @@ -47,33 +47,19 @@ proc build_inferior {exefile lang} { proc test_value_creation {} { global gdb_prompt - global gdb_py_is_py3k gdb_py_test_silent_cmd "python i = gdb.Value (True)" "create boolean value" 1 gdb_py_test_silent_cmd "python i = gdb.Value (5)" "create integer value" 1 gdb_py_test_silent_cmd "python i = gdb.Value (3,None)" "create integer value, with None type" 1 - if { $gdb_py_is_py3k == 0 } { - gdb_py_test_silent_cmd "python i = gdb.Value (5L)" "create long value" 1 - } gdb_py_test_silent_cmd "python l = gdb.Value(0xffffffff12345678)" "create large unsigned 64-bit value" 1 - if { $gdb_py_is_py3k == 0 } { - gdb_test "python print long(l)" "18446744069720004216" "large unsigned 64-bit int conversion to python" - } else { - gdb_test "python print (int(l))" "18446744069720004216" "large unsigned 64-bit int conversion to python" - } + gdb_test "python print (int(l))" "18446744069720004216" "large unsigned 64-bit int conversion to python" gdb_py_test_silent_cmd "python f = gdb.Value (1.25)" "create double value" 1 gdb_py_test_silent_cmd "python a = gdb.Value ('string test')" "create 8-bit string value" 1 gdb_test "python print (a)" "\"string test\"" "print 8-bit string" gdb_test "python print (a.__class__)" "<(type|class) 'gdb.Value'>" "verify type of 8-bit string" - if { $gdb_py_is_py3k == 0 } { - gdb_py_test_silent_cmd "python a = gdb.Value (u'unicode test')" "create unicode value" 1 - gdb_test "python print (a)" "\"unicode test\"" "print Unicode string" - gdb_test "python print (a.__class__)" "<(type|class) 'gdb.Value'>" "verify type of unicode string" - } - # Test address attribute is None in a non-addressable value gdb_test "python print ('result = %s' % i.address)" "= None" "test address attribute in non-addressable value" } @@ -92,7 +78,6 @@ proc test_value_reinit {} { proc test_value_numeric_ops {} { global gdb_prompt - global gdb_py_is_py3k gdb_py_test_silent_cmd "python i = gdb.Value (5)" "create first integer value" 0 gdb_py_test_silent_cmd "python j = gdb.Value (2)" "create second integer value" 0 @@ -144,9 +129,6 @@ proc test_value_numeric_ops {} { gdb_test_no_output "python b = gdb.history (0)" "" gdb_test "python print(int(b))" "5" "convert pointer to int" - if {!$gdb_py_is_py3k} { - gdb_test "python print(long(b))" "5" "convert pointer to long" - } gdb_test "python print ('result = ' + str(a+5))" " = 0x7( <.*>)?" "add pointer value with python integer" gdb_test "python print ('result = ' + str(b-2))" " = 0x3( <.*>)?" "subtract python integer from pointer value" @@ -156,17 +138,11 @@ proc test_value_numeric_ops {} { "result = r" "use value as string index" gdb_test "python print ('result = ' + str((1,2,3)\[gdb.Value(0)\]))" \ "result = 1" "use value as tuple index" - if {!$gdb_py_is_py3k} { - gdb_test "python print ('result = ' + str(\[1,2,3\]\[gdb.Value(0)\]))" \ - "result = 1" "use value as array index" - } + gdb_test "python print ('result = ' + str(\[1,2,3\]\[gdb.Value(0)\]))" \ + "result = 1" "use value as array index" gdb_test "python print('%x' % int(gdb.parse_and_eval('-1ull')))" \ "f+" "int conversion respect type sign" - if {!$gdb_py_is_py3k} { - gdb_test "python print('%x' % long(gdb.parse_and_eval('-1ull')))" \ - "f+" "long conversion respect type sign" - } # Test some invalid operations. @@ -242,7 +218,6 @@ proc test_value_compare {} { proc test_value_in_inferior {} { global gdb_prompt global testfile - global gdb_py_is_py3k gdb_breakpoint [gdb_get_line_number "break to inspect struct and union"] gdb_continue_to_breakpoint "break to inspect struct and union" @@ -253,9 +228,6 @@ proc test_value_in_inferior {} { gdb_py_test_silent_cmd "python s = gdb.history (0)" "get value s from history" 1 gdb_test "python print ('result = ' + str(s\['a'\]))" " = 3" "access element inside struct using 8-bit string name" - if { $gdb_py_is_py3k == 0 } { - gdb_test "python print ('result = ' + str(s\[u'a'\]))" " = 3" "access element inside struct using unicode name" - } # Test dereferencing the argv pointer @@ -533,13 +505,8 @@ proc test_value_hash {} { } proc test_float_conversion {} { - global gdb_py_is_py3k gdb_test "python print(int(gdb.Value(0)))" "0" gdb_test "python print(int(gdb.Value(2.5)))" "2" - if {!$gdb_py_is_py3k} { - gdb_test "python print(long(gdb.Value(0)))" "0" - gdb_test "python print(long(gdb.Value(2.5)))" "2" - } gdb_test "python print(float(gdb.Value(2.5)))" "2\\.5" gdb_test "python print(float(gdb.Value(0)))" "0\\.0" } @@ -565,7 +532,6 @@ proc prepare_type_and_buffer {} { proc test_value_from_buffer {} { global gdb_prompt - global gdb_py_is_py3k prepare_type_and_buffer gdb_test "python v=gdb.Value(b,tp); print(v)" "1" \ diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index d8015fb..0b242b6 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -2360,8 +2360,6 @@ proc skip_rust_tests {} { # PROMPT_REGEXP is the expected prompt. proc skip_python_tests_prompt { prompt_regexp } { - global gdb_py_is_py3k - gdb_test_multiple "python print ('test')" "verify python support" \ -prompt "$prompt_regexp" { -re "not supported.*$prompt_regexp" { @@ -2371,16 +2369,6 @@ proc skip_python_tests_prompt { prompt_regexp } { -re "$prompt_regexp" {} } - gdb_test_multiple "python print (sys.version_info\[0\])" "check if python 3" \ - -prompt "$prompt_regexp" { - -re "3.*$prompt_regexp" { - set gdb_py_is_py3k 1 - } - -re ".*$prompt_regexp" { - set gdb_py_is_py3k 0 - } - } - return 0 } |