[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RISU PATCH 4/5] risu_i386: implement missing CPU-specific
From: |
Jan Bobek |
Subject: |
[Qemu-devel] [RISU PATCH 4/5] risu_i386: implement missing CPU-specific functions |
Date: |
Mon, 8 Apr 2019 14:27:47 -0400 |
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 <address@hidden>
---
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
- [Qemu-devel] [RISU PATCH 0/5] Fix RISU build for i386, Jan Bobek, 2019/04/08
- [Qemu-devel] [RISU PATCH 1/5] risu_i386: move reginfo_t and related defines to risu_reginfo_i386.h, Jan Bobek, 2019/04/08
- [Qemu-devel] [RISU PATCH 3/5] risu_reginfo_i386: implement arch-specific reginfo interface, Jan Bobek, 2019/04/08
- [Qemu-devel] [RISU PATCH 5/5] risu_i386: remove old unused code, Jan Bobek, 2019/04/08
- [Qemu-devel] [RISU PATCH 2/5] risu_i386: move reginfo-related code to risu_reginfo_i386.c, Jan Bobek, 2019/04/08
- [Qemu-devel] [RISU PATCH 4/5] risu_i386: implement missing CPU-specific functions,
Jan Bobek <=
- Re: [Qemu-devel] [RISU PATCH 0/5] Fix RISU build for i386, Richard Henderson, 2019/04/08
- Re: [Qemu-devel] [RISU PATCH 0/5] Fix RISU build for i386, Alex Bennée, 2019/04/25