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 2/5] risu_i386: move reginfo-related code to risu_reginfo_i386.c
Date: Mon, 8 Apr 2019 14:27:45 -0400 [thread overview]
Message-ID: <20190408182748.1238-3-jan.bobek@gmail.com> (raw)
In-Reply-To: <20190408182748.1238-1-jan.bobek@gmail.com>
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.
Signed-off-by: Jan Bobek <jan.bobek@gmail.com>
---
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
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 2/5] risu_i386: move reginfo-related code to risu_reginfo_i386.c
Date: Mon, 8 Apr 2019 14:27:45 -0400 [thread overview]
Message-ID: <20190408182748.1238-3-jan.bobek@gmail.com> (raw)
Message-ID: <20190408182745.pvB_S7GmUwbvI7CaWHPDWTuwjiwUbPUV3LfXYDbQwfg@z> (raw)
In-Reply-To: <20190408182748.1238-1-jan.bobek@gmail.com>
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.
Signed-off-by: Jan Bobek <jan.bobek@gmail.com>
---
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
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 ` Jan Bobek [this message]
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-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 ` [Qemu-devel] [RISU PATCH 4/5] risu_i386: implement missing CPU-specific functions Jan Bobek
2019-04-08 18:27 ` 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-3-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.