at v5.3-rc1 162 lines 4.1 kB view raw
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * trace-event-scripting. Scripting engine common and initialization code. 4 * 5 * Copyright (C) 2009-2010 Tom Zanussi <tzanussi@gmail.com> 6 */ 7 8#include <stdio.h> 9#include <stdlib.h> 10#include <string.h> 11#include <errno.h> 12 13#include "../perf.h" 14#include "debug.h" 15#include "trace-event.h" 16#include <linux/zalloc.h> 17 18struct scripting_context *scripting_context; 19 20static int flush_script_unsupported(void) 21{ 22 return 0; 23} 24 25static int stop_script_unsupported(void) 26{ 27 return 0; 28} 29 30static void process_event_unsupported(union perf_event *event __maybe_unused, 31 struct perf_sample *sample __maybe_unused, 32 struct perf_evsel *evsel __maybe_unused, 33 struct addr_location *al __maybe_unused) 34{ 35} 36 37static void print_python_unsupported_msg(void) 38{ 39 fprintf(stderr, "Python scripting not supported." 40 " Install libpython and rebuild perf to enable it.\n" 41 "For example:\n # apt-get install python-dev (ubuntu)" 42 "\n # yum install python-devel (Fedora)" 43 "\n etc.\n"); 44} 45 46static int python_start_script_unsupported(const char *script __maybe_unused, 47 int argc __maybe_unused, 48 const char **argv __maybe_unused) 49{ 50 print_python_unsupported_msg(); 51 52 return -1; 53} 54 55static int python_generate_script_unsupported(struct tep_handle *pevent 56 __maybe_unused, 57 const char *outfile 58 __maybe_unused) 59{ 60 print_python_unsupported_msg(); 61 62 return -1; 63} 64 65struct scripting_ops python_scripting_unsupported_ops = { 66 .name = "Python", 67 .start_script = python_start_script_unsupported, 68 .flush_script = flush_script_unsupported, 69 .stop_script = stop_script_unsupported, 70 .process_event = process_event_unsupported, 71 .generate_script = python_generate_script_unsupported, 72}; 73 74static void register_python_scripting(struct scripting_ops *scripting_ops) 75{ 76 if (scripting_context == NULL) 77 scripting_context = malloc(sizeof(*scripting_context)); 78 79 if (scripting_context == NULL || 80 script_spec_register("Python", scripting_ops) || 81 script_spec_register("py", scripting_ops)) { 82 pr_err("Error registering Python script extension: disabling it\n"); 83 zfree(&scripting_context); 84 } 85} 86 87#ifndef HAVE_LIBPYTHON_SUPPORT 88void setup_python_scripting(void) 89{ 90 register_python_scripting(&python_scripting_unsupported_ops); 91} 92#else 93extern struct scripting_ops python_scripting_ops; 94 95void setup_python_scripting(void) 96{ 97 register_python_scripting(&python_scripting_ops); 98} 99#endif 100 101static void print_perl_unsupported_msg(void) 102{ 103 fprintf(stderr, "Perl scripting not supported." 104 " Install libperl and rebuild perf to enable it.\n" 105 "For example:\n # apt-get install libperl-dev (ubuntu)" 106 "\n # yum install 'perl(ExtUtils::Embed)' (Fedora)" 107 "\n etc.\n"); 108} 109 110static int perl_start_script_unsupported(const char *script __maybe_unused, 111 int argc __maybe_unused, 112 const char **argv __maybe_unused) 113{ 114 print_perl_unsupported_msg(); 115 116 return -1; 117} 118 119static int perl_generate_script_unsupported(struct tep_handle *pevent 120 __maybe_unused, 121 const char *outfile __maybe_unused) 122{ 123 print_perl_unsupported_msg(); 124 125 return -1; 126} 127 128struct scripting_ops perl_scripting_unsupported_ops = { 129 .name = "Perl", 130 .start_script = perl_start_script_unsupported, 131 .flush_script = flush_script_unsupported, 132 .stop_script = stop_script_unsupported, 133 .process_event = process_event_unsupported, 134 .generate_script = perl_generate_script_unsupported, 135}; 136 137static void register_perl_scripting(struct scripting_ops *scripting_ops) 138{ 139 if (scripting_context == NULL) 140 scripting_context = malloc(sizeof(*scripting_context)); 141 142 if (scripting_context == NULL || 143 script_spec_register("Perl", scripting_ops) || 144 script_spec_register("pl", scripting_ops)) { 145 pr_err("Error registering Perl script extension: disabling it\n"); 146 zfree(&scripting_context); 147 } 148} 149 150#ifndef HAVE_LIBPERL_SUPPORT 151void setup_perl_scripting(void) 152{ 153 register_perl_scripting(&perl_scripting_unsupported_ops); 154} 155#else 156extern struct scripting_ops perl_scripting_ops; 157 158void setup_perl_scripting(void) 159{ 160 register_perl_scripting(&perl_scripting_ops); 161} 162#endif