lkml.org 
[lkml]   [2020]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 096/101] perf scripting python: Avoid declaring function pointers with a visibility attribute
    Date
    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
    @@ -1493,7 +1493,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
    @@ -1508,20 +1507,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

    \
     
     \ /
      Last update: 2020-11-17 14:24    [W:8.726 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site