From patchwork Fri Aug 2 11:00:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 11073185 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7C24C174A for ; Fri, 2 Aug 2019 11:01:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 63640286DA for ; Fri, 2 Aug 2019 11:01:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5738C286FB; Fri, 2 Aug 2019 11:01:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16D87286DA for ; Fri, 2 Aug 2019 11:01:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729716AbfHBLBN (ORCPT ); Fri, 2 Aug 2019 07:01:13 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:34870 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729419AbfHBLBN (ORCPT ); Fri, 2 Aug 2019 07:01:13 -0400 Received: by mail-wm1-f66.google.com with SMTP id l2so65891454wmg.0 for ; Fri, 02 Aug 2019 04:01:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rV3yAii3O4kPT5xpODphZtUPwDBJ9ZYERo0bkPP99V8=; b=mAbr4KgRxJNlSkxz1XxSRr2WTiwKcZ5GrtIBMMXJzHCtGxgb65Urki8sZpsuayLtKA j5qIeQi0kFFRlF8nw+NdRJvA5jZS9l6097VzEhJJTb4WJ/pJEjqibWWZ58mUDezd9k0u Zcpbv6JmdzoPDbdu6vQQqYfvmXtq14ANKzhmeJ+9Qf0ZTxRjLVgmrnSopBXoNDjym3g0 Z+hKeuHnCV+HyHN+PUrWAX3geIvWT0dO2vhppLqDkpV4cgbeWCTIDQPn4CfTcylQqWYp ZcaTf0GpGBw+tD9OW2ZJHjSkjyGnNOVtNFPsX1SEHYxbAz6SlT+1kEz5J/fuS26mDwdh 682A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rV3yAii3O4kPT5xpODphZtUPwDBJ9ZYERo0bkPP99V8=; b=RbN51jA50ujZyLPOCfpxKIZZ0byQDo+1zW8vgnby9/BpzzmAUv5FzgRXJBfOPmqOuJ 6UaxVP4lLFr0gkBfRwsYD97O90ojHEDp8WZpcZuuw0sT4pz1smSZDg/3V6MDAl37fJK6 umP/YrEBwMWhfgCUXWvOv0rrOnTUMEb57qhsF44EO4RWuqH1rF0kTFQj4B7mUG0Q9XNS GpeDV2Op9bWaYdiodR+RZlxeORwHKIOhWLipT5a16sx2EH61s9HUPT6ROq9UB4yvafWg CWiedN1nAptoJ0vXCQMpVToSfVM+GK6dhJ9YRzsq5u3ow5BHv3znK7ZOUP0TMDZA8ipk 4Esg== X-Gm-Message-State: APjAAAVjULXnh+owTJN1i80XBlA8ZI9ecwdjZZl0Fe9aWHhLsfZxmUSI 2O/tZ8v+ZLBisB6+MR05EA4= X-Google-Smtp-Source: APXvYqzcWcLEtUuT5F02wT9f1p0+EtK/UYAKJRxmx9SUoGvzTX58wP5zJ/rPYD10KipuDDKF1S/tvA== X-Received: by 2002:a1c:e108:: with SMTP id y8mr4020658wmg.65.1564743668836; Fri, 02 Aug 2019 04:01:08 -0700 (PDT) Received: from oberon.eng.vmware.com ([146.247.46.5]) by smtp.gmail.com with ESMTPSA id r15sm79511433wrj.68.2019.08.02.04.01.07 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 02 Aug 2019 04:01:07 -0700 (PDT) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v2 3/6] trace-cmd: Remove trace-cmd plugin handling routines Date: Fri, 2 Aug 2019 14:00:58 +0300 Message-Id: <20190802110101.14759-4-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190802110101.14759-1-tz.stoyanov@gmail.com> References: <20190802110101.14759-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Tzvetomir Stoyanov (VMware) Currently there are no trace-cmd related plugins, all of them are designed to be used with libtraceeevnt. As both libtraceevent and trace-cmd have logic for managing plugins, the one in trace-cmd is redundant. Those redundant code is removed and replaced with calls to libtraceeevnt plugin APIs. When trace-cmd has to load any plugins, it uses libtraceeevnt to do the job. Removed trace-cmd functions: tracecmd_load_plugins() tracecmd_unload_plugins() trace_util_load_plugins() trace_util_read_plugin_options() trace_util_free_options() trace_util_print_plugins() trace_util_free_plugin_options_list() A new libtraceevent API is added: tep_load_plugins_hook() - the local static function load_plugins() is exposed as API, as this functionality is needed be trace-cmd. Signed-off-by: Tzvetomir Stoyanov (VMware) --- include/trace-cmd/trace-cmd.h | 18 -- include/traceevent/event-parse.h | 6 + lib/trace-cmd/trace-input.c | 9 +- lib/trace-cmd/trace-util.c | 330 +------------------------------ lib/traceevent/event-plugin.c | 19 +- plugins/plugin_python.c | 9 +- tracecmd/trace-check-events.c | 10 +- tracecmd/trace-list.c | 21 +- 8 files changed, 54 insertions(+), 368 deletions(-) diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h index c06067e..94d4f02 100644 --- a/include/trace-cmd/trace-cmd.h +++ b/include/trace-cmd/trace-cmd.h @@ -25,10 +25,6 @@ void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigne extern int tracecmd_disable_sys_plugins; extern int tracecmd_disable_plugins; -struct tep_plugin_list; -struct tep_plugin_list *tracecmd_load_plugins(struct tep_handle *pevent); -void tracecmd_unload_plugins(struct tep_plugin_list *list, struct tep_handle *pevent); - char **tracecmd_event_systems(const char *tracing_dir); char **tracecmd_system_events(const char *tracing_dir, const char *system); struct tep_handle *tracecmd_local_events(const char *tracing_dir); @@ -334,22 +330,8 @@ int tracecmd_msg_collect_data(struct tracecmd_msg_handle *msg_handle, int ofd); bool tracecmd_msg_done(struct tracecmd_msg_handle *msg_handle); void tracecmd_msg_set_done(struct tracecmd_msg_handle *msg_handle); -/* --- Plugin handling --- */ -extern struct tep_plugin_option trace_ftrace_options[]; - -int trace_util_load_plugins(struct tep_handle *pevent, const char *suffix, - int (*load_plugin)(struct tep_handle *pevent, - const char *path, - const char *name, - void *data), - void *data); -struct tep_plugin_option *trace_util_read_plugin_options(void); -void trace_util_free_options(struct tep_plugin_option *options); char **trace_util_find_plugin_files(const char *suffix); void trace_util_free_plugin_files(char **files); -void trace_util_print_plugins(struct trace_seq *s, const char *prefix, const char *suffix, - const struct tep_plugin_list *list); -void trace_util_free_plugin_options_list(char **list); /* Used for trace-cmd list */ void tracecmd_ftrace_load_options(void); diff --git a/include/traceevent/event-parse.h b/include/traceevent/event-parse.h index a51b73f..99da5ef 100644 --- a/include/traceevent/event-parse.h +++ b/include/traceevent/event-parse.h @@ -382,6 +382,12 @@ struct tep_plugin_list; struct tep_plugin_list *tep_load_plugins(struct tep_handle *tep); void tep_unload_plugins(struct tep_plugin_list *plugin_list, struct tep_handle *tep); +void tep_load_plugins_hook(struct tep_handle *tep, const char *suffix, + void (*load_plugin)(struct tep_handle *tep, + const char *path, + const char *name, + void *data), + void *data); char **tep_plugin_list_options(void); void tep_plugin_free_options_list(char **list); int tep_plugin_add_options(const char *name, diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c index 654101f..d28bfa8 100644 --- a/lib/trace-cmd/trace-input.c +++ b/lib/trace-cmd/trace-input.c @@ -2687,10 +2687,15 @@ struct tracecmd_input *tracecmd_alloc_fd(int fd) if (!handle->pevent) goto failed_read; + if (tracecmd_disable_plugins) + tep_set_flag(handle->pevent, TEP_DISABLE_PLUGINS); + if (tracecmd_disable_sys_plugins) + tep_set_flag(handle->pevent, TEP_DISABLE_SYS_PLUGINS); + /* register default ftrace functions first */ tracecmd_ftrace_overrides(handle, &handle->finfo); - handle->plugin_list = tracecmd_load_plugins(handle->pevent); + handle->plugin_list = tep_load_plugins(handle->pevent); tep_set_file_bigendian(handle->pevent, buf[0]); tep_set_local_bigendian(handle->pevent, tracecmd_host_bigendian()); @@ -2852,7 +2857,7 @@ void tracecmd_close(struct tracecmd_input *handle) tracecmd_close(handle->parent); else { /* Only main handle frees plugins and pevent */ - tracecmd_unload_plugins(handle->plugin_list, handle->pevent); + tep_unload_plugins(handle->plugin_list, handle->pevent); tep_free(handle->pevent); } free(handle); diff --git a/lib/trace-cmd/trace-util.c b/lib/trace-cmd/trace-util.c index 910c6c5..35e0d70 100644 --- a/lib/trace-cmd/trace-util.c +++ b/lib/trace-cmd/trace-util.c @@ -32,38 +32,6 @@ int tracecmd_disable_plugins; #define _STR(x) #x #define STR(x) _STR(x) -struct tep_plugin_list { - struct tep_plugin_list *next; - char *name; - void *handle; -}; - -void trace_util_free_plugin_options_list(char **list) -{ - tracecmd_free_list(list); -} - -/** - * trace_util_print_plugins - print out the list of plugins loaded - * @s: the trace_seq descripter to write to - * @prefix: The prefix string to add before listing the option name - * @suffix: The suffix string ot append after the option name - * @list: The list of plugins (usually returned by tracecmd_load_plugins() - * - * Writes to the trace_seq @s the list of plugins (files) that is - * returned by tracecmd_load_plugins(). Use @prefix and @suffix for formating: - * @prefix = " ", @suffix = "\n". - */ -void trace_util_print_plugins(struct trace_seq *s, - const char *prefix, const char *suffix, - const struct tep_plugin_list *list) -{ - while (list) { - trace_seq_printf(s, "%s%s%s", prefix, list->name, suffix); - list = list->next; - } -} - void tracecmd_parse_cmdlines(struct tep_handle *pevent, char *file, int size __maybe_unused) { @@ -179,56 +147,6 @@ void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, } } -static int load_plugin(struct tep_handle *pevent, const char *path, - const char *file, void *data) -{ - struct tep_plugin_list **plugin_list = data; - tep_plugin_load_func func; - struct tep_plugin_list *list; - const char *alias; - char *plugin; - void *handle; - int ret; - - ret = asprintf(&plugin, "%s/%s", path, file); - if (ret < 0) - return -ENOMEM; - - handle = dlopen(plugin, RTLD_NOW | RTLD_GLOBAL); - if (!handle) { - warning("cound not load plugin '%s'\n%s\n", - plugin, dlerror()); - goto out_free; - } - - alias = dlsym(handle, TEP_PLUGIN_ALIAS_NAME); - if (!alias) - alias = file; - - func = dlsym(handle, TEP_PLUGIN_LOADER_NAME); - if (!func) { - warning("cound not find func '%s' in plugin '%s'\n%s\n", - TEP_PLUGIN_LOADER_NAME, plugin, dlerror()); - goto out_free; - } - - list = malloc(sizeof(*list)); - if (!list) - goto out_free; - list->next = *plugin_list; - list->handle = handle; - list->name = plugin; - *plugin_list = list; - - pr_stat("registering plugin: %s", plugin); - func(pevent); - return 0; - - out_free: - free(plugin); - return -1; -} - static int mount_debugfs(void) { struct stat st; @@ -859,57 +777,13 @@ char **tracecmd_local_plugins(const char *tracing_dir) return plugins; } -static void -trace_util_load_plugins_dir(struct tep_handle *pevent, const char *suffix, - const char *path, - int (*load_plugin)(struct tep_handle *pevent, - const char *path, - const char *name, - void *data), - void *data) -{ - struct dirent *dent; - struct stat st; - DIR *dir; - int ret; - - ret = stat(path, &st); - if (ret < 0) - return; - - if (!S_ISDIR(st.st_mode)) - return; - - dir = opendir(path); - if (!dir) - return; - - while ((dent = readdir(dir))) { - const char *name = dent->d_name; - - if (strcmp(name, ".") == 0 || - strcmp(name, "..") == 0) - continue; - - /* Only load plugins that end in suffix */ - if (strcmp(name + (strlen(name) - strlen(suffix)), suffix) != 0) - continue; - - load_plugin(pevent, path, name, data); - } - - closedir(dir); - - return; -} - struct add_plugin_data { int ret; int index; char **files; }; -static int add_plugin_file(struct tep_handle *pevent, const char *path, +static void add_plugin_file(struct tep_handle *pevent, const char *path, const char *name, void *data) { struct add_plugin_data *pdata = data; @@ -918,7 +792,7 @@ static int add_plugin_file(struct tep_handle *pevent, const char *path, int i; if (pdata->ret) - return 0; + return; size = pdata->index + 2; ptr = realloc(pdata->files, sizeof(char *) * size); @@ -932,7 +806,7 @@ static int add_plugin_file(struct tep_handle *pevent, const char *path, pdata->files = ptr; pdata->index++; pdata->files[pdata->index] = NULL; - return 0; + return; out_free: for (i = 0; i < pdata->index; i++) @@ -940,79 +814,6 @@ static int add_plugin_file(struct tep_handle *pevent, const char *path, free(pdata->files); pdata->files = NULL; pdata->ret = errno; - return -ENOMEM; -} - -static char *trace_util_get_source_plugins_dir(void) -{ - char *p, path[PATH_MAX+1]; - int ret; - - ret = readlink("/proc/self/exe", path, PATH_MAX); - if (ret > PATH_MAX || ret < 0) - return NULL; - path[ret] = 0; - - dirname(path); - p = strrchr(path, '/'); - if (!p) - return NULL; - /* Check if we are in the the source tree */ - if (strcmp(p, "/tracecmd") != 0) - return NULL; - - strcpy(p, "/plugins"); - return strdup(path); -} - - -int trace_util_load_plugins(struct tep_handle *pevent, const char *suffix, - int (*load_plugin)(struct tep_handle *pevent, - const char *path, - const char *name, - void *data), - void *data) -{ - char *home; - char *path; - char *envdir; - int ret; - - if (tracecmd_disable_plugins) - return -EBUSY; - -/* If a system plugin directory was defined, check that first */ -#ifdef PLUGIN_DIR - if (!tracecmd_disable_sys_plugins) - trace_util_load_plugins_dir(pevent, suffix, PLUGIN_DIR, - load_plugin, data); -#endif - - /* Next let the environment-set plugin directory override the system defaults */ - envdir = getenv("TRACE_CMD_PLUGIN_DIR"); - if (envdir) - trace_util_load_plugins_dir(pevent, suffix, envdir, load_plugin, data); - - /* Now let the home directory override the environment or system defaults */ - home = getenv("HOME"); - - if (!home) - return -EINVAL; - - ret = asprintf(&path, "%s/%s", home, LOCAL_PLUGIN_DIR); - if (ret < 0) - return -ENOMEM; - - trace_util_load_plugins_dir(pevent, suffix, path, load_plugin, data); - - free(path); - - path = trace_util_get_source_plugins_dir(); - if (path) { - trace_util_load_plugins_dir(pevent, suffix, path, load_plugin, data); - free(path); - } - return 0; } /** @@ -1035,7 +836,7 @@ char **trace_util_find_plugin_files(const char *suffix) memset(&pdata, 0, sizeof(pdata)); - trace_util_load_plugins(NULL, suffix, add_plugin_file, &pdata); + tep_load_plugins_hook(NULL, suffix, add_plugin_file, &pdata); if (pdata.ret) return TRACECMD_ERROR(pdata.ret); @@ -1062,129 +863,6 @@ void trace_util_free_plugin_files(char **files) free(files); } -struct plugin_option_read { - struct tep_plugin_option *options; -}; - -static int append_option(struct plugin_option_read *options, - struct tep_plugin_option *option, - const char *alias, void *handle) -{ - struct tep_plugin_option *op; - - while (option->name) { - op = malloc(sizeof(*op)); - if (!op) - return -ENOMEM; - *op = *option; - op->next = options->options; - options->options = op; - op->file = strdup(alias); - op->handle = handle; - option++; - } - return 0; -} - -static int read_options(struct tep_handle *pevent, const char *path, - const char *file, void *data) -{ - struct plugin_option_read *options = data; - struct tep_plugin_option *option; - const char *alias; - int unload = 0; - char *plugin; - void *handle; - int ret; - - ret = asprintf(&plugin, "%s/%s", path, file); - if (ret < 0) - return -ENOMEM; - - handle = dlopen(plugin, RTLD_NOW | RTLD_GLOBAL); - if (!handle) { - warning("cound not load plugin '%s'\n%s\n", - plugin, dlerror()); - goto out_free; - } - - alias = dlsym(handle, TEP_PLUGIN_ALIAS_NAME); - if (!alias) - alias = file; - - option = dlsym(handle, TEP_PLUGIN_OPTIONS_NAME); - if (!option) { - unload = 1; - goto out_unload; - } - - append_option(options, option, alias, handle); - - out_unload: - if (unload) - dlclose(handle); - out_free: - free(plugin); - return 0; -} - -struct tep_plugin_option *trace_util_read_plugin_options(void) -{ - struct plugin_option_read option = { - .options = NULL, - }; - - append_option(&option, trace_ftrace_options, "ftrace", NULL); - - trace_util_load_plugins(NULL, ".so", read_options, &option); - - return option.options; -} - -void trace_util_free_options(struct tep_plugin_option *options) -{ - struct tep_plugin_option *op; - void *last_handle = NULL; - - while (options) { - op = options; - options = op->next; - if (op->handle && op->handle != last_handle) { - last_handle = op->handle; - dlclose(op->handle); - } - free(op->file); - free(op); - } -} - -struct tep_plugin_list *tracecmd_load_plugins(struct tep_handle *pevent) -{ - struct tep_plugin_list *list = NULL; - - trace_util_load_plugins(pevent, ".so", load_plugin, &list); - - return list; -} - -void -tracecmd_unload_plugins(struct tep_plugin_list *plugin_list, struct tep_handle *pevent) -{ - tep_plugin_unload_func func; - struct tep_plugin_list *list; - - while (plugin_list) { - list = plugin_list; - plugin_list = list->next; - func = dlsym(list->handle, TEP_PLUGIN_UNLOADER_NAME); - if (func) - func(pevent); - dlclose(list->handle); - free(list->name); - free(list); - } -} - char *tracecmd_get_tracing_file(const char *name) { static const char *tracing; diff --git a/lib/traceevent/event-plugin.c b/lib/traceevent/event-plugin.c index 43961d9..bc10205 100644 --- a/lib/traceevent/event-plugin.c +++ b/lib/traceevent/event-plugin.c @@ -538,20 +538,19 @@ load_plugins_dir(struct tep_handle *tep, const char *suffix, closedir(dir); } -static void -load_plugins(struct tep_handle *tep, const char *suffix, - void (*load_plugin)(struct tep_handle *tep, - const char *path, - const char *name, - void *data), - void *data) +void tep_load_plugins_hook(struct tep_handle *tep, const char *suffix, + void (*load_plugin)(struct tep_handle *tep, + const char *path, + const char *name, + void *data), + void *data) { char *home; char *path; char *envdir; int ret; - if (tep->flags & TEP_DISABLE_PLUGINS) + if (tep && tep->flags & TEP_DISABLE_PLUGINS) return; /* @@ -559,7 +558,7 @@ load_plugins(struct tep_handle *tep, const char *suffix, * check that first. */ #ifdef PLUGIN_DIR - if (!(tep->flags & TEP_DISABLE_SYS_PLUGINS)) + if (!tep || !(tep->flags & TEP_DISABLE_SYS_PLUGINS)) load_plugins_dir(tep, suffix, PLUGIN_DIR, load_plugin, data); #endif @@ -596,7 +595,7 @@ tep_load_plugins(struct tep_handle *tep) { struct tep_plugin_list *list = NULL; - load_plugins(tep, ".so", load_plugin, &list); + tep_load_plugins_hook(tep, ".so", load_plugin, &list); return list; } diff --git a/plugins/plugin_python.c b/plugins/plugin_python.c index e725ad8..8a7dacd 100644 --- a/plugins/plugin_python.c +++ b/plugins/plugin_python.c @@ -20,7 +20,7 @@ static const char pyload[] = "finally:\n" " file.close()\n"; -static int load_plugin(struct tep_handle *pevent, const char *path, +static void load_plugin(struct tep_handle *pevent, const char *path, const char *name, void *data) { PyObject *globals = data; @@ -33,7 +33,7 @@ static int load_plugin(struct tep_handle *pevent, const char *path, PyObject *res; if (!full || !n) - return -ENOMEM; + return; strcpy(full, path); strcat(full, "/"); @@ -44,7 +44,7 @@ static int load_plugin(struct tep_handle *pevent, const char *path, err = asprintf(&load, pyload, full, n); if (err < 0) - return err; + return; res = PyRun_String(load, Py_file_input, globals, globals); if (!res) { @@ -55,7 +55,6 @@ static int load_plugin(struct tep_handle *pevent, const char *path, free(load); - return res ? 0 : -1; } int TEP_PLUGIN_LOADER(struct tep_handle *pevent) @@ -95,7 +94,7 @@ int TEP_PLUGIN_LOADER(struct tep_handle *pevent) Py_DECREF(py_pevent); Py_DECREF(str); - trace_util_load_plugins(pevent, ".py", load_plugin, globals); + tep_load_plugins_hook(pevent, ".py", load_plugin, globals); return 0; } diff --git a/tracecmd/trace-check-events.c b/tracecmd/trace-check-events.c index 5fd5d4a..b09fcd0 100644 --- a/tracecmd/trace-check-events.c +++ b/tracecmd/trace-check-events.c @@ -42,11 +42,17 @@ void trace_check_events(int argc, char **argv) pevent = tep_alloc(); if (!pevent) exit(EINVAL); - list = tracecmd_load_plugins(pevent); + + if (tracecmd_disable_plugins) + tep_set_flag(pevent, TEP_DISABLE_PLUGINS); + if (tracecmd_disable_sys_plugins) + tep_set_flag(pevent, TEP_DISABLE_SYS_PLUGINS); + + list = tep_load_plugins(pevent); ret = tracecmd_fill_local_events(tracing, pevent, &parsing_failures); if (ret || parsing_failures) ret = EINVAL; - tracecmd_unload_plugins(list, pevent); + tep_unload_plugins(list, pevent); tep_free(pevent); return; diff --git a/tracecmd/trace-list.c b/tracecmd/trace-list.c index 155e297..41d45d0 100644 --- a/tracecmd/trace-list.c +++ b/tracecmd/trace-list.c @@ -317,12 +317,17 @@ static void show_plugin_options(void) if (!pevent) die("Can not allocate pevent\n"); + if (tracecmd_disable_plugins) + tep_set_flag(pevent, TEP_DISABLE_PLUGINS); + if (tracecmd_disable_sys_plugins) + tep_set_flag(pevent, TEP_DISABLE_SYS_PLUGINS); + trace_seq_init(&s); - list = tracecmd_load_plugins(pevent); + list = tep_load_plugins(pevent); tep_plugin_print_options(&s); trace_seq_do_printf(&s); - tracecmd_unload_plugins(list, pevent); + tep_unload_plugins(list, pevent); tep_free(pevent); } @@ -343,12 +348,18 @@ static void show_plugins(void) if (!pevent) die("Can not allocate pevent\n"); + if (tracecmd_disable_plugins) + tep_set_flag(pevent, TEP_DISABLE_PLUGINS); + if (tracecmd_disable_sys_plugins) + tep_set_flag(pevent, TEP_DISABLE_SYS_PLUGINS); + trace_seq_init(&s); - list = tracecmd_load_plugins(pevent); - trace_util_print_plugins(&s, " ", "\n", list); + list = tep_load_plugins(pevent); + tep_print_plugins(&s, " ", "\n", list); + trace_seq_do_printf(&s); - tracecmd_unload_plugins(list, pevent); + tep_unload_plugins(list, pevent); tep_free(pevent); }