[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation |
Date: |
Mon, 18 Sep 2017 15:33:08 +0100 |
User-agent: |
Mutt/1.8.3 (2017-05-23) |
On Wed, Sep 13, 2017 at 12:57:45PM +0300, Lluís Vilanova wrote:
> + /* mandatory initialization function */
> + int main(int argc, const char **argv)
Most shared library plugin interfaces I have seen do not use "main()" as
the entry point. Instead they use a unique name that allows the host
application to differentiate between share library files that are valid
plugins (e.g. "qemu_instr_init") and non-plugin shared libraries.
Stable plugin APIs usually have a versioning or feature detection
scheme. Versioning is simple: the host application passes a major/minor
version number to the init function.
Of course the dynamic linker already enforces compatibility somewhat: if
a plugin uses a newer API than available in the host application then
there will be a missing symbol/linker error.
So what versioning strategy should we follow? The simplest would be to
depend 100% on the dynamic linker with no explicit checks inside the
plugin or QEMU. In that case the API/ABI need to follow some rules like
this (not sure how oudated this information is):
http://plan99.net/~mike/writing-shared-libraries.html
> + {
> + int i;
> + printf("init!\n");
> + printf(" argc :: %d\n", argc);
> + for (i = 0; i < argc; i++) {
> + printf(" -> %s\n", argv[i]);
> + }
> +
> + qi_set_fini(fini, NULL);
> +
> + /* instrument and trace events */
> + QITraceEvent *ev;
> +
> + qi_event_set_guest_cpu_enter(guest_cpu_enter);
> + ev = qi_trace_event_name("guest_cpu_enter");
> + assert(ev);
> + qi_trace_event_set_state_dynamic(ev, true);
> +
> + qi_event_set_guest_mem_before_trans(guest_mem_before_trans);
> + ev = qi_trace_event_name("guest_mem_before_trans");
> + assert(ev);
> + qi_trace_event_set_state_dynamic(ev, true);
> +
> + qi_event_set_guest_mem_before_exec(guest_mem_before_exec);
> + ev = qi_trace_event_name("guest_mem_before_exec");
> + assert(ev);
> + qi_trace_event_set_state_dynamic(ev, true);
Why are trace events being enabled in this example?
I would expect qi_event_set_guest_cpu_enter(guest_cpu_enter) to
immediately enable the callback. The user shouldn't need to use tracing
to receive callbacks.
qi_event_set_guest_cpu_enter(NULL) should disable the callback.
Stefan
- [Qemu-devel] [PATCH v6 00/22] instrument: Add basic event instrumentation, Lluís Vilanova, 2017/09/13
- [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Lluís Vilanova, 2017/09/13
- Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Peter Maydell, 2017/09/14
- Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Lluís Vilanova, 2017/09/15
- Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Peter Maydell, 2017/09/18
- Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Lluís Vilanova, 2017/09/18
- Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Peter Maydell, 2017/09/18
- Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Peter Maydell, 2017/09/19
Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation,
Stefan Hajnoczi <=
Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation, Stefan Hajnoczi, 2017/09/18
[Qemu-devel] [PATCH v6 02/22] instrument: Add configure-time flag, Lluís Vilanova, 2017/09/13
[Qemu-devel] [PATCH v6 03/22] instrument: Add generic library loader, Lluís Vilanova, 2017/09/13
[Qemu-devel] [PATCH v6 04/22] instrument: [linux-user] Add command line library loader, Lluís Vilanova, 2017/09/13
[Qemu-devel] [PATCH v6 05/22] instrument: [bsd-user] Add command line library loader, Lluís Vilanova, 2017/09/13
[Qemu-devel] [PATCH v6 06/22] instrument: [softmmu] Add command line library loader, Lluís Vilanova, 2017/09/13
[Qemu-devel] [PATCH v6 07/22] instrument: [qapi] Add library loader, Lluís Vilanova, 2017/09/13
[Qemu-devel] [PATCH v6 08/22] instrument: [hmp] Add library loader, Lluís Vilanova, 2017/09/13
[Qemu-devel] [PATCH v6 09/22] instrument: Add basic control interface, Lluís Vilanova, 2017/09/13