|
@@ -1,1486 +0,0 @@
|
|
|
-From 4b6e124d8b5a0dfd21aedf21d2c347fc5f0705a2 Mon Sep 17 00:00:00 2001
|
|
|
-From: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com>
|
|
|
-Date: Thu, 12 Nov 2020 13:52:08 +0200
|
|
|
-Subject: [PATCH] trace-cmd: libtracecmd API cleanup
|
|
|
-
|
|
|
-The tracecmd library is used by trace-cmd and KernelShark applications.
|
|
|
-All APIs, that are not used by KernelShark are removed from trace-cmd.h.
|
|
|
-This is the first step to cleanup the library APIs and dependencies.
|
|
|
-
|
|
|
-Link: https://lore.kernel.org/linux-trace-devel/20201112115208.1250789-3-tz.stoyanov@gmail.com
|
|
|
-
|
|
|
-Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
|
|
|
-Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
|
-[Retrieved from:
|
|
|
-https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/commit/?id=4b6e124d8b5a0dfd21aedf21d2c347fc5f0705a2]
|
|
|
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
|
----
|
|
|
- Makefile | 2 +-
|
|
|
- include/trace-cmd/trace-cmd.h | 488 +-----------------
|
|
|
- include/trace-cmd/trace-filter-hash.h | 64 ---
|
|
|
- include/trace-cmd/trace-hash.h | 55 --
|
|
|
- include/trace-cmd/trace-msg.h | 15 -
|
|
|
- .../include/private/trace-cmd-private.h | 480 +++++++++++++++++
|
|
|
- .../include/private/trace-filter-hash.h | 64 +++
|
|
|
- lib/trace-cmd/include/private/trace-hash.h | 55 ++
|
|
|
- lib/trace-cmd/include/private/trace-msg.h | 15 +
|
|
|
- lib/trace-cmd/include/trace-cmd-local.h | 2 +
|
|
|
- lib/trace-cmd/trace-ftrace.c | 2 +-
|
|
|
- lib/trace-cmd/trace-hooks.c | 2 +-
|
|
|
- lib/trace-cmd/trace-recorder.c | 2 +-
|
|
|
- lib/trace-cmd/trace-timesync.c | 2 +-
|
|
|
- lib/trace-cmd/trace-util.c | 2 +-
|
|
|
- lib/traceevent/plugins/plugin_python_loader.c | 3 +-
|
|
|
- python/ctracecmd.i | 1 +
|
|
|
- tracecmd/include/trace-local.h | 2 +-
|
|
|
- 18 files changed, 637 insertions(+), 619 deletions(-)
|
|
|
- delete mode 100644 include/trace-cmd/trace-filter-hash.h
|
|
|
- delete mode 100644 include/trace-cmd/trace-hash.h
|
|
|
- delete mode 100644 include/trace-cmd/trace-msg.h
|
|
|
- create mode 100644 lib/trace-cmd/include/private/trace-cmd-private.h
|
|
|
- create mode 100644 lib/trace-cmd/include/private/trace-filter-hash.h
|
|
|
- create mode 100644 lib/trace-cmd/include/private/trace-hash.h
|
|
|
- create mode 100644 lib/trace-cmd/include/private/trace-msg.h
|
|
|
-
|
|
|
-diff --git a/Makefile b/Makefile
|
|
|
-index b034042..6ef6936 100644
|
|
|
---- a/Makefile
|
|
|
-+++ b/Makefile
|
|
|
-@@ -224,6 +224,7 @@ INCLUDES += -I$(src)/include/trace-cmd
|
|
|
- INCLUDES += -I$(src)/include/tracefs
|
|
|
- INCLUDES += -I$(src)/lib/traceevent/include
|
|
|
- INCLUDES += -I$(src)/lib/trace-cmd/include
|
|
|
-+INCLUDES += -I$(src)/lib/trace-cmd/include/private
|
|
|
- INCLUDES += -I$(src)/lib/tracefs/include
|
|
|
- INCLUDES += -I$(src)/tracecmd/include
|
|
|
- INCLUDES += -I$(obj)/tracecmd/include
|
|
|
-@@ -417,7 +418,6 @@ install_libs: libs
|
|
|
- $(Q)$(call do_install,$(src)/include/traceevent/event-parse.h,$(includedir_SQ)/traceevent)
|
|
|
- $(Q)$(call do_install,$(src)/include/traceevent/trace-seq.h,$(includedir_SQ)/traceevent)
|
|
|
- $(Q)$(call do_install,$(src)/include/trace-cmd/trace-cmd.h,$(includedir_SQ)/trace-cmd)
|
|
|
-- $(Q)$(call do_install,$(src)/include/trace-cmd/trace-filter-hash.h,$(includedir_SQ)/trace-cmd)
|
|
|
- $(Q)$(call do_install,$(src)/include/tracefs/tracefs.h,$(includedir_SQ)/tracefs)
|
|
|
- $(Q)$(call do_install_ld,$(TRACE_LD_FILE),$(LD_SO_CONF_DIR),$(libdir_SQ)/trace-cmd)
|
|
|
- $(Q)$(call do_install_ld,$(TRACE_LD_FILE),$(LD_SO_CONF_DIR),$(libdir_SQ)/traceevent)
|
|
|
-diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h
|
|
|
-index 3c2b474..9751ac3 100644
|
|
|
---- a/include/trace-cmd/trace-cmd.h
|
|
|
-+++ b/include/trace-cmd/trace-cmd.h
|
|
|
-@@ -9,497 +9,31 @@
|
|
|
- #include "traceevent/event-parse.h"
|
|
|
- #include "tracefs/tracefs.h"
|
|
|
-
|
|
|
--#define TRACECMD_MAGIC { 23, 8, 68 }
|
|
|
--
|
|
|
--#define ARRAY_SIZE(_a) (sizeof(_a) / sizeof((_a)[0]))
|
|
|
--#define __weak __attribute__((weak))
|
|
|
--#define __noreturn __attribute__((noreturn))
|
|
|
--
|
|
|
--#define TRACECMD_ERR_MSK ((unsigned long)(-1) & ~((1UL << 14) - 1))
|
|
|
--#define TRACECMD_ISERR(ptr) ((unsigned long)(ptr) > TRACECMD_ERR_MSK)
|
|
|
--#define TRACECMD_ERROR(ret) ((void *)((unsigned long)(ret) | TRACECMD_ERR_MSK))
|
|
|
--#define TRACECMD_PTR2ERR(ptr) ((unisgned long)(ptr) & ~TRACECMD_ERR_MSK)
|
|
|
--
|
|
|
--void tracecmd_parse_cmdlines(struct tep_handle *pevent, char *file, int size);
|
|
|
--void tracecmd_parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size);
|
|
|
--void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size);
|
|
|
--struct tep_plugin_list *trace_load_plugins(struct tep_handle *tep);
|
|
|
--
|
|
|
--int *tracecmd_add_id(int *list, int id, int len);
|
|
|
--
|
|
|
--enum {
|
|
|
-- RINGBUF_TYPE_PADDING = 29,
|
|
|
-- RINGBUF_TYPE_TIME_EXTEND = 30,
|
|
|
-- RINGBUF_TYPE_TIME_STAMP = 31,
|
|
|
--};
|
|
|
--
|
|
|
--void tracecmd_record_ref(struct tep_record *record);
|
|
|
--void free_record(struct tep_record *record);
|
|
|
--
|
|
|
--void tracecmd_set_debug(bool set_debug);
|
|
|
--bool tracecmd_get_debug(void);
|
|
|
--
|
|
|
- struct tracecmd_input;
|
|
|
--struct tracecmd_output;
|
|
|
--struct tracecmd_recorder;
|
|
|
--struct hook_list;
|
|
|
--
|
|
|
--/* --- tracecmd plugins --- */
|
|
|
--
|
|
|
--extern int tracecmd_disable_sys_plugins;
|
|
|
--extern int tracecmd_disable_plugins;
|
|
|
--
|
|
|
--enum tracecmd_context {
|
|
|
-- TRACECMD_INPUT,
|
|
|
-- TRACECMD_OUTPUT,
|
|
|
--};
|
|
|
--
|
|
|
--enum tracecmd_plugin_flag {
|
|
|
-- TRACECMD_DISABLE_SYS_PLUGINS = 1,
|
|
|
-- TRACECMD_DISABLE_PLUGINS = 1 << 1,
|
|
|
--};
|
|
|
--
|
|
|
--struct trace_plugin_context;
|
|
|
--
|
|
|
--struct trace_plugin_context *
|
|
|
--tracecmd_plugin_context_create(enum tracecmd_context context, void *data);
|
|
|
--
|
|
|
--void tracecmd_plugin_set_flag(struct trace_plugin_context *context,
|
|
|
-- enum tracecmd_plugin_flag flag);
|
|
|
--
|
|
|
--#define TRACECMD_PLUGIN_LOADER tracecmd_plugin_loader
|
|
|
--#define TRACECMD_PLUGIN_UNLOADER tracecmd_plugin_unloader
|
|
|
--#define TRACECMD_PLUGIN_ALIAS tracecmd_plugin_alias
|
|
|
--#define _MAKE_STR(x) #x
|
|
|
--#define MAKE_STR(x) _MAKE_STR(x)
|
|
|
--#define TRACECMD_PLUGIN_LOADER_NAME MAKE_STR(TRACECMD_PLUGIN_LOADER)
|
|
|
--#define TRACECMD_PLUGIN_UNLOADER_NAME MAKE_STR(TRACECMD_PLUGIN_UNLOADER)
|
|
|
--#define TRACECMD_PLUGIN_ALIAS_NAME MAKE_STR(TRACECMD_PLUGIN_ALIAS)
|
|
|
--
|
|
|
--typedef int (*tracecmd_plugin_load_func)(struct trace_plugin_context *trace);
|
|
|
--typedef int (*tracecmd_plugin_unload_func)(struct trace_plugin_context *trace);
|
|
|
--
|
|
|
--struct tracecmd_input *
|
|
|
--tracecmd_plugin_context_input(struct trace_plugin_context *trace_context);
|
|
|
--struct tracecmd_output *
|
|
|
--tracecmd_plugin_context_output(struct trace_plugin_context *trace_context);
|
|
|
--
|
|
|
--void tracecmd_set_quiet(struct tracecmd_output *handle, bool set_quiet);
|
|
|
--bool tracecmd_get_quiet(struct tracecmd_output *handle);
|
|
|
--
|
|
|
--static inline int tracecmd_host_bigendian(void)
|
|
|
--{
|
|
|
-- unsigned char str[] = { 0x1, 0x2, 0x3, 0x4 };
|
|
|
-- unsigned int *ptr;
|
|
|
--
|
|
|
-- ptr = (unsigned int *)str;
|
|
|
-- return *ptr == 0x01020304;
|
|
|
--}
|
|
|
--
|
|
|
--/* --- Opening and Reading the trace.dat file --- */
|
|
|
--
|
|
|
--enum {
|
|
|
-- TRACECMD_OPTION_DONE,
|
|
|
-- TRACECMD_OPTION_DATE,
|
|
|
-- TRACECMD_OPTION_CPUSTAT,
|
|
|
-- TRACECMD_OPTION_BUFFER,
|
|
|
-- TRACECMD_OPTION_TRACECLOCK,
|
|
|
-- TRACECMD_OPTION_UNAME,
|
|
|
-- TRACECMD_OPTION_HOOK,
|
|
|
-- TRACECMD_OPTION_OFFSET,
|
|
|
-- TRACECMD_OPTION_CPUCOUNT,
|
|
|
-- TRACECMD_OPTION_VERSION,
|
|
|
-- TRACECMD_OPTION_PROCMAPS,
|
|
|
-- TRACECMD_OPTION_TRACEID,
|
|
|
-- TRACECMD_OPTION_TIME_SHIFT,
|
|
|
-- TRACECMD_OPTION_GUEST,
|
|
|
--};
|
|
|
--
|
|
|
--enum {
|
|
|
-- TRACECMD_FL_IGNORE_DATE = (1 << 0),
|
|
|
-- TRACECMD_FL_BUFFER_INSTANCE = (1 << 1),
|
|
|
-- TRACECMD_FL_LATENCY = (1 << 2),
|
|
|
-- TRACECMD_FL_IN_USECS = (1 << 3),
|
|
|
-- TRACECMD_FL_FLYRECORD = (1 << 4),
|
|
|
--};
|
|
|
--
|
|
|
--struct tracecmd_ftrace {
|
|
|
-- struct tracecmd_input *handle;
|
|
|
-- struct tep_event *fgraph_ret_event;
|
|
|
-- int fgraph_ret_id;
|
|
|
-- int long_size;
|
|
|
--};
|
|
|
--
|
|
|
--struct tracecmd_proc_addr_map {
|
|
|
-- unsigned long long start;
|
|
|
-- unsigned long long end;
|
|
|
-- char *lib_name;
|
|
|
--};
|
|
|
--
|
|
|
--typedef void (*tracecmd_show_data_func)(struct tracecmd_input *handle,
|
|
|
-- struct tep_record *record);
|
|
|
--typedef void (*tracecmd_handle_init_func)(struct tracecmd_input *handle,
|
|
|
-- struct hook_list *hook, int global);
|
|
|
-
|
|
|
--struct tracecmd_input *tracecmd_alloc(const char *file);
|
|
|
--struct tracecmd_input *tracecmd_alloc_fd(int fd);
|
|
|
--struct tracecmd_input *tracecmd_open(const char *file);
|
|
|
- struct tracecmd_input *tracecmd_open_head(const char *file);
|
|
|
--struct tracecmd_input *tracecmd_open_fd(int fd);
|
|
|
-+void tracecmd_close(struct tracecmd_input *handle);
|
|
|
- int tracecmd_pair_peer(struct tracecmd_input *handle,
|
|
|
- struct tracecmd_input *peer);
|
|
|
--void tracecmd_unpair_peer(struct tracecmd_input *handle);
|
|
|
--void tracecmd_ref(struct tracecmd_input *handle);
|
|
|
--void tracecmd_close(struct tracecmd_input *handle);
|
|
|
--int tracecmd_read_headers(struct tracecmd_input *handle);
|
|
|
--int tracecmd_get_parsing_failures(struct tracecmd_input *handle);
|
|
|
--int tracecmd_long_size(struct tracecmd_input *handle);
|
|
|
--int tracecmd_page_size(struct tracecmd_input *handle);
|
|
|
--int tracecmd_cpus(struct tracecmd_input *handle);
|
|
|
--int tracecmd_copy_headers(struct tracecmd_input *handle, int fd);
|
|
|
--void tracecmd_set_flag(struct tracecmd_input *handle, int flag);
|
|
|
--void tracecmd_clear_flag(struct tracecmd_input *handle, int flag);
|
|
|
--unsigned long tracecmd_get_flags(struct tracecmd_input *handle);
|
|
|
--unsigned long long tracecmd_get_traceid(struct tracecmd_input *handle);
|
|
|
--int tracecmd_get_guest_cpumap(struct tracecmd_input *handle,
|
|
|
-- unsigned long long trace_id,
|
|
|
-- const char **name,
|
|
|
-- int *vcpu_count, const int **cpu_pid);
|
|
|
--unsigned long long tracecmd_get_tsync_peer(struct tracecmd_input *handle);
|
|
|
--int tracecmd_enable_tsync(struct tracecmd_input *handle, bool enable);
|
|
|
--
|
|
|
--void tracecmd_parse_trace_clock(struct tracecmd_input *handle, char *file, int size);
|
|
|
--
|
|
|
--int tracecmd_make_pipe(struct tracecmd_input *handle, int cpu, int fd, int cpus);
|
|
|
--
|
|
|
--int tracecmd_buffer_instances(struct tracecmd_input *handle);
|
|
|
--const char *tracecmd_buffer_instance_name(struct tracecmd_input *handle, int indx);
|
|
|
--struct tracecmd_input *tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx);
|
|
|
--int tracecmd_is_buffer_instance(struct tracecmd_input *handle);
|
|
|
--
|
|
|
--void tracecmd_set_ts_offset(struct tracecmd_input *handle, long long offset);
|
|
|
--void tracecmd_set_ts2secs(struct tracecmd_input *handle, unsigned long long hz);
|
|
|
--
|
|
|
--void tracecmd_print_events(struct tracecmd_input *handle, const char *regex);
|
|
|
--
|
|
|
--struct hook_list *tracecmd_hooks(struct tracecmd_input *handle);
|
|
|
-
|
|
|
- int tracecmd_init_data(struct tracecmd_input *handle);
|
|
|
--
|
|
|
--void tracecmd_print_stats(struct tracecmd_input *handle);
|
|
|
--void tracecmd_print_uname(struct tracecmd_input *handle);
|
|
|
--void tracecmd_print_version(struct tracecmd_input *handle);
|
|
|
--
|
|
|
- struct tep_record *
|
|
|
--tracecmd_peek_data(struct tracecmd_input *handle, int cpu);
|
|
|
--
|
|
|
--static inline struct tep_record *
|
|
|
--tracecmd_peek_data_ref(struct tracecmd_input *handle, int cpu)
|
|
|
--{
|
|
|
-- struct tep_record *rec = tracecmd_peek_data(handle, cpu);
|
|
|
-- if (rec)
|
|
|
-- rec->ref_count++;
|
|
|
-- return rec;
|
|
|
--}
|
|
|
--
|
|
|
-+tracecmd_read_cpu_first(struct tracecmd_input *handle, int cpu);
|
|
|
- struct tep_record *
|
|
|
- tracecmd_read_data(struct tracecmd_input *handle, int cpu);
|
|
|
--
|
|
|
--struct tep_record *
|
|
|
--tracecmd_read_prev(struct tracecmd_input *handle, struct tep_record *record);
|
|
|
--
|
|
|
--struct tep_record *
|
|
|
--tracecmd_read_next_data(struct tracecmd_input *handle, int *rec_cpu);
|
|
|
--
|
|
|
--struct tep_record *
|
|
|
--tracecmd_peek_next_data(struct tracecmd_input *handle, int *rec_cpu);
|
|
|
--
|
|
|
- struct tep_record *
|
|
|
- tracecmd_read_at(struct tracecmd_input *handle, unsigned long long offset,
|
|
|
- int *cpu);
|
|
|
--struct tep_record *
|
|
|
--tracecmd_translate_data(struct tracecmd_input *handle,
|
|
|
-- void *ptr, int size);
|
|
|
--struct tep_record *
|
|
|
--tracecmd_read_cpu_first(struct tracecmd_input *handle, int cpu);
|
|
|
--struct tep_record *
|
|
|
--tracecmd_read_cpu_last(struct tracecmd_input *handle, int cpu);
|
|
|
--int tracecmd_refresh_record(struct tracecmd_input *handle,
|
|
|
-- struct tep_record *record);
|
|
|
--
|
|
|
--int tracecmd_set_cpu_to_timestamp(struct tracecmd_input *handle,
|
|
|
-- int cpu, unsigned long long ts);
|
|
|
--void
|
|
|
--tracecmd_set_all_cpus_to_timestamp(struct tracecmd_input *handle,
|
|
|
-- unsigned long long time);
|
|
|
--
|
|
|
--int tracecmd_set_cursor(struct tracecmd_input *handle,
|
|
|
-- int cpu, unsigned long long offset);
|
|
|
--unsigned long long
|
|
|
--tracecmd_get_cursor(struct tracecmd_input *handle, int cpu);
|
|
|
-+void free_record(struct tep_record *record);
|
|
|
-
|
|
|
--int tracecmd_ftrace_overrides(struct tracecmd_input *handle, struct tracecmd_ftrace *finfo);
|
|
|
- struct tep_handle *tracecmd_get_pevent(struct tracecmd_input *handle);
|
|
|
--bool tracecmd_get_use_trace_clock(struct tracecmd_input *handle);
|
|
|
--tracecmd_show_data_func
|
|
|
--tracecmd_get_show_data_func(struct tracecmd_input *handle);
|
|
|
--void tracecmd_set_show_data_func(struct tracecmd_input *handle,
|
|
|
-- tracecmd_show_data_func func);
|
|
|
--
|
|
|
--int tracecmd_record_at_buffer_start(struct tracecmd_input *handle, struct tep_record *record);
|
|
|
--unsigned long long tracecmd_page_ts(struct tracecmd_input *handle,
|
|
|
-- struct tep_record *record);
|
|
|
--unsigned int tracecmd_record_ts_delta(struct tracecmd_input *handle,
|
|
|
-- struct tep_record *record);
|
|
|
--
|
|
|
--struct tracecmd_proc_addr_map *
|
|
|
--tracecmd_search_task_map(struct tracecmd_input *handle,
|
|
|
-- int pid, unsigned long long addr);
|
|
|
--#ifndef SWIG
|
|
|
--/* hack for function graph work around */
|
|
|
--extern __thread struct tracecmd_input *tracecmd_curr_thread_handle;
|
|
|
--#endif
|
|
|
--
|
|
|
--
|
|
|
--/* --- Creating and Writing the trace.dat file --- */
|
|
|
--
|
|
|
--struct tracecmd_event_list {
|
|
|
-- struct tracecmd_event_list *next;
|
|
|
-- const char *glob;
|
|
|
--};
|
|
|
--
|
|
|
--struct tracecmd_option;
|
|
|
--struct tracecmd_msg_handle;
|
|
|
--
|
|
|
--struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus);
|
|
|
--struct tracecmd_output *tracecmd_create_file(const char *output_file,
|
|
|
-- int cpus, char * const *cpu_data_files);
|
|
|
--struct tracecmd_output *
|
|
|
--tracecmd_create_file_glob(const char *output_file,
|
|
|
-- int cpus, char * const *cpu_data_files,
|
|
|
-- struct tracecmd_event_list *event_globs);
|
|
|
--struct tracecmd_output *
|
|
|
--tracecmd_create_init_file_glob(const char *output_file,
|
|
|
-- struct tracecmd_event_list *list);
|
|
|
--struct tracecmd_output *tracecmd_create_init_fd(int fd);
|
|
|
--struct tracecmd_output *
|
|
|
--tracecmd_create_init_fd_glob(int fd, struct tracecmd_event_list *list);
|
|
|
--struct tracecmd_output *
|
|
|
--tracecmd_create_init_fd_msg(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- struct tracecmd_event_list *list);
|
|
|
--struct tracecmd_output *tracecmd_create_init_file(const char *output_file);
|
|
|
--struct tracecmd_output *tracecmd_create_init_file_override(const char *output_file,
|
|
|
-- const char *tracing_dir,
|
|
|
-- const char *kallsyms);
|
|
|
--struct tracecmd_option *tracecmd_add_option(struct tracecmd_output *handle,
|
|
|
-- unsigned short id, int size,
|
|
|
-- const void *data);
|
|
|
--struct tracecmd_option *
|
|
|
--tracecmd_add_option_v(struct tracecmd_output *handle,
|
|
|
-- unsigned short id, const struct iovec *vector, int count);
|
|
|
--
|
|
|
--struct tracecmd_option *tracecmd_add_buffer_option(struct tracecmd_output *handle,
|
|
|
-- const char *name, int cpus);
|
|
|
--
|
|
|
--int tracecmd_write_cpus(struct tracecmd_output *handle, int cpus);
|
|
|
--int tracecmd_write_options(struct tracecmd_output *handle);
|
|
|
--int tracecmd_append_options(struct tracecmd_output *handle);
|
|
|
--int tracecmd_update_option(struct tracecmd_output *handle,
|
|
|
-- struct tracecmd_option *option, int size,
|
|
|
-- const void *data);
|
|
|
--void tracecmd_output_close(struct tracecmd_output *handle);
|
|
|
--void tracecmd_output_free(struct tracecmd_output *handle);
|
|
|
--struct tracecmd_output *tracecmd_copy(struct tracecmd_input *ihandle,
|
|
|
-- const char *file);
|
|
|
--
|
|
|
--int tracecmd_write_cpu_data(struct tracecmd_output *handle,
|
|
|
-- int cpus, char * const *cpu_data_files);
|
|
|
--int tracecmd_append_cpu_data(struct tracecmd_output *handle,
|
|
|
-- int cpus, char * const *cpu_data_files);
|
|
|
--int tracecmd_append_buffer_cpu_data(struct tracecmd_output *handle,
|
|
|
-- struct tracecmd_option *option,
|
|
|
-- int cpus, char * const *cpu_data_files);
|
|
|
--
|
|
|
--struct tracecmd_output *tracecmd_get_output_handle_fd(int fd);
|
|
|
--
|
|
|
--/* --- Reading the Fly Recorder Trace --- */
|
|
|
--
|
|
|
--enum {
|
|
|
-- TRACECMD_RECORD_NOSPLICE = (1 << 0), /* Use read instead of splice */
|
|
|
-- TRACECMD_RECORD_SNAPSHOT = (1 << 1), /* Extract from snapshot */
|
|
|
-- TRACECMD_RECORD_BLOCK = (1 << 2), /* Block on splice write */
|
|
|
-- TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */
|
|
|
--};
|
|
|
--
|
|
|
--void tracecmd_free_recorder(struct tracecmd_recorder *recorder);
|
|
|
--struct tracecmd_recorder *tracecmd_create_recorder(const char *file, int cpu, unsigned flags);
|
|
|
--struct tracecmd_recorder *tracecmd_create_recorder_fd(int fd, int cpu, unsigned flags);
|
|
|
--struct tracecmd_recorder *tracecmd_create_recorder_virt(const char *file, int cpu, unsigned flags, int trace_fd);
|
|
|
--struct tracecmd_recorder *tracecmd_create_recorder_maxkb(const char *file, int cpu, unsigned flags, int maxkb);
|
|
|
--struct tracecmd_recorder *tracecmd_create_buffer_recorder_fd(int fd, int cpu, unsigned flags, const char *buffer);
|
|
|
--struct tracecmd_recorder *tracecmd_create_buffer_recorder(const char *file, int cpu, unsigned flags, const char *buffer);
|
|
|
--struct tracecmd_recorder *tracecmd_create_buffer_recorder_maxkb(const char *file, int cpu, unsigned flags, const char *buffer, int maxkb);
|
|
|
--
|
|
|
--int tracecmd_start_recording(struct tracecmd_recorder *recorder, unsigned long sleep);
|
|
|
--void tracecmd_stop_recording(struct tracecmd_recorder *recorder);
|
|
|
--long tracecmd_flush_recording(struct tracecmd_recorder *recorder);
|
|
|
--
|
|
|
--enum tracecmd_msg_flags {
|
|
|
-- TRACECMD_MSG_FL_USE_TCP = 1 << 0,
|
|
|
--};
|
|
|
--
|
|
|
--/* for both client and server */
|
|
|
--struct tracecmd_msg_handle {
|
|
|
-- int fd;
|
|
|
-- short cpu_count;
|
|
|
-- short version; /* Current protocol version */
|
|
|
-- unsigned long flags;
|
|
|
-- bool done;
|
|
|
--};
|
|
|
--
|
|
|
--struct tracecmd_msg_handle *
|
|
|
-- tracecmd_msg_handle_alloc(int fd, unsigned long flags);
|
|
|
--
|
|
|
--/* Closes the socket and frees the handle */
|
|
|
--void tracecmd_msg_handle_close(struct tracecmd_msg_handle *msg_handle);
|
|
|
--
|
|
|
--/* for clients */
|
|
|
--int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- unsigned int **client_ports);
|
|
|
--int tracecmd_msg_data_send(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- const char *buf, int size);
|
|
|
--int tracecmd_msg_finish_sending_data(struct tracecmd_msg_handle *msg_handle);
|
|
|
--int tracecmd_msg_send_close_msg(struct tracecmd_msg_handle *msg_handle);
|
|
|
--int tracecmd_msg_send_close_resp_msg(struct tracecmd_msg_handle *msg_handle);
|
|
|
--int tracecmd_msg_wait_close(struct tracecmd_msg_handle *msg_handle);
|
|
|
--int tracecmd_msg_wait_close_resp(struct tracecmd_msg_handle *msg_handle);
|
|
|
--
|
|
|
--/* for server */
|
|
|
--int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle);
|
|
|
--int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- unsigned *ports);
|
|
|
--int tracecmd_msg_read_data(struct tracecmd_msg_handle *msg_handle, int ofd);
|
|
|
--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);
|
|
|
--
|
|
|
--int tracecmd_msg_send_trace_req(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- int argc, char **argv, bool use_fifos,
|
|
|
-- unsigned long long trace_id,
|
|
|
-- char *tsync_protos,
|
|
|
-- int tsync_protos_size);
|
|
|
--int tracecmd_msg_recv_trace_req(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- int *argc, char ***argv, bool *use_fifos,
|
|
|
-- unsigned long long *trace_id,
|
|
|
-- char **tsync_protos,
|
|
|
-- unsigned int *tsync_protos_size);
|
|
|
--
|
|
|
--int tracecmd_msg_send_trace_resp(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- int nr_cpus, int page_size,
|
|
|
-- unsigned int *ports, bool use_fifos,
|
|
|
-- unsigned long long trace_id,
|
|
|
-- unsigned int tsync_proto,
|
|
|
-- unsigned int tsync_port);
|
|
|
--int tracecmd_msg_recv_trace_resp(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- int *nr_cpus, int *page_size,
|
|
|
-- unsigned int **ports, bool *use_fifos,
|
|
|
-- unsigned long long *trace_id,
|
|
|
-- unsigned int *tsync_proto,
|
|
|
-- unsigned int *tsync_port);
|
|
|
--
|
|
|
--int tracecmd_msg_send_time_sync(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- unsigned int sync_protocol,
|
|
|
-- unsigned int sync_msg_id,
|
|
|
-- unsigned int payload_size, char *payload);
|
|
|
--int tracecmd_msg_recv_time_sync(struct tracecmd_msg_handle *msg_handle,
|
|
|
-- unsigned int *sync_protocol,
|
|
|
-- unsigned int *sync_msg_id,
|
|
|
-- unsigned int *payload_size, char **payload);
|
|
|
--
|
|
|
--/* --- Timestamp synchronization --- */
|
|
|
--
|
|
|
--enum{
|
|
|
-- TRACECMD_TIME_SYNC_PROTO_NONE = 0,
|
|
|
--};
|
|
|
--enum{
|
|
|
-- TRACECMD_TIME_SYNC_CMD_PROBE = 1,
|
|
|
-- TRACECMD_TIME_SYNC_CMD_STOP = 2,
|
|
|
--};
|
|
|
--
|
|
|
--#define TRACECMD_TIME_SYNC_PROTO_PTP_WEIGHT 10
|
|
|
--
|
|
|
--struct tracecmd_time_sync {
|
|
|
-- unsigned int sync_proto;
|
|
|
-- int loop_interval;
|
|
|
-- pthread_mutex_t lock;
|
|
|
-- pthread_cond_t cond;
|
|
|
-- char *clock_str;
|
|
|
-- struct tracecmd_msg_handle *msg_handle;
|
|
|
-- void *context;
|
|
|
--};
|
|
|
--
|
|
|
--void tracecmd_tsync_init(void);
|
|
|
--int tracecmd_tsync_proto_getall(char **proto_mask, int *words);
|
|
|
--unsigned int tracecmd_tsync_proto_select(char *proto_mask, int words);
|
|
|
--bool tsync_proto_is_supported(unsigned int proto_id);
|
|
|
--void tracecmd_tsync_with_host(struct tracecmd_time_sync *tsync);
|
|
|
--void tracecmd_tsync_with_guest(struct tracecmd_time_sync *tsync);
|
|
|
--int tracecmd_tsync_get_offsets(struct tracecmd_time_sync *tsync,
|
|
|
-- int *count,
|
|
|
-- long long **ts, long long **offsets);
|
|
|
--void tracecmd_tsync_free(struct tracecmd_time_sync *tsync);
|
|
|
--
|
|
|
--/* --- Plugin handling --- */
|
|
|
--extern struct tep_plugin_option trace_ftrace_options[];
|
|
|
--
|
|
|
--char **trace_util_find_plugin_files(const char *suffix);
|
|
|
--void trace_util_free_plugin_files(char **files);
|
|
|
--
|
|
|
--/* Used for trace-cmd list */
|
|
|
--void tracecmd_ftrace_load_options(void);
|
|
|
--
|
|
|
--/* event hooks */
|
|
|
--
|
|
|
--struct hook_list {
|
|
|
-- struct hook_list *next;
|
|
|
-- struct buffer_instance *instance;
|
|
|
-- const char *hook;
|
|
|
-- char *str;
|
|
|
-- char *start_system;
|
|
|
-- char *start_event;
|
|
|
-- char *start_match;
|
|
|
-- char *end_system;
|
|
|
-- char *end_event;
|
|
|
-- char *end_match;
|
|
|
-- char *pid;
|
|
|
-- int migrate;
|
|
|
-- int global;
|
|
|
-- int stack;
|
|
|
--};
|
|
|
--
|
|
|
--struct hook_list *tracecmd_create_event_hook(const char *arg);
|
|
|
--void tracecmd_free_hooks(struct hook_list *hooks);
|
|
|
--
|
|
|
--void tracecmd_plog(const char *fmt, ...);
|
|
|
--void tracecmd_plog_error(const char *fmt, ...);
|
|
|
--int tracecmd_set_logfile(char *logfile);
|
|
|
--
|
|
|
--/* --- System --- */
|
|
|
--unsigned long long tracecmd_generate_traceid(void);
|
|
|
--int tracecmd_count_cpus(void);
|
|
|
--
|
|
|
--/* --- Hack! --- */
|
|
|
--int tracecmd_blk_hack(struct tracecmd_input *handle);
|
|
|
--
|
|
|
--/* --- Stack tracer functions --- */
|
|
|
--int tracecmd_stack_tracer_status(int *status);
|
|
|
--
|
|
|
--/* --- Debugging --- */
|
|
|
--struct kbuffer *tracecmd_record_kbuf(struct tracecmd_input *handle,
|
|
|
-- struct tep_record *record);
|
|
|
--void *tracecmd_record_page(struct tracecmd_input *handle,
|
|
|
-- struct tep_record *record);
|
|
|
--void *tracecmd_record_offset(struct tracecmd_input *handle,
|
|
|
-- struct tep_record *record);
|
|
|
-+unsigned long long tracecmd_get_traceid(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_get_guest_cpumap(struct tracecmd_input *handle,
|
|
|
-+ unsigned long long trace_id,
|
|
|
-+ const char **name,
|
|
|
-+ int *vcpu_count, const int **cpu_pid);
|
|
|
-+int tracecmd_buffer_instances(struct tracecmd_input *handle);
|
|
|
-+const char *tracecmd_buffer_instance_name(struct tracecmd_input *handle, int indx);
|
|
|
-+struct tracecmd_input *tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx);
|
|
|
-
|
|
|
- #endif /* _TRACE_CMD_H */
|
|
|
-diff --git a/include/trace-cmd/trace-filter-hash.h b/include/trace-cmd/trace-filter-hash.h
|
|
|
-deleted file mode 100644
|
|
|
-index 4111c41..0000000
|
|
|
---- a/include/trace-cmd/trace-filter-hash.h
|
|
|
-+++ /dev/null
|
|
|
-@@ -1,64 +0,0 @@
|
|
|
--/* SPDX-License-Identifier: LGPL-2.1 */
|
|
|
--/*
|
|
|
-- * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
|
|
|
-- * Copyright (C) 2018 VMware Inc, Steven Rostedt <rostedt@goodmis.org>
|
|
|
-- *
|
|
|
-- */
|
|
|
--#ifndef _TRACE_FILTER_HASH_H
|
|
|
--#define _TRACE_FILTER_HASH_H
|
|
|
--
|
|
|
--#include <stdint.h>
|
|
|
--
|
|
|
--struct tracecmd_filter_id_item {
|
|
|
-- struct tracecmd_filter_id_item *next;
|
|
|
-- int id;
|
|
|
--};
|
|
|
--
|
|
|
--struct tracecmd_filter_id {
|
|
|
-- struct tracecmd_filter_id_item **hash;
|
|
|
-- int count;
|
|
|
--};
|
|
|
--
|
|
|
--/**
|
|
|
-- * tracecmd_quick_hash - A quick (non secured) hash alogirthm
|
|
|
-- * @val: The value to perform the hash on
|
|
|
-- * @bits: The size in bits you need to return
|
|
|
-- *
|
|
|
-- * This is a quick hashing function adapted from Donald E. Knuth's 32
|
|
|
-- * bit multiplicative hash. See The Art of Computer Programming (TAOCP).
|
|
|
-- * Multiplication by the Prime number, closest to the golden ratio of
|
|
|
-- * 2^32.
|
|
|
-- *
|
|
|
-- * @bits is used to max the result for use cases that require
|
|
|
-- * a power of 2 return value that is less than 32 bits. Any value
|
|
|
-- * of @bits greater than 31 (or zero), will simply return the full hash on @val.
|
|
|
-- */
|
|
|
--static inline uint32_t tracecmd_quick_hash(uint32_t val, unsigned int bits)
|
|
|
--{
|
|
|
-- val *= UINT32_C(2654435761);
|
|
|
--
|
|
|
-- if (!bits || bits > 31)
|
|
|
-- return val;
|
|
|
--
|
|
|
-- return val & ((1 << bits) - 1);
|
|
|
--}
|
|
|
--
|
|
|
--struct tracecmd_filter_id_item *
|
|
|
-- tracecmd_filter_id_find(struct tracecmd_filter_id *hash, int id);
|
|
|
--void tracecmd_filter_id_add(struct tracecmd_filter_id *hash, int id);
|
|
|
--void tracecmd_filter_id_remove(struct tracecmd_filter_id *hash, int id);
|
|
|
--void tracecmd_filter_id_clear(struct tracecmd_filter_id *hash);
|
|
|
--struct tracecmd_filter_id *tracecmd_filter_id_hash_alloc(void);
|
|
|
--void tracecmd_filter_id_hash_free(struct tracecmd_filter_id *hash);
|
|
|
--struct tracecmd_filter_id *
|
|
|
-- tracecmd_filter_id_hash_copy(struct tracecmd_filter_id *hash);
|
|
|
--int *tracecmd_filter_ids(struct tracecmd_filter_id *hash);
|
|
|
--int tracecmd_filter_id_compare(struct tracecmd_filter_id *hash1,
|
|
|
-- struct tracecmd_filter_id *hash2);
|
|
|
--
|
|
|
--static inline int tracecmd_filter_task_count(struct tracecmd_filter_id *hash)
|
|
|
--{
|
|
|
-- return hash->count;
|
|
|
--}
|
|
|
--
|
|
|
--#endif /* _TRACE_FILTER_HASH_H */
|
|
|
-diff --git a/include/trace-cmd/trace-hash.h b/include/trace-cmd/trace-hash.h
|
|
|
-deleted file mode 100644
|
|
|
-index aa92cdf..0000000
|
|
|
---- a/include/trace-cmd/trace-hash.h
|
|
|
-+++ /dev/null
|
|
|
-@@ -1,55 +0,0 @@
|
|
|
--/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
--/*
|
|
|
-- * Copyright (C) 2014 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
|
|
|
-- *
|
|
|
-- */
|
|
|
--#ifndef _TRACE_HASH_H
|
|
|
--#define _TRACE_HASH_H
|
|
|
--
|
|
|
--struct trace_hash_item {
|
|
|
-- struct trace_hash_item *next;
|
|
|
-- struct trace_hash_item *prev;
|
|
|
-- unsigned long long key;
|
|
|
--};
|
|
|
--
|
|
|
--struct trace_hash {
|
|
|
-- struct trace_hash_item **buckets;
|
|
|
-- int nr_buckets;
|
|
|
-- int power;
|
|
|
--};
|
|
|
--
|
|
|
--int trace_hash_init(struct trace_hash *hash, int buckets);
|
|
|
--void trace_hash_free(struct trace_hash *hash);
|
|
|
--int trace_hash_add(struct trace_hash *hash, struct trace_hash_item *item);
|
|
|
--int trace_hash_empty(struct trace_hash *hash);
|
|
|
--
|
|
|
--static inline void trace_hash_del(struct trace_hash_item *item)
|
|
|
--{
|
|
|
-- struct trace_hash_item *prev = item->prev;
|
|
|
--
|
|
|
-- prev->next = item->next;
|
|
|
-- if (item->next)
|
|
|
-- item->next->prev = prev;
|
|
|
--}
|
|
|
--
|
|
|
--#define trace_hash_for_each_bucket(bucket, hash) \
|
|
|
-- for (bucket = (hash)->buckets; \
|
|
|
-- (bucket) < (hash)->buckets + (hash)->nr_buckets; (bucket)++)
|
|
|
--
|
|
|
--#define trace_hash_for_each_item(item, bucket) \
|
|
|
-- for ((item = *(bucket)); item; item = (item)->next)
|
|
|
--
|
|
|
--#define trace_hash_for_each_item_safe(item, n, bucket) \
|
|
|
-- for ((item = *(bucket)), n = item ? item->next : NULL; item; \
|
|
|
-- item = n, n = item ? (item)->next : NULL)
|
|
|
--
|
|
|
--#define trace_hash_while_item(item, bucket) \
|
|
|
-- while ((item = *(bucket)))
|
|
|
--
|
|
|
--typedef int (*trace_hash_func)(struct trace_hash_item *item, void *data);
|
|
|
--
|
|
|
--struct trace_hash_item *
|
|
|
--trace_hash_find(struct trace_hash *hash, unsigned long long key,
|
|
|
-- trace_hash_func match, void *data);
|
|
|
--
|
|
|
--#endif /* _TRACE_HASH_H */
|
|
|
-diff --git a/include/trace-cmd/trace-msg.h b/include/trace-cmd/trace-msg.h
|
|
|
-deleted file mode 100644
|
|
|
-index aab8a69..0000000
|
|
|
---- a/include/trace-cmd/trace-msg.h
|
|
|
-+++ /dev/null
|
|
|
-@@ -1,15 +0,0 @@
|
|
|
--#ifndef _TRACE_MSG_H_
|
|
|
--#define _TRACE_MSG_H_
|
|
|
--
|
|
|
--#include <stdbool.h>
|
|
|
--
|
|
|
--#define UDP_MAX_PACKET (65536 - 20)
|
|
|
--#define V3_MAGIC "766679\0"
|
|
|
--#define V3_CPU "-1V3"
|
|
|
--
|
|
|
--#define V1_PROTOCOL 1
|
|
|
--#define V3_PROTOCOL 3
|
|
|
--
|
|
|
--extern unsigned int page_size;
|
|
|
--
|
|
|
--#endif /* _TRACE_MSG_H_ */
|
|
|
-diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h
|
|
|
-new file mode 100644
|
|
|
-index 0000000..458760e
|
|
|
---- /dev/null
|
|
|
-+++ b/lib/trace-cmd/include/private/trace-cmd-private.h
|
|
|
-@@ -0,0 +1,480 @@
|
|
|
-+/* SPDX-License-Identifier: LGPL-2.1 */
|
|
|
-+/*
|
|
|
-+ * Copyright (C) 2008, 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
|
|
|
-+ *
|
|
|
-+ */
|
|
|
-+#ifndef _TRACE_CMD_PRIVATE_H
|
|
|
-+#define _TRACE_CMD_PRIVATE_H
|
|
|
-+
|
|
|
-+#include "traceevent/event-parse.h"
|
|
|
-+#include "trace-cmd/trace-cmd.h"
|
|
|
-+
|
|
|
-+#define TRACECMD_MAGIC { 23, 8, 68 }
|
|
|
-+
|
|
|
-+#define ARRAY_SIZE(_a) (sizeof(_a) / sizeof((_a)[0]))
|
|
|
-+#define __weak __attribute__((weak))
|
|
|
-+#define __noreturn __attribute__((noreturn))
|
|
|
-+
|
|
|
-+#define TRACECMD_ERR_MSK ((unsigned long)(-1) & ~((1UL << 14) - 1))
|
|
|
-+#define TRACECMD_ISERR(ptr) ((unsigned long)(ptr) > TRACECMD_ERR_MSK)
|
|
|
-+#define TRACECMD_ERROR(ret) ((void *)((unsigned long)(ret) | TRACECMD_ERR_MSK))
|
|
|
-+#define TRACECMD_PTR2ERR(ptr) ((unisgned long)(ptr) & ~TRACECMD_ERR_MSK)
|
|
|
-+
|
|
|
-+void tracecmd_parse_cmdlines(struct tep_handle *pevent, char *file, int size);
|
|
|
-+void tracecmd_parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size);
|
|
|
-+void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size);
|
|
|
-+struct tep_plugin_list *trace_load_plugins(struct tep_handle *tep);
|
|
|
-+
|
|
|
-+int *tracecmd_add_id(int *list, int id, int len);
|
|
|
-+
|
|
|
-+enum {
|
|
|
-+ RINGBUF_TYPE_PADDING = 29,
|
|
|
-+ RINGBUF_TYPE_TIME_EXTEND = 30,
|
|
|
-+ RINGBUF_TYPE_TIME_STAMP = 31,
|
|
|
-+};
|
|
|
-+
|
|
|
-+void tracecmd_record_ref(struct tep_record *record);
|
|
|
-+
|
|
|
-+void tracecmd_set_debug(bool set_debug);
|
|
|
-+bool tracecmd_get_debug(void);
|
|
|
-+
|
|
|
-+struct tracecmd_output;
|
|
|
-+struct tracecmd_recorder;
|
|
|
-+struct hook_list;
|
|
|
-+
|
|
|
-+/* --- tracecmd plugins --- */
|
|
|
-+
|
|
|
-+extern int tracecmd_disable_sys_plugins;
|
|
|
-+extern int tracecmd_disable_plugins;
|
|
|
-+
|
|
|
-+enum tracecmd_context {
|
|
|
-+ TRACECMD_INPUT,
|
|
|
-+ TRACECMD_OUTPUT,
|
|
|
-+};
|
|
|
-+
|
|
|
-+enum tracecmd_plugin_flag {
|
|
|
-+ TRACECMD_DISABLE_SYS_PLUGINS = 1,
|
|
|
-+ TRACECMD_DISABLE_PLUGINS = 1 << 1,
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct trace_plugin_context;
|
|
|
-+
|
|
|
-+struct trace_plugin_context *
|
|
|
-+tracecmd_plugin_context_create(enum tracecmd_context context, void *data);
|
|
|
-+
|
|
|
-+void tracecmd_plugin_set_flag(struct trace_plugin_context *context,
|
|
|
-+ enum tracecmd_plugin_flag flag);
|
|
|
-+
|
|
|
-+#define TRACECMD_PLUGIN_LOADER tracecmd_plugin_loader
|
|
|
-+#define TRACECMD_PLUGIN_UNLOADER tracecmd_plugin_unloader
|
|
|
-+#define TRACECMD_PLUGIN_ALIAS tracecmd_plugin_alias
|
|
|
-+#define _MAKE_STR(x) #x
|
|
|
-+#define MAKE_STR(x) _MAKE_STR(x)
|
|
|
-+#define TRACECMD_PLUGIN_LOADER_NAME MAKE_STR(TRACECMD_PLUGIN_LOADER)
|
|
|
-+#define TRACECMD_PLUGIN_UNLOADER_NAME MAKE_STR(TRACECMD_PLUGIN_UNLOADER)
|
|
|
-+#define TRACECMD_PLUGIN_ALIAS_NAME MAKE_STR(TRACECMD_PLUGIN_ALIAS)
|
|
|
-+
|
|
|
-+typedef int (*tracecmd_plugin_load_func)(struct trace_plugin_context *trace);
|
|
|
-+typedef int (*tracecmd_plugin_unload_func)(struct trace_plugin_context *trace);
|
|
|
-+
|
|
|
-+struct tracecmd_input *
|
|
|
-+tracecmd_plugin_context_input(struct trace_plugin_context *trace_context);
|
|
|
-+struct tracecmd_output *
|
|
|
-+tracecmd_plugin_context_output(struct trace_plugin_context *trace_context);
|
|
|
-+
|
|
|
-+void tracecmd_set_quiet(struct tracecmd_output *handle, bool set_quiet);
|
|
|
-+bool tracecmd_get_quiet(struct tracecmd_output *handle);
|
|
|
-+
|
|
|
-+static inline int tracecmd_host_bigendian(void)
|
|
|
-+{
|
|
|
-+ unsigned char str[] = { 0x1, 0x2, 0x3, 0x4 };
|
|
|
-+ unsigned int *ptr;
|
|
|
-+
|
|
|
-+ ptr = (unsigned int *)str;
|
|
|
-+ return *ptr == 0x01020304;
|
|
|
-+}
|
|
|
-+
|
|
|
-+/* --- Opening and Reading the trace.dat file --- */
|
|
|
-+
|
|
|
-+enum {
|
|
|
-+ TRACECMD_OPTION_DONE,
|
|
|
-+ TRACECMD_OPTION_DATE,
|
|
|
-+ TRACECMD_OPTION_CPUSTAT,
|
|
|
-+ TRACECMD_OPTION_BUFFER,
|
|
|
-+ TRACECMD_OPTION_TRACECLOCK,
|
|
|
-+ TRACECMD_OPTION_UNAME,
|
|
|
-+ TRACECMD_OPTION_HOOK,
|
|
|
-+ TRACECMD_OPTION_OFFSET,
|
|
|
-+ TRACECMD_OPTION_CPUCOUNT,
|
|
|
-+ TRACECMD_OPTION_VERSION,
|
|
|
-+ TRACECMD_OPTION_PROCMAPS,
|
|
|
-+ TRACECMD_OPTION_TRACEID,
|
|
|
-+ TRACECMD_OPTION_TIME_SHIFT,
|
|
|
-+ TRACECMD_OPTION_GUEST,
|
|
|
-+};
|
|
|
-+
|
|
|
-+enum {
|
|
|
-+ TRACECMD_FL_IGNORE_DATE = (1 << 0),
|
|
|
-+ TRACECMD_FL_BUFFER_INSTANCE = (1 << 1),
|
|
|
-+ TRACECMD_FL_LATENCY = (1 << 2),
|
|
|
-+ TRACECMD_FL_IN_USECS = (1 << 3),
|
|
|
-+ TRACECMD_FL_FLYRECORD = (1 << 4),
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct tracecmd_ftrace {
|
|
|
-+ struct tracecmd_input *handle;
|
|
|
-+ struct tep_event *fgraph_ret_event;
|
|
|
-+ int fgraph_ret_id;
|
|
|
-+ int long_size;
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct tracecmd_proc_addr_map {
|
|
|
-+ unsigned long long start;
|
|
|
-+ unsigned long long end;
|
|
|
-+ char *lib_name;
|
|
|
-+};
|
|
|
-+
|
|
|
-+typedef void (*tracecmd_show_data_func)(struct tracecmd_input *handle,
|
|
|
-+ struct tep_record *record);
|
|
|
-+typedef void (*tracecmd_handle_init_func)(struct tracecmd_input *handle,
|
|
|
-+ struct hook_list *hook, int global);
|
|
|
-+
|
|
|
-+struct tracecmd_input *tracecmd_alloc(const char *file);
|
|
|
-+struct tracecmd_input *tracecmd_alloc_fd(int fd);
|
|
|
-+struct tracecmd_input *tracecmd_open(const char *file);
|
|
|
-+struct tracecmd_input *tracecmd_open_fd(int fd);
|
|
|
-+void tracecmd_unpair_peer(struct tracecmd_input *handle);
|
|
|
-+void tracecmd_ref(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_read_headers(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_get_parsing_failures(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_long_size(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_page_size(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_cpus(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_copy_headers(struct tracecmd_input *handle, int fd);
|
|
|
-+void tracecmd_set_flag(struct tracecmd_input *handle, int flag);
|
|
|
-+void tracecmd_clear_flag(struct tracecmd_input *handle, int flag);
|
|
|
-+unsigned long tracecmd_get_flags(struct tracecmd_input *handle);
|
|
|
-+unsigned long long tracecmd_get_tsync_peer(struct tracecmd_input *handle);
|
|
|
-+int tracecmd_enable_tsync(struct tracecmd_input *handle, bool enable);
|
|
|
-+
|
|
|
-+void tracecmd_parse_trace_clock(struct tracecmd_input *handle, char *file, int size);
|
|
|
-+
|
|
|
-+int tracecmd_make_pipe(struct tracecmd_input *handle, int cpu, int fd, int cpus);
|
|
|
-+
|
|
|
-+int tracecmd_is_buffer_instance(struct tracecmd_input *handle);
|
|
|
-+
|
|
|
-+void tracecmd_set_ts_offset(struct tracecmd_input *handle, long long offset);
|
|
|
-+void tracecmd_set_ts2secs(struct tracecmd_input *handle, unsigned long long hz);
|
|
|
-+
|
|
|
-+void tracecmd_print_events(struct tracecmd_input *handle, const char *regex);
|
|
|
-+
|
|
|
-+struct hook_list *tracecmd_hooks(struct tracecmd_input *handle);
|
|
|
-+
|
|
|
-+void tracecmd_print_stats(struct tracecmd_input *handle);
|
|
|
-+void tracecmd_print_uname(struct tracecmd_input *handle);
|
|
|
-+void tracecmd_print_version(struct tracecmd_input *handle);
|
|
|
-+
|
|
|
-+struct tep_record *
|
|
|
-+tracecmd_peek_data(struct tracecmd_input *handle, int cpu);
|
|
|
-+
|
|
|
-+static inline struct tep_record *
|
|
|
-+tracecmd_peek_data_ref(struct tracecmd_input *handle, int cpu)
|
|
|
-+{
|
|
|
-+ struct tep_record *rec = tracecmd_peek_data(handle, cpu);
|
|
|
-+ if (rec)
|
|
|
-+ rec->ref_count++;
|
|
|
-+ return rec;
|
|
|
-+}
|
|
|
-+
|
|
|
-+struct tep_record *
|
|
|
-+tracecmd_read_prev(struct tracecmd_input *handle, struct tep_record *record);
|
|
|
-+
|
|
|
-+struct tep_record *
|
|
|
-+tracecmd_read_next_data(struct tracecmd_input *handle, int *rec_cpu);
|
|
|
-+
|
|
|
-+struct tep_record *
|
|
|
-+tracecmd_peek_next_data(struct tracecmd_input *handle, int *rec_cpu);
|
|
|
-+
|
|
|
-+struct tep_record *
|
|
|
-+tracecmd_translate_data(struct tracecmd_input *handle,
|
|
|
-+ void *ptr, int size);
|
|
|
-+struct tep_record *
|
|
|
-+tracecmd_read_cpu_last(struct tracecmd_input *handle, int cpu);
|
|
|
-+int tracecmd_refresh_record(struct tracecmd_input *handle,
|
|
|
-+ struct tep_record *record);
|
|
|
-+
|
|
|
-+int tracecmd_set_cpu_to_timestamp(struct tracecmd_input *handle,
|
|
|
-+ int cpu, unsigned long long ts);
|
|
|
-+void
|
|
|
-+tracecmd_set_all_cpus_to_timestamp(struct tracecmd_input *handle,
|
|
|
-+ unsigned long long time);
|
|
|
-+
|
|
|
-+int tracecmd_set_cursor(struct tracecmd_input *handle,
|
|
|
-+ int cpu, unsigned long long offset);
|
|
|
-+unsigned long long
|
|
|
-+tracecmd_get_cursor(struct tracecmd_input *handle, int cpu);
|
|
|
-+
|
|
|
-+int tracecmd_ftrace_overrides(struct tracecmd_input *handle, struct tracecmd_ftrace *finfo);
|
|
|
-+bool tracecmd_get_use_trace_clock(struct tracecmd_input *handle);
|
|
|
-+tracecmd_show_data_func
|
|
|
-+tracecmd_get_show_data_func(struct tracecmd_input *handle);
|
|
|
-+void tracecmd_set_show_data_func(struct tracecmd_input *handle,
|
|
|
-+ tracecmd_show_data_func func);
|
|
|
-+
|
|
|
-+int tracecmd_record_at_buffer_start(struct tracecmd_input *handle, struct tep_record *record);
|
|
|
-+unsigned long long tracecmd_page_ts(struct tracecmd_input *handle,
|
|
|
-+ struct tep_record *record);
|
|
|
-+unsigned int tracecmd_record_ts_delta(struct tracecmd_input *handle,
|
|
|
-+ struct tep_record *record);
|
|
|
-+
|
|
|
-+struct tracecmd_proc_addr_map *
|
|
|
-+tracecmd_search_task_map(struct tracecmd_input *handle,
|
|
|
-+ int pid, unsigned long long addr);
|
|
|
-+#ifndef SWIG
|
|
|
-+/* hack for function graph work around */
|
|
|
-+extern __thread struct tracecmd_input *tracecmd_curr_thread_handle;
|
|
|
-+#endif
|
|
|
-+
|
|
|
-+
|
|
|
-+/* --- Creating and Writing the trace.dat file --- */
|
|
|
-+
|
|
|
-+struct tracecmd_event_list {
|
|
|
-+ struct tracecmd_event_list *next;
|
|
|
-+ const char *glob;
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct tracecmd_option;
|
|
|
-+struct tracecmd_msg_handle;
|
|
|
-+
|
|
|
-+struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus);
|
|
|
-+struct tracecmd_output *tracecmd_create_file(const char *output_file,
|
|
|
-+ int cpus, char * const *cpu_data_files);
|
|
|
-+struct tracecmd_output *
|
|
|
-+tracecmd_create_file_glob(const char *output_file,
|
|
|
-+ int cpus, char * const *cpu_data_files,
|
|
|
-+ struct tracecmd_event_list *event_globs);
|
|
|
-+struct tracecmd_output *
|
|
|
-+tracecmd_create_init_file_glob(const char *output_file,
|
|
|
-+ struct tracecmd_event_list *list);
|
|
|
-+struct tracecmd_output *tracecmd_create_init_fd(int fd);
|
|
|
-+struct tracecmd_output *
|
|
|
-+tracecmd_create_init_fd_glob(int fd, struct tracecmd_event_list *list);
|
|
|
-+struct tracecmd_output *
|
|
|
-+tracecmd_create_init_fd_msg(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ struct tracecmd_event_list *list);
|
|
|
-+struct tracecmd_output *tracecmd_create_init_file(const char *output_file);
|
|
|
-+struct tracecmd_output *tracecmd_create_init_file_override(const char *output_file,
|
|
|
-+ const char *tracing_dir,
|
|
|
-+ const char *kallsyms);
|
|
|
-+struct tracecmd_option *tracecmd_add_option(struct tracecmd_output *handle,
|
|
|
-+ unsigned short id, int size,
|
|
|
-+ const void *data);
|
|
|
-+struct tracecmd_option *
|
|
|
-+tracecmd_add_option_v(struct tracecmd_output *handle,
|
|
|
-+ unsigned short id, const struct iovec *vector, int count);
|
|
|
-+
|
|
|
-+struct tracecmd_option *tracecmd_add_buffer_option(struct tracecmd_output *handle,
|
|
|
-+ const char *name, int cpus);
|
|
|
-+
|
|
|
-+int tracecmd_write_cpus(struct tracecmd_output *handle, int cpus);
|
|
|
-+int tracecmd_write_options(struct tracecmd_output *handle);
|
|
|
-+int tracecmd_append_options(struct tracecmd_output *handle);
|
|
|
-+int tracecmd_update_option(struct tracecmd_output *handle,
|
|
|
-+ struct tracecmd_option *option, int size,
|
|
|
-+ const void *data);
|
|
|
-+void tracecmd_output_close(struct tracecmd_output *handle);
|
|
|
-+void tracecmd_output_free(struct tracecmd_output *handle);
|
|
|
-+struct tracecmd_output *tracecmd_copy(struct tracecmd_input *ihandle,
|
|
|
-+ const char *file);
|
|
|
-+
|
|
|
-+int tracecmd_write_cpu_data(struct tracecmd_output *handle,
|
|
|
-+ int cpus, char * const *cpu_data_files);
|
|
|
-+int tracecmd_append_cpu_data(struct tracecmd_output *handle,
|
|
|
-+ int cpus, char * const *cpu_data_files);
|
|
|
-+int tracecmd_append_buffer_cpu_data(struct tracecmd_output *handle,
|
|
|
-+ struct tracecmd_option *option,
|
|
|
-+ int cpus, char * const *cpu_data_files);
|
|
|
-+
|
|
|
-+struct tracecmd_output *tracecmd_get_output_handle_fd(int fd);
|
|
|
-+
|
|
|
-+/* --- Reading the Fly Recorder Trace --- */
|
|
|
-+
|
|
|
-+enum {
|
|
|
-+ TRACECMD_RECORD_NOSPLICE = (1 << 0), /* Use read instead of splice */
|
|
|
-+ TRACECMD_RECORD_SNAPSHOT = (1 << 1), /* Extract from snapshot */
|
|
|
-+ TRACECMD_RECORD_BLOCK = (1 << 2), /* Block on splice write */
|
|
|
-+ TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */
|
|
|
-+};
|
|
|
-+
|
|
|
-+void tracecmd_free_recorder(struct tracecmd_recorder *recorder);
|
|
|
-+struct tracecmd_recorder *tracecmd_create_recorder(const char *file, int cpu, unsigned flags);
|
|
|
-+struct tracecmd_recorder *tracecmd_create_recorder_fd(int fd, int cpu, unsigned flags);
|
|
|
-+struct tracecmd_recorder *tracecmd_create_recorder_virt(const char *file, int cpu, unsigned flags, int trace_fd);
|
|
|
-+struct tracecmd_recorder *tracecmd_create_recorder_maxkb(const char *file, int cpu, unsigned flags, int maxkb);
|
|
|
-+struct tracecmd_recorder *tracecmd_create_buffer_recorder_fd(int fd, int cpu, unsigned flags, const char *buffer);
|
|
|
-+struct tracecmd_recorder *tracecmd_create_buffer_recorder(const char *file, int cpu, unsigned flags, const char *buffer);
|
|
|
-+struct tracecmd_recorder *tracecmd_create_buffer_recorder_maxkb(const char *file, int cpu, unsigned flags, const char *buffer, int maxkb);
|
|
|
-+
|
|
|
-+int tracecmd_start_recording(struct tracecmd_recorder *recorder, unsigned long sleep);
|
|
|
-+void tracecmd_stop_recording(struct tracecmd_recorder *recorder);
|
|
|
-+long tracecmd_flush_recording(struct tracecmd_recorder *recorder);
|
|
|
-+
|
|
|
-+enum tracecmd_msg_flags {
|
|
|
-+ TRACECMD_MSG_FL_USE_TCP = 1 << 0,
|
|
|
-+};
|
|
|
-+
|
|
|
-+/* for both client and server */
|
|
|
-+struct tracecmd_msg_handle {
|
|
|
-+ int fd;
|
|
|
-+ short cpu_count;
|
|
|
-+ short version; /* Current protocol version */
|
|
|
-+ unsigned long flags;
|
|
|
-+ bool done;
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct tracecmd_msg_handle *
|
|
|
-+tracecmd_msg_handle_alloc(int fd, unsigned long flags);
|
|
|
-+
|
|
|
-+/* Closes the socket and frees the handle */
|
|
|
-+void tracecmd_msg_handle_close(struct tracecmd_msg_handle *msg_handle);
|
|
|
-+
|
|
|
-+/* for clients */
|
|
|
-+int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ unsigned int **client_ports);
|
|
|
-+int tracecmd_msg_data_send(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ const char *buf, int size);
|
|
|
-+int tracecmd_msg_finish_sending_data(struct tracecmd_msg_handle *msg_handle);
|
|
|
-+int tracecmd_msg_send_close_msg(struct tracecmd_msg_handle *msg_handle);
|
|
|
-+int tracecmd_msg_send_close_resp_msg(struct tracecmd_msg_handle *msg_handle);
|
|
|
-+int tracecmd_msg_wait_close(struct tracecmd_msg_handle *msg_handle);
|
|
|
-+int tracecmd_msg_wait_close_resp(struct tracecmd_msg_handle *msg_handle);
|
|
|
-+
|
|
|
-+/* for server */
|
|
|
-+int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle);
|
|
|
-+int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ unsigned *ports);
|
|
|
-+int tracecmd_msg_read_data(struct tracecmd_msg_handle *msg_handle, int ofd);
|
|
|
-+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);
|
|
|
-+
|
|
|
-+int tracecmd_msg_send_trace_req(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ int argc, char **argv, bool use_fifos,
|
|
|
-+ unsigned long long trace_id,
|
|
|
-+ char *tsync_protos,
|
|
|
-+ int tsync_protos_size);
|
|
|
-+int tracecmd_msg_recv_trace_req(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ int *argc, char ***argv, bool *use_fifos,
|
|
|
-+ unsigned long long *trace_id,
|
|
|
-+ char **tsync_protos,
|
|
|
-+ unsigned int *tsync_protos_size);
|
|
|
-+
|
|
|
-+int tracecmd_msg_send_trace_resp(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ int nr_cpus, int page_size,
|
|
|
-+ unsigned int *ports, bool use_fifos,
|
|
|
-+ unsigned long long trace_id,
|
|
|
-+ unsigned int tsync_proto,
|
|
|
-+ unsigned int tsync_port);
|
|
|
-+int tracecmd_msg_recv_trace_resp(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ int *nr_cpus, int *page_size,
|
|
|
-+ unsigned int **ports, bool *use_fifos,
|
|
|
-+ unsigned long long *trace_id,
|
|
|
-+ unsigned int *tsync_proto,
|
|
|
-+ unsigned int *tsync_port);
|
|
|
-+
|
|
|
-+int tracecmd_msg_send_time_sync(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ unsigned int sync_protocol,
|
|
|
-+ unsigned int sync_msg_id,
|
|
|
-+ unsigned int payload_size, char *payload);
|
|
|
-+int tracecmd_msg_recv_time_sync(struct tracecmd_msg_handle *msg_handle,
|
|
|
-+ unsigned int *sync_protocol,
|
|
|
-+ unsigned int *sync_msg_id,
|
|
|
-+ unsigned int *payload_size, char **payload);
|
|
|
-+
|
|
|
-+/* --- Timestamp synchronization --- */
|
|
|
-+
|
|
|
-+enum{
|
|
|
-+ TRACECMD_TIME_SYNC_PROTO_NONE = 0,
|
|
|
-+};
|
|
|
-+enum{
|
|
|
-+ TRACECMD_TIME_SYNC_CMD_PROBE = 1,
|
|
|
-+ TRACECMD_TIME_SYNC_CMD_STOP = 2,
|
|
|
-+};
|
|
|
-+
|
|
|
-+#define TRACECMD_TIME_SYNC_PROTO_PTP_WEIGHT 10
|
|
|
-+
|
|
|
-+struct tracecmd_time_sync {
|
|
|
-+ unsigned int sync_proto;
|
|
|
-+ int loop_interval;
|
|
|
-+ pthread_mutex_t lock;
|
|
|
-+ pthread_cond_t cond;
|
|
|
-+ char *clock_str;
|
|
|
-+ struct tracecmd_msg_handle *msg_handle;
|
|
|
-+ void *context;
|
|
|
-+};
|
|
|
-+
|
|
|
-+void tracecmd_tsync_init(void);
|
|
|
-+int tracecmd_tsync_proto_getall(char **proto_mask, int *words);
|
|
|
-+unsigned int tracecmd_tsync_proto_select(char *proto_mask, int words);
|
|
|
-+bool tsync_proto_is_supported(unsigned int proto_id);
|
|
|
-+void tracecmd_tsync_with_host(struct tracecmd_time_sync *tsync);
|
|
|
-+void tracecmd_tsync_with_guest(struct tracecmd_time_sync *tsync);
|
|
|
-+int tracecmd_tsync_get_offsets(struct tracecmd_time_sync *tsync,
|
|
|
-+ int *count,
|
|
|
-+ long long **ts, long long **offsets);
|
|
|
-+void tracecmd_tsync_free(struct tracecmd_time_sync *tsync);
|
|
|
-+
|
|
|
-+/* --- Plugin handling --- */
|
|
|
-+extern struct tep_plugin_option trace_ftrace_options[];
|
|
|
-+
|
|
|
-+char **trace_util_find_plugin_files(const char *suffix);
|
|
|
-+void trace_util_free_plugin_files(char **files);
|
|
|
-+
|
|
|
-+/* Used for trace-cmd list */
|
|
|
-+void tracecmd_ftrace_load_options(void);
|
|
|
-+
|
|
|
-+/* event hooks */
|
|
|
-+
|
|
|
-+struct hook_list {
|
|
|
-+ struct hook_list *next;
|
|
|
-+ struct buffer_instance *instance;
|
|
|
-+ const char *hook;
|
|
|
-+ char *str;
|
|
|
-+ char *start_system;
|
|
|
-+ char *start_event;
|
|
|
-+ char *start_match;
|
|
|
-+ char *end_system;
|
|
|
-+ char *end_event;
|
|
|
-+ char *end_match;
|
|
|
-+ char *pid;
|
|
|
-+ int migrate;
|
|
|
-+ int global;
|
|
|
-+ int stack;
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct hook_list *tracecmd_create_event_hook(const char *arg);
|
|
|
-+void tracecmd_free_hooks(struct hook_list *hooks);
|
|
|
-+
|
|
|
-+void tracecmd_plog(const char *fmt, ...);
|
|
|
-+void tracecmd_plog_error(const char *fmt, ...);
|
|
|
-+int tracecmd_set_logfile(char *logfile);
|
|
|
-+
|
|
|
-+/* --- System --- */
|
|
|
-+unsigned long long tracecmd_generate_traceid(void);
|
|
|
-+int tracecmd_count_cpus(void);
|
|
|
-+
|
|
|
-+/* --- Hack! --- */
|
|
|
-+int tracecmd_blk_hack(struct tracecmd_input *handle);
|
|
|
-+
|
|
|
-+/* --- Stack tracer functions --- */
|
|
|
-+int tracecmd_stack_tracer_status(int *status);
|
|
|
-+
|
|
|
-+/* --- Debugging --- */
|
|
|
-+struct kbuffer *tracecmd_record_kbuf(struct tracecmd_input *handle,
|
|
|
-+ struct tep_record *record);
|
|
|
-+void *tracecmd_record_page(struct tracecmd_input *handle,
|
|
|
-+ struct tep_record *record);
|
|
|
-+void *tracecmd_record_offset(struct tracecmd_input *handle,
|
|
|
-+ struct tep_record *record);
|
|
|
-+
|
|
|
-+#endif /* _TRACE_CMD_PRIVATE_H */
|
|
|
-diff --git a/lib/trace-cmd/include/private/trace-filter-hash.h b/lib/trace-cmd/include/private/trace-filter-hash.h
|
|
|
-new file mode 100644
|
|
|
-index 0000000..4111c41
|
|
|
---- /dev/null
|
|
|
-+++ b/lib/trace-cmd/include/private/trace-filter-hash.h
|
|
|
-@@ -0,0 +1,64 @@
|
|
|
-+/* SPDX-License-Identifier: LGPL-2.1 */
|
|
|
-+/*
|
|
|
-+ * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
|
|
|
-+ * Copyright (C) 2018 VMware Inc, Steven Rostedt <rostedt@goodmis.org>
|
|
|
-+ *
|
|
|
-+ */
|
|
|
-+#ifndef _TRACE_FILTER_HASH_H
|
|
|
-+#define _TRACE_FILTER_HASH_H
|
|
|
-+
|
|
|
-+#include <stdint.h>
|
|
|
-+
|
|
|
-+struct tracecmd_filter_id_item {
|
|
|
-+ struct tracecmd_filter_id_item *next;
|
|
|
-+ int id;
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct tracecmd_filter_id {
|
|
|
-+ struct tracecmd_filter_id_item **hash;
|
|
|
-+ int count;
|
|
|
-+};
|
|
|
-+
|
|
|
-+/**
|
|
|
-+ * tracecmd_quick_hash - A quick (non secured) hash alogirthm
|
|
|
-+ * @val: The value to perform the hash on
|
|
|
-+ * @bits: The size in bits you need to return
|
|
|
-+ *
|
|
|
-+ * This is a quick hashing function adapted from Donald E. Knuth's 32
|
|
|
-+ * bit multiplicative hash. See The Art of Computer Programming (TAOCP).
|
|
|
-+ * Multiplication by the Prime number, closest to the golden ratio of
|
|
|
-+ * 2^32.
|
|
|
-+ *
|
|
|
-+ * @bits is used to max the result for use cases that require
|
|
|
-+ * a power of 2 return value that is less than 32 bits. Any value
|
|
|
-+ * of @bits greater than 31 (or zero), will simply return the full hash on @val.
|
|
|
-+ */
|
|
|
-+static inline uint32_t tracecmd_quick_hash(uint32_t val, unsigned int bits)
|
|
|
-+{
|
|
|
-+ val *= UINT32_C(2654435761);
|
|
|
-+
|
|
|
-+ if (!bits || bits > 31)
|
|
|
-+ return val;
|
|
|
-+
|
|
|
-+ return val & ((1 << bits) - 1);
|
|
|
-+}
|
|
|
-+
|
|
|
-+struct tracecmd_filter_id_item *
|
|
|
-+ tracecmd_filter_id_find(struct tracecmd_filter_id *hash, int id);
|
|
|
-+void tracecmd_filter_id_add(struct tracecmd_filter_id *hash, int id);
|
|
|
-+void tracecmd_filter_id_remove(struct tracecmd_filter_id *hash, int id);
|
|
|
-+void tracecmd_filter_id_clear(struct tracecmd_filter_id *hash);
|
|
|
-+struct tracecmd_filter_id *tracecmd_filter_id_hash_alloc(void);
|
|
|
-+void tracecmd_filter_id_hash_free(struct tracecmd_filter_id *hash);
|
|
|
-+struct tracecmd_filter_id *
|
|
|
-+ tracecmd_filter_id_hash_copy(struct tracecmd_filter_id *hash);
|
|
|
-+int *tracecmd_filter_ids(struct tracecmd_filter_id *hash);
|
|
|
-+int tracecmd_filter_id_compare(struct tracecmd_filter_id *hash1,
|
|
|
-+ struct tracecmd_filter_id *hash2);
|
|
|
-+
|
|
|
-+static inline int tracecmd_filter_task_count(struct tracecmd_filter_id *hash)
|
|
|
-+{
|
|
|
-+ return hash->count;
|
|
|
-+}
|
|
|
-+
|
|
|
-+#endif /* _TRACE_FILTER_HASH_H */
|
|
|
-diff --git a/lib/trace-cmd/include/private/trace-hash.h b/lib/trace-cmd/include/private/trace-hash.h
|
|
|
-new file mode 100644
|
|
|
-index 0000000..aa92cdf
|
|
|
---- /dev/null
|
|
|
-+++ b/lib/trace-cmd/include/private/trace-hash.h
|
|
|
-@@ -0,0 +1,55 @@
|
|
|
-+/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
-+/*
|
|
|
-+ * Copyright (C) 2014 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
|
|
|
-+ *
|
|
|
-+ */
|
|
|
-+#ifndef _TRACE_HASH_H
|
|
|
-+#define _TRACE_HASH_H
|
|
|
-+
|
|
|
-+struct trace_hash_item {
|
|
|
-+ struct trace_hash_item *next;
|
|
|
-+ struct trace_hash_item *prev;
|
|
|
-+ unsigned long long key;
|
|
|
-+};
|
|
|
-+
|
|
|
-+struct trace_hash {
|
|
|
-+ struct trace_hash_item **buckets;
|
|
|
-+ int nr_buckets;
|
|
|
-+ int power;
|
|
|
-+};
|
|
|
-+
|
|
|
-+int trace_hash_init(struct trace_hash *hash, int buckets);
|
|
|
-+void trace_hash_free(struct trace_hash *hash);
|
|
|
-+int trace_hash_add(struct trace_hash *hash, struct trace_hash_item *item);
|
|
|
-+int trace_hash_empty(struct trace_hash *hash);
|
|
|
-+
|
|
|
-+static inline void trace_hash_del(struct trace_hash_item *item)
|
|
|
-+{
|
|
|
-+ struct trace_hash_item *prev = item->prev;
|
|
|
-+
|
|
|
-+ prev->next = item->next;
|
|
|
-+ if (item->next)
|
|
|
-+ item->next->prev = prev;
|
|
|
-+}
|
|
|
-+
|
|
|
-+#define trace_hash_for_each_bucket(bucket, hash) \
|
|
|
-+ for (bucket = (hash)->buckets; \
|
|
|
-+ (bucket) < (hash)->buckets + (hash)->nr_buckets; (bucket)++)
|
|
|
-+
|
|
|
-+#define trace_hash_for_each_item(item, bucket) \
|
|
|
-+ for ((item = *(bucket)); item; item = (item)->next)
|
|
|
-+
|
|
|
-+#define trace_hash_for_each_item_safe(item, n, bucket) \
|
|
|
-+ for ((item = *(bucket)), n = item ? item->next : NULL; item; \
|
|
|
-+ item = n, n = item ? (item)->next : NULL)
|
|
|
-+
|
|
|
-+#define trace_hash_while_item(item, bucket) \
|
|
|
-+ while ((item = *(bucket)))
|
|
|
-+
|
|
|
-+typedef int (*trace_hash_func)(struct trace_hash_item *item, void *data);
|
|
|
-+
|
|
|
-+struct trace_hash_item *
|
|
|
-+trace_hash_find(struct trace_hash *hash, unsigned long long key,
|
|
|
-+ trace_hash_func match, void *data);
|
|
|
-+
|
|
|
-+#endif /* _TRACE_HASH_H */
|
|
|
-diff --git a/lib/trace-cmd/include/private/trace-msg.h b/lib/trace-cmd/include/private/trace-msg.h
|
|
|
-new file mode 100644
|
|
|
-index 0000000..aab8a69
|
|
|
---- /dev/null
|
|
|
-+++ b/lib/trace-cmd/include/private/trace-msg.h
|
|
|
-@@ -0,0 +1,15 @@
|
|
|
-+#ifndef _TRACE_MSG_H_
|
|
|
-+#define _TRACE_MSG_H_
|
|
|
-+
|
|
|
-+#include <stdbool.h>
|
|
|
-+
|
|
|
-+#define UDP_MAX_PACKET (65536 - 20)
|
|
|
-+#define V3_MAGIC "766679\0"
|
|
|
-+#define V3_CPU "-1V3"
|
|
|
-+
|
|
|
-+#define V1_PROTOCOL 1
|
|
|
-+#define V3_PROTOCOL 3
|
|
|
-+
|
|
|
-+extern unsigned int page_size;
|
|
|
-+
|
|
|
-+#endif /* _TRACE_MSG_H_ */
|
|
|
-diff --git a/lib/trace-cmd/include/trace-cmd-local.h b/lib/trace-cmd/include/trace-cmd-local.h
|
|
|
-index 95dce66..d0a7365 100644
|
|
|
---- a/lib/trace-cmd/include/trace-cmd-local.h
|
|
|
-+++ b/lib/trace-cmd/include/trace-cmd-local.h
|
|
|
-@@ -6,6 +6,8 @@
|
|
|
- #ifndef _TRACE_CMD_LOCAL_H
|
|
|
- #define _TRACE_CMD_LOCAL_H
|
|
|
-
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
-+
|
|
|
- /* Can be overridden */
|
|
|
- void warning(const char *fmt, ...);
|
|
|
-
|
|
|
-diff --git a/lib/trace-cmd/trace-ftrace.c b/lib/trace-cmd/trace-ftrace.c
|
|
|
-index 20bf71f..df7335f 100644
|
|
|
---- a/lib/trace-cmd/trace-ftrace.c
|
|
|
-+++ b/lib/trace-cmd/trace-ftrace.c
|
|
|
-@@ -8,7 +8,7 @@
|
|
|
- #include <string.h>
|
|
|
- #include <sys/param.h>
|
|
|
-
|
|
|
--#include "trace-cmd.h"
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
-
|
|
|
- struct tep_plugin_option trace_ftrace_options[] = {
|
|
|
- {
|
|
|
-diff --git a/lib/trace-cmd/trace-hooks.c b/lib/trace-cmd/trace-hooks.c
|
|
|
-index 8c969a6..2dadf61 100644
|
|
|
---- a/lib/trace-cmd/trace-hooks.c
|
|
|
-+++ b/lib/trace-cmd/trace-hooks.c
|
|
|
-@@ -8,7 +8,7 @@
|
|
|
- #include <stdlib.h>
|
|
|
- #include <ctype.h>
|
|
|
-
|
|
|
--#include "trace-cmd.h"
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
- #include "event-utils.h"
|
|
|
-
|
|
|
- struct hook_list *tracecmd_create_event_hook(const char *arg)
|
|
|
-diff --git a/lib/trace-cmd/trace-recorder.c b/lib/trace-cmd/trace-recorder.c
|
|
|
-index 2a6e2b6..6b647d6 100644
|
|
|
---- a/lib/trace-cmd/trace-recorder.c
|
|
|
-+++ b/lib/trace-cmd/trace-recorder.c
|
|
|
-@@ -13,7 +13,7 @@
|
|
|
- #include <errno.h>
|
|
|
-
|
|
|
- #include "tracefs.h"
|
|
|
--#include "trace-cmd.h"
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
- #include "event-utils.h"
|
|
|
-
|
|
|
- /* F_GETPIPE_SZ was introduced in 2.6.35, older systems don't have it */
|
|
|
-diff --git a/lib/trace-cmd/trace-timesync.c b/lib/trace-cmd/trace-timesync.c
|
|
|
-index 7a6a7eb..390e9d9 100644
|
|
|
---- a/lib/trace-cmd/trace-timesync.c
|
|
|
-+++ b/lib/trace-cmd/trace-timesync.c
|
|
|
-@@ -17,7 +17,7 @@
|
|
|
- #include <errno.h>
|
|
|
- #include <pthread.h>
|
|
|
-
|
|
|
--#include "trace-cmd.h"
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
- #include "tracefs.h"
|
|
|
- #include "event-utils.h"
|
|
|
- #include "trace-tsync-local.h"
|
|
|
-diff --git a/lib/trace-cmd/trace-util.c b/lib/trace-cmd/trace-util.c
|
|
|
-index 0ead96e..6b5d872 100644
|
|
|
---- a/lib/trace-cmd/trace-util.c
|
|
|
-+++ b/lib/trace-cmd/trace-util.c
|
|
|
-@@ -21,7 +21,7 @@
|
|
|
- #include <sys/sysinfo.h>
|
|
|
- #include <time.h>
|
|
|
-
|
|
|
--#include "trace-cmd.h"
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
- #include "event-utils.h"
|
|
|
-
|
|
|
- #define LOCAL_PLUGIN_DIR ".trace-cmd/plugins"
|
|
|
-diff --git a/lib/traceevent/plugins/plugin_python_loader.c b/lib/traceevent/plugins/plugin_python_loader.c
|
|
|
-index 776bf12..01bdfad 100644
|
|
|
---- a/lib/traceevent/plugins/plugin_python_loader.c
|
|
|
-+++ b/lib/traceevent/plugins/plugin_python_loader.c
|
|
|
-@@ -1,6 +1,7 @@
|
|
|
- #include <Python.h>
|
|
|
- #include <stdio.h>
|
|
|
--#include "trace-cmd.h"
|
|
|
-+#include "event-parse.h"
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
-
|
|
|
- #ifndef PYTHON_DIR
|
|
|
- #define PYTHON_DIR "."
|
|
|
-diff --git a/python/ctracecmd.i b/python/ctracecmd.i
|
|
|
-index 01cd0d5..5f7181c 100644
|
|
|
---- a/python/ctracecmd.i
|
|
|
-+++ b/python/ctracecmd.i
|
|
|
-@@ -15,6 +15,7 @@
|
|
|
-
|
|
|
- %{
|
|
|
- #include "trace-cmd.h"
|
|
|
-+#include "event-parse.h"
|
|
|
- #include "event-utils.h"
|
|
|
- #include <Python.h>
|
|
|
- %}
|
|
|
-diff --git a/tracecmd/include/trace-local.h b/tracecmd/include/trace-local.h
|
|
|
-index 207aa68..28d1b4e 100644
|
|
|
---- a/tracecmd/include/trace-local.h
|
|
|
-+++ b/tracecmd/include/trace-local.h
|
|
|
-@@ -9,7 +9,7 @@
|
|
|
- #include <sys/types.h>
|
|
|
- #include <dirent.h> /* for DIR */
|
|
|
-
|
|
|
--#include "trace-cmd.h"
|
|
|
-+#include "trace-cmd-private.h"
|
|
|
- #include "event-utils.h"
|
|
|
-
|
|
|
- #define TRACE_AGENT_DEFAULT_PORT 823
|
|
|
---
|
|
|
-2.29.2
|
|
|
-
|