| From d0e7b0c71fbb653de90a7163ef46912a96f0bdaf Mon Sep 17 00:00:00 2001 |
| From: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Date: Fri, 30 Oct 2020 08:24:38 -0300 |
| Subject: perf scripting python: Avoid declaring function pointers with a visibility attribute |
| |
| From: Arnaldo Carvalho de Melo <acme@redhat.com> |
| |
| commit d0e7b0c71fbb653de90a7163ef46912a96f0bdaf upstream. |
| |
| To avoid this: |
| |
| util/scripting-engines/trace-event-python.c: In function 'python_start_script': |
| util/scripting-engines/trace-event-python.c:1595:2: error: 'visibility' attribute ignored [-Werror=attributes] |
| 1595 | PyMODINIT_FUNC (*initfunc)(void); |
| | ^~~~~~~~~~~~~~ |
| |
| That started breaking when building with PYTHON=python3 and these gcc |
| versions (I haven't checked with the clang ones, maybe it breaks there |
| as well): |
| |
| # export PERF_TARBALL=http://192.168.86.5/perf/perf-5.9.0.tar.xz |
| # dm fedora:33 fedora:rawhide |
| 1 107.80 fedora:33 : Ok gcc (GCC) 10.2.1 20201005 (Red Hat 10.2.1-5), clang version 11.0.0 (Fedora 11.0.0-1.fc33) |
| 2 92.47 fedora:rawhide : Ok gcc (GCC) 10.2.1 20201016 (Red Hat 10.2.1-6), clang version 11.0.0 (Fedora 11.0.0-1.fc34) |
| # |
| |
| Avoid that by ditching that 'initfunc' function pointer with its: |
| |
| #define Py_EXPORTED_SYMBOL _attribute_ ((visibility ("default"))) |
| #define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* |
| |
| And just call PyImport_AppendInittab() at the end of the ifdef python3 |
| block with the functions that were being attributed to that initfunc. |
| |
| Cc: Adrian Hunter <adrian.hunter@intel.com> |
| Cc: Ian Rogers <irogers@google.com> |
| Cc: Jiri Olsa <jolsa@kernel.org> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Tapas Kundu <tkundu@vmware.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| tools/perf/util/scripting-engines/trace-event-python.c | 7 ++----- |
| 1 file changed, 2 insertions(+), 5 deletions(-) |
| |
| --- a/tools/perf/util/scripting-engines/trace-event-python.c |
| +++ b/tools/perf/util/scripting-engines/trace-event-python.c |
| @@ -1592,7 +1592,6 @@ static void _free_command_line(wchar_t * |
| static int python_start_script(const char *script, int argc, const char **argv) |
| { |
| struct tables *tables = &tables_global; |
| - PyMODINIT_FUNC (*initfunc)(void); |
| #if PY_MAJOR_VERSION < 3 |
| const char **command_line; |
| #else |
| @@ -1607,20 +1606,18 @@ static int python_start_script(const cha |
| FILE *fp; |
| |
| #if PY_MAJOR_VERSION < 3 |
| - initfunc = initperf_trace_context; |
| command_line = malloc((argc + 1) * sizeof(const char *)); |
| command_line[0] = script; |
| for (i = 1; i < argc + 1; i++) |
| command_line[i] = argv[i - 1]; |
| + PyImport_AppendInittab(name, initperf_trace_context); |
| #else |
| - initfunc = PyInit_perf_trace_context; |
| command_line = malloc((argc + 1) * sizeof(wchar_t *)); |
| command_line[0] = Py_DecodeLocale(script, NULL); |
| for (i = 1; i < argc + 1; i++) |
| command_line[i] = Py_DecodeLocale(argv[i - 1], NULL); |
| + PyImport_AppendInittab(name, PyInit_perf_trace_context); |
| #endif |
| - |
| - PyImport_AppendInittab(name, initfunc); |
| Py_Initialize(); |
| |
| #if PY_MAJOR_VERSION < 3 |