|
| From: | Eric Blake |
| Subject: | Re: [Qemu-devel] [PATCH 01/33] linux-user: Split out do_syscall1 |
| Date: | Fri, 1 Jun 2018 09:00:14 -0500 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
On 06/01/2018 02:30 AM, Richard Henderson wrote:
There was supposed to be a single point of return for do_syscall so that tracing works properly. However, there are a few bugs in that area. It is significantly simpler to simply split out an inner function to enforce this. Signed-off-by: Richard Henderson <address@hidden> --- linux-user/syscall.c | 89 +++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 35 deletions(-)
@@ -7977,28 +7979,6 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
arg1,
void *p;
char *fn;
-#if defined(DEBUG_ERESTARTSYS)
+abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
+ abi_long arg2, abi_long arg3, abi_long arg4,
+ abi_long arg5, abi_long arg6, abi_long arg7,
+ abi_long arg8)
+{
+ CPUState *cpu = ENV_GET_CPU(cpu_env);
+ abi_long ret;
+
+#if defined(DEBUG_ERESTARTSYS)
Code motion, but...
+ /* Debug-only code for exercising the syscall-restart code paths
+ * in the per-architecture cpu main loops: restart every syscall
+ * the guest makes once before letting it through.
+ */
+ {
+ static bool flag;
+ flag = !flag;
+ if (flag) {
+ return -TARGET_ERESTARTSYS;
+ }
+ }
+#endif
+#ifdef DEBUG
...it looks inconsistent to mix '#if defined()' with '#ifdef' in the same function. Worth cleaning up while you do this refactoring?
-- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
| [Prev in Thread] | Current Thread | [Next in Thread] |