perf python: Remove python 2 scripting support

Python2 was deprecated 4 years ago, remove support and workarounds.

Signed-off-by: Ian Rogers <irogers@google.com>
Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Colin Ian King <colin.i.king@gmail.com>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Veronika Molnarova <vmolnaro@redhat.com>
Cc: Weilin Wang <weilin.wang@intel.com>
Link: https://lore.kernel.org/r/20241119011644.971342-2-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Ian Rogers 2024-11-18 17:16:23 -08:00 committed by Arnaldo Carvalho de Melo
parent 4c7f9ee2eb
commit e7e9943c87
3 changed files with 15 additions and 139 deletions

View file

@ -24,16 +24,6 @@
#include "../../../util/srcline.h" #include "../../../util/srcline.h"
#include "../../../util/srccode.h" #include "../../../util/srccode.h"
#if PY_MAJOR_VERSION < 3
#define _PyCapsule_GetPointer(arg1, arg2) \
PyCObject_AsVoidPtr(arg1)
#define _PyBytes_FromStringAndSize(arg1, arg2) \
PyString_FromStringAndSize((arg1), (arg2))
#define _PyUnicode_AsUTF8(arg) \
PyString_AsString(arg)
PyMODINIT_FUNC initperf_trace_context(void);
#else
#define _PyCapsule_GetPointer(arg1, arg2) \ #define _PyCapsule_GetPointer(arg1, arg2) \
PyCapsule_GetPointer((arg1), (arg2)) PyCapsule_GetPointer((arg1), (arg2))
#define _PyBytes_FromStringAndSize(arg1, arg2) \ #define _PyBytes_FromStringAndSize(arg1, arg2) \
@ -42,7 +32,6 @@ PyMODINIT_FUNC initperf_trace_context(void);
PyUnicode_AsUTF8(arg) PyUnicode_AsUTF8(arg)
PyMODINIT_FUNC PyInit_perf_trace_context(void); PyMODINIT_FUNC PyInit_perf_trace_context(void);
#endif
static struct scripting_context *get_args(PyObject *args, const char *name, PyObject **arg2) static struct scripting_context *get_args(PyObject *args, const char *name, PyObject **arg2)
{ {
@ -213,12 +202,6 @@ static PyMethodDef ContextMethods[] = {
{ NULL, NULL, 0, NULL} { NULL, NULL, 0, NULL}
}; };
#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initperf_trace_context(void)
{
(void) Py_InitModule("perf_trace_context", ContextMethods);
}
#else
PyMODINIT_FUNC PyInit_perf_trace_context(void) PyMODINIT_FUNC PyInit_perf_trace_context(void)
{ {
static struct PyModuleDef moduledef = { static struct PyModuleDef moduledef = {
@ -240,4 +223,3 @@ PyMODINIT_FUNC PyInit_perf_trace_context(void)
return mod; return mod;
} }
#endif

View file

@ -26,40 +26,14 @@
#include <internal/lib.h> #include <internal/lib.h>
#include "../builtin.h" #include "../builtin.h"
#if PY_MAJOR_VERSION < 3
#define _PyUnicode_FromString(arg) \
PyString_FromString(arg)
#define _PyUnicode_AsString(arg) \
PyString_AsString(arg)
#define _PyUnicode_FromFormat(...) \
PyString_FromFormat(__VA_ARGS__)
#define _PyLong_FromLong(arg) \
PyInt_FromLong(arg)
#else
#define _PyUnicode_FromString(arg) \ #define _PyUnicode_FromString(arg) \
PyUnicode_FromString(arg) PyUnicode_FromString(arg)
#define _PyUnicode_FromFormat(...) \ #define _PyUnicode_FromFormat(...) \
PyUnicode_FromFormat(__VA_ARGS__) PyUnicode_FromFormat(__VA_ARGS__)
#define _PyLong_FromLong(arg) \ #define _PyLong_FromLong(arg) \
PyLong_FromLong(arg) PyLong_FromLong(arg)
#endif
#ifndef Py_TYPE
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
#endif
/* Define PyVarObject_HEAD_INIT for python 2.5 */
#ifndef PyVarObject_HEAD_INIT
# define PyVarObject_HEAD_INIT(type, size) PyObject_HEAD_INIT(type) size,
#endif
#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initperf(void);
#else
PyMODINIT_FUNC PyInit_perf(void); PyMODINIT_FUNC PyInit_perf(void);
#endif
#define member_def(type, member, ptype, help) \ #define member_def(type, member, ptype, help) \
{ #member, ptype, \ { #member, ptype, \
@ -117,7 +91,7 @@ static PyObject *pyrf_mmap_event__repr(struct pyrf_event *pevent)
pevent->event.mmap.pgoff, pevent->event.mmap.filename) < 0) { pevent->event.mmap.pgoff, pevent->event.mmap.filename) < 0) {
ret = PyErr_NoMemory(); ret = PyErr_NoMemory();
} else { } else {
ret = _PyUnicode_FromString(s); ret = PyUnicode_FromString(s);
free(s); free(s);
} }
return ret; return ret;
@ -148,7 +122,7 @@ static PyMemberDef pyrf_task_event__members[] = {
static PyObject *pyrf_task_event__repr(struct pyrf_event *pevent) static PyObject *pyrf_task_event__repr(struct pyrf_event *pevent)
{ {
return _PyUnicode_FromFormat("{ type: %s, pid: %u, ppid: %u, tid: %u, " return PyUnicode_FromFormat("{ type: %s, pid: %u, ppid: %u, tid: %u, "
"ptid: %u, time: %" PRI_lu64 "}", "ptid: %u, time: %" PRI_lu64 "}",
pevent->event.header.type == PERF_RECORD_FORK ? "fork" : "exit", pevent->event.header.type == PERF_RECORD_FORK ? "fork" : "exit",
pevent->event.fork.pid, pevent->event.fork.pid,
@ -181,7 +155,7 @@ static PyMemberDef pyrf_comm_event__members[] = {
static PyObject *pyrf_comm_event__repr(struct pyrf_event *pevent) static PyObject *pyrf_comm_event__repr(struct pyrf_event *pevent)
{ {
return _PyUnicode_FromFormat("{ type: comm, pid: %u, tid: %u, comm: %s }", return PyUnicode_FromFormat("{ type: comm, pid: %u, tid: %u, comm: %s }",
pevent->event.comm.pid, pevent->event.comm.pid,
pevent->event.comm.tid, pevent->event.comm.tid,
pevent->event.comm.comm); pevent->event.comm.comm);
@ -212,7 +186,7 @@ static PyObject *pyrf_throttle_event__repr(struct pyrf_event *pevent)
{ {
struct perf_record_throttle *te = (struct perf_record_throttle *)(&pevent->event.header + 1); struct perf_record_throttle *te = (struct perf_record_throttle *)(&pevent->event.header + 1);
return _PyUnicode_FromFormat("{ type: %sthrottle, time: %" PRI_lu64 ", id: %" PRI_lu64 return PyUnicode_FromFormat("{ type: %sthrottle, time: %" PRI_lu64 ", id: %" PRI_lu64
", stream_id: %" PRI_lu64 " }", ", stream_id: %" PRI_lu64 " }",
pevent->event.header.type == PERF_RECORD_THROTTLE ? "" : "un", pevent->event.header.type == PERF_RECORD_THROTTLE ? "" : "un",
te->time, te->id, te->stream_id); te->time, te->id, te->stream_id);
@ -247,7 +221,7 @@ static PyObject *pyrf_lost_event__repr(struct pyrf_event *pevent)
pevent->event.lost.id, pevent->event.lost.lost) < 0) { pevent->event.lost.id, pevent->event.lost.lost) < 0) {
ret = PyErr_NoMemory(); ret = PyErr_NoMemory();
} else { } else {
ret = _PyUnicode_FromString(s); ret = PyUnicode_FromString(s);
free(s); free(s);
} }
return ret; return ret;
@ -274,7 +248,7 @@ static PyMemberDef pyrf_read_event__members[] = {
static PyObject *pyrf_read_event__repr(struct pyrf_event *pevent) static PyObject *pyrf_read_event__repr(struct pyrf_event *pevent)
{ {
return _PyUnicode_FromFormat("{ type: read, pid: %u, tid: %u }", return PyUnicode_FromFormat("{ type: read, pid: %u, tid: %u }",
pevent->event.read.pid, pevent->event.read.pid,
pevent->event.read.tid); pevent->event.read.tid);
/* /*
@ -309,7 +283,7 @@ static PyObject *pyrf_sample_event__repr(struct pyrf_event *pevent)
if (asprintf(&s, "{ type: sample }") < 0) { if (asprintf(&s, "{ type: sample }") < 0) {
ret = PyErr_NoMemory(); ret = PyErr_NoMemory();
} else { } else {
ret = _PyUnicode_FromString(s); ret = PyUnicode_FromString(s);
free(s); free(s);
} }
return ret; return ret;
@ -343,7 +317,7 @@ tracepoint_field(struct pyrf_event *pe, struct tep_format_field *field)
} }
if (field->flags & TEP_FIELD_IS_STRING && if (field->flags & TEP_FIELD_IS_STRING &&
is_printable_array(data + offset, len)) { is_printable_array(data + offset, len)) {
ret = _PyUnicode_FromString((char *)data + offset); ret = PyUnicode_FromString((char *)data + offset);
} else { } else {
ret = PyByteArray_FromStringAndSize((const char *) data + offset, len); ret = PyByteArray_FromStringAndSize((const char *) data + offset, len);
field->flags &= ~TEP_FIELD_IS_STRING; field->flags &= ~TEP_FIELD_IS_STRING;
@ -432,7 +406,7 @@ static PyObject *pyrf_context_switch_event__repr(struct pyrf_event *pevent)
!!(pevent->event.header.misc & PERF_RECORD_MISC_SWITCH_OUT)) < 0) { !!(pevent->event.header.misc & PERF_RECORD_MISC_SWITCH_OUT)) < 0) {
ret = PyErr_NoMemory(); ret = PyErr_NoMemory();
} else { } else {
ret = _PyUnicode_FromString(s); ret = PyUnicode_FromString(s);
free(s); free(s);
} }
return ret; return ret;
@ -918,17 +892,8 @@ static PyObject *pyrf_evlist__get_pollfd(struct pyrf_evlist *pevlist,
for (i = 0; i < evlist->core.pollfd.nr; ++i) { for (i = 0; i < evlist->core.pollfd.nr; ++i) {
PyObject *file; PyObject *file;
#if PY_MAJOR_VERSION < 3
FILE *fp = fdopen(evlist->core.pollfd.entries[i].fd, "r");
if (fp == NULL)
goto free_list;
file = PyFile_FromFile(fp, "perf", "r", NULL);
#else
file = PyFile_FromFd(evlist->core.pollfd.entries[i].fd, "perf", "r", -1, file = PyFile_FromFd(evlist->core.pollfd.entries[i].fd, "perf", "r", -1,
NULL, NULL, NULL, 0); NULL, NULL, NULL, 0);
#endif
if (file == NULL) if (file == NULL)
goto free_list; goto free_list;
@ -1234,9 +1199,9 @@ static PyObject *pyrf__tracepoint(struct pyrf_evsel *pevsel,
tp_format = trace_event__tp_format(sys, name); tp_format = trace_event__tp_format(sys, name);
if (IS_ERR(tp_format)) if (IS_ERR(tp_format))
return _PyLong_FromLong(-1); return PyLong_FromLong(-1);
return _PyLong_FromLong(tp_format->id); return PyLong_FromLong(tp_format->id);
#endif // HAVE_LIBTRACEEVENT #endif // HAVE_LIBTRACEEVENT
} }
@ -1250,18 +1215,11 @@ static PyMethodDef perf__methods[] = {
{ .ml_name = NULL, } { .ml_name = NULL, }
}; };
#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initperf(void)
#else
PyMODINIT_FUNC PyInit_perf(void) PyMODINIT_FUNC PyInit_perf(void)
#endif
{ {
PyObject *obj; PyObject *obj;
int i; int i;
PyObject *dict; PyObject *dict;
#if PY_MAJOR_VERSION < 3
PyObject *module = Py_InitModule("perf", perf__methods);
#else
static struct PyModuleDef moduledef = { static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT, PyModuleDef_HEAD_INIT,
"perf", /* m_name */ "perf", /* m_name */
@ -1274,7 +1232,6 @@ PyMODINIT_FUNC PyInit_perf(void)
NULL, /* m_free */ NULL, /* m_free */
}; };
PyObject *module = PyModule_Create(&moduledef); PyObject *module = PyModule_Create(&moduledef);
#endif
if (module == NULL || if (module == NULL ||
pyrf_event__setup_types() < 0 || pyrf_event__setup_types() < 0 ||
@ -1282,11 +1239,7 @@ PyMODINIT_FUNC PyInit_perf(void)
pyrf_evsel__setup_types() < 0 || pyrf_evsel__setup_types() < 0 ||
pyrf_thread_map__setup_types() < 0 || pyrf_thread_map__setup_types() < 0 ||
pyrf_cpu_map__setup_types() < 0) pyrf_cpu_map__setup_types() < 0)
#if PY_MAJOR_VERSION < 3
return;
#else
return module; return module;
#endif
/* The page_size is placed in util object. */ /* The page_size is placed in util object. */
page_size = sysconf(_SC_PAGE_SIZE); page_size = sysconf(_SC_PAGE_SIZE);
@ -1335,7 +1288,7 @@ PyMODINIT_FUNC PyInit_perf(void)
goto error; goto error;
for (i = 0; perf__constants[i].name != NULL; i++) { for (i = 0; perf__constants[i].name != NULL; i++) {
obj = _PyLong_FromLong(perf__constants[i].value); obj = PyLong_FromLong(perf__constants[i].value);
if (obj == NULL) if (obj == NULL)
goto error; goto error;
PyDict_SetItemString(dict, perf__constants[i].name, obj); PyDict_SetItemString(dict, perf__constants[i].name, obj);
@ -1345,9 +1298,7 @@ PyMODINIT_FUNC PyInit_perf(void)
error: error:
if (PyErr_Occurred()) if (PyErr_Occurred())
PyErr_SetString(PyExc_ImportError, "perf: Init failed!"); PyErr_SetString(PyExc_ImportError, "perf: Init failed!");
#if PY_MAJOR_VERSION >= 3
return module; return module;
#endif
} }

View file

@ -58,22 +58,6 @@
#include "mem-events.h" #include "mem-events.h"
#include "util/perf_regs.h" #include "util/perf_regs.h"
#if PY_MAJOR_VERSION < 3
#define _PyUnicode_FromString(arg) \
PyString_FromString(arg)
#define _PyUnicode_FromStringAndSize(arg1, arg2) \
PyString_FromStringAndSize((arg1), (arg2))
#define _PyBytes_FromStringAndSize(arg1, arg2) \
PyString_FromStringAndSize((arg1), (arg2))
#define _PyLong_FromLong(arg) \
PyInt_FromLong(arg)
#define _PyLong_AsLong(arg) \
PyInt_AsLong(arg)
#define _PyCapsule_New(arg1, arg2, arg3) \
PyCObject_FromVoidPtr((arg1), (arg2))
PyMODINIT_FUNC initperf_trace_context(void);
#else
#define _PyUnicode_FromString(arg) \ #define _PyUnicode_FromString(arg) \
PyUnicode_FromString(arg) PyUnicode_FromString(arg)
#define _PyUnicode_FromStringAndSize(arg1, arg2) \ #define _PyUnicode_FromStringAndSize(arg1, arg2) \
@ -88,7 +72,6 @@ PyMODINIT_FUNC initperf_trace_context(void);
PyCapsule_New((arg1), (arg2), (arg3)) PyCapsule_New((arg1), (arg2), (arg3))
PyMODINIT_FUNC PyInit_perf_trace_context(void); PyMODINIT_FUNC PyInit_perf_trace_context(void);
#endif
#ifdef HAVE_LIBTRACEEVENT #ifdef HAVE_LIBTRACEEVENT
#define TRACE_EVENT_TYPE_MAX \ #define TRACE_EVENT_TYPE_MAX \
@ -181,17 +164,7 @@ static int get_argument_count(PyObject *handler)
{ {
int arg_count = 0; int arg_count = 0;
/* PyObject *code_obj = code_obj = PyObject_GetAttrString(handler, "__code__");
* The attribute for the code object is func_code in Python 2,
* whereas it is __code__ in Python 3.0+.
*/
PyObject *code_obj = PyObject_GetAttrString(handler,
"func_code");
if (PyErr_Occurred()) {
PyErr_Clear();
code_obj = PyObject_GetAttrString(handler,
"__code__");
}
PyErr_Clear(); PyErr_Clear();
if (code_obj) { if (code_obj) {
PyObject *arg_count_obj = PyObject_GetAttrString(code_obj, PyObject *arg_count_obj = PyObject_GetAttrString(code_obj,
@ -1903,12 +1876,6 @@ static void set_table_handlers(struct tables *tables)
tables->synth_handler = get_handler("synth_data"); tables->synth_handler = get_handler("synth_data");
} }
#if PY_MAJOR_VERSION < 3
static void _free_command_line(const char **command_line, int num)
{
free(command_line);
}
#else
static void _free_command_line(wchar_t **command_line, int num) static void _free_command_line(wchar_t **command_line, int num)
{ {
int i; int i;
@ -1916,7 +1883,6 @@ static void _free_command_line(wchar_t **command_line, int num)
PyMem_RawFree(command_line[i]); PyMem_RawFree(command_line[i]);
free(command_line); free(command_line);
} }
#endif
/* /*
@ -1926,30 +1892,12 @@ static int python_start_script(const char *script, int argc, const char **argv,
struct perf_session *session) struct perf_session *session)
{ {
struct tables *tables = &tables_global; struct tables *tables = &tables_global;
#if PY_MAJOR_VERSION < 3
const char **command_line;
#else
wchar_t **command_line; wchar_t **command_line;
#endif char buf[PATH_MAX];
/*
* Use a non-const name variable to cope with python 2.6's
* PyImport_AppendInittab prototype
*/
char buf[PATH_MAX], name[19] = "perf_trace_context";
int i, err = 0; int i, err = 0;
FILE *fp; FILE *fp;
scripting_context->session = session; scripting_context->session = session;
#if PY_MAJOR_VERSION < 3
command_line = malloc((argc + 1) * sizeof(const char *));
if (!command_line)
return -1;
command_line[0] = script;
for (i = 1; i < argc + 1; i++)
command_line[i] = argv[i - 1];
PyImport_AppendInittab(name, initperf_trace_context);
#else
command_line = malloc((argc + 1) * sizeof(wchar_t *)); command_line = malloc((argc + 1) * sizeof(wchar_t *));
if (!command_line) if (!command_line)
return -1; return -1;
@ -1957,15 +1905,10 @@ static int python_start_script(const char *script, int argc, const char **argv,
command_line[0] = Py_DecodeLocale(script, NULL); command_line[0] = Py_DecodeLocale(script, NULL);
for (i = 1; i < argc + 1; i++) for (i = 1; i < argc + 1; i++)
command_line[i] = Py_DecodeLocale(argv[i - 1], NULL); command_line[i] = Py_DecodeLocale(argv[i - 1], NULL);
PyImport_AppendInittab(name, PyInit_perf_trace_context); PyImport_AppendInittab("perf_trace_context", PyInit_perf_trace_context);
#endif
Py_Initialize(); Py_Initialize();
#if PY_MAJOR_VERSION < 3
PySys_SetArgv(argc + 1, (char **)command_line);
#else
PySys_SetArgv(argc + 1, command_line); PySys_SetArgv(argc + 1, command_line);
#endif
fp = fopen(script, "r"); fp = fopen(script, "r");
if (!fp) { if (!fp) {