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: linkBe 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).