From: Stefan Hajnoczi <stefanha@gmail.com>
To: "Lluís Vilanova" <vilanova@ac.upc.edu>
Cc: qemu-devel@nongnu.org, "Emilio G. Cota" <cota@braap.org>,
Markus Armbruster <armbru@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation
Date: Mon, 18 Sep 2017 15:33:08 +0100 [thread overview]
Message-ID: <20170918143308.GA4141@stefanha-x1.localdomain> (raw)
In-Reply-To: <150529666493.10902.14830445134051381968.stgit@frigg.lan>
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
next prev parent reply other threads:[~2017-09-18 14:33 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-13 9:53 [Qemu-devel] [PATCH v6 00/22] instrument: Add basic event instrumentation Lluís Vilanova
2017-09-13 9:57 ` [Qemu-devel] [PATCH v6 01/22] instrument: Add documentation Lluís Vilanova
2017-09-14 14:41 ` Peter Maydell
2017-09-15 13:39 ` Lluís Vilanova
2017-09-18 14:41 ` Peter Maydell
2017-09-18 17:09 ` Lluís Vilanova
2017-09-18 17:42 ` Peter Maydell
2017-09-19 13:50 ` Emilio G. Cota
2017-09-25 18:03 ` Lluís Vilanova
2017-09-25 19:42 ` Emilio G. Cota
2017-09-26 16:49 ` Lluís Vilanova
2017-09-29 13:16 ` Lluís Vilanova
2017-09-29 17:59 ` Emilio G. Cota
2017-09-29 21:46 ` Lluís Vilanova
2017-09-30 18:09 ` Emilio G. Cota
2017-10-04 23:28 ` Lluís Vilanova
2017-10-05 0:50 ` Emilio G. Cota
2017-10-06 15:07 ` Lluís Vilanova
2017-10-06 17:59 ` Emilio G. Cota
2017-10-15 16:30 ` Lluís Vilanova
2017-10-15 16:47 ` Peter Maydell
2017-10-21 14:05 ` Lluís Vilanova
2017-10-21 16:56 ` Peter Maydell
2017-10-21 17:12 ` Alex Bennée
2017-09-19 13:09 ` Peter Maydell
2017-09-18 14:33 ` Stefan Hajnoczi [this message]
2017-09-18 14:40 ` Stefan Hajnoczi
2017-09-13 10:01 ` [Qemu-devel] [PATCH v6 02/22] instrument: Add configure-time flag Lluís Vilanova
2017-09-13 10:05 ` [Qemu-devel] [PATCH v6 03/22] instrument: Add generic library loader Lluís Vilanova
2017-09-18 14:34 ` Stefan Hajnoczi
2017-09-13 10:09 ` [Qemu-devel] [PATCH v6 04/22] instrument: [linux-user] Add command line " Lluís Vilanova
2017-09-13 10:13 ` [Qemu-devel] [PATCH v6 05/22] instrument: [bsd-user] " Lluís Vilanova
2017-09-13 10:17 ` [Qemu-devel] [PATCH v6 06/22] instrument: [softmmu] " Lluís Vilanova
2017-09-13 10:21 ` [Qemu-devel] [PATCH v6 07/22] instrument: [qapi] Add " Lluís Vilanova
2017-09-13 10:25 ` [Qemu-devel] [PATCH v6 08/22] instrument: [hmp] " Lluís Vilanova
2017-09-13 10:30 ` [Qemu-devel] [PATCH v6 09/22] instrument: Add basic control interface Lluís Vilanova
2017-09-13 10:34 ` [Qemu-devel] [PATCH v6 10/22] instrument: Add support for tracing events Lluís Vilanova
2017-09-13 10:38 ` [Qemu-devel] [PATCH v6 11/22] instrument: Track vCPUs Lluís Vilanova
2017-09-13 10:42 ` [Qemu-devel] [PATCH v6 12/22] instrument: Add event 'guest_cpu_enter' Lluís Vilanova
2017-09-13 10:46 ` [Qemu-devel] [PATCH v6 13/22] instrument: Support synchronous modification of vCPU state Lluís Vilanova
2017-09-13 10:50 ` [Qemu-devel] [PATCH v6 14/22] exec: Add function to synchronously flush TB on a stopped vCPU Lluís Vilanova
2017-09-13 10:54 ` [Qemu-devel] [PATCH v6 15/22] instrument: Add event 'guest_cpu_exit' Lluís Vilanova
2017-09-13 10:58 ` [Qemu-devel] [PATCH v6 16/22] instrument: Add event 'guest_cpu_reset' Lluís Vilanova
2017-09-13 11:02 ` [Qemu-devel] [PATCH v6 17/22] trace: Introduce a proper structure to describe memory accesses Lluís Vilanova
2017-09-13 11:06 ` [Qemu-devel] [PATCH v6 18/22] instrument: Add event 'guest_mem_before_trans' Lluís Vilanova
2017-09-13 11:10 ` [Qemu-devel] [PATCH v6 19/22] instrument: Add event 'guest_mem_before_exec' Lluís Vilanova
2017-09-13 11:14 ` [Qemu-devel] [PATCH v6 20/22] instrument: Add event 'guest_user_syscall' Lluís Vilanova
2017-09-13 11:18 ` [Qemu-devel] [PATCH v6 21/22] instrument: Add event 'guest_user_syscall_ret' Lluís Vilanova
2017-09-13 11:22 ` [Qemu-devel] [PATCH v6 22/22] instrument: Add API to manipulate guest memory Lluís Vilanova
2017-09-13 11:42 ` [Qemu-devel] [PATCH v6 00/22] instrument: Add basic event instrumentation no-reply
2017-09-22 22:48 ` Emilio G. Cota
2017-09-25 18:07 ` Lluís Vilanova
2017-09-25 18:55 ` Emilio G. Cota
2017-09-26 8:17 ` Lluís Vilanova
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170918143308.GA4141@stefanha-x1.localdomain \
--to=stefanha@gmail.com \
--cc=armbru@redhat.com \
--cc=cota@braap.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vilanova@ac.upc.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).