Message ID | 20250331234228.3475706-1-pierrick.bouvier@linaro.org |
---|---|
State | New |
Headers | show |
Series | bsd-user: add option to enable plugins | expand |
On 3/31/25 16:42, Pierrick Bouvier wrote: > Nothing prevent plugins to be enabled on this platform for user > binaries, only the option in the driver is missing. > > Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > --- > bsd-user/main.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/bsd-user/main.c b/bsd-user/main.c > index fdb160bed0f..329bd1acc02 100644 > --- a/bsd-user/main.c > +++ b/bsd-user/main.c > @@ -175,6 +175,9 @@ static void usage(void) > "-strace log system calls\n" > "-trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n" > " specify tracing options\n" > +#ifdef CONFIG_PLUGIN > + "-plugin [file=]<file>[,<argname>=<argvalue>]\n" > +#endif > "\n" > "Environment variables:\n" > "QEMU_STRACE Print system calls and arguments similar to the\n" > @@ -225,6 +228,8 @@ static void init_task_state(TaskState *ts) > }; > } > > +static QemuPluginList plugins = QTAILQ_HEAD_INITIALIZER(plugins); > + > void gemu_log(const char *fmt, ...) > { > va_list ap; > @@ -307,6 +312,7 @@ int main(int argc, char **argv) > cpu_model = NULL; > > qemu_add_opts(&qemu_trace_opts); > + qemu_plugin_add_opts(); > > optind = 1; > for (;;) { > @@ -399,6 +405,11 @@ int main(int argc, char **argv) > do_strace = 1; > } else if (!strcmp(r, "trace")) { > trace_opt_parse(optarg); > +#ifdef CONFIG_PLUGIN > + } else if (!strcmp(r, "plugin")) { > + r = argv[optind++]; > + qemu_plugin_opt_parse(r, &plugins); > +#endif > } else if (!strcmp(r, "0")) { > argv0 = argv[optind++]; > } else { > @@ -433,6 +444,7 @@ int main(int argc, char **argv) > exit(1); > } > trace_init_file(); > + qemu_plugin_load_list(&plugins, &error_fatal); > > /* Zero out regs */ > memset(regs, 0, sizeof(struct target_pt_regs)); For BSD folks, if you're not familiar with plugins, you can try this command: $ ./configure && ninja -C build # plugins are built by default $ ./build/qemu-x86_64 \ -plugin ./build/contrib/plugins/libstoptrigger,icount=1000000 \ -plugin ./build/tests/tcg/plugins/libinsn \ -d plugin \ ./build/qemu-system-x86_64 --version Output should be something similar to: icount reached at 0x7f2933a6a3f8, exiting cpu 0 insns: 1000001 total insns: 1000001 It stopped after executing 1000001 instructions (libstoptrigger), and report how many instructions (libinsn) were executed. Regards, Pierrick
Hi Pierrick, On 1/4/25 01:42, Pierrick Bouvier wrote: > Nothing prevent plugins to be enabled on this platform for user > binaries, only the option in the driver is missing. Per commit 903e870f245 ("plugins/api: split out binary path/start/end/entry code") this is deliberate: The BSD user-mode command line is still missing -plugin. This can be enabled once we have reliable check-tcg tests working for the BSDs. Should we enable this without test harnessing? > Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > --- > bsd-user/main.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) Ideally we'd have helpers for common user code in common-user/... Anyway, since this patch does what it says: Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On 3/31/25 23:15, Philippe Mathieu-Daudé wrote: > Hi Pierrick, > > On 1/4/25 01:42, Pierrick Bouvier wrote: >> Nothing prevent plugins to be enabled on this platform for user >> binaries, only the option in the driver is missing. > > Per commit 903e870f245 ("plugins/api: split out binary > path/start/end/entry code") this is deliberate: > > The BSD user-mode command line is still missing -plugin. > This can be enabled once we have reliable check-tcg tests > working for the BSDs. > > Should we enable this without test harnessing? > Thanks for pointing this. However, I don't get the argument, as the same could be said about system mode, which runs on BSD also, and already has plugins enabled. The coupling between user related code and plugins is very low (just options parsing and init code), so I don't see why we could have a bug related to a specific platform only for user binaries. So either we deactivate plugins completely for bsd binaries, or we take a leap of faith that it works for them. @Alex, any further insight on this? >> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> >> --- >> bsd-user/main.c | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) > > Ideally we'd have helpers for common user code in common-user/... > Everything is already common for plugins, except adding the call to plugin command line option parsing function. > Anyway, since this patch does what it says: > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Thanks, Pierrick
On 1/4/25 16:33, Pierrick Bouvier wrote: > On 3/31/25 23:15, Philippe Mathieu-Daudé wrote: >> Hi Pierrick, >> >> On 1/4/25 01:42, Pierrick Bouvier wrote: >>> Nothing prevent plugins to be enabled on this platform for user >>> binaries, only the option in the driver is missing. >> >> Per commit 903e870f245 ("plugins/api: split out binary >> path/start/end/entry code") this is deliberate: >> >> The BSD user-mode command line is still missing -plugin. >> This can be enabled once we have reliable check-tcg tests >> working for the BSDs. >> >> Should we enable this without test harnessing? >> > > Thanks for pointing this. > > However, I don't get the argument, as the same could be said about > system mode, which runs on BSD also, and already has plugins enabled. > The coupling between user related code and plugins is very low (just > options parsing and init code), so I don't see why we could have a bug > related to a specific platform only for user binaries. > > So either we deactivate plugins completely for bsd binaries, or we take > a leap of faith that it works for them. > > @Alex, any further insight on this? > >>> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> >>> --- >>> bsd-user/main.c | 12 ++++++++++++ >>> 1 file changed, 12 insertions(+) >> >> Ideally we'd have helpers for common user code in common-user/... >> > > Everything is already common for plugins, except adding the call to > plugin command line option parsing function. Yeah, I mean the rest of main() ;) >> Anyway, since this patch does what it says: >> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> > > Thanks, > Pierrick >
On 4/1/25 07:44, Philippe Mathieu-Daudé wrote: > On 1/4/25 16:33, Pierrick Bouvier wrote: >> On 3/31/25 23:15, Philippe Mathieu-Daudé wrote: >>> Hi Pierrick, >>> >>> On 1/4/25 01:42, Pierrick Bouvier wrote: >>>> Nothing prevent plugins to be enabled on this platform for user >>>> binaries, only the option in the driver is missing. >>> >>> Per commit 903e870f245 ("plugins/api: split out binary >>> path/start/end/entry code") this is deliberate: >>> >>> The BSD user-mode command line is still missing -plugin. >>> This can be enabled once we have reliable check-tcg tests >>> working for the BSDs. >>> >>> Should we enable this without test harnessing? >>> >> >> Thanks for pointing this. >> >> However, I don't get the argument, as the same could be said about >> system mode, which runs on BSD also, and already has plugins enabled. >> The coupling between user related code and plugins is very low (just >> options parsing and init code), so I don't see why we could have a bug >> related to a specific platform only for user binaries. >> >> So either we deactivate plugins completely for bsd binaries, or we take >> a leap of faith that it works for them. >> >> @Alex, any further insight on this? >> >>>> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> >>>> --- >>>> bsd-user/main.c | 12 ++++++++++++ >>>> 1 file changed, 12 insertions(+) >>> >>> Ideally we'd have helpers for common user code in common-user/... >>> >> >> Everything is already common for plugins, except adding the call to >> plugin command line option parsing function. > > Yeah, I mean the rest of main() ;) > It's not a priority at the moment, and not blocking anything on our path, but yes, it would be nice to share more ideally. >>> Anyway, since this patch does what it says: >>> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>> >> >> Thanks, >> Pierrick >> >
On 1/4/25 16:59, Pierrick Bouvier wrote: > On 4/1/25 07:44, Philippe Mathieu-Daudé wrote: >> On 1/4/25 16:33, Pierrick Bouvier wrote: >>> On 3/31/25 23:15, Philippe Mathieu-Daudé wrote: >>>> Hi Pierrick, >>>> >>>> On 1/4/25 01:42, Pierrick Bouvier wrote: >>>>> Nothing prevent plugins to be enabled on this platform for user >>>>> binaries, only the option in the driver is missing. >>>> >>>> Per commit 903e870f245 ("plugins/api: split out binary >>>> path/start/end/entry code") this is deliberate: >>>> >>>> The BSD user-mode command line is still missing -plugin. >>>> This can be enabled once we have reliable check-tcg tests >>>> working for the BSDs. >>>> >>>> Should we enable this without test harnessing? >>>> >>> >>> Thanks for pointing this. >>> >>> However, I don't get the argument, as the same could be said about >>> system mode, which runs on BSD also, and already has plugins enabled. >>> The coupling between user related code and plugins is very low (just >>> options parsing and init code), so I don't see why we could have a bug >>> related to a specific platform only for user binaries. >>> >>> So either we deactivate plugins completely for bsd binaries, or we take >>> a leap of faith that it works for them. >>> >>> @Alex, any further insight on this? >>> >>>>> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> >>>>> --- >>>>> bsd-user/main.c | 12 ++++++++++++ >>>>> 1 file changed, 12 insertions(+) >>>> >>>> Ideally we'd have helpers for common user code in common-user/... >>>> >>> >>> Everything is already common for plugins, except adding the call to >>> plugin command line option parsing function. >> >> Yeah, I mean the rest of main() ;) >> > > It's not a priority at the moment, and not blocking anything on our > path, but yes, it would be nice to share more ideally. Just to be clear, I was not asking you to do that suggestion. >>>> Anyway, since this patch does what it says: >>>> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>>> >>> >>> Thanks, >>> Pierrick >>> >> >
diff --git a/bsd-user/main.c b/bsd-user/main.c index fdb160bed0f..329bd1acc02 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -175,6 +175,9 @@ static void usage(void) "-strace log system calls\n" "-trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n" " specify tracing options\n" +#ifdef CONFIG_PLUGIN + "-plugin [file=]<file>[,<argname>=<argvalue>]\n" +#endif "\n" "Environment variables:\n" "QEMU_STRACE Print system calls and arguments similar to the\n" @@ -225,6 +228,8 @@ static void init_task_state(TaskState *ts) }; } +static QemuPluginList plugins = QTAILQ_HEAD_INITIALIZER(plugins); + void gemu_log(const char *fmt, ...) { va_list ap; @@ -307,6 +312,7 @@ int main(int argc, char **argv) cpu_model = NULL; qemu_add_opts(&qemu_trace_opts); + qemu_plugin_add_opts(); optind = 1; for (;;) { @@ -399,6 +405,11 @@ int main(int argc, char **argv) do_strace = 1; } else if (!strcmp(r, "trace")) { trace_opt_parse(optarg); +#ifdef CONFIG_PLUGIN + } else if (!strcmp(r, "plugin")) { + r = argv[optind++]; + qemu_plugin_opt_parse(r, &plugins); +#endif } else if (!strcmp(r, "0")) { argv0 = argv[optind++]; } else { @@ -433,6 +444,7 @@ int main(int argc, char **argv) exit(1); } trace_init_file(); + qemu_plugin_load_list(&plugins, &error_fatal); /* Zero out regs */ memset(regs, 0, sizeof(struct target_pt_regs));
Nothing prevent plugins to be enabled on this platform for user binaries, only the option in the driver is missing. Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> --- bsd-user/main.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)