Oops.  The PyObject_Print() function was totally broken; the original code
was relying on PyString.tp_print but that no longer works.
Fortunately it's rarely called; only the gdb 'pyo' command seems affected.
diff --git a/Objects/object.c b/Objects/object.c
index 3eaf6fa..04d5f48 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -284,12 +284,28 @@
 			if (flags & Py_PRINT_RAW)
 				s = PyObject_Str(op);
 			else
-				s = PyObject_ReprStr8(op);
+				s = PyObject_Repr(op);
 			if (s == NULL)
 				ret = -1;
+                        else if (PyString_Check(s)) {
+				fwrite(PyString_AS_STRING(s), 1,
+				       PyString_GET_SIZE(s), fp);
+			}
+			else if (PyUnicode_Check(s)) {
+				PyObject *t;
+				t = _PyUnicode_AsDefaultEncodedString(s, NULL);
+				if (t == NULL)
+					ret = 0;
+				else {
+					fwrite(PyString_AS_STRING(t), 1,
+					       PyString_GET_SIZE(t), fp);
+				}
+			}
 			else {
-				ret = internal_print(s, fp, Py_PRINT_RAW,
-						     nesting+1);
+				PyErr_Format(PyExc_TypeError,
+					     "str() or repr() returned '%.100s'",
+					     s->ob_type->tp_name);
+				ret = -1;
 			}
 			Py_XDECREF(s);
 		}