|
@@ -636,8 +636,21 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
|
|
|
/*
|
|
|
* Let the child rip
|
|
|
*/
|
|
|
- if (forks)
|
|
|
+ if (forks) {
|
|
|
+ union perf_event event;
|
|
|
+ /*
|
|
|
+ * Some H/W events are generated before COMM event
|
|
|
+ * which is emitted during exec(), so perf script
|
|
|
+ * cannot see a correct process name for those events.
|
|
|
+ * Synthesize COMM event to prevent it.
|
|
|
+ */
|
|
|
+ perf_event__synthesize_comm(tool, &event,
|
|
|
+ rec->evlist->workload.pid,
|
|
|
+ process_synthesized_event,
|
|
|
+ machine);
|
|
|
+
|
|
|
perf_evlist__start_workload(rec->evlist);
|
|
|
+ }
|
|
|
|
|
|
if (opts->initial_delay) {
|
|
|
usleep(opts->initial_delay * 1000);
|