From: Aurelien Jarno <aurelien@aurel32.net>
To: Max Filippov <jcmvbkbc@gmail.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
qemu-devel@nongnu.org, Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH 2/2] tcg: add TB sanity checking
Date: Sat, 22 Sep 2012 16:55:21 +0200 [thread overview]
Message-ID: <20120922145521.GA17188@ohm.aurel32.net> (raw)
In-Reply-To: <1348186688-29410-3-git-send-email-jcmvbkbc@gmail.com>
On Fri, Sep 21, 2012 at 04:18:08AM +0400, Max Filippov wrote:
> Do a sanity checking pass on the intermediate code.
> Check that goto_tb indices are either 0 or 1 and used at most once per
> TB.
>
> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
> ---
> tcg/tcg.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 69 insertions(+), 0 deletions(-)
>
> diff --git a/tcg/tcg.c b/tcg/tcg.c
> index b8a1bec..cdd1975 100644
> --- a/tcg/tcg.c
> +++ b/tcg/tcg.c
> @@ -1454,6 +1454,71 @@ static void check_regs(TCGContext *s)
> }
> #endif
>
> +#ifdef CONFIG_DEBUG_TCG
> +static void tcg_sanity_check(TCGContext *s)
> +{
> + const uint16_t *opc_ptr;
> + const TCGArg *args;
> + TCGArg arg;
> + TCGOpcode c;
> + int nb_oargs, nb_iargs, nb_cargs, error_count = 0;
> + const TCGOpDef *def;
> + unsigned goto_tb_slots[2] = {0};
> +
> + opc_ptr = gen_opc_buf;
> + args = gen_opparam_buf;
> + while (opc_ptr < gen_opc_ptr) {
> + c = *opc_ptr++;
> + def = &tcg_op_defs[c];
> + if (c == INDEX_op_call) {
> + TCGArg arg;
> +
> + /* variable number of arguments */
> + arg = *args++;
> + nb_oargs = arg >> 16;
> + nb_iargs = arg & 0xffff;
> + nb_cargs = def->nb_cargs;
> + } else {
> + if (c == INDEX_op_nopn) {
> + /* variable number of arguments */
> + nb_cargs = *args;
> + nb_oargs = 0;
> + nb_iargs = 0;
> + } else {
> + nb_oargs = def->nb_oargs;
> + nb_iargs = def->nb_iargs;
> + nb_cargs = def->nb_cargs;
> + }
> + }
> +
> + switch (c) {
> + case INDEX_op_goto_tb:
> + arg = args[0];
> + if (arg != 0 && arg != 1) {
> + qemu_log("TB ERROR: wrong goto_tb slot index: %"TCG_PRIlx"\n",
> + arg);
> + ++error_count;
> + } else {
> + ++goto_tb_slots[arg];
> + if (goto_tb_slots[arg] > 1) {
> + qemu_log("TB ERROR: multiple goto_tb(%"TCG_PRIlx")\n", arg);
> + ++error_count;
> + }
> + }
> + break;
> +
> + default:
> + break;
> + }
> +
> + args += nb_iargs + nb_oargs + nb_cargs;
> + }
> + if (error_count) {
> + qemu_log("\n");
> + }
> +}
> +#endif
> +
> static void temp_allocate_frame(TCGContext *s, int temp)
> {
> TCGTemp *ts;
> @@ -2082,6 +2147,10 @@ static inline int tcg_gen_code_common(TCGContext *s, uint8_t *gen_code_buf,
> }
> #endif
>
> +#ifdef CONFIG_DEBUG_TCG
> + tcg_sanity_check(s);
> +#endif
> +
> tcg_reg_alloc_start(s);
>
> s->code_buf = gen_code_buf;
I think this is better address in the patch from Richard Henderson.
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien@aurel32.net http://www.aurel32.net
prev parent reply other threads:[~2012-09-22 14:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-21 0:18 [Qemu-devel] [PATCH 0/2] Add TCG sanity checks (goto_tb related) Max Filippov
2012-09-21 0:18 ` [Qemu-devel] [PATCH 1/2] tcg/README: document tcg_gen_goto_tb restrictions Max Filippov
2012-09-22 14:55 ` Aurelien Jarno
2012-09-21 0:18 ` [Qemu-devel] [PATCH 2/2] tcg: add TB sanity checking Max Filippov
2012-09-21 8:37 ` Michael Tokarev
2012-09-22 14:55 ` Aurelien Jarno [this message]
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=20120922145521.GA17188@ohm.aurel32.net \
--to=aurelien@aurel32.net \
--cc=jcmvbkbc@gmail.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.