|
@@ -267,7 +267,7 @@ int common_lock_depth(struct scripting_context *context)
|
|
|
}
|
|
|
|
|
|
static void perl_process_event(int cpu, void *data,
|
|
|
- int size __attribute((unused)),
|
|
|
+ int size __unused,
|
|
|
unsigned long long nsecs, char *comm)
|
|
|
{
|
|
|
struct format_field *field;
|
|
@@ -359,28 +359,42 @@ static void run_start_sub(void)
|
|
|
/*
|
|
|
* Start trace script
|
|
|
*/
|
|
|
-static int perl_start_script(const char *script)
|
|
|
+static int perl_start_script(const char *script, int argc, const char **argv)
|
|
|
{
|
|
|
- const char *command_line[2] = { "", NULL };
|
|
|
+ const char **command_line;
|
|
|
+ int i, err = 0;
|
|
|
|
|
|
+ command_line = malloc((argc + 2) * sizeof(const char *));
|
|
|
+ command_line[0] = "";
|
|
|
command_line[1] = script;
|
|
|
+ for (i = 2; i < argc + 2; i++)
|
|
|
+ command_line[i] = argv[i - 2];
|
|
|
|
|
|
my_perl = perl_alloc();
|
|
|
perl_construct(my_perl);
|
|
|
|
|
|
- if (perl_parse(my_perl, xs_init, 2, (char **)command_line,
|
|
|
- (char **)NULL))
|
|
|
- return -1;
|
|
|
+ if (perl_parse(my_perl, xs_init, argc + 2, (char **)command_line,
|
|
|
+ (char **)NULL)) {
|
|
|
+ err = -1;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
|
|
|
perl_run(my_perl);
|
|
|
- if (SvTRUE(ERRSV))
|
|
|
- return -1;
|
|
|
+ if (SvTRUE(ERRSV)) {
|
|
|
+ err = -1;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
|
|
|
run_start_sub();
|
|
|
|
|
|
+ free(command_line);
|
|
|
fprintf(stderr, "perf trace started with Perl script %s\n\n", script);
|
|
|
-
|
|
|
return 0;
|
|
|
+error:
|
|
|
+ perl_free(my_perl);
|
|
|
+ free(command_line);
|
|
|
+
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -579,7 +593,9 @@ static void print_unsupported_msg(void)
|
|
|
"\n etc.\n");
|
|
|
}
|
|
|
|
|
|
-static int perl_start_script_unsupported(const char *script __unused)
|
|
|
+static int perl_start_script_unsupported(const char *script __unused,
|
|
|
+ int argc __unused,
|
|
|
+ const char **argv __unused)
|
|
|
{
|
|
|
print_unsupported_msg();
|
|
|
|