[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RISU v3 03/11] risu_i386: move reginfo-related code to ris
From: |
Jan Bobek |
Subject: |
[Qemu-devel] [RISU v3 03/11] risu_i386: move reginfo-related code to risu_reginfo_i386.c |
Date: |
Thu, 23 May 2019 16:44:01 -0400 |
In order to build risu successfully for i386, we need files
risu_reginfo_i386.{h,c}; this patch adds the latter by extracting the
relevant code from risu_i386.c.
This patch is pure code motion; no functional changes were made.
Reviewed-by: Alex Bennée <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
Signed-off-by: Jan Bobek <address@hidden>
---
risu_i386.c | 54 -----------------------------------
risu_reginfo_i386.c | 68 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 54 deletions(-)
create mode 100644 risu_reginfo_i386.c
diff --git a/risu_i386.c b/risu_i386.c
index 6798a78..2d2f325 100644
--- a/risu_i386.c
+++ b/risu_i386.c
@@ -33,43 +33,6 @@ void advance_pc(void *vuc)
uc->uc_mcontext.gregs[REG_EIP] += 2;
}
-static void fill_reginfo(struct reginfo *ri, ucontext_t * uc)
-{
- int i;
- for (i = 0; i < NGREG; i++) {
- switch (i) {
- case REG_ESP:
- case REG_UESP:
- case REG_GS:
- case REG_FS:
- case REG_ES:
- case REG_DS:
- case REG_TRAPNO:
- case REG_EFL:
- /* Don't store these registers as it results in mismatches.
- * In particular valgrind has different values for some
- * segment registers, and they're boring anyway.
- * We really shouldn't be ignoring EFL but valgrind doesn't
- * seem to set it right and I don't care to investigate.
- */
- ri->gregs[i] = 0xDEADBEEF;
- break;
- case REG_EIP:
- /* Store the offset from the start of the test image */
- ri->gregs[i] = uc->uc_mcontext.gregs[i] - image_start_address;
- break;
- default:
- ri->gregs[i] = uc->uc_mcontext.gregs[i];
- break;
- }
- }
- /* x86 insns aren't 32 bit but we're not really testing x86 so
- * this is just to distinguish 'do compare' from 'stop'
- */
- ri->faulting_insn = *((uint32_t *) uc->uc_mcontext.gregs[REG_EIP]);
-}
-
-
int send_register_info(int sock, void *uc)
{
struct reginfo ri;
@@ -100,23 +63,6 @@ int recv_and_compare_register_info(int sock, void *uc)
return resp;
}
-static char *regname[] = {
- "GS", "FS", "ES", "DS", "EDI", "ESI", "EBP", "ESP",
- "EBX", "EDX", "ECX", "EAX", "TRAPNO", "ERR", "EIP",
- "CS", "EFL", "UESP", "SS", 0
-};
-
-static void dump_reginfo(struct reginfo *ri)
-{
- int i;
- fprintf(stderr, " faulting insn %x\n", ri->faulting_insn);
- for (i = 0; i < NGREG; i++) {
- fprintf(stderr, " %s: %x\n", regname[i] ? regname[i] : "???",
- ri->gregs[i]);
- }
-}
-
-
/* Print a useful report on the status of the last comparison
* done in recv_and_compare_register_info(). This is called on
* exit, so need not restrict itself to signal-safe functions.
diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c
new file mode 100644
index 0000000..e8d671f
--- /dev/null
+++ b/risu_reginfo_i386.c
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Linaro Limited
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Peter Maydell (Linaro) - initial implementation
+
******************************************************************************/
+
+#include <stdio.h>
+#include <ucontext.h>
+
+#include "risu.h"
+#include "risu_reginfo_i386.h"
+
+static void fill_reginfo(struct reginfo *ri, ucontext_t * uc)
+{
+ int i;
+ for (i = 0; i < NGREG; i++) {
+ switch (i) {
+ case REG_ESP:
+ case REG_UESP:
+ case REG_GS:
+ case REG_FS:
+ case REG_ES:
+ case REG_DS:
+ case REG_TRAPNO:
+ case REG_EFL:
+ /* Don't store these registers as it results in mismatches.
+ * In particular valgrind has different values for some
+ * segment registers, and they're boring anyway.
+ * We really shouldn't be ignoring EFL but valgrind doesn't
+ * seem to set it right and I don't care to investigate.
+ */
+ ri->gregs[i] = 0xDEADBEEF;
+ break;
+ case REG_EIP:
+ /* Store the offset from the start of the test image */
+ ri->gregs[i] = uc->uc_mcontext.gregs[i] - image_start_address;
+ break;
+ default:
+ ri->gregs[i] = uc->uc_mcontext.gregs[i];
+ break;
+ }
+ }
+ /* x86 insns aren't 32 bit but we're not really testing x86 so
+ * this is just to distinguish 'do compare' from 'stop'
+ */
+ ri->faulting_insn = *((uint32_t *) uc->uc_mcontext.gregs[REG_EIP]);
+}
+
+static char *regname[] = {
+ "GS", "FS", "ES", "DS", "EDI", "ESI", "EBP", "ESP",
+ "EBX", "EDX", "ECX", "EAX", "TRAPNO", "ERR", "EIP",
+ "CS", "EFL", "UESP", "SS", 0
+};
+
+static void dump_reginfo(struct reginfo *ri)
+{
+ int i;
+ fprintf(stderr, " faulting insn %x\n", ri->faulting_insn);
+ for (i = 0; i < NGREG; i++) {
+ fprintf(stderr, " %s: %x\n", regname[i] ? regname[i] : "???",
+ ri->gregs[i]);
+ }
+}
--
2.20.1
- [Qemu-devel] [RISU v3 00/11] Support for i386/x86_64 with vector extensions, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 01/11] Makefile: undefine the arch name symbol, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 02/11] risu_i386: move reginfo_t and related defines to risu_reginfo_i386.h, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 03/11] risu_i386: move reginfo-related code to risu_reginfo_i386.c,
Jan Bobek <=
- [Qemu-devel] [RISU v3 04/11] risu_reginfo_i386: implement arch-specific reginfo interface, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 06/11] risu_i386: remove old unused code, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 05/11] risu_i386: implement missing CPU-specific functions, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 08/11] configure: add i386/x86_64 architectures, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 10/11] risu_reginfo_i386: replace xfeature constants with symbolic names, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 07/11] test_i386: change syntax from nasm to gas, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 09/11] i386: Add avx512 state to reginfo_t, Jan Bobek, 2019/05/23
- [Qemu-devel] [RISU v3 11/11] risu_reginfo_i386: rework --xfeatures value parsing, Jan Bobek, 2019/05/23