From 8049498adf74b88739a1cf2ae60b036272cf36f2 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 10 May 2022 03:14:16 -0400 Subject: [PATCH] import trace-cmd-2.7-10.el8 --- .gitignore | 1 + .trace-cmd.metadata | 1 + ...-out-the-arch-and-install-library-to.patch | 33 +++ ...Add-trace-cmd-flightrecorder-service.patch | 53 ++++ ...for-trace-cmd-flightrecorder-systemd.patch | 170 +++++++++++ SOURCES/kernelshark.desktop | 7 + ...raceevent-Fix-missing-equality-check.patch | 65 +++++ ...-filter-option-to-not-filter-out-rec.patch | 105 +++++++ ...cmd-Add-option-to-poll-trace-buffers.patch | 174 +++++++++++ ...cmd-Force-no-build-of-python2-plugin.patch | 35 +++ ...le-Consistent-ELF-application-harden.patch | 32 +++ ...timize-how-pid-filters-are-expressed.patch | 182 ++++++++++++ SPECS/trace-cmd.spec | 272 ++++++++++++++++++ 13 files changed, 1130 insertions(+) create mode 100644 .gitignore create mode 100644 .trace-cmd.metadata create mode 100644 SOURCES/0001-trace-cmd-Figure-out-the-arch-and-install-library-to.patch create mode 100644 SOURCES/Add-trace-cmd-flightrecorder-service.patch create mode 100644 SOURCES/Various-fixes-for-trace-cmd-flightrecorder-systemd.patch create mode 100644 SOURCES/kernelshark.desktop create mode 100644 SOURCES/tools-lib-traceevent-Fix-missing-equality-check.patch create mode 100644 SOURCES/trace-cmd-Add-no-filter-option-to-not-filter-out-rec.patch create mode 100644 SOURCES/trace-cmd-Add-option-to-poll-trace-buffers.patch create mode 100644 SOURCES/trace-cmd-Force-no-build-of-python2-plugin.patch create mode 100644 SOURCES/trace-cmd-Makefile-Consistent-ELF-application-harden.patch create mode 100644 SOURCES/trace-cmd-Optimize-how-pid-filters-are-expressed.patch create mode 100644 SPECS/trace-cmd.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..775009e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/trace-cmd-v2.7.tar.gz diff --git a/.trace-cmd.metadata b/.trace-cmd.metadata new file mode 100644 index 0000000..72760de --- /dev/null +++ b/.trace-cmd.metadata @@ -0,0 +1 @@ +f95c34b6d9090b81f5c91e97ef71e6b6d835147b SOURCES/trace-cmd-v2.7.tar.gz diff --git a/SOURCES/0001-trace-cmd-Figure-out-the-arch-and-install-library-to.patch b/SOURCES/0001-trace-cmd-Figure-out-the-arch-and-install-library-to.patch new file mode 100644 index 0000000..64aff6c --- /dev/null +++ b/SOURCES/0001-trace-cmd-Figure-out-the-arch-and-install-library-to.patch @@ -0,0 +1,33 @@ +From 7e8a6e3d03c0a6a7a5014ce488be1e16f99db006 Mon Sep 17 00:00:00 2001 +From: Zamir SUN +Date: Sat, 11 Nov 2017 10:28:32 +0800 +Subject: [PATCH] trace-cmd: Figure out the arch and install library to the + right place + +Signed-off-by: Zamir SUN +--- + Makefile | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 5c35143..d10e547 100644 +--- a/Makefile ++++ b/Makefile +@@ -47,7 +47,13 @@ html_install = $(prefix)/share/kernelshark/html + html_install_SQ = '$(subst ','\'',$(html_install))' + img_install = $(prefix)/share/kernelshark/html/images + img_install_SQ = '$(subst ','\'',$(img_install))' +-libdir ?= $(prefix)/lib ++ ++# figure out what arch we are on and install to the right place ++ARCH = $(shell getconf LONG_BIT) ++LIBDIR_32 = /lib ++LIBDIR_64 = /lib64 ++ ++libdir ?= $(prefix)/$(LIBDIR_$(ARCH)) + libdir_SQ = '$(subst ','\'',$(libdir))' + includedir = $(prefix)/include/trace-cmd + includedir_SQ = '$(subst ','\'',$(includedir))' +-- +2.13.4 + diff --git a/SOURCES/Add-trace-cmd-flightrecorder-service.patch b/SOURCES/Add-trace-cmd-flightrecorder-service.patch new file mode 100644 index 0000000..6a80b36 --- /dev/null +++ b/SOURCES/Add-trace-cmd-flightrecorder-service.patch @@ -0,0 +1,53 @@ +From a57b906f58c8d293a1a353dbc5dabea237875759 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 4 Jun 2015 21:02:13 +0200 +Subject: [PATCH] Add trace-cmd flightrecorder service + +Make it possible to start and stop trace-cmd commands at start-up time. + +Signed-off-by: John Kacur +--- + 98-trace-cmd.rules | 1 + + trace-cmd.conf | 4 ++++ + trace-cmd.service | 10 ++++++++++ + 3 files changed, 15 insertions(+) + create mode 100644 98-trace-cmd.rules + create mode 100644 trace-cmd.conf + create mode 100644 trace-cmd.service + +diff --git a/98-trace-cmd.rules b/98-trace-cmd.rules +new file mode 100644 +index 000000000000..7c073692a0ab +--- /dev/null ++++ b/98-trace-cmd.rules +@@ -0,0 +1 @@ ++SUBSYSTEM=="module", ACTION=="add", PROGRAM="/usr/bin/systemctl try-restart trace-cmd.service" +diff --git a/trace-cmd.conf b/trace-cmd.conf +new file mode 100644 +index 000000000000..22896d961d64 +--- /dev/null ++++ b/trace-cmd.conf +@@ -0,0 +1,4 @@ ++# ftrace based flightrecorder configuration file. ++ ++# trace-cmd options ++OPTS="-b 2048 -i -e block -e irq -e mce -e module -e power -e sched -e signal -e sys_enter -e sys_exit -e timer -e workqueue -e kvm -e net" +diff --git a/trace-cmd.service b/trace-cmd.service +new file mode 100644 +index 000000000000..6439b490f8f4 +--- /dev/null ++++ b/trace-cmd.service +@@ -0,0 +1,10 @@ ++[Unit] ++Description=trace-cmd Flightrecorder ++ ++[Service] ++Type=oneshot ++RemainAfterExit=yes ++EnvironmentFile=/etc/sysconfig/trace-cmd.conf ++ExecStart=/usr/bin/trace-cmd start $OPTS ++ExecStop=/usr/bin/trace-cmd reset ++ExecReload=/usr/bin/trace-cmd reset; /usr/bin/trace-cmd start $OPTS +-- +1.8.3.1 + diff --git a/SOURCES/Various-fixes-for-trace-cmd-flightrecorder-systemd.patch b/SOURCES/Various-fixes-for-trace-cmd-flightrecorder-systemd.patch new file mode 100644 index 0000000..308d975 --- /dev/null +++ b/SOURCES/Various-fixes-for-trace-cmd-flightrecorder-systemd.patch @@ -0,0 +1,170 @@ +From 1132270594314acb2eed250f1690d5b10d0fb47c Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 30 Jun 2015 14:30:47 +0200 +Subject: [PATCH] Various fixes for trace-cmd flightrecorder - systemd files + +1) Allow systemctl enable trace-cmd.service to start trace-cmd.service automatically at system boot +2) Don't stop trace-cmd.service at system shutdown +3) Don't stop trace-cmd.service at each kernel module loading +4) Start trace-cmd.service before any normal services +1) Allow systemctl enable trace-cmd.service to start trace-cmd.service automatically at system boot + +I added [Install] section in trace-cmd.service. This is necessary to +make trace-cmd.service automatically get started at system +boot. Without the [Install] section, systemctl enable +trace-cmd.service fails as below: + + ~]# systemctl enable trace-cmd.service + The unit files have no [Install] section. They are not meant to be enabled + using systemctl. + Possible reasons for having this kind of units are: + 1) A unit may be statically enabled by being symlinked from another unit's + .wants/ or .requires/ directory. + 2) A unit's purpose may be to act as a helper for some other unit which has + a requirement dependency on it. + 3) A unit may be started when needed via activation (socket, path, timer, + D-Bus, udev, scripted systemctl call, ...). + +WantedBy=multi-user.target in trace-cmd.service means that +trace-cmd.service is started if multi-user.target, traditional +runlevel 3, is active. + +2) Don't stop trace-cmd.service at system shutdown + +In the current configuration, trace-cmd reset is executed when +trace-cmd.service is stopped at system shutdown. Then, trace buffer is +cleared. This could become a problem if system crash happens at system +shutdown. Even if we get a crash dump at the crash during system +shutdown, the crash dump doesn't contain useful trace data. + +To fix the issue, it's necessary to make trace-cmd.service not stop at +system shutdown. + +To achieve this, I added DefaultDependencies=no into trace-cmd.service. + +To understand this, first you need to understand how systemd achieves +system shutdown. Look at the description of shutdown.target in man 7 +systemd.special. + + shutdown.target + A special target unit that terminates the services on + system shutdown. + + Services that shall be terminated on system shutdown + shall add Conflicts= dependencies to this unit for their + service unit, which is implicitly done when + DefaultDependencies=yes is set (the default). + +As this explains, systemd adds Conflicts=shutdown.target dependency to +all the unit files by default. By this, if we shutdown system for +example by systemctl poweroff, then all the currently active services +with the default dependency get stopped when shutdown.target is pulled +in. + +Thus, in order not to stop trace-cmd.service at system shutdown, it's +necessary to remove the default Conflicts=shutdown.target +dependency. This is achieved by DefaultDependencies=no. + +Also, we need to consider a default dependency around basic.target +that is explained in man 7 systemd.special as follows: + + basic.target + A special target unit covering basic boot-up. + + systemd automatically adds dependencies of the types + Requires= and After= for this target unit to all + services (except for those with DefaultDependencies=no). + + Usually this should pull-in all mount points, swap + devices, sockets, timers, and path units and other basic + initialization necessary for general purpose daemons. + +As this explains, Requires=basic.target is assigned to each service by +default. + +Requires=basic.target means that the service tries to pull in the +basic.target when it's pulled in and gets stopped if the basic.target +gets stopped. + +This means that trace-cmd.service gets stopped at system shutdown via +Requires=basic.target when basic.target is stopped. + +Thus, not to stop trace-cmd.service at system shutdown, it's necessary +to remove the default Requires=basic.target dependency. This is again +achieved by DefaultDependencies=no. + +3) Don't stop trace-cmd.service at each kernel module loading + +We have now udev configuration that restarts trace-cmd.service each +time some kernel module is loaded. However, systemctl restart +trace-cmd.service means that systemctl stop trace-cmd.service and then +systemctl start trace-cmd.service. trace data gets lost when the +systemctl stop trace-cmd.service is executed as I explained above. + +To fix the issue, we remove trace-cmd reset from ExecReload= in +trace-cmd.service and use systemctl reload trace-cmd.service in the +udev script instead of systemctl try-restart trace-cmd.service. + +Note that it's enough to trace-cmd start to enable trace events of +newly loaded kernel modules. + +Also note that systemctl is-active trace-cmd.service in the udev +script is needed to avoid executing systemctl reload trace-cmd.service +when trace-cmd.service is inactive. Without systemctl is-active +trace-cmd.service, systemctl reload trace-cmd.service is executed even +when trace-cmd.service is inactive and then logs the following +message: + + Jun 12 20:24:25 localhost systemd: Unit trace-cmd.service cannot be reloaded because it is inactive. + +4) Start trace-cmd.service before any normal services + +trace-cmd.service needs to start early enough to collect useful kernel +event information. It's too late if any of the normal services has +started. + +To achieve this, DefaultDependencies=no is again needed to remove +After=basic.target dependency assigned by default that is explained in +man 7 systemd.special. + +Also, we need Before=basic.target to start trace-cmd.service *before* +any normal services, i.e. any services with the default +After=basic.target dependency. + +Signed-off-by: John Kacur +--- + 98-trace-cmd.rules | 2 +- + trace-cmd.service | 7 ++++++- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/98-trace-cmd.rules b/98-trace-cmd.rules +index 7c073692a0ab..9575bd819a8e 100644 +--- a/98-trace-cmd.rules ++++ b/98-trace-cmd.rules +@@ -1 +1 @@ +-SUBSYSTEM=="module", ACTION=="add", PROGRAM="/usr/bin/systemctl try-restart trace-cmd.service" ++SUBSYSTEM=="module", ACTION=="add", PROGRAM="/usr/bin/systemctl is-active trace-cmd.service", PROGRAM="/usr/bin/systemctl reload trace-cmd.service" +diff --git a/trace-cmd.service b/trace-cmd.service +index 6439b490f8f4..a5cdd046ca0c 100644 +--- a/trace-cmd.service ++++ b/trace-cmd.service +@@ -1,5 +1,7 @@ + [Unit] + Description=trace-cmd Flightrecorder ++DefaultDependencies=no ++Before=basic.target + + [Service] + Type=oneshot +@@ -7,4 +9,7 @@ RemainAfterExit=yes + EnvironmentFile=/etc/sysconfig/trace-cmd.conf + ExecStart=/usr/bin/trace-cmd start $OPTS + ExecStop=/usr/bin/trace-cmd reset +-ExecReload=/usr/bin/trace-cmd reset; /usr/bin/trace-cmd start $OPTS ++ExecReload=/usr/bin/trace-cmd start $OPTS ++ ++[Install] ++WantedBy=multi-user.target +-- +1.8.3.1 + diff --git a/SOURCES/kernelshark.desktop b/SOURCES/kernelshark.desktop new file mode 100644 index 0000000..e51a7ab --- /dev/null +++ b/SOURCES/kernelshark.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Kernelshark +Comment=Analyze data output by trace-cmd +Exec=kernelshark +Type=Application +Categories=Development;Profiling; +Icon=applications-development diff --git a/SOURCES/tools-lib-traceevent-Fix-missing-equality-check.patch b/SOURCES/tools-lib-traceevent-Fix-missing-equality-check.patch new file mode 100644 index 0000000..6ec6c29 --- /dev/null +++ b/SOURCES/tools-lib-traceevent-Fix-missing-equality-check.patch @@ -0,0 +1,65 @@ +From 8e8f12df7500f501447a2926a9e1db9ff42d882c Mon Sep 17 00:00:00 2001 +From: Rikard Falkeborn +Date: Fri, 12 Apr 2019 11:22:49 -0300 +Subject: [PATCH] tools lib traceevent: Fix missing equality check for strcmp + +There was a missing comparison with 0 when checking if type is "s64" or +"u64". Therefore, the body of the if-statement was entered if "type" was +"u64" or not "s64", which made the first strcmp() redundant since if +type is "u64", it's not "s64". + +If type is "s64", the body of the if-statement is not entered but since +the remainder of the function consists of if-statements which will not +be entered if type is "s64", we will just return "val", which is +correct, albeit at the cost of a few more calls to strcmp(), i.e., it +will behave just as if the if-statement was entered. + +If type is neither "s64" or "u64", the body of the if-statement will be +entered incorrectly and "val" returned. This means that any type that is +checked after "s64" and "u64" is handled the same way as "s64" and +"u64", i.e., the limiting of "val" to fit in for example "s8" is never +reached. + +This was introduced in the kernel tree when the sources were copied from +trace-cmd in commit f7d82350e597 ("tools/events: Add files to create +libtraceevent.a"), and in the trace-cmd repo in 1cdbae6035cei +("Implement typecasting in parser") when the function was introduced, +i.e., it has always behaved the wrong way. + +Detected by cppcheck. + +Link: http://lkml.kernel.org/r/20190412142250.20595-7-acme@kernel.org + +Signed-off-by: Rikard Falkeborn +Reviewed-by: Steven Rostedt (VMware) +Cc: Ingo Molnar +Cc: Thomas Gleixner +Cc: Jiri Olsa +Cc: Namhyung Kim +Cc: Clark Williams +Cc: Tzvetomir Stoyanov +Fixes: f7d82350e597 ("tools/events: Add files to create libtraceevent.a") +Link: http://lkml.kernel.org/r/20190409091529.2686-1-rikard.falkeborn@gmail.com +Signed-off-by: Arnaldo Carvalho de Melo +Signed-off-by: Steven Rostedt (VMware) +Signed-off-by: John Kacur +--- + event-parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/event-parse.c b/event-parse.c +index e5f2acbb70cc..7dba02bd19fe 100644 +--- a/event-parse.c ++++ b/event-parse.c +@@ -2206,7 +2206,7 @@ eval_type_str(unsigned long long val, const char *type, int pointer) + return val & 0xffffffff; + + if (strcmp(type, "u64") == 0 || +- strcmp(type, "s64")) ++ strcmp(type, "s64") == 0) + return val; + + if (strcmp(type, "s8") == 0) +-- +2.20.1 + diff --git a/SOURCES/trace-cmd-Add-no-filter-option-to-not-filter-out-rec.patch b/SOURCES/trace-cmd-Add-no-filter-option-to-not-filter-out-rec.patch new file mode 100644 index 0000000..ddcdc5c --- /dev/null +++ b/SOURCES/trace-cmd-Add-no-filter-option-to-not-filter-out-rec.patch @@ -0,0 +1,105 @@ +From c4936880059251b28b7049f01bbfddb1882bda0e Mon Sep 17 00:00:00 2001 +From: Slavomir Kaslev +Date: Wed, 17 Apr 2019 21:31:57 +0300 +Subject: [PATCH 2/2] trace-cmd: Add --no-filter option to not filter out + recording processes + +Add trace-cmd --no-filter option that disables filtering out of trace-cmd +recording processes from the trace. + +Link: http://lore.kernel.org/linux-trace-devel/20190417183157.8776-2-kaslevs@vmware.com + +Tested-by: Phil Auld +Suggested-by: Steven Rostedt (VMware) +Signed-off-by: Slavomir Kaslev +Signed-off-by: Steven Rostedt (VMware) +--- + Documentation/trace-cmd-record.1.txt | 5 +++++ + trace-record.c | 14 +++++++++++--- + trace-usage.c | 1 + + 3 files changed, 17 insertions(+), 3 deletions(-) + +diff --git a/Documentation/trace-cmd-record.1.txt b/Documentation/trace-cmd-record.1.txt +index 68afa161ac32..26a8299cd860 100644 +--- a/Documentation/trace-cmd-record.1.txt ++++ b/Documentation/trace-cmd-record.1.txt +@@ -83,6 +83,11 @@ OPTIONS + + The above are usually safe to use to compare fields. + ++*--no-filter*:: ++ Do not filter out the trace-cmd threads. By default, the threads are ++ filtered out to not be traced by events. This option will have the trace-cmd ++ threads also be traced. ++ + *-R* 'trigger':: + Specify a trigger for the previous event. This must come after a *-e*. + This will add a given trigger to the given event. To only enable the trigger +diff --git a/trace-record.c b/trace-record.c +index e636c97d701d..ef4c4c873fd4 100644 +--- a/trace-record.c ++++ b/trace-record.c +@@ -99,6 +99,7 @@ static int do_ptrace; + + static int filter_task; + static int filter_pid = -1; ++static bool no_filter = false; + + static int local_cpu_count; + +@@ -1018,6 +1019,9 @@ static void update_task_filter(void) + struct buffer_instance *instance; + int pid = getpid(); + ++ if (no_filter) ++ return; ++ + if (filter_task) + add_filter_pid(pid, 0); + +@@ -4343,9 +4347,9 @@ void update_first_instance(struct buffer_instance *instance, int topt) + } + + enum { +- +- OPT_quiet = 246, +- OPT_debug = 247, ++ OPT_quiet = 245, ++ OPT_debug = 246, ++ OPT_no_filter = 247, + OPT_max_graph_depth = 248, + OPT_tsoffset = 249, + OPT_bycomm = 250, +@@ -4592,6 +4596,7 @@ static void parse_record_options(int argc, + {"by-comm", no_argument, NULL, OPT_bycomm}, + {"ts-offset", required_argument, NULL, OPT_tsoffset}, + {"max-graph-depth", required_argument, NULL, OPT_max_graph_depth}, ++ {"no-filter", no_argument, NULL, OPT_no_filter}, + {"debug", no_argument, NULL, OPT_debug}, + {"quiet", no_argument, NULL, OPT_quiet}, + {"help", no_argument, NULL, '?'}, +@@ -4866,6 +4871,9 @@ static void parse_record_options(int argc, + if (!ctx->max_graph_depth) + die("Could not allocate option"); + break; ++ case OPT_no_filter: ++ no_filter = true; ++ break; + case OPT_debug: + debug = 1; + break; +diff --git a/trace-usage.c b/trace-usage.c +index 10f737b340df..dc73d4d90688 100644 +--- a/trace-usage.c ++++ b/trace-usage.c +@@ -56,6 +56,7 @@ static struct usage_help usage_help[] = { + " --func-stack perform a stack trace for function tracer\n" + " (use with caution)\n" + " --max-graph-depth limit function_graph depth\n" ++ " --no-filter include trace-cmd threads in the trace\n" + }, + { + "start", +-- +2.20.1 + diff --git a/SOURCES/trace-cmd-Add-option-to-poll-trace-buffers.patch b/SOURCES/trace-cmd-Add-option-to-poll-trace-buffers.patch new file mode 100644 index 0000000..d473ad3 --- /dev/null +++ b/SOURCES/trace-cmd-Add-option-to-poll-trace-buffers.patch @@ -0,0 +1,174 @@ +From b206acf0f4bb4a8aff22b14139b6d5fdcb110b77 Mon Sep 17 00:00:00 2001 +From: Nicolas Saenz Julienne +Date: Wed, 2 Jun 2021 11:08:03 +0200 +Subject: [PATCH] trace-cmd: Add option to poll trace buffers + +Waiting for data to be available on the trace ring-buffers may trigger +IPIs. This might generate unacceptable trace noise when debugging low +latency or real time systems. So introduce the poll option. When +enabled, it forces trace-cmd to use O_NONBLOCK. The drawback to using it +is that traces will be extracted by busy waiting, which will +unnecessarily hog the CPUs, so only use when really needed. + +Link: https://lore.kernel.org/linux-trace-devel/20210602090803.12233-1-nsaenzju@redhat.com + +Signed-off-by: Nicolas Saenz Julienne +Signed-off-by: Steven Rostedt (VMware) +--- + Documentation/trace-cmd-record.1.txt | 7 +++++++ + trace-cmd.h | 4 +++- + trace-record.c | 9 ++++++++- + trace-recorder.c | 29 +++++++++++++++------------- + trace-usage.c | 1 + + 5 files changed, 35 insertions(+), 15 deletions(-) + +diff --git a/Documentation/trace-cmd-record.1.txt b/Documentation/trace-cmd-record.1.txt +index 26a8299c..2b3ce636 100644 +--- a/Documentation/trace-cmd-record.1.txt ++++ b/Documentation/trace-cmd-record.1.txt +@@ -331,6 +331,13 @@ OPTIONS + executed will not be changed. This is useful if you want to monitor the + output of the command being executed, but not see the output from trace-cmd. + ++*--poll*:: ++ Waiting for data to be available on the trace ring-buffers may trigger ++ IPIs. This might generate unacceptable trace noise when tracing low latency ++ or real time systems. The poll option forces trace-cmd to use O_NONBLOCK. ++ Traces are extracted by busy waiting, which will hog the CPUs, so only use ++ when really needed. ++ + EXAMPLES + -------- + +diff --git a/trace-cmd.h b/trace-cmd.h +index 75951b5e..4cc9db2a 100644 +--- a/trace-cmd.h ++++ b/trace-cmd.h +@@ -279,7 +279,9 @@ int tracecmd_attach_cpu_data_fd(int fd, int cpus, char * const *cpu_data_files); + 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_BLOCK_SPLICE = (1 << 2), /* Block on splice write */ ++ TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */ ++ TRACECMD_RECORD_POLL = (1 << 4), /* Use O_NONBLOCK, poll trace buffers */ + }; + + void tracecmd_free_recorder(struct tracecmd_recorder *recorder); +diff --git a/trace-record.c b/trace-record.c +index ef4c4c87..1872e3c4 100644 +--- a/trace-record.c ++++ b/trace-record.c +@@ -2622,7 +2622,7 @@ create_recorder_instance_pipe(struct buffer_instance *instance, + int cpu, int *brass) + { + struct tracecmd_recorder *recorder; +- unsigned flags = recorder_flags | TRACECMD_RECORD_BLOCK; ++ unsigned flags = recorder_flags | TRACECMD_RECORD_BLOCK_SPLICE; + char *path; + + if (instance->name) +@@ -4359,6 +4359,9 @@ enum { + OPT_funcstack = 254, + OPT_date = 255, + OPT_module = 256, ++ OPT_nofifos = 257, ++ OPT_cmdlines_size = 258, ++ OPT_poll = 259, + }; + + void trace_stop(int argc, char **argv) +@@ -4601,6 +4604,7 @@ static void parse_record_options(int argc, + {"quiet", no_argument, NULL, OPT_quiet}, + {"help", no_argument, NULL, '?'}, + {"module", required_argument, NULL, OPT_module}, ++ {"poll", no_argument, NULL, OPT_poll}, + {NULL, 0, NULL, 0} + }; + +@@ -4884,6 +4888,9 @@ static void parse_record_options(int argc, + ctx->instance->filter_mod = optarg; + ctx->filtered = 0; + break; ++ case OPT_poll: ++ recorder_flags |= TRACECMD_RECORD_POLL; ++ break; + case OPT_quiet: + case 'q': + quiet = 1; +diff --git a/trace-recorder.c b/trace-recorder.c +index 75290285..97dceccf 100644 +--- a/trace-recorder.c ++++ b/trace-recorder.c +@@ -115,6 +115,18 @@ void tracecmd_free_recorder(struct tracecmd_recorder *recorder) + free(recorder); + } + ++static void set_nonblock(struct tracecmd_recorder *recorder) ++{ ++ long flags; ++ ++ /* Do not block on reads for flushing */ ++ flags = fcntl(recorder->trace_fd, F_GETFL); ++ fcntl(recorder->trace_fd, F_SETFL, flags | O_NONBLOCK); ++ ++ /* Do not block on streams for write */ ++ recorder->fd_flags |= 2; /* NON_BLOCK */ ++} ++ + struct tracecmd_recorder * + tracecmd_create_buffer_recorder_fd2(int fd, int fd2, int cpu, unsigned flags, + const char *buffer, int maxkb) +@@ -133,7 +145,7 @@ tracecmd_create_buffer_recorder_fd2(int fd, int fd2, int cpu, unsigned flags, + + recorder->fd_flags = 1; /* SPLICE_F_MOVE */ + +- if (!(recorder->flags & TRACECMD_RECORD_BLOCK)) ++ if (!(recorder->flags & TRACECMD_RECORD_BLOCK_SPLICE)) + recorder->fd_flags |= 2; /* and NON_BLOCK */ + + /* Init to know what to free and release */ +@@ -192,6 +204,9 @@ tracecmd_create_buffer_recorder_fd2(int fd, int fd2, int cpu, unsigned flags, + recorder->pipe_size = pipe_size; + } + ++ if (recorder->flags & TRACECMD_RECORD_POLL) ++ set_nonblock(recorder); ++ + free(path); + + return recorder; +@@ -421,18 +436,6 @@ static long read_data(struct tracecmd_recorder *recorder) + return r; + } + +-static void set_nonblock(struct tracecmd_recorder *recorder) +-{ +- long flags; +- +- /* Do not block on reads for flushing */ +- flags = fcntl(recorder->trace_fd, F_GETFL); +- fcntl(recorder->trace_fd, F_SETFL, flags | O_NONBLOCK); +- +- /* Do not block on streams for write */ +- recorder->fd_flags |= 2; /* NON_BLOCK */ +-} +- + long tracecmd_flush_recording(struct tracecmd_recorder *recorder) + { + char buf[recorder->page_size]; +diff --git a/trace-usage.c b/trace-usage.c +index dc73d4d9..a9474ad3 100644 +--- a/trace-usage.c ++++ b/trace-usage.c +@@ -57,6 +57,7 @@ static struct usage_help usage_help[] = { + " (use with caution)\n" + " --max-graph-depth limit function_graph depth\n" + " --no-filter include trace-cmd threads in the trace\n" ++ " --poll don't block while reading from the trace buffer\n" + }, + { + "start", +-- +2.31.1 + diff --git a/SOURCES/trace-cmd-Force-no-build-of-python2-plugin.patch b/SOURCES/trace-cmd-Force-no-build-of-python2-plugin.patch new file mode 100644 index 0000000..34a461e --- /dev/null +++ b/SOURCES/trace-cmd-Force-no-build-of-python2-plugin.patch @@ -0,0 +1,35 @@ +From 34762bbe9ecd4913bd4a8d04a3ef24cfac6c3d54 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 11 Jun 2018 14:41:22 +0200 +Subject: [PATCH] trace-cmd: Force no build of python2 plugin + +Force no build of python2 plugin + +Signed-off-by: John Kacur +--- + Makefile | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index a5d2c384415b..62c469393a76 100644 +--- a/Makefile ++++ b/Makefile +@@ -92,11 +92,12 @@ ifndef VERBOSE + VERBOSE = 0 + endif + +-SWIG_DEFINED := $(shell if swig -help &> /dev/null; then echo 1; else echo 0; fi) +-ifeq ($(SWIG_DEFINED), 0) ++# SWIG_DEFINED := $(shell if swig -help &> /dev/null; then echo 1; else echo 0; fi) ++# Don't build python2 plugin ++#ifeq ($(SWIG_DEFINED), 0) + BUILD_PYTHON := report_noswig + NO_PYTHON = 1 +-endif ++#endif + + ifndef NO_PYTHON + PYTHON := ctracecmd.so +-- +2.14.4 + diff --git a/SOURCES/trace-cmd-Makefile-Consistent-ELF-application-harden.patch b/SOURCES/trace-cmd-Makefile-Consistent-ELF-application-harden.patch new file mode 100644 index 0000000..fd6b34f --- /dev/null +++ b/SOURCES/trace-cmd-Makefile-Consistent-ELF-application-harden.patch @@ -0,0 +1,32 @@ +From a7f654a1fa9087312e77be82574abc1fe10c2ab6 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 31 Jul 2018 14:53:31 +0200 +Subject: [PATCH] trace-cmd: Makefile: Consistent ELF application hardening + build flags + +These are the recommend build changes for Redhat + +Signed-off-by: John Kacur +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index 62c469393a76..17eacc114450 100644 +--- a/Makefile ++++ b/Makefile +@@ -243,9 +243,9 @@ INCLUDES = -I. -I ./include -I $(srctree)/../../include $(CONFIG_INCLUDES) + include $(src)/features.mk + + # Set compile option CFLAGS if not set elsewhere +-CFLAGS ?= -g -Wall ++CFLAGS ?= -g -Wall -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -fstack-clash-protection -fexceptions + CPPFLAGS ?= +-LDFLAGS ?= ++LDFLAGS ?= -pie -Wl,-z,now + + # Required CFLAGS + override CFLAGS += -D_GNU_SOURCE +-- +2.14.4 + diff --git a/SOURCES/trace-cmd-Optimize-how-pid-filters-are-expressed.patch b/SOURCES/trace-cmd-Optimize-how-pid-filters-are-expressed.patch new file mode 100644 index 0000000..ffbb77c --- /dev/null +++ b/SOURCES/trace-cmd-Optimize-how-pid-filters-are-expressed.patch @@ -0,0 +1,182 @@ +From db8893838433972feafe545117b60dca8c7318df Mon Sep 17 00:00:00 2001 +From: Slavomir Kaslev +Date: Wed, 17 Apr 2019 16:09:58 +0300 +Subject: [PATCH 1/2] trace-cmd: Optimize how pid filters are expressed + +Express pid filters as allowed/disallowed filter ranges + + (pid>=100&&pid<=103) + +instead of specifying them per pid + + (pid==100||pid==101||pid==102||pid==103) + +This makes the size of the resulting filter smaller (and faster) and avoids +overflowing the filter size limit of one page which we can hit on bigger +machines (say >160 CPUs). + +Link: http://lore.kernel.org/linux-trace-devel/20190417130959.10064-2-kaslevs@vmware.com + +Reported-by: Phil Auld +Tested-by: Phil Auld +Suggested-by: Steven Rostedt (VMware) +Signed-off-by: Slavomir Kaslev +Signed-off-by: Steven Rostedt (VMware) +--- + trace-record.c | 117 ++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 81 insertions(+), 36 deletions(-) + +diff --git a/trace-record.c b/trace-record.c +index 9479f5f8073c..e636c97d701d 100644 +--- a/trace-record.c ++++ b/trace-record.c +@@ -903,10 +903,63 @@ static void update_ftrace_pids(int reset) + static void update_event_filters(struct buffer_instance *instance); + static void update_pid_event_filters(struct buffer_instance *instance); + ++static void append_filter_pid_range(char **filter, int *curr_len, ++ const char *field, ++ int start_pid, int end_pid, bool exclude) ++{ ++ const char *op = "", *op1, *op2, *op3; ++ int len; ++ ++ if (*filter && **filter) ++ op = exclude ? "&&" : "||"; ++ ++ /* Handle thus case explicitly so that we get `pid==3` instead of ++ * `pid>=3&&pid<=3` for singleton ranges ++ */ ++ if (start_pid == end_pid) { ++#define FMT "%s(%s%s%d)" ++ len = snprintf(NULL, 0, FMT, op, ++ field, exclude ? "!=" : "==", start_pid); ++ *filter = realloc(*filter, *curr_len + len + 1); ++ if (!*filter) ++ die("realloc"); ++ ++ len = snprintf(*filter + *curr_len, len + 1, FMT, op, ++ field, exclude ? "!=" : "==", start_pid); ++ *curr_len += len; ++ ++ return; ++#undef FMT ++ } ++ ++ if (exclude) { ++ op1 = "<"; ++ op2 = "||"; ++ op3 = ">"; ++ } else { ++ op1 = ">="; ++ op2 = "&&"; ++ op3 = "<="; ++ } ++ ++#define FMT "%s(%s%s%d%s%s%s%d)" ++ len = snprintf(NULL, 0, FMT, op, ++ field, op1, start_pid, op2, ++ field, op3, end_pid); ++ *filter = realloc(*filter, *curr_len + len + 1); ++ if (!*filter) ++ die("realloc"); ++ ++ len = snprintf(*filter + *curr_len, len + 1, FMT, op, ++ field, op1, start_pid, op2, ++ field, op3, end_pid); ++ *curr_len += len; ++} ++ + /** + * make_pid_filter - create a filter string to all pids against @field + * @curr_filter: Append to a previous filter (may realloc). Can be NULL +- * @field: The fild to compare the pids against ++ * @field: The field to compare the pids against + * + * Creates a new string or appends to an existing one if @curr_filter + * is not NULL. The new string will contain a filter with all pids +@@ -916,54 +969,46 @@ static void update_pid_event_filters(struct buffer_instance *instance); + */ + static char *make_pid_filter(char *curr_filter, const char *field) + { ++ int start_pid = -1, last_pid = -1; ++ int last_exclude = -1; + struct filter_pids *p; +- char *filter; +- char *orit; +- char *match; +- char *str; ++ char *filter = NULL; + int curr_len = 0; +- int len; + + /* Use the new method if possible */ + if (have_set_event_pid) + return NULL; + +- len = len_filter_pids + (strlen(field) + strlen("(==)||")) * nr_filter_pids; +- +- if (curr_filter) { +- curr_len = strlen(curr_filter); +- filter = realloc(curr_filter, curr_len + len + strlen("(&&())")); +- if (!filter) +- die("realloc"); +- memmove(filter+1, curr_filter, curr_len); +- filter[0] = '('; +- strcat(filter, ")&&("); +- curr_len = strlen(filter); +- } else +- filter = malloc(len); +- if (!filter) +- die("Failed to allocate pid filter"); +- +- /* Last '||' that is not used will cover the \0 */ +- str = filter + curr_len; ++ if (!filter_pids) ++ return curr_filter; + + for (p = filter_pids; p; p = p->next) { +- if (p->exclude) { +- match = "!="; +- orit = "&&"; +- } else { +- match = "=="; +- orit = "||"; ++ /* ++ * PIDs are inserted in `filter_pids` from the front and that's ++ * why we expect them in descending order here. ++ */ ++ if (p->pid == last_pid - 1 && p->exclude == last_exclude) { ++ last_pid = p->pid; ++ continue; + } +- if (p == filter_pids) +- orit = ""; + +- len = sprintf(str, "%s(%s%s%d)", orit, field, match, p->pid); +- str += len; ++ if (start_pid != -1) ++ append_filter_pid_range(&filter, &curr_len, field, ++ last_pid, start_pid, ++ last_exclude); ++ ++ start_pid = last_pid = p->pid; ++ last_exclude = p->exclude; ++ + } ++ append_filter_pid_range(&filter, &curr_len, field, ++ last_pid, start_pid, last_exclude); + +- if (curr_len) +- sprintf(str, ")"); ++ if (curr_filter) { ++ char *save = filter; ++ asprintf(&filter, "(%s)&&(%s)", curr_filter, filter); ++ free(save); ++ } + + return filter; + } +-- +2.20.1 + diff --git a/SPECS/trace-cmd.spec b/SPECS/trace-cmd.spec new file mode 100644 index 0000000..28a01a3 --- /dev/null +++ b/SPECS/trace-cmd.spec @@ -0,0 +1,272 @@ +# git tag +#%%global git_commit trace-cmd-v2.6.2 +#%%global git_commit 57371aaa2f469d0ba15fd85276deca7bfdd7ce36 + +Name: trace-cmd +Version: 2.7 +Release: 10%{?dist} +License: GPLv2 and LGPLv2 +Summary: A user interface to Ftrace + +URL: http://git.kernel.org/?p=linux/kernel/git/rostedt/trace-cmd.git;a=summary +# If upstream does not provide tarballs, to generate: +# git clone git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git +# cd trace-cmd +# git archive --prefix=trace-cmd-%%{version}/ -o trace-cmd-v%%{version}.tar.gz %%{git_commit} +Source0: https://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git/snapshot/%{name}-v%{version}.tar.gz +Source1: kernelshark.desktop +Patch1: 0001-trace-cmd-Figure-out-the-arch-and-install-library-to.patch +Patch2: trace-cmd-Force-no-build-of-python2-plugin.patch +Patch3: Add-trace-cmd-flightrecorder-service.patch +Patch4: Various-fixes-for-trace-cmd-flightrecorder-systemd.patch +Patch5: trace-cmd-Makefile-Consistent-ELF-application-harden.patch +Patch6: trace-cmd-Optimize-how-pid-filters-are-expressed.patch +Patch7: trace-cmd-Add-no-filter-option-to-not-filter-out-rec.patch +Patch8: tools-lib-traceevent-Fix-missing-equality-check.patch +Patch9: trace-cmd-Add-option-to-poll-trace-buffers.patch + +BuildRequires: xmlto +BuildRequires: asciidoc +BuildRequires: mlocate +BuildRequires: systemd +# needed for the GUI parts +BuildRequires: libxml2-devel +BuildRequires: gtk2-devel +BuildRequires: glib2-devel +BuildRequires: desktop-file-utils + +%description +trace-cmd is a user interface to Ftrace. Instead of needing to use the +debugfs directly, trace-cmd will handle of setting of options and +tracers and will record into a data file. + +%package -n kernelshark +Summary: GUI analysis for Ftrace data captured by trace-cmd +Requires: trace-cmd%{_isa} = %{version}-%{release} + +%description -n kernelshark +Kernelshark is the GUI frontend for analyzing data produced by +'trace-cmd extract' + +%prep +%autosetup -p1 -n %{name}-v%{version} + +%build +# MANPAGE_DOCBOOK_XSL define is hack to avoid using locate +MANPAGE_DOCBOOK_XSL=`rpm -ql docbook-style-xsl | grep manpages/docbook.xsl` +make V=1 CFLAGS="%{optflags} -D_GNU_SOURCE -g -Wall -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -fstack-clash-protection -fexceptions" LDFLAGS="%{build_ldflags} -pie -Wl,-z,now" \ + MANPAGE_DOCBOOK_XSL=$MANPAGE_DOCBOOK_XSL prefix=%{_prefix} all doc gui + +%install +make V=1 DESTDIR=%{buildroot}/ prefix=%{_prefix} install install_doc install_gui +find %{buildroot}%{_mandir} -type f | xargs chmod u-x,g-x,o-x +find %{buildroot}%{_datadir} -type f | xargs chmod u-x,g-x,o-x +find %{buildroot}%{_libdir} -type f -iname "*.so" | xargs chmod 0755 +install -dm 755 %{buildroot}/%{_datadir}/applications +install -pm 644 %{SOURCE1} %{buildroot}/%{_datadir}/applications/kernelshark.desktop +mkdir -p %{buildroot}/%{_unitdir}/ +mkdir -p %{buildroot}/%{_sysconfdir}/sysconfig/ +mkdir -p %{buildroot}/%{_udevrulesdir} +install -p -m 644 trace-cmd.service %{buildroot}/%{_unitdir}/ +install -p -m 644 trace-cmd.conf %{buildroot}/%{_sysconfdir}/sysconfig/ +install -p -m 644 98-trace-cmd.rules %{buildroot}/%{_udevrulesdir}/ +desktop-file-validate %{buildroot}/%{_datadir}/applications/kernelshark.desktop + +%files +%doc COPYING COPYING.LIB README +%{_bindir}/trace-cmd +%dir %{_libdir}/%{name} +%dir %{_libdir}/%{name}/plugins +%{_libdir}/%{name}/plugins/plugin_blk.so +%{_libdir}/%{name}/plugins/plugin_cfg80211.so +%{_libdir}/%{name}/plugins/plugin_function.so +%{_libdir}/%{name}/plugins/plugin_hrtimer.so +%{_libdir}/%{name}/plugins/plugin_jbd2.so +%{_libdir}/%{name}/plugins/plugin_kmem.so +%{_libdir}/%{name}/plugins/plugin_kvm.so +%{_libdir}/%{name}/plugins/plugin_mac80211.so +%{_libdir}/%{name}/plugins/plugin_sched_switch.so +%{_libdir}/%{name}/plugins/plugin_scsi.so +%{_libdir}/%{name}/plugins/plugin_tlb.so +%{_libdir}/%{name}/plugins/plugin_xen.so + +%{_mandir}/man1/trace-cmd* +%{_mandir}/man5/* +%{_unitdir}/trace-cmd.service +%{_sysconfdir}/sysconfig/trace-cmd.conf +%{_udevrulesdir}/98-trace-cmd.rules + +%files -n kernelshark +%{_bindir}/trace-view +%{_bindir}/trace-graph +%{_bindir}/kernelshark +%{_datadir}/kernelshark +%{_datadir}/applications/kernelshark.desktop +%{_sysconfdir}/bash_completion.d/trace-cmd.bash +%{_mandir}/man1/kernelshark.1.gz + + +%changelog +* Fri Oct 08 2021 Jerome Marchand - 2.7-10 +- Add poll option + +* Wed Feb 03 2021 Jerome Marchand - 2.7-9 +- Filter fixes. + +* Fri Apr 26 2019 John Kacur - 2.7-8 +- Install kernelshark manpage with kernelshark subpackage, not with trace-cmd +Resolves: rhbz#1678252 + +* Tue Apr 02 2019 Clark Williams - 2.7-7 +- added OSCI gating framework +Resolves: rhbz#1682420 + +* Thu Nov 15 2018 John Kacur - 2.7-6 +- The changes to the Makefile need to be applied from the specfile too. +Resolves: rhbz#1601040 + +* Tue Jul 31 2018 John Kacur - 2.7-5 +- trace-cmd-Makefile-Consistent-ELF-application-harden.patch +Resolves: rhbz#1601040 + +* Mon Jun 11 2018 John Kacur - 2.7-4 +- Remove the unsupported python2 plugin +Resolves: rhbz#1589786 + +* Tue May 29 2018 John Kacur - 2.7-3 +- Add trace-cmd flightrecorder services +Resolves: rhbz#1574544 + +* Fri Mar 02 2018 Zamir SUN - 2.7-2 +- Add python plugins + +* Fri Mar 02 2018 Zamir SUN - 2.7-1 +- Update to 2.7 +- Remove Groups tag + +* Fri Feb 23 2018 Florian Weimer - 2.6.2-3 +- Use LDFLAGS from redhat-rpm-config + +* Fri Feb 09 2018 Fedora Release Engineering - 2.6.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Nov 11 2017 Zamir SUN - 2.6.2-1 +- Rebase to 2.6.2. + +* Thu Aug 03 2017 Fedora Release Engineering - 2.6.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 2.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue May 23 2017 Zamir SUN - 2.6.1-1 +- Rebase to 2.6.1. + +* Thu Mar 30 2017 Zamir SUN - 2.6-4.20170330git013205 +- Rebase to newest upstream version to include various bug fixes. + +* Mon Mar 27 2017 Zamir SUN - 2.6-4 +- Fix bz1389219 segmentation fault in trace-cmd snapshot + +* Sat Feb 11 2017 Fedora Release Engineering - 2.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Oct 19 2016 Zamir SUN - 2.6-2 +- Add bz1386451-trace-cmd-record-crash-f-before-e.patch +- Fix rpmlint error unstripped-binary-or-object +- Resolves: rhbz#1386451 + +* Thu Aug 18 2016 Jon Stanley - 2.6-1 +- Upgrade to uptream 2.6 +- Rebase distro patch +- Resolves: rhbz#1365951 + +* Fri Feb 05 2016 Fedora Release Engineering - 2.2.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jun 19 2015 Fedora Release Engineering - 2.2.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon Aug 18 2014 Fedora Release Engineering - 2.2.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sun Jun 08 2014 Fedora Release Engineering - 2.2.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sun Aug 04 2013 Fedora Release Engineering - 2.2.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Wed Jul 24 2013 Jon Stanley - 2.2.1-2 +- Remove addition to %%files - not needed with Makefile patch + +* Tue Jul 23 2013 Dwight Engen - 2.2.1-1 +- Update to 2.2.1 + +* Wed Feb 13 2013 Jon Stanley - 2.1.0-1 +- Update to latest upstream + +* Thu Sep 13 2012 Jon Stanley - 1.2-4.20120606git8266dff +- Remove %%defattr + +* Thu Sep 06 2012 Jon Stanley - 1.2-3.20120606git8266dff +- More review fixups + +* Tue Aug 28 2012 Jon Stanley - 1.2-2.20120606git8266dff +- Rebase to git snapshot so it builds +- Fix license tag per review +- Move plugin dir per review + +* Mon Aug 27 2012 Jon Stanley - 1.2-1 +- Rebase to 1.2 +- Makefile now supports CFLAGS, drop patch + +* Sat Feb 19 2011 Jon Stanley - 1.0.5-1 +- Rebase to 1.0.5 +- Add Makefile patch to support passing RPM_OPT_FLAGS +- Add kernelshark subpackage +- Initial Fedora version + +* Mon Jul 5 2010 John Kacur - 1.0.4-7 +- Rebasing to trace-cmd-1.0.4 + +* Wed Jun 16 2010 John Kacur +- Rebasing to trace-cmd-1.0.2 +- Added parse-events-Do-not-fail-on-FORMAT-TOO-BIG-event-err.patch +- Added trace-cmd-Prevent-latency-tracer-plugins-from-doing-.patch +- Added trace-cmd-Prevent-print_graph_duration-buffer-overfl.patch + +* Wed Jun 9 2010 John Kacur +- Added trace-cmd-Makefile-EXTRAVERSION-should-be-set-withou.patch +- Added trace-cmd-Makefile-use-a-substitution-reference.patch +- add-DESTDIR-to-make.patch +- Related: rhbz599507 + +* Fri Jun 4 2010 John Kacur +- Updating to trace-cmd-1.0.1 +- Related: rhbz599507 + +* Wed Apr 21 2010 John Kacur +- Using trick from William Cohen to avoid the "locate" problem. + +* Fri Apr 16 2010 John Kacur +- Update the source to the 1.0.0 version +- Many fixes to the spec file. + +* Mon Apr 12 2010 William Cohen +- Include manpages in the package. + +* Fri Apr 9 2010 John Kacur +- disabled #patch01 +- Updated the trace-cmd source +- Changed version to 0.7.0 +- Added bogus patch to satisfy rpm requirements +- Related:bz519630 + +* Mon Mar 15 2010 John Kacur +- disabled trace-cmd_rusage.patch +- Updated the trace-cmd source +- Related:bz519630 + +* Fri Nov 16 2007 Luis Claudio R. Goncalves - 1.0-1%{?dist} +- Initial packaging +- Added a patch to display rusage information