qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Eduardo Felipe" <edusaper@gmail.com>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Re: Detecting an assembly instruction in QEMU
Date: Tue, 17 Apr 2007 11:49:41 +0200	[thread overview]
Message-ID: <83a4d4ca0704170249l83c5d7bqe0b0f8cc8b5a4a58@mail.gmail.com> (raw)
In-Reply-To: <d5f3bd2b0704161722q10e995f9lee937443d3f0438d@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1451 bytes --]

Hi

2007/4/17, Atif Hashmi <atifhashmi@gmail.com>:
>
>
> But this prints "Transaction restart" once and then the program finishes.
> This means that commit transaction is not called the second time. Could you
> please tell me what am I doing wrong?


Helper functions are outside the translated opcode stream and are invoked by
call/ret:

.------.
|      |
|   ---+-->  helper_StartTransaction()
|   <--+-------------------/
|      |
|      |
|   ---+-->  helper_CommitTransaction()
|   <--+-------------------/
|      |
'------'

When you longjmp from helper_CommitTransaction to helper_StartTransaction
it's probable that you return back to the point where
helper_CommitTransaction should have returned to, as it is the last address
stored in the stack.

Anyway, guest code between the start and the end of the transaction should
not be rerun without updating guest machine state (eip, flags, etc.).

You should better forget about using setjmp/longjmp. Maybe something like
this could do the trick:

when translating mov %al,%al:
{
  ...
  ...
  store the address (eip) of mov %al,%al instruction somewhere
  gen_op_start_transaction();
}

when translating mov %bl, %bl:
{
  ...
  ...
  gen_op_commit_transaction(stored_eip);
  gen_eob(s);  // Stop translation to force guest state updating
}

op_commit_transaction should look like:
{
  if ( helper_CommitTransaction() ) // helper should return !=0 on error
     EIP = PARAM1;
}

Regards,
Eduardo

[-- Attachment #2: Type: text/html, Size: 3219 bytes --]

  reply	other threads:[~2007-04-17  9:54 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-04  4:57 [Qemu-devel] Detecting an assembly instruction in QEMU Atif Hashmi
2007-04-05 17:37 ` [Qemu-devel] " Atif Hashmi
2007-04-06 12:15   ` Eduardo Felipe
2007-04-07 21:06     ` Atif Hashmi
2007-04-08 14:13       ` Eduardo Felipe
2007-04-08 21:38         ` Atif Hashmi
2007-04-08 22:14           ` Eduardo Felipe
2007-04-17  0:17             ` Atif Hashmi
2007-04-17  0:22               ` Atif Hashmi
2007-04-17  9:49                 ` Eduardo Felipe [this message]
2007-04-17 20:33                   ` Atif Hashmi
2007-04-22 13:09                     ` Eduardo Felipe
2007-04-24  7:30                       ` Atif Hashmi
2007-04-24  9:34                         ` Eduardo Felipe
2007-04-25 16:21                           ` Atif Hashmi
2007-04-25 16:50                             ` Atif Hashmi
2007-04-26 14:03                               ` Eduardo Felipe
2007-04-26 21:26                                 ` Atif Hashmi
2007-04-27 10:16                                   ` Eduardo Felipe
2007-05-01 20:28                                     ` Atif Hashmi
2007-04-11 16:05           ` Thiemo Seufer

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=83a4d4ca0704170249l83c5d7bqe0b0f8cc8b5a4a58@mail.gmail.com \
    --to=edusaper@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /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).