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 3/5] risu_reginfo_i386: implement arch-specific reginfo interface Date: Mon, 8 Apr 2019 14:27:46 -0400 [thread overview] Message-ID: <20190408182748.1238-4-jan.bobek@gmail.com> (raw) In-Reply-To: <20190408182748.1238-1-jan.bobek@gmail.com> CPU-specific code in risu_reginfo_* is expected to define and export the following symbols: - arch_long_opts, arch_extra_help, process_arch_opt - reginfo_size - reginfo_init - reginfo_is_eq - reginfo_dump, reginfo_dump_mismatch Make risu_reginfo_i386.c implement this interface. Signed-off-by: Jan Bobek <jan.bobek@gmail.com> --- risu_reginfo_i386.c | 48 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c index e8d671f..3882261 100644 --- a/risu_reginfo_i386.c +++ b/risu_reginfo_i386.c @@ -10,12 +10,28 @@ ******************************************************************************/ #include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <ucontext.h> #include "risu.h" #include "risu_reginfo_i386.h" -static void fill_reginfo(struct reginfo *ri, ucontext_t * uc) +const struct option * const arch_long_opts; +const char * const arch_extra_help; + +void process_arch_opt(int opt, const char *arg) +{ + abort(); +} + +const int reginfo_size(void) +{ + return sizeof(struct reginfo); +} + +/* reginfo_init: initialize with a ucontext */ +void reginfo_init(struct reginfo *ri, ucontext_t *uc) { int i; for (i = 0; i < NGREG; i++) { @@ -51,18 +67,38 @@ static void fill_reginfo(struct reginfo *ri, ucontext_t * uc) ri->faulting_insn = *((uint32_t *) uc->uc_mcontext.gregs[REG_EIP]); } -static char *regname[] = { +/* reginfo_is_eq: compare the reginfo structs, returns nonzero if equal */ +int reginfo_is_eq(struct reginfo *m, struct reginfo *a) +{ + return 0 == memcmp(m, a, sizeof(*m)); +} + +static const char *const regname[NGREG] = { "GS", "FS", "ES", "DS", "EDI", "ESI", "EBP", "ESP", "EBX", "EDX", "ECX", "EAX", "TRAPNO", "ERR", "EIP", - "CS", "EFL", "UESP", "SS", 0 + "CS", "EFL", "UESP", "SS" }; -static void dump_reginfo(struct reginfo *ri) +/* reginfo_dump: print state to a stream, returns nonzero on success */ +int reginfo_dump(struct reginfo *ri, FILE *f) { int i; - fprintf(stderr, " faulting insn %x\n", ri->faulting_insn); + fprintf(f, " faulting insn %x\n", ri->faulting_insn); for (i = 0; i < NGREG; i++) { - fprintf(stderr, " %s: %x\n", regname[i] ? regname[i] : "???", + fprintf(f, " %s: %x\n", regname[i] ? regname[i] : "???", ri->gregs[i]); } + return !ferror(f); +} + +int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) +{ + int i; + for (i = 0; i < NGREG; i++) { + if (m->gregs[i] != a->gregs[i]) { + fprintf(f, "Mismatch: Register %s\n", regname[i] ? regname[i] : "???"); + fprintf(f, "m: [%x] != a: [%x]\n", m->gregs[i], a->gregs[i]); + } + } + return !ferror(f); } -- 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 3/5] risu_reginfo_i386: implement arch-specific reginfo interface Date: Mon, 8 Apr 2019 14:27:46 -0400 [thread overview] Message-ID: <20190408182748.1238-4-jan.bobek@gmail.com> (raw) Message-ID: <20190408182746.Jv4EoBGMViWygLD66YFxlhxX8yBM3wrbA-mjxvZiEw4@z> (raw) In-Reply-To: <20190408182748.1238-1-jan.bobek@gmail.com> CPU-specific code in risu_reginfo_* is expected to define and export the following symbols: - arch_long_opts, arch_extra_help, process_arch_opt - reginfo_size - reginfo_init - reginfo_is_eq - reginfo_dump, reginfo_dump_mismatch Make risu_reginfo_i386.c implement this interface. Signed-off-by: Jan Bobek <jan.bobek@gmail.com> --- risu_reginfo_i386.c | 48 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c index e8d671f..3882261 100644 --- a/risu_reginfo_i386.c +++ b/risu_reginfo_i386.c @@ -10,12 +10,28 @@ ******************************************************************************/ #include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <ucontext.h> #include "risu.h" #include "risu_reginfo_i386.h" -static void fill_reginfo(struct reginfo *ri, ucontext_t * uc) +const struct option * const arch_long_opts; +const char * const arch_extra_help; + +void process_arch_opt(int opt, const char *arg) +{ + abort(); +} + +const int reginfo_size(void) +{ + return sizeof(struct reginfo); +} + +/* reginfo_init: initialize with a ucontext */ +void reginfo_init(struct reginfo *ri, ucontext_t *uc) { int i; for (i = 0; i < NGREG; i++) { @@ -51,18 +67,38 @@ static void fill_reginfo(struct reginfo *ri, ucontext_t * uc) ri->faulting_insn = *((uint32_t *) uc->uc_mcontext.gregs[REG_EIP]); } -static char *regname[] = { +/* reginfo_is_eq: compare the reginfo structs, returns nonzero if equal */ +int reginfo_is_eq(struct reginfo *m, struct reginfo *a) +{ + return 0 == memcmp(m, a, sizeof(*m)); +} + +static const char *const regname[NGREG] = { "GS", "FS", "ES", "DS", "EDI", "ESI", "EBP", "ESP", "EBX", "EDX", "ECX", "EAX", "TRAPNO", "ERR", "EIP", - "CS", "EFL", "UESP", "SS", 0 + "CS", "EFL", "UESP", "SS" }; -static void dump_reginfo(struct reginfo *ri) +/* reginfo_dump: print state to a stream, returns nonzero on success */ +int reginfo_dump(struct reginfo *ri, FILE *f) { int i; - fprintf(stderr, " faulting insn %x\n", ri->faulting_insn); + fprintf(f, " faulting insn %x\n", ri->faulting_insn); for (i = 0; i < NGREG; i++) { - fprintf(stderr, " %s: %x\n", regname[i] ? regname[i] : "???", + fprintf(f, " %s: %x\n", regname[i] ? regname[i] : "???", ri->gregs[i]); } + return !ferror(f); +} + +int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) +{ + int i; + for (i = 0; i < NGREG; i++) { + if (m->gregs[i] != a->gregs[i]) { + fprintf(f, "Mismatch: Register %s\n", regname[i] ? regname[i] : "???"); + fprintf(f, "m: [%x] != a: [%x]\n", m->gregs[i], a->gregs[i]); + } + } + return !ferror(f); } -- 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 ` Jan Bobek [this message] 2019-04-08 18:27 ` [Qemu-devel] [RISU PATCH 3/5] risu_reginfo_i386: implement arch-specific reginfo interface 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-4-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).