From: Jan Bobek <jan.bobek@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Jan Bobek" <jan.bobek@gmail.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Stefan Hajnoczi" <stefanha@redhat.com>
Subject: [Qemu-devel] [RISU PATCH 4/5] risu_i386: implement missing CPU-specific functions
Date: Mon, 8 Apr 2019 14:27:47 -0400 [thread overview]
Message-ID: <20190408182748.1238-5-jan.bobek@gmail.com> (raw)
In-Reply-To: <20190408182748.1238-1-jan.bobek@gmail.com>
risu_i386.c is expected to implement the following functions:
- advance_pc
- get_reginfo_paramreg, set_ucontext_paramreg
- get_risuop
- get_pc
This patch adds the necessary code. (We use EAX as the parameter
register.)
Signed-off-by: Jan Bobek <jan.bobek@gmail.com>
---
risu_i386.c | 31 ++++++++++++++++++++++++++++++-
risu_reginfo_i386.h | 1 +
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/risu_i386.c b/risu_i386.c
index 2d2f325..eb4dff4 100644
--- a/risu_i386.c
+++ b/risu_i386.c
@@ -25,14 +25,43 @@ static int insn_is_ud2(uint32_t insn)
void advance_pc(void *vuc)
{
+ ucontext_t *uc = (ucontext_t *) vuc;
+
/* We assume that this is either UD1 or UD2.
* This would need tweaking if we want to test
* expected undefs on x86.
*/
- ucontext_t *uc = vuc;
uc->uc_mcontext.gregs[REG_EIP] += 2;
}
+void set_ucontext_paramreg(void *vuc, uint64_t value)
+{
+ ucontext_t *uc = (ucontext_t *) vuc;
+ uc->uc_mcontext.gregs[REG_EAX] = (uint32_t) value;
+}
+
+uint64_t get_reginfo_paramreg(struct reginfo *ri)
+{
+ return ri->gregs[REG_EAX];
+}
+
+int get_risuop(struct reginfo *ri)
+{
+ switch (ri->faulting_insn & 0xffff) {
+ case 0xb90f: /* UD1 */
+ return OP_COMPARE;
+ case 0x0b0f: /* UD2 */
+ return OP_TESTEND;
+ default: /* unexpected */
+ return -1;
+ }
+}
+
+uintptr_t get_pc(struct reginfo *ri)
+{
+ return ri->gregs[REG_EIP];
+}
+
int send_register_info(int sock, void *uc)
{
struct reginfo ri;
diff --git a/risu_reginfo_i386.h b/risu_reginfo_i386.h
index 5bba439..4ad90e1 100644
--- a/risu_reginfo_i386.h
+++ b/risu_reginfo_i386.h
@@ -28,6 +28,7 @@ struct reginfo {
# define REG_ES 2
# define REG_DS 3
# define REG_ESP 7
+# define REG_EAX 11
# define REG_TRAPNO 12
# define REG_EIP 14
# define REG_EFL 16
--
2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Jan Bobek <jan.bobek@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Jan Bobek" <jan.bobek@gmail.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>
Subject: [Qemu-devel] [RISU PATCH 4/5] risu_i386: implement missing CPU-specific functions
Date: Mon, 8 Apr 2019 14:27:47 -0400 [thread overview]
Message-ID: <20190408182748.1238-5-jan.bobek@gmail.com> (raw)
Message-ID: <20190408182747.1J5TdP8Wqz5cnsFCe_GgtrYH1Jb-aFlGpKsBIXWx7Sw@z> (raw)
In-Reply-To: <20190408182748.1238-1-jan.bobek@gmail.com>
risu_i386.c is expected to implement the following functions:
- advance_pc
- get_reginfo_paramreg, set_ucontext_paramreg
- get_risuop
- get_pc
This patch adds the necessary code. (We use EAX as the parameter
register.)
Signed-off-by: Jan Bobek <jan.bobek@gmail.com>
---
risu_i386.c | 31 ++++++++++++++++++++++++++++++-
risu_reginfo_i386.h | 1 +
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/risu_i386.c b/risu_i386.c
index 2d2f325..eb4dff4 100644
--- a/risu_i386.c
+++ b/risu_i386.c
@@ -25,14 +25,43 @@ static int insn_is_ud2(uint32_t insn)
void advance_pc(void *vuc)
{
+ ucontext_t *uc = (ucontext_t *) vuc;
+
/* We assume that this is either UD1 or UD2.
* This would need tweaking if we want to test
* expected undefs on x86.
*/
- ucontext_t *uc = vuc;
uc->uc_mcontext.gregs[REG_EIP] += 2;
}
+void set_ucontext_paramreg(void *vuc, uint64_t value)
+{
+ ucontext_t *uc = (ucontext_t *) vuc;
+ uc->uc_mcontext.gregs[REG_EAX] = (uint32_t) value;
+}
+
+uint64_t get_reginfo_paramreg(struct reginfo *ri)
+{
+ return ri->gregs[REG_EAX];
+}
+
+int get_risuop(struct reginfo *ri)
+{
+ switch (ri->faulting_insn & 0xffff) {
+ case 0xb90f: /* UD1 */
+ return OP_COMPARE;
+ case 0x0b0f: /* UD2 */
+ return OP_TESTEND;
+ default: /* unexpected */
+ return -1;
+ }
+}
+
+uintptr_t get_pc(struct reginfo *ri)
+{
+ return ri->gregs[REG_EIP];
+}
+
int send_register_info(int sock, void *uc)
{
struct reginfo ri;
diff --git a/risu_reginfo_i386.h b/risu_reginfo_i386.h
index 5bba439..4ad90e1 100644
--- a/risu_reginfo_i386.h
+++ b/risu_reginfo_i386.h
@@ -28,6 +28,7 @@ struct reginfo {
# define REG_ES 2
# define REG_DS 3
# define REG_ESP 7
+# define REG_EAX 11
# define REG_TRAPNO 12
# define REG_EIP 14
# define REG_EFL 16
--
2.20.1
next prev parent reply other threads:[~2019-04-08 18:28 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-08 18:27 [Qemu-devel] [RISU PATCH 0/5] Fix RISU build for i386 Jan Bobek
2019-04-08 18:27 ` Jan Bobek
2019-04-08 18:27 ` [Qemu-devel] [RISU PATCH 1/5] risu_i386: move reginfo_t and related defines to risu_reginfo_i386.h Jan Bobek
2019-04-08 18:27 ` Jan Bobek
2019-04-25 13:39 ` Alex Bennée
2019-04-25 13:39 ` Alex Bennée
2019-04-08 18:27 ` [Qemu-devel] [RISU PATCH 2/5] risu_i386: move reginfo-related code to risu_reginfo_i386.c Jan Bobek
2019-04-08 18:27 ` Jan Bobek
2019-04-25 13:39 ` Alex Bennée
2019-04-25 13:39 ` Alex Bennée
2019-04-08 18:27 ` [Qemu-devel] [RISU PATCH 3/5] risu_reginfo_i386: implement arch-specific reginfo interface Jan Bobek
2019-04-08 18:27 ` Jan Bobek
2019-04-25 13:42 ` Alex Bennée
2019-04-25 13:42 ` Alex Bennée
2019-04-08 18:27 ` Jan Bobek [this message]
2019-04-08 18:27 ` [Qemu-devel] [RISU PATCH 4/5] risu_i386: implement missing CPU-specific functions Jan Bobek
2019-04-08 18:27 ` [Qemu-devel] [RISU PATCH 5/5] risu_i386: remove old unused code Jan Bobek
2019-04-08 18:27 ` Jan Bobek
2019-04-25 13:43 ` Alex Bennée
2019-04-25 13:43 ` Alex Bennée
2019-04-08 22:18 ` [Qemu-devel] [RISU PATCH 0/5] Fix RISU build for i386 Richard Henderson
2019-04-08 22:18 ` Richard Henderson
2019-04-12 1:43 ` Jan Bobek
2019-04-12 1:43 ` Jan Bobek
2019-04-25 13:45 ` Alex Bennée
2019-04-25 13:45 ` Alex Bennée
2019-05-15 14:32 ` Jan Bobek
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=20190408182748.1238-5-jan.bobek@gmail.com \
--to=jan.bobek@gmail.com \
--cc=alex.bennee@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanha@redhat.com \
/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.