[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH risu 7/9] Move send_register_info() to reginfo.c
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH risu 7/9] Move send_register_info() to reginfo.c |
Date: |
Fri, 24 Feb 2017 17:35:26 +0000 |
send_register_info() is now essentially the same code for all
target CPUs, so move it into reginfo.c rather than having
duplicated code.
Signed-off-by: Peter Maydell <address@hidden>
---
Makefile | 4 ++--
reginfo.c | 43 +++++++++++++++++++++++++++++++++++++++++++
risu.h | 13 ++++++++++++-
risu_aarch64.c | 29 -----------------------------
risu_arm.c | 30 ------------------------------
risu_m68k.c | 27 ---------------------------
risu_ppc64le.c | 27 ---------------------------
7 files changed, 57 insertions(+), 116 deletions(-)
create mode 100644 reginfo.c
diff --git a/Makefile b/Makefile
index d20c4e4..9a29bb4 100644
--- a/Makefile
+++ b/Makefile
@@ -17,10 +17,10 @@ VPATH=$(SRCDIR)
CFLAGS ?= -g
-ALL_CFLAGS = -Wall -D_GNU_SOURCE $(CFLAGS) $(EXTRA_CFLAGS)
+ALL_CFLAGS = -Wall -D_GNU_SOURCE -DARCH=$(ARCH) $(CFLAGS) $(EXTRA_CFLAGS)
PROG=risu
-SRCS=risu.c comms.c risu_$(ARCH).c risu_reginfo_$(ARCH).c
+SRCS=risu.c comms.c reginfo.c risu_$(ARCH).c risu_reginfo_$(ARCH).c
HDRS=risu.h
BINS=test_$(ARCH).bin
diff --git a/reginfo.c b/reginfo.c
new file mode 100644
index 0000000..d62a2ed
--- /dev/null
+++ b/reginfo.c
@@ -0,0 +1,43 @@
+/******************************************************************************
+ * Copyright (c) 2017 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 "risu.h"
+
+int send_register_info(int sock, void *uc)
+{
+ struct reginfo ri;
+ int op;
+ reginfo_init(&ri, uc);
+ op = get_risuop(&ri);
+
+ switch (op) {
+ case OP_COMPARE:
+ case OP_TESTEND:
+ default:
+ /* Do a simple register compare on (a) explicit request
+ * (b) end of test (c) a non-risuop UNDEF
+ */
+ return send_data_pkt(sock, &ri, sizeof(ri));
+ case OP_SETMEMBLOCK:
+ memblock = (void *)(uintptr_t)get_reginfo_paramreg(&ri);
+ break;
+ case OP_GETMEMBLOCK:
+ set_ucontext_paramreg(uc,
+ get_reginfo_paramreg(&ri) + (uintptr_t)memblock);
+ break;
+ case OP_COMPAREMEM:
+ return send_data_pkt(sock, memblock, MEMBLOCKLEN);
+ break;
+ }
+ return 0;
+}
diff --git a/risu.h b/risu.h
index d95dace..0f00b5f 100644
--- a/risu.h
+++ b/risu.h
@@ -16,6 +16,15 @@
#include <stdint.h>
#include <ucontext.h>
+/* GCC computed include to pull in the correct risu_reginfo_*.h for
+ * the architecture.
+ */
+#define REGINFO_HEADER2(X) #X
+#define REGINFO_HEADER1(ARCHNAME) REGINFO_HEADER2(risu_reginfo_ ## ARCHNAME.h)
+#define REGINFO_HEADER(ARCH) REGINFO_HEADER1(ARCH)
+
+#include REGINFO_HEADER(ARCH)
+
/* Socket related routines */
int master_connect(int port);
int apprentice_connect(const char *hostname, int port);
@@ -40,7 +49,7 @@ extern int test_fp_exc;
struct reginfo;
-/* Interface provided by CPU-specific code: */
+/* Functions operating on reginfo */
/* Send the register information from the struct ucontext down the socket.
* Return the response code from the master.
@@ -48,6 +57,8 @@ struct reginfo;
*/
int send_register_info(int sock, void *uc);
+/* Interface provided by CPU-specific code: */
+
/* Read register info from the socket and compare it with that from the
* ucontext. Return 0 for match, 1 for end-of-test, 2 for mismatch.
* NB: called from a signal handler.
diff --git a/risu_aarch64.c b/risu_aarch64.c
index 81573e3..7363eb1 100644
--- a/risu_aarch64.c
+++ b/risu_aarch64.c
@@ -53,35 +53,6 @@ int get_risuop(struct reginfo *ri)
return (key != risukey) ? -1 : op;
}
-int send_register_info(int sock, void *uc)
-{
- struct reginfo ri;
- int op;
- reginfo_init(&ri, uc);
- op = get_risuop(&ri);
-
- switch (op) {
- case OP_COMPARE:
- case OP_TESTEND:
- default:
- /* Do a simple register compare on (a) explicit request
- * (b) end of test (c) a non-risuop UNDEF
- */
- return send_data_pkt(sock, &ri, sizeof(ri));
- case OP_SETMEMBLOCK:
- memblock = (void *)get_reginfo_paramreg(&ri);
- break;
- case OP_GETMEMBLOCK:
- set_ucontext_paramreg(uc,
- get_reginfo_paramreg(&ri) + (uintptr_t)memblock);
- break;
- case OP_COMPAREMEM:
- return send_data_pkt(sock, memblock, MEMBLOCKLEN);
- break;
- }
- return 0;
-}
-
/* Read register info from the socket and compare it with that from the
* ucontext. Return 0 for match, 1 for end-of-test, 2 for mismatch.
* NB: called from a signal handler.
diff --git a/risu_arm.c b/risu_arm.c
index 36ac3c8..878b2ee 100644
--- a/risu_arm.c
+++ b/risu_arm.c
@@ -77,36 +77,6 @@ int get_risuop(struct reginfo *ri)
return (key != risukey) ? -1 : op;
}
-int send_register_info(int sock, void *uc)
-{
- struct reginfo ri;
- int op;
- reginfo_init(&ri, uc);
- op = get_risuop(&ri);
-
- switch (op)
- {
- case OP_COMPARE:
- case OP_TESTEND:
- default:
- /* Do a simple register compare on (a) explicit request
- * (b) end of test (c) a non-risuop UNDEF
- */
- return send_data_pkt(sock, &ri, sizeof(ri));
- case OP_SETMEMBLOCK:
- memblock = (void *)(uintptr_t)get_reginfo_paramreg(&ri);
- break;
- case OP_GETMEMBLOCK:
- set_ucontext_paramreg(uc,
- get_reginfo_paramreg(&ri) +
(uintptr_t)memblock);
- break;
- case OP_COMPAREMEM:
- return send_data_pkt(sock, memblock, MEMBLOCKLEN);
- break;
- }
- return 0;
-}
-
/* Read register info from the socket and compare it with that from the
* ucontext. Return 0 for match, 1 for end-of-test, 2 for mismatch.
* NB: called from a signal handler.
diff --git a/risu_m68k.c b/risu_m68k.c
index e345b25..c0e29ff 100644
--- a/risu_m68k.c
+++ b/risu_m68k.c
@@ -45,33 +45,6 @@ int get_risuop(struct reginfo *ri)
return (key != risukey) ? -1 : op;
}
-int send_register_info(int sock, void *uc)
-{
- struct reginfo ri;
- int op;
-
- reginfo_init(&ri, uc);
- op = get_risuop(&ri);
-
- switch (op) {
- case OP_COMPARE:
- case OP_TESTEND:
- default:
- return send_data_pkt(sock, &ri, sizeof(ri));
- case OP_SETMEMBLOCK:
- memblock = (void *)(uintptr_t)get_reginfo_paramreg(&ri);
- break;
- case OP_GETMEMBLOCK:
- set_ucontext_paramreg(uc,
- get_reginfo_paramreg(&ri) + (uintptr_t)memblock);
- break;
- case OP_COMPAREMEM:
- return send_data_pkt(sock, memblock, MEMBLOCKLEN);
- break;
- }
- return 0;
-}
-
/* Read register info from the socket and compare it with that from the
* ucontext. Return 0 for match, 1 for end-of-test, 2 for mismatch.
* NB: called from a signal handler.
diff --git a/risu_ppc64le.c b/risu_ppc64le.c
index 8757712..928f36f 100644
--- a/risu_ppc64le.c
+++ b/risu_ppc64le.c
@@ -50,33 +50,6 @@ int get_risuop(struct reginfo *ri)
return (key != risukey) ? -1 : op;
}
-int send_register_info(int sock, void *uc)
-{
- struct reginfo ri;
- int op;
-
- reginfo_init(&ri, uc);
- op = get_risuop(&ri);
-
- switch (op) {
- case OP_COMPARE:
- case OP_TESTEND:
- default:
- return send_data_pkt(sock, &ri, sizeof(ri));
- case OP_SETMEMBLOCK:
- memblock = (void*)get_reginfo_paramreg(&ri);
- break;
- case OP_GETMEMBLOCK:
- set_ucontext_paramreg(uc,
- get_reginfo_paramreg(&ri) + (uintptr_t)memblock);
- break;
- case OP_COMPAREMEM:
- return send_data_pkt(sock, memblock, MEMBLOCKLEN);
- break;
- }
- return 0;
-}
-
/* Read register info from the socket and compare it with that from the
* ucontext. Return 0 for match, 1 for end-of-test, 2 for mismatch.
* NB: called from a signal handler.
--
2.7.4
- [Qemu-devel] [PATCH risu 0/9] risu: refactor and reduce CPU-specific code, Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 1/9] Drop the weird modification of a ucontext in the ppc reginfo_is_eq(), Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 9/9] Tidy up #include lines, Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 7/9] Move send_register_info() to reginfo.c,
Peter Maydell <=
- [Qemu-devel] [PATCH risu 8/9] Move recv_and_compare_register_info() and report_match_status() to reginfo.c, Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 6/9] Make reginfo_{init, is_eq, dump, dump_mismatch} official per-CPU API, Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 3/9] Make get_risuop() a formal part of the CPU interface, Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 5/9] m68k: Drop unused ucontext_t* argument to reginfo_is_eq(), Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 2/9] Abstract out getting and setting parameter register, Peter Maydell, 2017/02/24
- [Qemu-devel] [PATCH risu 4/9] ppc64le, m68k: Make reginfo_dump() API match arm, aarch64, Peter Maydell, 2017/02/24
- Re: [Qemu-devel] [PATCH risu 0/9] risu: refactor and reduce CPU-specific code, Laurent Vivier, 2017/02/24