From patchwork Thu Sep 16 15:12:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512929 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1305960jao; Thu, 16 Sep 2021 08:14:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzI2fp47zgLnA/Z/xFAda6W0eWFGbsKpj7xFL14Hma3V8uc7Zxg4K3d8XJxBebnBxZwg47Z X-Received: by 2002:a05:620a:1e8:: with SMTP id x8mr5468376qkn.153.1631805266277; Thu, 16 Sep 2021 08:14:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805266; cv=none; d=google.com; s=arc-20160816; b=hGNx60PflEX0YR8Lg4mf9rIt6qQEWP5Rylk7HT+WtXQ65O6UWLSwwixA8INDbOWQZN Oubz5tgMObZJOFtgZZsa/ztIl+S0G25h+N8tHoBAswACZvLH8KGhLsH2gtYbiKyar5yo v5vvXlYiug9UUzPIHUJ6U7ipQ6RaJp+Or71/aU6qmMflB8f8/RG2exI+C82S5cNJTyxG nxBafa6tJRQrcbEiPUIuI3wrPvfMd+5nlWD9Y6TROkEFrr6BQk545KmRupmjsvfeeUcc Vy96h3T5W6807hozIRjPU1ob7huCJiRsXAEKCH2IOaPMwZORKjbx5XG9nW3T5dHehAhc lg1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=mzyTCew4r0SMBvjl4KnxgBj58e9Qi8bW+c9LvZlnyBU=; b=NyE/todb882Eyde6ELkVQ1x0fSNl4BBsI3RN7N6lind64/RxLh501UfOP83DAeKshM apbeQ+a2UWb0nCIzP+LDYqNuxnla3/FKN2MIQ81omeEd2dPoZCos+GFoxN/Moueww/zM 7I7wxnXWg2asoMBp/uCB6/bspab+E5IRgZ4tTwQWd5+J4Ww52mJhX7NgtYQWkY+yqmPr XnyLt2tVq0L3uHkeeI8B7n4uCwY8RlC9Ndz+io6iSOzqKWSsojkR6DzQ3Rm2u5T7aWPD B3LeRUnnKZ9bzaKojgEpIkChTihnTBYgGvcSVAIRg1GnF+6DzaaeYLB2zVtcNhW4GARU H80A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id n14si1841766qtl.374.2021.09.16.08.14.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:14:26 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:56356 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQt5l-0002tn-OU for patch@linaro.org; Thu, 16 Sep 2021 11:14:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36184) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4I-0002qP-6L for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:54 -0400 Received: from mout.kundenserver.de ([217.72.192.73]:50637) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4D-0004DP-Ja for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:53 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1M4aEC-1mRQlF018I-001kll; Thu, 16 Sep 2021 17:12:39 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 01/10] linux-user: Fix coding style nits in qemu.h Date: Thu, 16 Sep 2021 17:12:28 +0200 Message-Id: <20210916151237.1188301-2-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:sKpQL72kQCXKyE2AtzkNdtHMCcm6TBG2i9GqYfxFcQobZ78vXG+ ihseQD2mxFD/LjLxXAO1d8+kpT22efqoXEueOo/7C0XY/o2RKKPp7JoVv4mRsL7Nazrjn0C NlZDjjc+1erqP2b5Qr27avAKMdfKi+2gfPBQW8KnMi55U4Q8tkcv46PXCVTTK3+l3AGAhZi FvYnypNw8vkk6wQ/y5zow== X-UI-Out-Filterresults: notjunk:1; V03:K0:u/Q7ZDuMYIs=:xEiCLG11Uc8gwv/2exydz8 o0U6Wk09gavSweps9yd0p+2QRE/XVym3LQtK7Zi/ezq3EfBVav3riaR8dt5bT2DHCNHvRLvY0 4JfdXFh4KFEnz82Mt4xB2afpB80Pw1UdDTKdkvj3q2ErgmleF0KGYuA29RGIDXJkaHi9h+Mob 5gTv9vzngRjUsiHTXsAj5VMH/vXs+oyTxrVeY2L2fDDEsI8WBAZrlOWthygIP+ngNFiHyVdqP uJ2gI7tcqNNv8Lfd+bigxCOxNvia1TSrtZJcj1WOWm6q/pL9eJkYsfhqjmCprNuspQj3dy/aj MGjikbGzsGxAsbJbBcL58mQmw0KNYZS4pFFAb6h+XIjQUVkBNewmPqw8n6S2SAhkPFPJkGByM hPNlq4JvvfJtTI4iw9YJGte1Upe8SmCydGw2Pys5bydsj9tqZyu+iQtBqFpxCLOG5AEEWun6e xV7qXzVwCTQnGPVBUvZgvXbf/ipc6TJ1S4mLgVzgEu6bSTh6q4xQwLzI+JbdY2/UEjjGhc64n d9h6lIjrs5VWUCGgWGCccfDDTCWJdNoG0gHSeEtwuzlZf276UOY8zwrUHsj2W9VGbKQSbfT/b ZsUzYyM0IHvf2gKG+ML6AQCyoFXftkfFsavgEn3L/1aMUCedC9yKEQe9fGhHjJqx+LNOhnpUQ 65aPlnv6BPE16WVfboegBMW+k3ylI50Nrc8QyaW3iCdS3G3DsEfvHu4Ff43fMfmXTzr/RFjyR DAuOQlNcwPOcKh7MLxudCkaPq8riuYuL1USrKQ== Received-SPF: none client-ip=217.72.192.73; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell We're about to move a lot of the code in qemu.h out into different header files; fix the coding style nits first so that checkpatch is happy with the pure code-movement patches. This is mostly block-comment style but also a few whitespace issues. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-2-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/qemu.h | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) -- 2.31.1 diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 3b0b6b75fe8f..34b975ba502e 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -15,12 +15,14 @@ #include "target_syscall.h" #include "exec/gdbstub.h" -/* This is the size of the host kernel's sigset_t, needed where we make +/* + * This is the size of the host kernel's sigset_t, needed where we make * direct system calls that take a sigset_t pointer and a size. */ #define SIGSET_T_SIZE (_NSIG / 8) -/* This struct is used to hold certain information about the image. +/* + * This struct is used to hold certain information about the image. * Basically, it replicates in user space what would be certain * task_struct fields in the kernel */ @@ -48,13 +50,13 @@ struct image_info { abi_ulong env_strings; abi_ulong file_string; uint32_t elf_flags; - int personality; + int personality; abi_ulong alignment; /* The fields below are used in FDPIC mode. */ abi_ulong loadmap_addr; uint16_t nsegs; - void *loadsegs; + void *loadsegs; abi_ulong pt_dynamic_addr; abi_ulong interpreter_loadmap_addr; abi_ulong interpreter_pt_dynamic_addr; @@ -98,8 +100,10 @@ struct emulated_sigtable { target_siginfo_t info; }; -/* NOTE: we force a big alignment so that the stack stored after is - aligned too */ +/* + * NOTE: we force a big alignment so that the stack stored after is + * aligned too + */ typedef struct TaskState { pid_t ts_tid; /* tid (or pid) of this task */ #ifdef TARGET_ARM @@ -134,20 +138,23 @@ typedef struct TaskState { struct emulated_sigtable sync_signal; struct emulated_sigtable sigtab[TARGET_NSIG]; - /* This thread's signal mask, as requested by the guest program. + /* + * This thread's signal mask, as requested by the guest program. * The actual signal mask of this thread may differ: * + we don't let SIGSEGV and SIGBUS be blocked while running guest code * + sometimes we block all signals to avoid races */ sigset_t signal_mask; - /* The signal mask imposed by a guest sigsuspend syscall, if we are + /* + * The signal mask imposed by a guest sigsuspend syscall, if we are * currently in the middle of such a syscall */ sigset_t sigsuspend_mask; /* Nonzero if we're leaving a sigsuspend and sigsuspend_mask is valid. */ int in_sigsuspend; - /* Nonzero if process_pending_signals() needs to do something (either + /* + * Nonzero if process_pending_signals() needs to do something (either * handle a pending signal or unblock signals). * This flag is written from a signal handler so should be accessed via * the qatomic_read() and qatomic_set() functions. (It is not accessed @@ -168,8 +175,10 @@ extern unsigned long mmap_min_addr; /* ??? See if we can avoid exposing so much of the loader internals. */ -/* Read a good amount of data initially, to hopefully get all the - program headers loaded. */ +/* + * Read a good amount of data initially, to hopefully get all the + * program headers loaded. + */ #define BPRM_BUF_SIZE 1024 /* @@ -184,7 +193,7 @@ struct linux_binprm { int argc, envc; char **argv; char **envp; - char * filename; /* Name of binary */ + char *filename; /* Name of binary */ int (*core_dump)(int, const CPUArchState *); /* coredump routine */ }; @@ -212,10 +221,11 @@ void do_init_thread(struct target_pt_regs *regs, struct image_info *infop); abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp, abi_ulong stringp, int push_ptr); int loader_exec(int fdexec, const char *filename, char **argv, char **envp, - struct target_pt_regs * regs, struct image_info *infop, + struct target_pt_regs *regs, struct image_info *infop, struct linux_binprm *); -/* Returns true if the image uses the FDPIC ABI. If this is the case, +/* + * Returns true if the image uses the FDPIC ABI. If this is the case, * we have to provide some information (loadmap, pt_dynamic_info) such * that the program can be relocated adequately. This is also useful * when handling signals. @@ -283,7 +293,8 @@ void probe_guest_base(const char *image_name, * with any of the host errno values.) */ -/* A guide to using safe_syscall() to handle interactions between guest +/* + * A guide to using safe_syscall() to handle interactions between guest * syscalls and guest signals: * * Guest syscalls come in two flavours: @@ -392,7 +403,8 @@ extern long safe_syscall_base(int *pending, long number, ...); #else -/* Fallback for architectures which don't yet provide a safe-syscall assembly +/* + * Fallback for architectures which don't yet provide a safe-syscall assembly * fragment; note that this is racy! * This should go away when all host architectures have been updated. */ @@ -736,7 +748,8 @@ static inline int regpairs_aligned(void *cpu_env, int num) { return 0; } */ void preexit_cleanup(CPUArchState *env, int code); -/* Include target-specific struct and function definitions; +/* + * Include target-specific struct and function definitions; * they may need access to the target-independent structures * above, so include them last. */ From patchwork Thu Sep 16 15:12:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512930 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1306020jao; Thu, 16 Sep 2021 08:14:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzl45KfUraPhWHU08nF4aQ62/ApbgVlD2qJwakVlVu4pyCYxOq1xCDeuNXf2fUMyPpvmnT9 X-Received: by 2002:ac8:514f:: with SMTP id h15mr3802056qtn.14.1631805270416; Thu, 16 Sep 2021 08:14:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805270; cv=none; d=google.com; s=arc-20160816; b=XKoRNPwfFWoc2jIi4U9/l55WmQCoT0aotmZ3f5Ij8+g5tuwhuvzzYuB4VjOFiXR+gJ 3r/D0PGb+/iQ2Gemu8AL2sLMVDdU3BysPxVvkdVzjtPgQMCAs6+UW/lCEL32H4+Q8d/I vrfU2Rkxdsk3WuqkyDkhK0oAM7+nAVDCILXz1ChtgxIoQfwoMtiu7CAw2UibKJ1UhS8m 7mG0lKoRIuWjZDDf/M+lmnFza5xOt5G1Lt/h1F4pCTJEOJBEbtJOPdP45X+1mBo9fJ8P cl5pGLBj4VC2iAnpCiJgUHGwQL5Og3xODcCfMCBEDzcOywMqYvekZczE/G5u74vhIK0A 6/Og== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=aDEEsc/l2UuIGZq0U0K1lDepj8mr/44IefpJLqUc7Oo=; b=vLPokypmgMlB7K4blgXpRUeB/MA1EUbP13VV9kd9+Ww3y3Bc99NxSuMMQzDb/lj/3c VuzEOpg7rKZoKQpOeuz92TOgrw7KBKWQWdHGljSC5Dblk82Y0BwXBN99VwQWQt6WWAB7 0sAMxWTUdswmZb9/nMs+9Tl4cAXzOeLfADp5V/vAXWDgs53BCl/UM5oZDy5p+koVGzl6 ppbdiX0BMZoaWsNuzAGvCXhh5H9NaYQ/1aC7ad0laIrubErwm4X4n9HK3S/qNpGWxfoj gJbn2ghQJrZE+aULRlIuQD2Vj4NYtGrffjgC8Gj3j3TkvRf7N+/TKdQBdhyYGToNjyv0 OtIg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id x13si2044379qvj.150.2021.09.16.08.14.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:14:30 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:56508 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQt5p-00030U-R0 for patch@linaro.org; Thu, 16 Sep 2021 11:14:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36218) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4J-0002uX-TW for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:55 -0400 Received: from mout.kundenserver.de ([212.227.17.13]:60125) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4H-0004DR-Sc for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:55 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MKc0o-1mCVRb2LbI-00KwaB; Thu, 16 Sep 2021 17:12:39 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 02/10] linux-user: Split strace prototypes into strace.h Date: Thu, 16 Sep 2021 17:12:29 +0200 Message-Id: <20210916151237.1188301-3-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:nauILPra2Fue2grxmgbq665R+L3pTKqbEhkc4AmGn+eS2weFcuY z+J7VFOluNdGJW9koAdbt2bME/WZl+nyQE8KGnyoW7DdlekI2tVu783388YN6KMXK6gELOX AdoiQ8lNl1wFgUy0w74bVr2BHRo+dYUZ2I5B6DF+0G5V9dtxsUoVXksXbc0c1PHmANTI8h5 Aw5Jj+lgG58mNTmK/CAWw== X-UI-Out-Filterresults: notjunk:1; V03:K0:hPRIh8YKt4c=:DtYD2Ax0qhhXlctbdiGNPJ f8v42cXNLmez5mMgv04nP2J/qTxXu1cnBFrkMBxg8pry5MxEy0lf3bnIS/v1w9LjjFU4AtMoi cB+ypOzuSirrQmKCWqecWRztAyz3Ty3fJLCqcvQca1uYF6TY9+ns7pDLK3SArFTRy9y202CJS TukAoy44qjc4OL0Epe5yZGgUwYl3OAO8zNPufDnmdYldIry1gGs8ZVGq/hIWTo2yO8m7OHtpW HpPMSdjz7fwfY9C5SO/nMybWYJfWzpWlNGkWyG6YTCXU9sPM1nUy/KY184KHWrkgJrgfILDGV 5OQb6ykRvlXwTPaK+l0IkR50R1q87OLHIuj+Nc5cLzPpC04MMjCTiTfJyzmTw2JBcqnsyjwkA eQ96dIsVr2P/BrcjCj9cOdZ3G4RAtyjgVSdgu5vyMpZ4b+qYaBLBVfzPX96es5u7HeqEpFY9t OC8ZX8cwqpJMkVDyv5Hf1sgd8Cf2Vx1hpj9ytvco9UQZrMnOlcJneFRYmfNhbmb+7L8feQvsI 6TKpKhtzs/339MhI+0gdEJeicDRoOE3Kdktz93ByjsVlrDneSR+HyQ7MvoYN9Km4jnyOOoci9 UH9z+rIw5kQ3Nyn0QwdkCeTt1ex9xpCzOBX6fdI0l7b32i2OOq7UFUtHrf+2luzWGVyp0HrKr 7AblOzlpOxKo+6PVY4NiB0yiVmXLZdq2cuZHnc/R4ZmJXEIsAiH0rhl0dHUe8qHgwRez00IcK UgRWiU4mRNo4TxoOpoSQ3AREALCG+kNhsYCQLQ== Received-SPF: none client-ip=212.227.17.13; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell The functions implemented in strace.c are only used in a few files in linux-user; split them out of qemu.h and into a new strace.h header which we include in the places that need it. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-3-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/qemu.h | 18 ------------------ linux-user/signal.c | 1 + linux-user/strace.c | 2 ++ linux-user/strace.h | 38 ++++++++++++++++++++++++++++++++++++++ linux-user/syscall.c | 1 + 5 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 linux-user/strace.h -- 2.31.1 diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 34b975ba502e..ad2d49fed9fb 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -415,24 +415,6 @@ extern long safe_syscall_base(int *pending, long number, ...); /* syscall.c */ int host_to_target_waitstatus(int status); -/* strace.c */ -void print_syscall(void *cpu_env, int num, - abi_long arg1, abi_long arg2, abi_long arg3, - abi_long arg4, abi_long arg5, abi_long arg6); -void print_syscall_ret(void *cpu_env, int num, abi_long ret, - abi_long arg1, abi_long arg2, abi_long arg3, - abi_long arg4, abi_long arg5, abi_long arg6); -/** - * print_taken_signal: - * @target_signum: target signal being taken - * @tinfo: target_siginfo_t which will be passed to the guest for the signal - * - * Print strace output indicating that this signal is being taken by the guest, - * in a format similar to: - * --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} --- - */ -void print_taken_signal(int target_signum, const target_siginfo_t *tinfo); - /* signal.c */ void process_pending_signals(CPUArchState *cpu_env); void signal_init(void); diff --git a/linux-user/signal.c b/linux-user/signal.c index a8faea6f0909..ee1934947ac8 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -22,6 +22,7 @@ #include #include "qemu.h" +#include "strace.h" #include "trace.h" #include "signal-common.h" diff --git a/linux-user/strace.c b/linux-user/strace.c index cce0a5d1e351..ee3429fae82a 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -1,4 +1,5 @@ #include "qemu/osdep.h" + #include #include #include @@ -14,6 +15,7 @@ #include #include #include "qemu.h" +#include "strace.h" struct syscallname { int nr; diff --git a/linux-user/strace.h b/linux-user/strace.h new file mode 100644 index 000000000000..1e232d07fc85 --- /dev/null +++ b/linux-user/strace.h @@ -0,0 +1,38 @@ +/* + * strace.h: prototypes for linux-user builtin strace handling + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#ifndef LINUX_USER_STRACE_H +#define LINUX_USER_STRACE_H + +void print_syscall(void *cpu_env, int num, + abi_long arg1, abi_long arg2, abi_long arg3, + abi_long arg4, abi_long arg5, abi_long arg6); +void print_syscall_ret(void *cpu_env, int num, abi_long ret, + abi_long arg1, abi_long arg2, abi_long arg3, + abi_long arg4, abi_long arg5, abi_long arg6); +/** + * print_taken_signal: + * @target_signum: target signal being taken + * @tinfo: target_siginfo_t which will be passed to the guest for the signal + * + * Print strace output indicating that this signal is being taken by the guest, + * in a format similar to: + * --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} --- + */ +void print_taken_signal(int target_signum, const target_siginfo_t *tinfo); + +#endif /* LINUX_USER_STRACE_H */ diff --git a/linux-user/syscall.c b/linux-user/syscall.c index ccd3892b2df7..4ac2801e495a 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -127,6 +127,7 @@ #include "uname.h" #include "qemu.h" +#include "strace.h" #include "qemu/guest-random.h" #include "qemu/selfmap.h" #include "user/syscall-trace.h" From patchwork Thu Sep 16 15:12:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512932 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1309570jao; Thu, 16 Sep 2021 08:18:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwqaPNXYHDC6TxY4/xPoWLhs5sHUsUrTohNiw9S1ZYHlUTeFHD70O+tzDdU/tgOArMtbCeM X-Received: by 2002:a05:6214:13cd:: with SMTP id cg13mr5719253qvb.51.1631805494385; Thu, 16 Sep 2021 08:18:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805494; cv=none; d=google.com; s=arc-20160816; b=XsQZ69JIUvYdVr2Bm8TOhQGWGKHGJ6X0w4R8TxuyIt0VD4R2cCUmsBEb7meWDsoHjf oSfNUGocQsKE0sv2o0FbI5vMDbeZRSd1L5ko8JKOatBBeBrhwoxZ1bTrqZUq4SHTlXmx YtuZ8GXWtlU+YI3Mr9VUz0ec0ujoxEk9isXcKEeP+nPOoGiLLdW7N24HyS6YLm+UiB1J dF6IgV1abEu1exKMyDhNYK4vNnHiWXAxmMjRq0P1LfZsMi/fSoAU9tb83sBpvyalk896 a7x9xX0qb7x5XeYNheF0jdYZo+KLR8adavE8VZJ71ZkLhcs0ErVDc8BMubSKL0EMN3m6 hqFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=MLZ1zqomJ+boxKDKFWdxk8sBqGJoxLYXGNgiXaFDMJ4=; b=Mjwr8+7RagXHmKp3xC1QKDAHnCOxfpdGKKb+AWWlng08DcmO0+Wj4niyqpm9CNEk+n R7qg+CcXeWimAkVT7p5qQ/uVjAS7rTfsuV2F2SvomfSVvUNwW+Y7lSi4glbxnLfPxyOb EXR1VzwdOKWp83I0MapmB/lItWVXINQNF4VvOvR7vLPCL6Qh9iPvpee4n4EywW7rhJtX a/hwQbJDmFfj5K31FhD0gmjkEF+EP3DtgHeEu6yRyvj4ECdxdcWHp/8XfcrYEaPdKxXH V6nmpxp6n+iUeQfetDl7ypcNclV+LnIGUQ7NyM3w9g2EaRS4TBTYt+t7G8oDpfW3qD0/ 5r7Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id k4si1779827qth.261.2021.09.16.08.18.14 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:18:14 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:36044 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQt9Q-0008Sb-Qz for patch@linaro.org; Thu, 16 Sep 2021 11:18:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36142) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4C-0002nO-68 for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:48 -0400 Received: from mout.kundenserver.de ([212.227.17.24]:59557) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt49-00049b-KI for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:47 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1N3bCH-1mqYsl0OMl-010Yw0; Thu, 16 Sep 2021 17:12:40 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 03/10] linux-user: Split signal-related prototypes into signal-common.h Date: Thu, 16 Sep 2021 17:12:30 +0200 Message-Id: <20210916151237.1188301-4-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:gl6U6ZqkX/YkcNiivHc5N974e/TkhW08d+De8vKoDUcVLaiHpKi 7V+4A8Tl0ZoFC5O7UYng0kqCGIbBUZlVUDtc6Tt5rV9qQySVJbeyZzrf5WpZj1LPhwzjLdV DSFM16CgmEVNdhDvqmUXmtX3CYlZMXTsxKrTOchisRRDVOewCsgsbmUriZYRhY4zKZM2Ywa sT8pJ9jb7U3Bjnpb+zW5A== X-UI-Out-Filterresults: notjunk:1; V03:K0:t84rETSWops=:yW1vv60k+Dkt592O65CJSi y5LqVGs7pCyt/738DGokbrfMtJLw5Khi63agm+aS1/a5HvOnh1+FGnUuHV2HK4XCFxoCiyD68 jY7TVevrPT6HqsMyKoXHsKWGCTwY4bnYVYTl/kFm6RpxAMiH6fMAdEXTBOWxHIpk2RKCIXY+8 k+NOBfEUSqWBF3jRHJ8Hi7bQLaB4pEzGTlpP4ucsP8kHsVlnB8Oc03h5SfiF+qVdb2UJ0F17W QCuDBpu/8CYr8gnoA8zV3hMmtv/E/D+085hj3/J6htwrJfwk5R3FejcPkwbELCeWvH0LinkrA SN/+NgiearqxFYgV+jzeUwCA12joZDDqp8o1Ur74Pms63o05HJcNKAx8yHTq/RYcxwjae3tIl ShGUjSlNrfgkqkwkBawklmEHQV9Vx82hveoqcGmVNUfxuCCuHZEHGokQfv2BmoKWcLFjaEoY+ B0MsaAjS6HPwRUgBZxkdw8eS5QjyPpJsZMhZaNcO+3AVW2OHzslc4O3lpDqIfY9YPZi/Pjdik jY6be7S1gdajv24BLjhfqx2au2+XBOf3VeRWkNFovmqgmP5IXkwr1ofDnmV+cMXTLJYc2QZWh fl/6rOiYP4DX0Xs/Z/5hjl470z6rZNInzMC71Yy8t4L72JdFWQiro64xoZhk51iGRBc9ACY8O s4yKEoTO3pJpARgq3QGKfRN+2XiDyH1d968vLjK4moISz03EWUYtfjGenAErmKf/Nep/cnSGD 3Qx7Dk8rJu4ucI6vczTN83XVKpbttjA4wj6DMQ== Received-SPF: none client-ip=212.227.17.24; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell Split the signal related prototypes into the existing header file signal-common.h, and include it in those places that now require it. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-4-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/aarch64/cpu_loop.c | 1 + linux-user/alpha/cpu_loop.c | 1 + linux-user/arm/cpu_loop.c | 1 + linux-user/cris/cpu_loop.c | 1 + linux-user/fd-trans.c | 1 + linux-user/hexagon/cpu_loop.c | 1 + linux-user/hppa/cpu_loop.c | 1 + linux-user/i386/cpu_loop.c | 1 + linux-user/m68k/cpu_loop.c | 1 + linux-user/main.c | 1 + linux-user/microblaze/cpu_loop.c | 1 + linux-user/mips/cpu_loop.c | 1 + linux-user/nios2/cpu_loop.c | 1 + linux-user/openrisc/cpu_loop.c | 1 + linux-user/ppc/cpu_loop.c | 1 + linux-user/qemu.h | 36 -------------------------------- linux-user/riscv/cpu_loop.c | 1 + linux-user/s390x/cpu_loop.c | 1 + linux-user/sh4/cpu_loop.c | 1 + linux-user/signal-common.h | 36 ++++++++++++++++++++++++++++++++ linux-user/sparc/cpu_loop.c | 1 + linux-user/syscall.c | 1 + linux-user/xtensa/cpu_loop.c | 1 + 23 files changed, 57 insertions(+), 36 deletions(-) -- 2.31.1 diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index ee72a1c20f06..5cac76f67b09 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" #include "qemu/guest-random.h" #include "semihosting/common-semi.h" #include "target/arm/syndrome.h" diff --git a/linux-user/alpha/cpu_loop.c b/linux-user/alpha/cpu_loop.c index 7ce2461a0288..8464047368a3 100644 --- a/linux-user/alpha/cpu_loop.c +++ b/linux-user/alpha/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" void cpu_loop(CPUAlphaState *env) { diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index 69632d15be18..5556d381463b 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -22,6 +22,7 @@ #include "qemu.h" #include "elf.h" #include "cpu_loop-common.h" +#include "signal-common.h" #include "semihosting/common-semi.h" #define get_user_code_u32(x, gaddr, env) \ diff --git a/linux-user/cris/cpu_loop.c b/linux-user/cris/cpu_loop.c index 334edddd1e29..8c9fc3127ec3 100644 --- a/linux-user/cris/cpu_loop.c +++ b/linux-user/cris/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" void cpu_loop(CPUCRISState *env) { diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c index 86b6f484d30b..48203c1af9d6 100644 --- a/linux-user/fd-trans.c +++ b/linux-user/fd-trans.c @@ -28,6 +28,7 @@ #endif #include "qemu.h" #include "fd-trans.h" +#include "signal-common.h" enum { QEMU_IFLA_BR_UNSPEC, diff --git a/linux-user/hexagon/cpu_loop.c b/linux-user/hexagon/cpu_loop.c index bc34f5d7c300..348d2dc34130 100644 --- a/linux-user/hexagon/cpu_loop.c +++ b/linux-user/hexagon/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu/osdep.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" #include "internal.h" void cpu_loop(CPUHexagonState *env) diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c index 82d8183821ad..c3661994a570 100644 --- a/linux-user/hppa/cpu_loop.c +++ b/linux-user/hppa/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" static abi_ulong hppa_lws(CPUHPPAState *env) { diff --git a/linux-user/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c index f813e87294af..ee2e139a0634 100644 --- a/linux-user/i386/cpu_loop.c +++ b/linux-user/i386/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" /***********************************************************/ /* CPUX86 core interface */ diff --git a/linux-user/m68k/cpu_loop.c b/linux-user/m68k/cpu_loop.c index c7a500b58c48..3a330401bf2d 100644 --- a/linux-user/m68k/cpu_loop.c +++ b/linux-user/m68k/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" void cpu_loop(CPUM68KState *env) { diff --git a/linux-user/main.c b/linux-user/main.c index a6094563b6bf..4f5167073574 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -49,6 +49,7 @@ #include "cpu_loop-common.h" #include "crypto/init.h" #include "fd-trans.h" +#include "signal-common.h" #ifndef AT_FLAGS_PRESERVE_ARGV0 #define AT_FLAGS_PRESERVE_ARGV0_BIT 0 diff --git a/linux-user/microblaze/cpu_loop.c b/linux-user/microblaze/cpu_loop.c index c3396a6e09bd..0d2c8f8dea8a 100644 --- a/linux-user/microblaze/cpu_loop.c +++ b/linux-user/microblaze/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" void cpu_loop(CPUMBState *env) { diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c index 9d813ece4e75..7dfaa0cb1e11 100644 --- a/linux-user/mips/cpu_loop.c +++ b/linux-user/mips/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" #include "elf.h" #include "internal.h" #include "fpu_helper.h" diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c index 9869083fa192..68f95d7ad7b2 100644 --- a/linux-user/nios2/cpu_loop.c +++ b/linux-user/nios2/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" void cpu_loop(CPUNios2State *env) { diff --git a/linux-user/openrisc/cpu_loop.c b/linux-user/openrisc/cpu_loop.c index b33fa7771875..f6c67859887b 100644 --- a/linux-user/openrisc/cpu_loop.c +++ b/linux-user/openrisc/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" void cpu_loop(CPUOpenRISCState *env) { diff --git a/linux-user/ppc/cpu_loop.c b/linux-user/ppc/cpu_loop.c index fa91ea0eed99..ace431238c27 100644 --- a/linux-user/ppc/cpu_loop.c +++ b/linux-user/ppc/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" static inline uint64_t cpu_ppc_get_tb(CPUPPCState *env) { diff --git a/linux-user/qemu.h b/linux-user/qemu.h index ad2d49fed9fb..76d3f5e7eb98 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -415,42 +415,6 @@ extern long safe_syscall_base(int *pending, long number, ...); /* syscall.c */ int host_to_target_waitstatus(int status); -/* signal.c */ -void process_pending_signals(CPUArchState *cpu_env); -void signal_init(void); -int queue_signal(CPUArchState *env, int sig, int si_type, - target_siginfo_t *info); -void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info); -void target_to_host_siginfo(siginfo_t *info, const target_siginfo_t *tinfo); -int target_to_host_signal(int sig); -int host_to_target_signal(int sig); -long do_sigreturn(CPUArchState *env); -long do_rt_sigreturn(CPUArchState *env); -abi_long do_sigaltstack(abi_ulong uss_addr, abi_ulong uoss_addr, - CPUArchState *env); -int do_sigprocmask(int how, const sigset_t *set, sigset_t *oldset); -abi_long do_swapcontext(CPUArchState *env, abi_ulong uold_ctx, - abi_ulong unew_ctx, abi_long ctx_size); -/** - * block_signals: block all signals while handling this guest syscall - * - * Block all signals, and arrange that the signal mask is returned to - * its correct value for the guest before we resume execution of guest code. - * If this function returns non-zero, then the caller should immediately - * return -TARGET_ERESTARTSYS to the main loop, which will take the pending - * signal and restart execution of the syscall. - * If block_signals() returns zero, then the caller can continue with - * emulation of the system call knowing that no signals can be taken - * (and therefore that no race conditions will result). - * This should only be called once, because if it is called a second time - * it will always return non-zero. (Think of it like a mutex that can't - * be recursively locked.) - * Signals will be unblocked again by process_pending_signals(). - * - * Return value: non-zero if there was a pending signal, zero if not. - */ -int block_signals(void); /* Returns non zero if signal pending */ - #ifdef TARGET_I386 /* vm86.c */ void save_v86_state(CPUX86State *env); diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c index 74a9628dc9b5..47978c4e3543 100644 --- a/linux-user/riscv/cpu_loop.c +++ b/linux-user/riscv/cpu_loop.c @@ -22,6 +22,7 @@ #include "qemu/error-report.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" #include "elf.h" #include "semihosting/common-semi.h" diff --git a/linux-user/s390x/cpu_loop.c b/linux-user/s390x/cpu_loop.c index 6a69a6dd2609..ae70f630532d 100644 --- a/linux-user/s390x/cpu_loop.c +++ b/linux-user/s390x/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" /* s390x masks the fault address it reports in si_addr for SIGSEGV and SIGBUS */ #define S390X_FAIL_ADDR_MASK -4096LL diff --git a/linux-user/sh4/cpu_loop.c b/linux-user/sh4/cpu_loop.c index 222ed1c670c4..06e4a4d00751 100644 --- a/linux-user/sh4/cpu_loop.c +++ b/linux-user/sh4/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" void cpu_loop(CPUSH4State *env) { diff --git a/linux-user/signal-common.h b/linux-user/signal-common.h index ea86328b289a..58ea23f6ea94 100644 --- a/linux-user/signal-common.h +++ b/linux-user/signal-common.h @@ -47,4 +47,40 @@ void setup_frame(int sig, struct target_sigaction *ka, void setup_rt_frame(int sig, struct target_sigaction *ka, target_siginfo_t *info, target_sigset_t *set, CPUArchState *env); + +void process_pending_signals(CPUArchState *cpu_env); +void signal_init(void); +int queue_signal(CPUArchState *env, int sig, int si_type, + target_siginfo_t *info); +void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info); +void target_to_host_siginfo(siginfo_t *info, const target_siginfo_t *tinfo); +int target_to_host_signal(int sig); +int host_to_target_signal(int sig); +long do_sigreturn(CPUArchState *env); +long do_rt_sigreturn(CPUArchState *env); +abi_long do_sigaltstack(abi_ulong uss_addr, abi_ulong uoss_addr, + CPUArchState *env); +int do_sigprocmask(int how, const sigset_t *set, sigset_t *oldset); +abi_long do_swapcontext(CPUArchState *env, abi_ulong uold_ctx, + abi_ulong unew_ctx, abi_long ctx_size); +/** + * block_signals: block all signals while handling this guest syscall + * + * Block all signals, and arrange that the signal mask is returned to + * its correct value for the guest before we resume execution of guest code. + * If this function returns non-zero, then the caller should immediately + * return -TARGET_ERESTARTSYS to the main loop, which will take the pending + * signal and restart execution of the syscall. + * If block_signals() returns zero, then the caller can continue with + * emulation of the system call knowing that no signals can be taken + * (and therefore that no race conditions will result). + * This should only be called once, because if it is called a second time + * it will always return non-zero. (Think of it like a mutex that can't + * be recursively locked.) + * Signals will be unblocked again by process_pending_signals(). + * + * Return value: non-zero if there was a pending signal, zero if not. + */ +int block_signals(void); /* Returns non zero if signal pending */ + #endif diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c index 02532f198df8..b2c061119430 100644 --- a/linux-user/sparc/cpu_loop.c +++ b/linux-user/sparc/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" #define SPARC64_STACK_BIAS 2047 diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 4ac2801e495a..ad635ed3a5fd 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -128,6 +128,7 @@ #include "qemu.h" #include "strace.h" +#include "signal-common.h" #include "qemu/guest-random.h" #include "qemu/selfmap.h" #include "user/syscall-trace.h" diff --git a/linux-user/xtensa/cpu_loop.c b/linux-user/xtensa/cpu_loop.c index 64831c91996a..bb5335e2b6cb 100644 --- a/linux-user/xtensa/cpu_loop.c +++ b/linux-user/xtensa/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "signal-common.h" static void xtensa_rfw(CPUXtensaState *env) { From patchwork Thu Sep 16 15:12:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512934 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1310594jao; Thu, 16 Sep 2021 08:19:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPywhDxhYFOJ2OUXtiir8t70jCYUWZEyQzhUMrSAI5L1m5rGF30Nn3s2vcWSBy/9i6pdc7 X-Received: by 2002:ac8:578e:: with SMTP id v14mr5492266qta.285.1631805556771; Thu, 16 Sep 2021 08:19:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805556; cv=none; d=google.com; s=arc-20160816; b=SEunPcp8dGUxYTcRFxpQP9gMK5CnQsum/cLY2oD11TIpgi6WHWlcnKIMUZLvCIc4sA waAQ5uK0FNJctoHVqhKPhBbBN9Bbi/+7qvEEEPUkJp0US+wfGpgppteTIeZLi10CK7mj 3WRpc7rjISdw3q9L7cpd4vuyJQPsdPmlNMTgqy9pKkRKkwaBnL7Nc6QXpDIJTDlxBgCm PZi8auEsmDs6jYVgs0mGFT1N2aWJKsUXoUmtzylbeZb2A/ffu4uuWNyFJb2oAr1BqRg+ AEJOak3LLsUC1ukzR8mv1ouWmALkA5KBmlnfqQEdufHYxNfL2OFcwQdv08sXb5eZGtt4 aBTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=9CHzacPT9gzNtGlckHWmAvDYOfOVoHGaivnCPUXeRKY=; b=0K1r75bxRWVn8ih3fXUE4HrlMeFJdLH+cyzWN9zpQHknIdk3STyf0sQ94YvpyJASr/ Ogc7ADlv1jZKfjWRy9zTdi6uHQjF25YCFggp8a7lg+j3KsMVTlQ++F9tyef1ONuRb8T7 R/oSTOKyLw6geA2SLhh2eCOfpkyYNpgcP/JvWNhz7X1dFz+QRP+ZU79Xvd3aGVqZQ6p6 29ffmd/6vFOBNQ/HfuPpdhaOKaqV6ijxzY9okcInTKv7PQzIotGrl3BQhTumWwS8eehN x6KgE3to8VbpUgpcNZ9WBykoCAOs0cggEF5htFUQg17jmWOJrX93PzMxTMOU7S2xUsds 8kmQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id u18si1893335qtx.275.2021.09.16.08.19.16 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:19:16 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:40126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQtAS-0002nb-90 for patch@linaro.org; Thu, 16 Sep 2021 11:19:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36224) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4K-0002vd-5B for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:56 -0400 Received: from mout.kundenserver.de ([217.72.192.75]:41095) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4H-0004EJ-SU for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:55 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MV5KC-1mIb2k3Njy-00S33x; Thu, 16 Sep 2021 17:12:41 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 04/10] linux-user: Split loader-related prototypes into loader.h Date: Thu, 16 Sep 2021 17:12:31 +0200 Message-Id: <20210916151237.1188301-5-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:FlVO+zfmve3sWUPgFq15bZ6FEhk46NEoheDK38zmcHZyxwGAs1v OWoVX1uK4evFVrTV9Y75Frx7XWzEF6b9jix6Om52t9KRZXQKo6XtiZzGBiwOiJp4eh21XlV npanhI5VscAlQMX1iRgmqTjxPS82A4aZH07wWphRsCypESOHI6RRnmLjdFTMCaAF83SaTak fcJKwkeuOxnEJIf7nSPVA== X-UI-Out-Filterresults: notjunk:1; V03:K0:7rEcHKdi0Hc=:0X+evSegh57zvvRND+BG42 kfhMpXPHWGEE8G6/heNo4C3xFDg9SWZeb/OH7UBWTQo0yRm2GmCqXPBvhs22nabyOvHoYuZfq reP08bBsX87qcmlQkEce2bx3jVJuklSCSSSsTaHw6I7PS69C9A/IQg+Act2C93GkqyfE2y/KB jOxFwG4Z46BfguYA9rJPI55JNZFZaL44CDmT01aMMKnT+skz76aCxOmcYHy8iPfBDbNaP16ri ppXVOKe3X5fKQ6CMwhi4rwVM8bhF5aaOGxcebhj6FzQ/uxvSci6xDlOcAvd/PCklmFJRAgL6R eH5dQpFjpyUTBQ22L7MMRl/pK4bW6XweRLXEsABbwjU74lHPns+Fkc2NJE9QOHexB2pRrDAcL yguJIHWLbe2t53oUrbt4GNBV5LiWaXz/zI4iuY1I6A5ZpqosJ2o9Rztiv8wMC0w8XaD3ry28j 5RblCI7eOAW+5kXo5IlB0pkxiUvqt9a3j7P7qkd19td1w2qgB/aJfgqgbawDyMmTO1CRocPhs kdrcTCGUoEnKWe5ohZnR593txaBuA9/Rl/kDHgQeRM3OYlBI6PnoSLJWJlUSmK3w7VZ43TjgM D8KlvaTETsEBaeAa7N0JueCCtu1uICKwPSBgHgnxx8rUvAdrgn8FVW6XionxBBjpd/SSlpeX7 9D5pfwlEuSgTWwUbX0H8WJ+Qw8V+4BJHF347DVNcCulGINy+MNUC0KbOf9Y2KuFboNA+zo59k kAA8+kBJW4F9Kzsks0B8dxk2zVYNl3+lQCzfeQ== Received-SPF: none client-ip=217.72.192.75; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell Split guest-binary loader prototypes out into a new header loader.h which we include only where required. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-5-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/elfload.c | 1 + linux-user/flatload.c | 1 + linux-user/linuxload.c | 1 + linux-user/loader.h | 59 ++++++++++++++++++++++++++++++++++++++++++ linux-user/main.c | 1 + linux-user/qemu.h | 40 ---------------------------- linux-user/signal.c | 1 + linux-user/syscall.c | 1 + 8 files changed, 65 insertions(+), 40 deletions(-) create mode 100644 linux-user/loader.h -- 2.31.1 diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 01e9a833fbb6..6244fcd05ce4 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -6,6 +6,7 @@ #include #include "qemu.h" +#include "loader.h" #include "disas/disas.h" #include "qemu/bitops.h" #include "qemu/path.h" diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 3e5594cf894d..7484a4a35432 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -36,6 +36,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "loader.h" #include "flat.h" #include "target_flat.h" diff --git a/linux-user/linuxload.c b/linux-user/linuxload.c index 9d4eb5e94b9b..27be7090d8f1 100644 --- a/linux-user/linuxload.c +++ b/linux-user/linuxload.c @@ -2,6 +2,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "loader.h" #define NGROUPS 32 diff --git a/linux-user/loader.h b/linux-user/loader.h new file mode 100644 index 000000000000..f375ee0679b0 --- /dev/null +++ b/linux-user/loader.h @@ -0,0 +1,59 @@ +/* + * loader.h: prototypes for linux-user guest binary loader + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#ifndef LINUX_USER_LOADER_H +#define LINUX_USER_LOADER_H + +/* + * Read a good amount of data initially, to hopefully get all the + * program headers loaded. + */ +#define BPRM_BUF_SIZE 1024 + +/* + * This structure is used to hold the arguments that are + * used when loading binaries. + */ +struct linux_binprm { + char buf[BPRM_BUF_SIZE] __attribute__((aligned)); + abi_ulong p; + int fd; + int e_uid, e_gid; + int argc, envc; + char **argv; + char **envp; + char *filename; /* Name of binary */ + int (*core_dump)(int, const CPUArchState *); /* coredump routine */ +}; + +void do_init_thread(struct target_pt_regs *regs, struct image_info *infop); +abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp, + abi_ulong stringp, int push_ptr); +int loader_exec(int fdexec, const char *filename, char **argv, char **envp, + struct target_pt_regs *regs, struct image_info *infop, + struct linux_binprm *); + +uint32_t get_elf_eflags(int fd); +int load_elf_binary(struct linux_binprm *bprm, struct image_info *info); +int load_flt_binary(struct linux_binprm *bprm, struct image_info *info); + +abi_long memcpy_to_target(abi_ulong dest, const void *src, + unsigned long len); + +extern unsigned long guest_stack_size; + +#endif /* LINUX_USER_LOADER_H */ diff --git a/linux-user/main.c b/linux-user/main.c index 4f5167073574..67c5a87ffadd 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -50,6 +50,7 @@ #include "crypto/init.h" #include "fd-trans.h" #include "signal-common.h" +#include "loader.h" #ifndef AT_FLAGS_PRESERVE_ARGV0 #define AT_FLAGS_PRESERVE_ARGV0_BIT 0 diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 76d3f5e7eb98..02c4778c9704 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -173,30 +173,6 @@ void stop_all_tasks(void); extern const char *qemu_uname_release; extern unsigned long mmap_min_addr; -/* ??? See if we can avoid exposing so much of the loader internals. */ - -/* - * Read a good amount of data initially, to hopefully get all the - * program headers loaded. - */ -#define BPRM_BUF_SIZE 1024 - -/* - * This structure is used to hold the arguments that are - * used when loading binaries. - */ -struct linux_binprm { - char buf[BPRM_BUF_SIZE] __attribute__((aligned)); - abi_ulong p; - int fd; - int e_uid, e_gid; - int argc, envc; - char **argv; - char **envp; - char *filename; /* Name of binary */ - int (*core_dump)(int, const CPUArchState *); /* coredump routine */ -}; - typedef struct IOCTLEntry IOCTLEntry; typedef abi_long do_ioctl_fn(const IOCTLEntry *ie, uint8_t *buf_temp, @@ -217,13 +193,6 @@ extern IOCTLEntry ioctl_entries[]; #define IOC_W 0x0002 #define IOC_RW (IOC_R | IOC_W) -void do_init_thread(struct target_pt_regs *regs, struct image_info *infop); -abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp, - abi_ulong stringp, int push_ptr); -int loader_exec(int fdexec, const char *filename, char **argv, char **envp, - struct target_pt_regs *regs, struct image_info *infop, - struct linux_binprm *); - /* * Returns true if the image uses the FDPIC ABI. If this is the case, * we have to provide some information (loadmap, pt_dynamic_info) such @@ -232,12 +201,6 @@ int loader_exec(int fdexec, const char *filename, char **argv, char **envp, */ int info_is_fdpic(struct image_info *info); -uint32_t get_elf_eflags(int fd); -int load_elf_binary(struct linux_binprm *bprm, struct image_info *info); -int load_flt_binary(struct linux_binprm *bprm, struct image_info *info); - -abi_long memcpy_to_target(abi_ulong dest, const void *src, - unsigned long len); void target_set_brk(abi_ulong new_brk); abi_long do_brk(abi_ulong new_brk); void syscall_init(void); @@ -440,9 +403,6 @@ abi_ulong mmap_find_vma(abi_ulong, abi_ulong, abi_ulong); void mmap_fork_start(void); void mmap_fork_end(int child); -/* main.c */ -extern unsigned long guest_stack_size; - /* user access */ #define VERIFY_READ PAGE_READ diff --git a/linux-user/signal.c b/linux-user/signal.c index ee1934947ac8..0fa15f088b01 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -23,6 +23,7 @@ #include "qemu.h" #include "strace.h" +#include "loader.h" #include "trace.h" #include "signal-common.h" diff --git a/linux-user/syscall.c b/linux-user/syscall.c index ad635ed3a5fd..b1cd7410d8bb 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -129,6 +129,7 @@ #include "qemu.h" #include "strace.h" #include "signal-common.h" +#include "loader.h" #include "qemu/guest-random.h" #include "qemu/selfmap.h" #include "user/syscall-trace.h" From patchwork Thu Sep 16 15:12:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512933 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1310435jao; Thu, 16 Sep 2021 08:19:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymg82aas63Nd+7eRqjoiHSaFOSHZMN3cWDifBceWlwP4WKiggxKqzzx7wFCr5yzKTVBtpS X-Received: by 2002:a37:a253:: with SMTP id l80mr2190209qke.314.1631805547925; Thu, 16 Sep 2021 08:19:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805547; cv=none; d=google.com; s=arc-20160816; b=E1/wfcgl7tXd0GP12oZBFqpm7eLSqbsxtQ2LDXRa/1FLQa5VCr3KKMO9My91BnJWHD uVQTFBzjiy2WD3ENZBbxIIgpDAWweIno7fRRTs2EfQpiLzNTqhMoT119VP0zFjoFy0v7 zGxBpRCtXNyV4f85yXG90RRS5WFAtUJiUnxqTwjbSEW2Ep68VBgE8SOe5tXKjbOp31U6 +udxrt/UwV3vIMP8Rn5G8bJs+3ndnpMcPNNSGbgCrofmjR0qCv5E0GbdwUphFAJhs7kK Xx0P+7podx1XFOugK2aDeEob0v5MZed+FwSVa+FFKlDYCMkBAzcjwI76J6q6aR9/dcAk Ul1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=tS9McVWbO+5FI4jz5uWOIBLC59Wv00CB9tOaKzSViWI=; b=y9bj7i4+9ir7ijbzvIIBhZWI4fn5w94zgXz+u8ZDaizTofA5ah+Fhoaf20cO4ce/oj jGGluB7iE5//taan5EQgDi1hj4/o34utnLtyXbecy63UzsDRpSaRAr2g/U4DUlXrE3R+ R6e6vDNOsdBB6k5GxrG8oEH6LbsAlB5y8vUORbUrAG+gV/GYcMQu1UUgapDFPNDnTSSg gVVo8GSnf04wZghKNAtoyexK1ToPV/vw65y3N9ZjWnRfMfRPzftqbFKcda/2yBbtVgro 5lHnEez92FCMV9vZUTjTf6oJWlUdglNF56m3c+gE/q3gwJ7YEynhZioVxmwNc5jZAPpH tbfQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id p9si1910610qkm.331.2021.09.16.08.19.07 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:19:07 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:39210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQtAH-0002A9-QX for patch@linaro.org; Thu, 16 Sep 2021 11:19:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36262) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4U-00037r-4e for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:13:06 -0400 Received: from mout.kundenserver.de ([217.72.192.74]:40885) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4A-0004At-Rl for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:13:03 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1M27ep-1mSnwG2TVZ-002amk; Thu, 16 Sep 2021 17:12:41 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 05/10] linux-user: Split mmap prototypes into user-mmap.h Date: Thu, 16 Sep 2021 17:12:32 +0200 Message-Id: <20210916151237.1188301-6-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:fisbrR2TAFF4KtCuGEU6ddyrKDFa6KLsXsx5twGIcqCWOK2oWLS ZtjGplSNM1n0K8Z1R5zwy9jTmh1K5BU9ZNDA20urHBbAf+6W8/cw+7hexkPrCJD8fO97j2g 5UYjmbsQa/+P6zm36y1Kd8FzaCMUSqdPb0sqIZwBNkB5oVf7efpmrsiXOoM/oAzsbJ4ZKDt Z7hTpvpCT9ZBWUOvOwlWA== X-UI-Out-Filterresults: notjunk:1; V03:K0:OcY21J0WZlk=:2hW+QZCbk3OuFJNimB9cLN rgFgvYpj0ILeeKLJVQOpP38YTlFXBorlx9qwEONQPFpNDTynFbXin1/QeGRsSnOnm1Gssme0o 43uLKlpgttYhfqyWsqJAw1D0fyWL8UhPgFUTQYBbRnda63ncktb342yVgAvhtfgjuvzT0pSlK z36Q/ynDV7QDW+8YlJ/8WquKH1HK1xRSODtFtDYkCsdkefqcsiZT6Qb03w1SxXVM387kfuVZc o0hXSGlr4JBXOBeQdU2lGINNEcrFE0rTd8mSsSkek9/NigAX1SihMXBJyuoQThbZn40EzQcP8 1B9VFaiPwRsITc4ztom4wcMffVBPOAjdpheJo9lmYHCq8gpA0Vd7gCkMarrhjI0l+tbKJWIrd m5p+7hKmkRZtUX/BiRB3Gt2JTkQ6JX881j5L/FWOH2YaRVFZ+6HDk/TQWEV5Bf4JILDIJZSB3 kDnHyPGkrHkbCA864gFJZpHoUVk7nXm+q6oedZBZTlFA8tg+m6Jy9dw34KMUTse+rNt0wtoqe XSas03xW90q+tGP8U6IgfFZzhLE+XMVyu3SVDY8ikrGrBb3XfbRhHNtJzW88nR/RlwX7FiWc6 iLudsW1Txyt7Goi7o/bZ4v9D7XGRoAW7qg35dwNO76xn0cYYllxRfG2UKLSBrBjEAaGCl7Ubg 5sRBiLPIWqLvkebVZPOJb5u/r6rPnwAt7phkyCFM7D8XUfd9n9WzDigXSN1WPdlu91SMFLP01 Ko5IaGMFbS+COuQR4RY3AXCa+LZd2zDxTDcDNQ== Received-SPF: none client-ip=217.72.192.74; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell Split out the mmap prototypes into a new header user-mmap.h which we only include where required. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-6-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/elfload.c | 1 + linux-user/flatload.c | 1 + linux-user/i386/cpu_loop.c | 1 + linux-user/main.c | 1 + linux-user/mmap.c | 1 + linux-user/qemu.h | 14 -------------- linux-user/syscall.c | 1 + linux-user/user-mmap.h | 34 ++++++++++++++++++++++++++++++++++ 8 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 linux-user/user-mmap.h -- 2.31.1 diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 6244fcd05ce4..c291f3cee09f 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -7,6 +7,7 @@ #include "qemu.h" #include "loader.h" +#include "user-mmap.h" #include "disas/disas.h" #include "qemu/bitops.h" #include "qemu/path.h" diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 7484a4a35432..99550061db8d 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -37,6 +37,7 @@ #include "qemu.h" #include "loader.h" +#include "user-mmap.h" #include "flat.h" #include "target_flat.h" diff --git a/linux-user/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c index ee2e139a0634..fcc410a426ae 100644 --- a/linux-user/i386/cpu_loop.c +++ b/linux-user/i386/cpu_loop.c @@ -22,6 +22,7 @@ #include "qemu.h" #include "cpu_loop-common.h" #include "signal-common.h" +#include "user-mmap.h" /***********************************************************/ /* CPUX86 core interface */ diff --git a/linux-user/main.c b/linux-user/main.c index 67c5a87ffadd..a76aec733689 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -51,6 +51,7 @@ #include "fd-trans.h" #include "signal-common.h" #include "loader.h" +#include "user-mmap.h" #ifndef AT_FLAGS_PRESERVE_ARGV0 #define AT_FLAGS_PRESERVE_ARGV0_BIT 0 diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 0e103859fed8..4b182444bbdc 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -20,6 +20,7 @@ #include "trace.h" #include "exec/log.h" #include "qemu.h" +#include "user-mmap.h" static pthread_mutex_t mmap_mutex = PTHREAD_MUTEX_INITIALIZER; static __thread int mmap_lock_count; diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 02c4778c9704..0cb799905796 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -389,20 +389,6 @@ void sparc64_set_context(CPUSPARCState *env); void sparc64_get_context(CPUSPARCState *env); #endif -/* mmap.c */ -int target_mprotect(abi_ulong start, abi_ulong len, int prot); -abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, - int flags, int fd, abi_ulong offset); -int target_munmap(abi_ulong start, abi_ulong len); -abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size, - abi_ulong new_size, unsigned long flags, - abi_ulong new_addr); -extern unsigned long last_brk; -extern abi_ulong mmap_next_start; -abi_ulong mmap_find_vma(abi_ulong, abi_ulong, abi_ulong); -void mmap_fork_start(void); -void mmap_fork_end(int child); - /* user access */ #define VERIFY_READ PAGE_READ diff --git a/linux-user/syscall.c b/linux-user/syscall.c index b1cd7410d8bb..b6c8406e1dc0 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -130,6 +130,7 @@ #include "strace.h" #include "signal-common.h" #include "loader.h" +#include "user-mmap.h" #include "qemu/guest-random.h" #include "qemu/selfmap.h" #include "user/syscall-trace.h" diff --git a/linux-user/user-mmap.h b/linux-user/user-mmap.h new file mode 100644 index 000000000000..d1dec99c0249 --- /dev/null +++ b/linux-user/user-mmap.h @@ -0,0 +1,34 @@ +/* + * user-mmap.h: prototypes for linux-user guest binary loader + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#ifndef LINUX_USER_USER_MMAP_H +#define LINUX_USER_USER_MMAP_H + +int target_mprotect(abi_ulong start, abi_ulong len, int prot); +abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, + int flags, int fd, abi_ulong offset); +int target_munmap(abi_ulong start, abi_ulong len); +abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size, + abi_ulong new_size, unsigned long flags, + abi_ulong new_addr); +extern unsigned long last_brk; +extern abi_ulong mmap_next_start; +abi_ulong mmap_find_vma(abi_ulong, abi_ulong, abi_ulong); +void mmap_fork_start(void); +void mmap_fork_end(int child); + +#endif /* LINUX_USER_USER_MMAP_H */ From patchwork Thu Sep 16 15:12:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512935 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1312306jao; Thu, 16 Sep 2021 08:21:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxpXvF+Sr9olg4/93mkRVulpndKavBQGDwPt+w0Np0MizWFuswVmnVhi3aTS81vGRzMyw3n X-Received: by 2002:ac8:7d0d:: with SMTP id g13mr5428857qtb.367.1631805663355; Thu, 16 Sep 2021 08:21:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805663; cv=none; d=google.com; s=arc-20160816; b=TbMn9zBmpxzaMWmUxNks/hC8r1iAAHy0igJhMS7sgr68DHJsdxZee80iMsTu6eioUL 0uitIdPEA+nFXe0pfjxtzBfKqFrkU6Ei1DPaPqnkPeJbPbnzabd5F0T3bn8PsiC6lTZC noKyM1W6UQWAe56rM/QpdCIc9u7K3x0uUqv5/Jo5r4S8iXjb4DOKQ/NxXtCB/DDnRdGz G0IbxUJLrFjKn/gNzJAcsvV8b6DJq7oSDYYL7pUcxtXBBtVpl8XbxUYKdyI4dYf4qgS1 vaOnzLhZn1F5b7xkIUW0geTr8EqXw3nWAa6L8ad1RDvnI5C2xILEaXI0ONy6WrJcwwbf zJGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=OWVLYKzzRgmVrmszKgT1H7J2LTAckdzqsFn11tCOJK8=; b=SnQz5apE4ob8DGr477NUJdhCUKsJ/mD5YRxPN06E8liQoeUf1EJEelBprBebz/ssZ8 turahRwBkR3HUJzSFX4GRqNYL8aBXUFOvT63JcDO/9iVlqp+s7Q8DTdWI674Pk02+i3M wBvuoypGluPg2o5IPNbiM1M7nx6+xz4mxofmZY3+MgniurxokN6vogBqvDi2DY665Jue 6TeVvXF4kbdM9udC4s9jlGzE5V8/MB++dMeDOtwls595aE6tcl7w24xr18Abt0SiKW9C HCC62sdGH9FjkfL6+MTy+wEsIq4ZbDXx7RWKsksvVXanTijI0qqbZ5/EykVsmhpFZ2gf LMzg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id e14si1046040qtm.372.2021.09.16.08.21.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:21:03 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:43546 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQtC9-00052p-S1 for patch@linaro.org; Thu, 16 Sep 2021 11:21:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4K-0002xW-LD for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:56 -0400 Received: from mout.kundenserver.de ([217.72.192.75]:38697) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4H-0004FU-TU for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:56 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MY6P5-1mPRrz0dBt-00YOrK; Thu, 16 Sep 2021 17:12:42 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 06/10] linux-user: Split safe-syscall macro into its own header Date: Thu, 16 Sep 2021 17:12:33 +0200 Message-Id: <20210916151237.1188301-7-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:+Vp8u7c4VeUNyjpDUNpTmJyMbG4avvzcUoQSpQ8CpmxxoFYP07l /xsH7fV4tEzQ8ZJ2EXSq5/6dR0mFvjF5Cmx/wIMBtbGHNpjMKciI5aPFr6X6NQxf+8XiuPD j3GXTWQV5sqy45qmAJ/BBQJ0CbTFKPzogWfTsCU68Y53uvXJ7Blo3NQazhNTgoUQ/C0DQhb UHi/Fcxv7U6/AHsDMfLoQ== X-UI-Out-Filterresults: notjunk:1; V03:K0:7VoIXFLKvxE=:EOE9YHypF6oyD2W4WaTFRh oLpzDSjN8+RIKqYHyZ+RO8zRhlIV6DCpHw1sJV1iQ3fCEM7VK0OLutb0RgM6yM1dBNAfsRnC+ M12rYzy9OOdO/G59yDKQCuozFHOVOXgbEs6k3Zx+n12kvQK1PPJtZVebEOUiAxX5TQtExQW8y Mnlgc8Ph5gZs3TrObI4/YGQFWOATBssZz6pOdtmN/9lP7vJ57WdHBDVp7bAbcM622Bk+wnSUt RXvCaC8PRlpIpOIbzYTepOVAVwqHFwZNeSc4EImIndN87ebsuXL++8VgYkwaAM1zLKUVkqp5x UaQMmKcW8HWEcWd2brRWWE873wvsX3S7qLyhDQqaUT/x5JPITgwQeACCASOSx2i6bJ4DHtspy ucBHeKNVFtpfmySsfa/cekneqhCYGNZjiP3VwNB/QHngiE6MFGFZg9POg5vR67dJB+RJzQq5c 5mmBd4Ac4/Jr4eSUslQnZnhVWFWbLH7Z/R1Ik6+JEColaPE5cj1T2/AtxL1gEiTYl41DVaY3B 3rW3k0UoUZRg73+vz0oQbXyxnukbzdQ0H4x6XBwr+zx9K+56/c3XzGRps3Cc49E0GmiUujBqI 74dDSHVrRPinBNylqxV+4vJWp7ARy3mWU7fXgmwXDLnATxzR2MYGRFtW/jLj8mqq5HmORxxFM nm/00yPXrS9qRTI/FsG/JZeTo/GRWK5lNN50Y+f/BfywALTy1uSZR5lTJSz9mbPImJuZzVJGz gLGETyXykehOHivcvfBY5wqoicNrgtnPaX3b7g== Received-SPF: none client-ip=217.72.192.75; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell Split the safe-syscall macro from qemu.h into a new safe-syscall.h. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-7-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/qemu.h | 135 --------------------------------- linux-user/safe-syscall.h | 154 ++++++++++++++++++++++++++++++++++++++ linux-user/syscall.c | 1 + 3 files changed, 155 insertions(+), 135 deletions(-) create mode 100644 linux-user/safe-syscall.h -- 2.31.1 diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 0cb799905796..a82a46236e64 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -240,141 +240,6 @@ void probe_guest_base(const char *image_name, #include "qemu/log.h" -/* safe_syscall.S */ - -/** - * safe_syscall: - * @int number: number of system call to make - * ...: arguments to the system call - * - * Call a system call if guest signal not pending. - * This has the same API as the libc syscall() function, except that it - * may return -1 with errno == TARGET_ERESTARTSYS if a signal was pending. - * - * Returns: the system call result, or -1 with an error code in errno - * (Errnos are host errnos; we rely on TARGET_ERESTARTSYS not clashing - * with any of the host errno values.) - */ - -/* - * A guide to using safe_syscall() to handle interactions between guest - * syscalls and guest signals: - * - * Guest syscalls come in two flavours: - * - * (1) Non-interruptible syscalls - * - * These are guest syscalls that never get interrupted by signals and - * so never return EINTR. They can be implemented straightforwardly in - * QEMU: just make sure that if the implementation code has to make any - * blocking calls that those calls are retried if they return EINTR. - * It's also OK to implement these with safe_syscall, though it will be - * a little less efficient if a signal is delivered at the 'wrong' moment. - * - * Some non-interruptible syscalls need to be handled using block_signals() - * to block signals for the duration of the syscall. This mainly applies - * to code which needs to modify the data structures used by the - * host_signal_handler() function and the functions it calls, including - * all syscalls which change the thread's signal mask. - * - * (2) Interruptible syscalls - * - * These are guest syscalls that can be interrupted by signals and - * for which we need to either return EINTR or arrange for the guest - * syscall to be restarted. This category includes both syscalls which - * always restart (and in the kernel return -ERESTARTNOINTR), ones - * which only restart if there is no handler (kernel returns -ERESTARTNOHAND - * or -ERESTART_RESTARTBLOCK), and the most common kind which restart - * if the handler was registered with SA_RESTART (kernel returns - * -ERESTARTSYS). System calls which are only interruptible in some - * situations (like 'open') also need to be handled this way. - * - * Here it is important that the host syscall is made - * via this safe_syscall() function, and *not* via the host libc. - * If the host libc is used then the implementation will appear to work - * most of the time, but there will be a race condition where a - * signal could arrive just before we make the host syscall inside libc, - * and then then guest syscall will not correctly be interrupted. - * Instead the implementation of the guest syscall can use the safe_syscall - * function but otherwise just return the result or errno in the usual - * way; the main loop code will take care of restarting the syscall - * if appropriate. - * - * (If the implementation needs to make multiple host syscalls this is - * OK; any which might really block must be via safe_syscall(); for those - * which are only technically blocking (ie which we know in practice won't - * stay in the host kernel indefinitely) it's OK to use libc if necessary. - * You must be able to cope with backing out correctly if some safe_syscall - * you make in the implementation returns either -TARGET_ERESTARTSYS or - * EINTR though.) - * - * block_signals() cannot be used for interruptible syscalls. - * - * - * How and why the safe_syscall implementation works: - * - * The basic setup is that we make the host syscall via a known - * section of host native assembly. If a signal occurs, our signal - * handler checks the interrupted host PC against the addresse of that - * known section. If the PC is before or at the address of the syscall - * instruction then we change the PC to point at a "return - * -TARGET_ERESTARTSYS" code path instead, and then exit the signal handler - * (causing the safe_syscall() call to immediately return that value). - * Then in the main.c loop if we see this magic return value we adjust - * the guest PC to wind it back to before the system call, and invoke - * the guest signal handler as usual. - * - * This winding-back will happen in two cases: - * (1) signal came in just before we took the host syscall (a race); - * in this case we'll take the guest signal and have another go - * at the syscall afterwards, and this is indistinguishable for the - * guest from the timing having been different such that the guest - * signal really did win the race - * (2) signal came in while the host syscall was blocking, and the - * host kernel decided the syscall should be restarted; - * in this case we want to restart the guest syscall also, and so - * rewinding is the right thing. (Note that "restart" semantics mean - * "first call the signal handler, then reattempt the syscall".) - * The other situation to consider is when a signal came in while the - * host syscall was blocking, and the host kernel decided that the syscall - * should not be restarted; in this case QEMU's host signal handler will - * be invoked with the PC pointing just after the syscall instruction, - * with registers indicating an EINTR return; the special code in the - * handler will not kick in, and we will return EINTR to the guest as - * we should. - * - * Notice that we can leave the host kernel to make the decision for - * us about whether to do a restart of the syscall or not; we do not - * need to check SA_RESTART flags in QEMU or distinguish the various - * kinds of restartability. - */ -#ifdef HAVE_SAFE_SYSCALL -/* The core part of this function is implemented in assembly */ -extern long safe_syscall_base(int *pending, long number, ...); - -#define safe_syscall(...) \ - ({ \ - long ret_; \ - int *psp_ = &((TaskState *)thread_cpu->opaque)->signal_pending; \ - ret_ = safe_syscall_base(psp_, __VA_ARGS__); \ - if (is_error(ret_)) { \ - errno = -ret_; \ - ret_ = -1; \ - } \ - ret_; \ - }) - -#else - -/* - * Fallback for architectures which don't yet provide a safe-syscall assembly - * fragment; note that this is racy! - * This should go away when all host architectures have been updated. - */ -#define safe_syscall syscall - -#endif - /* syscall.c */ int host_to_target_waitstatus(int status); diff --git a/linux-user/safe-syscall.h b/linux-user/safe-syscall.h new file mode 100644 index 000000000000..6bc039026284 --- /dev/null +++ b/linux-user/safe-syscall.h @@ -0,0 +1,154 @@ +/* + * safe-syscall.h: prototypes for linux-user signal-race-safe syscalls + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#ifndef LINUX_USER_SAFE_SYSCALL_H +#define LINUX_USER_SAFE_SYSCALL_H + +/** + * safe_syscall: + * @int number: number of system call to make + * ...: arguments to the system call + * + * Call a system call if guest signal not pending. + * This has the same API as the libc syscall() function, except that it + * may return -1 with errno == TARGET_ERESTARTSYS if a signal was pending. + * + * Returns: the system call result, or -1 with an error code in errno + * (Errnos are host errnos; we rely on TARGET_ERESTARTSYS not clashing + * with any of the host errno values.) + */ + +/* + * A guide to using safe_syscall() to handle interactions between guest + * syscalls and guest signals: + * + * Guest syscalls come in two flavours: + * + * (1) Non-interruptible syscalls + * + * These are guest syscalls that never get interrupted by signals and + * so never return EINTR. They can be implemented straightforwardly in + * QEMU: just make sure that if the implementation code has to make any + * blocking calls that those calls are retried if they return EINTR. + * It's also OK to implement these with safe_syscall, though it will be + * a little less efficient if a signal is delivered at the 'wrong' moment. + * + * Some non-interruptible syscalls need to be handled using block_signals() + * to block signals for the duration of the syscall. This mainly applies + * to code which needs to modify the data structures used by the + * host_signal_handler() function and the functions it calls, including + * all syscalls which change the thread's signal mask. + * + * (2) Interruptible syscalls + * + * These are guest syscalls that can be interrupted by signals and + * for which we need to either return EINTR or arrange for the guest + * syscall to be restarted. This category includes both syscalls which + * always restart (and in the kernel return -ERESTARTNOINTR), ones + * which only restart if there is no handler (kernel returns -ERESTARTNOHAND + * or -ERESTART_RESTARTBLOCK), and the most common kind which restart + * if the handler was registered with SA_RESTART (kernel returns + * -ERESTARTSYS). System calls which are only interruptible in some + * situations (like 'open') also need to be handled this way. + * + * Here it is important that the host syscall is made + * via this safe_syscall() function, and *not* via the host libc. + * If the host libc is used then the implementation will appear to work + * most of the time, but there will be a race condition where a + * signal could arrive just before we make the host syscall inside libc, + * and then then guest syscall will not correctly be interrupted. + * Instead the implementation of the guest syscall can use the safe_syscall + * function but otherwise just return the result or errno in the usual + * way; the main loop code will take care of restarting the syscall + * if appropriate. + * + * (If the implementation needs to make multiple host syscalls this is + * OK; any which might really block must be via safe_syscall(); for those + * which are only technically blocking (ie which we know in practice won't + * stay in the host kernel indefinitely) it's OK to use libc if necessary. + * You must be able to cope with backing out correctly if some safe_syscall + * you make in the implementation returns either -TARGET_ERESTARTSYS or + * EINTR though.) + * + * block_signals() cannot be used for interruptible syscalls. + * + * + * How and why the safe_syscall implementation works: + * + * The basic setup is that we make the host syscall via a known + * section of host native assembly. If a signal occurs, our signal + * handler checks the interrupted host PC against the addresse of that + * known section. If the PC is before or at the address of the syscall + * instruction then we change the PC to point at a "return + * -TARGET_ERESTARTSYS" code path instead, and then exit the signal handler + * (causing the safe_syscall() call to immediately return that value). + * Then in the main.c loop if we see this magic return value we adjust + * the guest PC to wind it back to before the system call, and invoke + * the guest signal handler as usual. + * + * This winding-back will happen in two cases: + * (1) signal came in just before we took the host syscall (a race); + * in this case we'll take the guest signal and have another go + * at the syscall afterwards, and this is indistinguishable for the + * guest from the timing having been different such that the guest + * signal really did win the race + * (2) signal came in while the host syscall was blocking, and the + * host kernel decided the syscall should be restarted; + * in this case we want to restart the guest syscall also, and so + * rewinding is the right thing. (Note that "restart" semantics mean + * "first call the signal handler, then reattempt the syscall".) + * The other situation to consider is when a signal came in while the + * host syscall was blocking, and the host kernel decided that the syscall + * should not be restarted; in this case QEMU's host signal handler will + * be invoked with the PC pointing just after the syscall instruction, + * with registers indicating an EINTR return; the special code in the + * handler will not kick in, and we will return EINTR to the guest as + * we should. + * + * Notice that we can leave the host kernel to make the decision for + * us about whether to do a restart of the syscall or not; we do not + * need to check SA_RESTART flags in QEMU or distinguish the various + * kinds of restartability. + */ +#ifdef HAVE_SAFE_SYSCALL +/* The core part of this function is implemented in assembly */ +extern long safe_syscall_base(int *pending, long number, ...); + +#define safe_syscall(...) \ + ({ \ + long ret_; \ + int *psp_ = &((TaskState *)thread_cpu->opaque)->signal_pending; \ + ret_ = safe_syscall_base(psp_, __VA_ARGS__); \ + if (is_error(ret_)) { \ + errno = -ret_; \ + ret_ = -1; \ + } \ + ret_; \ + }) + +#else + +/* + * Fallback for architectures which don't yet provide a safe-syscall assembly + * fragment; note that this is racy! + * This should go away when all host architectures have been updated. + */ +#define safe_syscall syscall + +#endif + +#endif diff --git a/linux-user/syscall.c b/linux-user/syscall.c index b6c8406e1dc0..9873830b465b 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -131,6 +131,7 @@ #include "signal-common.h" #include "loader.h" #include "user-mmap.h" +#include "safe-syscall.h" #include "qemu/guest-random.h" #include "qemu/selfmap.h" #include "user/syscall-trace.h" From patchwork Thu Sep 16 15:12:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512931 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1307421jao; Thu, 16 Sep 2021 08:16:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJypaZ2du6zrUjttUqxbHMkdEMTA6fONkh/31qSR75WuFhWPt0W79Kflc29Yyq16ERlVztf0 X-Received: by 2002:a05:6214:13ee:: with SMTP id ch14mr5941996qvb.43.1631805364791; Thu, 16 Sep 2021 08:16:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805364; cv=none; d=google.com; s=arc-20160816; b=pRbIeDA32CmzlBCxRJtfd5esiCtZhiaOH8+Mqh+qatOzdm0Bo35wRVlvrogbwqPqbd YEN4hW+Gf9P0Kk+8zu4XP4p4hrlcTQwzNDvrwoonGLHjt7iUlL4HBma48MDAGyH18PJN 4xJ5IaPLPZIFfN63nJB+6YMRyQOnWcUn191CKQx7cKp/UwHW/pZ++eweXY23GYOtiH+b PmVSsIJLp3B+0S2T+YndIEQEq0Ddvj62ULCkMlQAMPzX6QpNqboKJwdg+Lz6k2JYR+4L S98ZWLsDqKJcw4tCjLoPk87kfMPX2TkGUhpAl1svCXfSgUFgG4wzqxfMRg+NzmniACSj SdFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=Wi5OdS2iC1irZRGutoDBFgNdTdVli/Y/E9VrIi1x8A0=; b=Y3ywi85DXr91bsUd/RomracMHaKnfRtXp9kGAZNCVArIV2H8DuonbYp0Kqx+FmU2jX GRBRNkiI3ugRi8U9wZKmFn4yFvpCLRNPn/H69AhtSp/3D5RNzt2lTNB6dZEbub6B30eB HmVASgWNtHWrx2EjSASYaY5snQ062pzeCRgbD4xx28aEzOlcMWoEgiK5jN+U9y/blt6Z 5s3kcLFAFw/tWcN5nxPhfrGqgxOI1fOkVT5PyVRbnoxkjDjt5yoSnMbrq0fnUQO3KBlq UFn9HIdXpdlkdivtCl2JkyZ7tSL+XXny1gYuQv88hi6iUmn0HuNR0DqorWz/LFLZOB0E 0eGg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id a133si1855884qkc.63.2021.09.16.08.16.04 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:16:04 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:59766 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQt7M-0005HD-5V for patch@linaro.org; Thu, 16 Sep 2021 11:16:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4E-0002pI-11 for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:50 -0400 Received: from mout.kundenserver.de ([217.72.192.73]:52579) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4A-0004AC-1P for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:49 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1N9M5y-1mwrkM3GNw-015Flj; Thu, 16 Sep 2021 17:12:43 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 07/10] linux-user: Split linux-user internals out of qemu.h Date: Thu, 16 Sep 2021 17:12:34 +0200 Message-Id: <20210916151237.1188301-8-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:V4s7CQEhUJO/NWf7sJzAr5+3imx5G8IIA1hKL4sAauocAzwi5KD HvyqrYdZk+9jcFp5kqxM8P3Mn8CRkm954lOtY2ngnX94YsAnEWi5W4joYLtjSaCWwjpJfeG ekeGpNuBgMtFzlGZkH+9fwtZHRLjNAiZPlBTDX/bT6SoTil714M6FXD8U48ChX6VkpwAwUj ndWHR+f+NViT30gUkpUXg== X-UI-Out-Filterresults: notjunk:1; V03:K0:BybJqHsY1JA=:YfOJLWb1yoBQttgpjFrWU4 ymo8WOElWqeM0kMwFYzSS4WMI8bnnF802PSKi2nfHS3oPOUTbpl/xCZevNBjxEPPU/rRIYPZ1 J8W3N9Abrt/ZO4cX5FKRqkxtoXOna0mezhcVpt2yHGa1lt2G9Gic742VGtMBbneSH6LcyKEZw oqRQN4XF9Sn0sHJNKGuQS5w7e3Ph5jP2jXSyIklYUTQfJo+u0kQerXdVxubPSqPLpSxIf634V E3PCJQvL0ooXYbBMIG6tRbUr7Xx72Ou4GDdHjhwvI2QeV2Rl8rUHCQSLLHwwE0LASwaJdtASl 2xeKEDNzH1R8I/NaMdP4q5JXeud2LlXPg2RUc/1n+l5YQZkudxQe9HtIXZFMbQQI/t5ZsIia4 NHRPa9ww4LzPlVmNoymzD5jfz8ZMnjmTEv9lCgWCoupaUPxmrmuSlaXMwQY+AbprLV+d2OC08 00trCzSPVxybmRncaEzn1hPFxwudgZ59cpMYaliZkF3w1486mvzd5LzLbUNnElMZ+eFrM+kgF kPWSZ7bmQ8IVGVyDfFekphrSzPyeBgMe5wxJJa2yC7vJ+y8v1VoDAHA6rPMAiPqktVKEZNFua CyfY8GJadOJqHMfLHGh0FoX5KtZFsSi2ujkNY2irTsBvCkC9Dl3wMI4s9jzmdLBsgGHZxszHQ axoqPJ7hbY9d5zZzhsaMODItL/7YAnyVovE23Abyy/Pa1y7pnxcVU2afL+4VWf7A+GhM9qiln Uu6xb43zH+z08IxvbnYf3Z1ye8qAoSSrrbmD6Q== Received-SPF: none client-ip=217.72.192.73; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell qemu.h is included in various non-linux-user files (which mostly want the TaskState struct and the functions for doing usermode access to guest addresses like lock_user(), unlock_user(), get_user*(), etc). Split out the parts that are only used in linux-user itself into a new user-internals.h. This leaves qemu.h with basically three things: * the definition of the TaskState struct * the user-access functions and macros * do_brk() all of which are needed by code outside linux-user that includes qemu.h. The addition of all the extra #include lines was done with sed -i '/include.*qemu\.h/a #include "user-internals.h"' $(git grep -l 'include.*qemu\.h' linux-user) (and then undoing the change to fpa11.h). Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-8-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/aarch64/cpu_loop.c | 1 + linux-user/aarch64/signal.c | 1 + linux-user/alpha/cpu_loop.c | 1 + linux-user/alpha/signal.c | 1 + linux-user/arm/cpu_loop.c | 1 + linux-user/arm/signal.c | 1 + linux-user/cris/cpu_loop.c | 1 + linux-user/cris/signal.c | 1 + linux-user/elfload.c | 1 + linux-user/exit.c | 1 + linux-user/fd-trans.c | 1 + linux-user/flatload.c | 1 + linux-user/hexagon/cpu_loop.c | 1 + linux-user/hexagon/signal.c | 1 + linux-user/hppa/cpu_loop.c | 1 + linux-user/hppa/signal.c | 1 + linux-user/i386/cpu_loop.c | 1 + linux-user/i386/signal.c | 1 + linux-user/linuxload.c | 1 + linux-user/m68k/cpu_loop.c | 1 + linux-user/m68k/signal.c | 1 + linux-user/main.c | 1 + linux-user/microblaze/cpu_loop.c | 1 + linux-user/microblaze/signal.c | 1 + linux-user/mips/cpu_loop.c | 1 + linux-user/mips/signal.c | 1 + linux-user/mmap.c | 1 + linux-user/nios2/cpu_loop.c | 1 + linux-user/nios2/signal.c | 1 + linux-user/openrisc/cpu_loop.c | 1 + linux-user/openrisc/signal.c | 1 + linux-user/ppc/cpu_loop.c | 1 + linux-user/ppc/signal.c | 1 + linux-user/qemu.h | 164 +-------------------------- linux-user/riscv/cpu_loop.c | 1 + linux-user/riscv/signal.c | 1 + linux-user/s390x/cpu_loop.c | 1 + linux-user/s390x/signal.c | 1 + linux-user/semihost.c | 1 + linux-user/sh4/cpu_loop.c | 1 + linux-user/sh4/signal.c | 1 + linux-user/signal.c | 1 + linux-user/sparc/cpu_loop.c | 1 + linux-user/sparc/signal.c | 1 + linux-user/strace.c | 1 + linux-user/syscall.c | 1 + linux-user/uaccess.c | 1 + linux-user/uname.c | 1 + linux-user/user-internals.h | 184 +++++++++++++++++++++++++++++++ linux-user/vm86.c | 1 + linux-user/xtensa/cpu_loop.c | 1 + linux-user/xtensa/signal.c | 1 + 52 files changed, 235 insertions(+), 163 deletions(-) create mode 100644 linux-user/user-internals.h -- 2.31.1 diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 5cac76f67b09..5425b85659a9 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" #include "qemu/guest-random.h" diff --git a/linux-user/aarch64/signal.c b/linux-user/aarch64/signal.c index 662bcd1c4e57..49025648cb4f 100644 --- a/linux-user/aarch64/signal.c +++ b/linux-user/aarch64/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/alpha/cpu_loop.c b/linux-user/alpha/cpu_loop.c index 8464047368a3..1b00a81385b7 100644 --- a/linux-user/alpha/cpu_loop.c +++ b/linux-user/alpha/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/alpha/signal.c b/linux-user/alpha/signal.c index 1129ffeea1d8..3a820f616b3f 100644 --- a/linux-user/alpha/signal.c +++ b/linux-user/alpha/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index 5556d381463b..07032b300610 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "elf.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/arm/signal.c b/linux-user/arm/signal.c index 1dfcfd2d57bf..ed144f9455d2 100644 --- a/linux-user/arm/signal.c +++ b/linux-user/arm/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/cris/cpu_loop.c b/linux-user/cris/cpu_loop.c index 8c9fc3127ec3..b9085619c4c2 100644 --- a/linux-user/cris/cpu_loop.c +++ b/linux-user/cris/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/cris/signal.c b/linux-user/cris/signal.c index 1e02194377b5..2c39bdf7277f 100644 --- a/linux-user/cris/signal.c +++ b/linux-user/cris/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/elfload.c b/linux-user/elfload.c index c291f3cee09f..5f9e2141ad1e 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -6,6 +6,7 @@ #include #include "qemu.h" +#include "user-internals.h" #include "loader.h" #include "user-mmap.h" #include "disas/disas.h" diff --git a/linux-user/exit.c b/linux-user/exit.c index 527e29cbc198..68a3a6f9df01 100644 --- a/linux-user/exit.c +++ b/linux-user/exit.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #ifdef CONFIG_GPROF #include #endif diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c index 48203c1af9d6..69410899590c 100644 --- a/linux-user/fd-trans.c +++ b/linux-user/fd-trans.c @@ -27,6 +27,7 @@ #include #endif #include "qemu.h" +#include "user-internals.h" #include "fd-trans.h" #include "signal-common.h" diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 99550061db8d..e4c2f89a2267 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -36,6 +36,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "loader.h" #include "user-mmap.h" #include "flat.h" diff --git a/linux-user/hexagon/cpu_loop.c b/linux-user/hexagon/cpu_loop.c index 348d2dc34130..bee2a9e4ea93 100644 --- a/linux-user/hexagon/cpu_loop.c +++ b/linux-user/hexagon/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" #include "internal.h" diff --git a/linux-user/hexagon/signal.c b/linux-user/hexagon/signal.c index 85eab5e94382..c7f0bf6b9283 100644 --- a/linux-user/hexagon/signal.c +++ b/linux-user/hexagon/signal.c @@ -19,6 +19,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c index c3661994a570..81607a9b2714 100644 --- a/linux-user/hppa/cpu_loop.c +++ b/linux-user/hppa/cpu_loop.c @@ -19,6 +19,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/hppa/signal.c b/linux-user/hppa/signal.c index 0e266f472d5a..c2fbc26ebb6b 100644 --- a/linux-user/hppa/signal.c +++ b/linux-user/hppa/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c index fcc410a426ae..f6a1cc632b1d 100644 --- a/linux-user/i386/cpu_loop.c +++ b/linux-user/i386/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" #include "user-mmap.h" diff --git a/linux-user/i386/signal.c b/linux-user/i386/signal.c index 841cd1965100..3b4b55fc0a24 100644 --- a/linux-user/i386/signal.c +++ b/linux-user/i386/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/linuxload.c b/linux-user/linuxload.c index 27be7090d8f1..2ed5fc45ed8c 100644 --- a/linux-user/linuxload.c +++ b/linux-user/linuxload.c @@ -2,6 +2,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "loader.h" #define NGROUPS 32 diff --git a/linux-user/m68k/cpu_loop.c b/linux-user/m68k/cpu_loop.c index 3a330401bf2d..ebf32be78f83 100644 --- a/linux-user/m68k/cpu_loop.c +++ b/linux-user/m68k/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/m68k/signal.c b/linux-user/m68k/signal.c index d06230655e98..4f8eb6f727e4 100644 --- a/linux-user/m68k/signal.c +++ b/linux-user/m68k/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/main.c b/linux-user/main.c index a76aec733689..9edc0b222076 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -30,6 +30,7 @@ #include "qapi/error.h" #include "qemu.h" +#include "user-internals.h" #include "qemu/path.h" #include "qemu/queue.h" #include "qemu/config-file.h" diff --git a/linux-user/microblaze/cpu_loop.c b/linux-user/microblaze/cpu_loop.c index 0d2c8f8dea8a..52222eb93fbf 100644 --- a/linux-user/microblaze/cpu_loop.c +++ b/linux-user/microblaze/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/microblaze/signal.c b/linux-user/microblaze/signal.c index 4c483bd8c606..b822679d1805 100644 --- a/linux-user/microblaze/signal.c +++ b/linux-user/microblaze/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c index 7dfaa0cb1e11..cb03fb066b9b 100644 --- a/linux-user/mips/cpu_loop.c +++ b/linux-user/mips/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" #include "elf.h" diff --git a/linux-user/mips/signal.c b/linux-user/mips/signal.c index e6be807a81ae..d174b3453cc0 100644 --- a/linux-user/mips/signal.c +++ b/linux-user/mips/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 4b182444bbdc..c125031b9046 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -20,6 +20,7 @@ #include "trace.h" #include "exec/log.h" #include "qemu.h" +#include "user-internals.h" #include "user-mmap.h" static pthread_mutex_t mmap_mutex = PTHREAD_MUTEX_INITIALIZER; diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c index 68f95d7ad7b2..34290fb3b51c 100644 --- a/linux-user/nios2/cpu_loop.c +++ b/linux-user/nios2/cpu_loop.c @@ -19,6 +19,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/nios2/signal.c b/linux-user/nios2/signal.c index cc3872f11da2..a77e8a40f468 100644 --- a/linux-user/nios2/signal.c +++ b/linux-user/nios2/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/openrisc/cpu_loop.c b/linux-user/openrisc/cpu_loop.c index f6c67859887b..f6360db47c28 100644 --- a/linux-user/openrisc/cpu_loop.c +++ b/linux-user/openrisc/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/openrisc/signal.c b/linux-user/openrisc/signal.c index 5c5640a28487..ca2532bf500f 100644 --- a/linux-user/openrisc/signal.c +++ b/linux-user/openrisc/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/ppc/cpu_loop.c b/linux-user/ppc/cpu_loop.c index ace431238c27..840b23736bfe 100644 --- a/linux-user/ppc/cpu_loop.c +++ b/linux-user/ppc/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/ppc/signal.c b/linux-user/ppc/signal.c index edfad28a375a..e4d0dfa3bf75 100644 --- a/linux-user/ppc/signal.c +++ b/linux-user/ppc/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/qemu.h b/linux-user/qemu.h index a82a46236e64..92290a55c0de 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -1,7 +1,6 @@ #ifndef QEMU_H #define QEMU_H -#include "hostdep.h" #include "cpu.h" #include "exec/exec-all.h" #include "exec/cpu_ldst.h" @@ -10,7 +9,6 @@ #include "exec/user/abitypes.h" -#include "exec/user/thunk.h" #include "syscall_defs.h" #include "target_syscall.h" #include "exec/gdbstub.h" @@ -166,93 +164,9 @@ typedef struct TaskState { struct target_sigaltstack sigaltstack_used; } __attribute__((aligned(16))) TaskState; -extern char *exec_path; -void init_task_state(TaskState *ts); -void task_settid(TaskState *); -void stop_all_tasks(void); -extern const char *qemu_uname_release; -extern unsigned long mmap_min_addr; - -typedef struct IOCTLEntry IOCTLEntry; - -typedef abi_long do_ioctl_fn(const IOCTLEntry *ie, uint8_t *buf_temp, - int fd, int cmd, abi_long arg); - -struct IOCTLEntry { - int target_cmd; - unsigned int host_cmd; - const char *name; - int access; - do_ioctl_fn *do_ioctl; - const argtype arg_type[5]; -}; - -extern IOCTLEntry ioctl_entries[]; - -#define IOC_R 0x0001 -#define IOC_W 0x0002 -#define IOC_RW (IOC_R | IOC_W) - -/* - * Returns true if the image uses the FDPIC ABI. If this is the case, - * we have to provide some information (loadmap, pt_dynamic_info) such - * that the program can be relocated adequately. This is also useful - * when handling signals. - */ -int info_is_fdpic(struct image_info *info); - -void target_set_brk(abi_ulong new_brk); -abi_long do_brk(abi_ulong new_brk); -void syscall_init(void); -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); -extern __thread CPUState *thread_cpu; -void cpu_loop(CPUArchState *env); -const char *target_strerror(int err); -int get_osversion(void); -void init_qemu_uname_release(void); -void fork_start(void); -void fork_end(int child); - -/** - * probe_guest_base: - * @image_name: the executable being loaded - * @loaddr: the lowest fixed address in the executable - * @hiaddr: the highest fixed address in the executable - * - * Creates the initial guest address space in the host memory space. - * - * If @loaddr == 0, then no address in the executable is fixed, - * i.e. it is fully relocatable. In that case @hiaddr is the size - * of the executable. - * - * This function will not return if a valid value for guest_base - * cannot be chosen. On return, the executable loader can expect - * - * target_mmap(loaddr, hiaddr - loaddr, ...) - * - * to succeed. - */ -void probe_guest_base(const char *image_name, - abi_ulong loaddr, abi_ulong hiaddr); - #include "qemu/log.h" -/* syscall.c */ -int host_to_target_waitstatus(int status); - -#ifdef TARGET_I386 -/* vm86.c */ -void save_v86_state(CPUX86State *env); -void handle_vm86_trap(CPUX86State *env, int trapno); -void handle_vm86_fault(CPUX86State *env); -int do_vm86(CPUX86State *env, long subfunction, abi_ulong v86_addr); -#elif defined(TARGET_SPARC64) -void sparc64_set_context(CPUSPARCState *env); -void sparc64_get_context(CPUSPARCState *env); -#endif +abi_long do_brk(abi_ulong new_brk); /* user access */ @@ -437,80 +351,4 @@ void *lock_user_string(abi_ulong guest_addr); unlock_user(host_ptr, guest_addr, (copy) ? sizeof(*host_ptr) : 0) #include - -static inline int is_error(abi_long ret) -{ - return (abi_ulong)ret >= (abi_ulong)(-4096); -} - -#if TARGET_ABI_BITS == 32 -static inline uint64_t target_offset64(uint32_t word0, uint32_t word1) -{ -#ifdef TARGET_WORDS_BIGENDIAN - return ((uint64_t)word0 << 32) | word1; -#else - return ((uint64_t)word1 << 32) | word0; -#endif -} -#else /* TARGET_ABI_BITS == 32 */ -static inline uint64_t target_offset64(uint64_t word0, uint64_t word1) -{ - return word0; -} -#endif /* TARGET_ABI_BITS != 32 */ - -void print_termios(void *arg); - -/* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */ -#ifdef TARGET_ARM -static inline int regpairs_aligned(void *cpu_env, int num) -{ - return ((((CPUARMState *)cpu_env)->eabi) == 1) ; -} -#elif defined(TARGET_MIPS) && (TARGET_ABI_BITS == 32) -static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } -#elif defined(TARGET_PPC) && !defined(TARGET_PPC64) -/* - * SysV AVI for PPC32 expects 64bit parameters to be passed on odd/even pairs - * of registers which translates to the same as ARM/MIPS, because we start with - * r3 as arg1 - */ -static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } -#elif defined(TARGET_SH4) -/* SH4 doesn't align register pairs, except for p{read,write}64 */ -static inline int regpairs_aligned(void *cpu_env, int num) -{ - switch (num) { - case TARGET_NR_pread64: - case TARGET_NR_pwrite64: - return 1; - - default: - return 0; - } -} -#elif defined(TARGET_XTENSA) -static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } -#elif defined(TARGET_HEXAGON) -static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } -#else -static inline int regpairs_aligned(void *cpu_env, int num) { return 0; } -#endif - -/** - * preexit_cleanup: housekeeping before the guest exits - * - * env: the CPU state - * code: the exit code - */ -void preexit_cleanup(CPUArchState *env, int code); - -/* - * Include target-specific struct and function definitions; - * they may need access to the target-independent structures - * above, so include them last. - */ -#include "target_cpu.h" -#include "target_structs.h" - #endif /* QEMU_H */ diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c index 47978c4e3543..9859a366e420 100644 --- a/linux-user/riscv/cpu_loop.c +++ b/linux-user/riscv/cpu_loop.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qemu/error-report.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" #include "elf.h" diff --git a/linux-user/riscv/signal.c b/linux-user/riscv/signal.c index 9405c7fd9af6..f7f33bc90aed 100644 --- a/linux-user/riscv/signal.c +++ b/linux-user/riscv/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/s390x/cpu_loop.c b/linux-user/s390x/cpu_loop.c index ae70f630532d..69b69981f67d 100644 --- a/linux-user/s390x/cpu_loop.c +++ b/linux-user/s390x/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/s390x/signal.c b/linux-user/s390x/signal.c index bf8a8fbfe9fc..80f34086d7b5 100644 --- a/linux-user/s390x/signal.c +++ b/linux-user/s390x/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/semihost.c b/linux-user/semihost.c index f53ab526fbab..17f074ac5652 100644 --- a/linux-user/semihost.c +++ b/linux-user/semihost.c @@ -13,6 +13,7 @@ #include "qemu/osdep.h" #include "semihosting/console.h" #include "qemu.h" +#include "user-internals.h" #include int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr) diff --git a/linux-user/sh4/cpu_loop.c b/linux-user/sh4/cpu_loop.c index 06e4a4d00751..65b8972e3c96 100644 --- a/linux-user/sh4/cpu_loop.c +++ b/linux-user/sh4/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/sh4/signal.c b/linux-user/sh4/signal.c index 0451e65806a1..d70d744befc2 100644 --- a/linux-user/sh4/signal.c +++ b/linux-user/sh4/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/signal.c b/linux-user/signal.c index 0fa15f088b01..6af66123d0f7 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -22,6 +22,7 @@ #include #include "qemu.h" +#include "user-internals.h" #include "strace.h" #include "loader.h" #include "trace.h" diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c index b2c061119430..ad29b4eb6a31 100644 --- a/linux-user/sparc/cpu_loop.c +++ b/linux-user/sparc/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c index 0cc3db5570e8..3bc023d281a7 100644 --- a/linux-user/sparc/signal.c +++ b/linux-user/sparc/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" diff --git a/linux-user/strace.c b/linux-user/strace.c index ee3429fae82a..2cdbf030ba44 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -15,6 +15,7 @@ #include #include #include "qemu.h" +#include "user-internals.h" #include "strace.h" struct syscallname { diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 9873830b465b..e4ffdec0d83c 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -127,6 +127,7 @@ #include "uname.h" #include "qemu.h" +#include "user-internals.h" #include "strace.h" #include "signal-common.h" #include "loader.h" diff --git a/linux-user/uaccess.c b/linux-user/uaccess.c index 6a5b029607c6..425cbf677f76 100644 --- a/linux-user/uaccess.c +++ b/linux-user/uaccess.c @@ -3,6 +3,7 @@ #include "qemu/cutils.h" #include "qemu.h" +#include "user-internals.h" void *lock_user(int type, abi_ulong guest_addr, ssize_t len, bool copy) { diff --git a/linux-user/uname.c b/linux-user/uname.c index a09ffe1ea7bd..1d82608c100f 100644 --- a/linux-user/uname.c +++ b/linux-user/uname.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" //#include "qemu-common.h" #include "uname.h" diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h new file mode 100644 index 000000000000..1729a8b62e18 --- /dev/null +++ b/linux-user/user-internals.h @@ -0,0 +1,184 @@ +/* + * user-internals.h: prototypes etc internal to the linux-user implementation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#ifndef LINUX_USER_USER_INTERNALS_H +#define LINUX_USER_USER_INTERNALS_H + +#include "hostdep.h" +#include "exec/user/thunk.h" + +extern char *exec_path; +void init_task_state(TaskState *ts); +void task_settid(TaskState *); +void stop_all_tasks(void); +extern const char *qemu_uname_release; +extern unsigned long mmap_min_addr; + +typedef struct IOCTLEntry IOCTLEntry; + +typedef abi_long do_ioctl_fn(const IOCTLEntry *ie, uint8_t *buf_temp, + int fd, int cmd, abi_long arg); + +struct IOCTLEntry { + int target_cmd; + unsigned int host_cmd; + const char *name; + int access; + do_ioctl_fn *do_ioctl; + const argtype arg_type[5]; +}; + +extern IOCTLEntry ioctl_entries[]; + +#define IOC_R 0x0001 +#define IOC_W 0x0002 +#define IOC_RW (IOC_R | IOC_W) + +/* + * Returns true if the image uses the FDPIC ABI. If this is the case, + * we have to provide some information (loadmap, pt_dynamic_info) such + * that the program can be relocated adequately. This is also useful + * when handling signals. + */ +int info_is_fdpic(struct image_info *info); + +void target_set_brk(abi_ulong new_brk); +void syscall_init(void); +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); +extern __thread CPUState *thread_cpu; +void cpu_loop(CPUArchState *env); +const char *target_strerror(int err); +int get_osversion(void); +void init_qemu_uname_release(void); +void fork_start(void); +void fork_end(int child); + +/** + * probe_guest_base: + * @image_name: the executable being loaded + * @loaddr: the lowest fixed address in the executable + * @hiaddr: the highest fixed address in the executable + * + * Creates the initial guest address space in the host memory space. + * + * If @loaddr == 0, then no address in the executable is fixed, + * i.e. it is fully relocatable. In that case @hiaddr is the size + * of the executable. + * + * This function will not return if a valid value for guest_base + * cannot be chosen. On return, the executable loader can expect + * + * target_mmap(loaddr, hiaddr - loaddr, ...) + * + * to succeed. + */ +void probe_guest_base(const char *image_name, + abi_ulong loaddr, abi_ulong hiaddr); + +/* syscall.c */ +int host_to_target_waitstatus(int status); + +#ifdef TARGET_I386 +/* vm86.c */ +void save_v86_state(CPUX86State *env); +void handle_vm86_trap(CPUX86State *env, int trapno); +void handle_vm86_fault(CPUX86State *env); +int do_vm86(CPUX86State *env, long subfunction, abi_ulong v86_addr); +#elif defined(TARGET_SPARC64) +void sparc64_set_context(CPUSPARCState *env); +void sparc64_get_context(CPUSPARCState *env); +#endif + +static inline int is_error(abi_long ret) +{ + return (abi_ulong)ret >= (abi_ulong)(-4096); +} + +#if TARGET_ABI_BITS == 32 +static inline uint64_t target_offset64(uint32_t word0, uint32_t word1) +{ +#ifdef TARGET_WORDS_BIGENDIAN + return ((uint64_t)word0 << 32) | word1; +#else + return ((uint64_t)word1 << 32) | word0; +#endif +} +#else /* TARGET_ABI_BITS == 32 */ +static inline uint64_t target_offset64(uint64_t word0, uint64_t word1) +{ + return word0; +} +#endif /* TARGET_ABI_BITS != 32 */ + +void print_termios(void *arg); + +/* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */ +#ifdef TARGET_ARM +static inline int regpairs_aligned(void *cpu_env, int num) +{ + return ((((CPUARMState *)cpu_env)->eabi) == 1) ; +} +#elif defined(TARGET_MIPS) && (TARGET_ABI_BITS == 32) +static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } +#elif defined(TARGET_PPC) && !defined(TARGET_PPC64) +/* + * SysV AVI for PPC32 expects 64bit parameters to be passed on odd/even pairs + * of registers which translates to the same as ARM/MIPS, because we start with + * r3 as arg1 + */ +static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } +#elif defined(TARGET_SH4) +/* SH4 doesn't align register pairs, except for p{read,write}64 */ +static inline int regpairs_aligned(void *cpu_env, int num) +{ + switch (num) { + case TARGET_NR_pread64: + case TARGET_NR_pwrite64: + return 1; + + default: + return 0; + } +} +#elif defined(TARGET_XTENSA) +static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } +#elif defined(TARGET_HEXAGON) +static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } +#else +static inline int regpairs_aligned(void *cpu_env, int num) { return 0; } +#endif + +/** + * preexit_cleanup: housekeeping before the guest exits + * + * env: the CPU state + * code: the exit code + */ +void preexit_cleanup(CPUArchState *env, int code); + +/* + * Include target-specific struct and function definitions; + * they may need access to the target-independent structures + * above, so include them last. + */ +#include "target_cpu.h" +#include "target_structs.h" + +#endif diff --git a/linux-user/vm86.c b/linux-user/vm86.c index 4412522c4c4e..c2facf3fc2de 100644 --- a/linux-user/vm86.c +++ b/linux-user/vm86.c @@ -19,6 +19,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" //#define DEBUG_VM86 diff --git a/linux-user/xtensa/cpu_loop.c b/linux-user/xtensa/cpu_loop.c index bb5335e2b6cb..622afbcd345d 100644 --- a/linux-user/xtensa/cpu_loop.c +++ b/linux-user/xtensa/cpu_loop.c @@ -19,6 +19,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "cpu_loop-common.h" #include "signal-common.h" diff --git a/linux-user/xtensa/signal.c b/linux-user/xtensa/signal.c index 72771e1294b6..7a3bfb92cadc 100644 --- a/linux-user/xtensa/signal.c +++ b/linux-user/xtensa/signal.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" #include "qemu.h" +#include "user-internals.h" #include "signal-common.h" #include "linux-user/trace.h" From patchwork Thu Sep 16 15:12:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512938 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1315789jao; Thu, 16 Sep 2021 08:24:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzHv7jRqYaa4y5sfDz55sGldAsxZ8WC/B6345L8SwZB9QM2f+6XS+PEr1PgRMP5z1Aihgl1 X-Received: by 2002:a37:9cc8:: with SMTP id f191mr5488481qke.113.1631805875302; Thu, 16 Sep 2021 08:24:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805875; cv=none; d=google.com; s=arc-20160816; b=t/Km4um48x2Dmfy7hrpRn9FT24LDvRTmFVbZgqOvVYCXQjU4ZypjDkgOz2W9dz2Ffp 1YsrwH5Ti+1Ep9LfdElZSrS7dgcGIpHbl1AWBoTpQW2CzH/cZLOTTm2IwvBwrs6cdBaR nSP+MN65ZNXrPp6g5a6zS0kQga0NJlSgoXQR7ugpIgLRSP8X1ZARksF/yHoE0nW9E3a7 W4lLONP9D0wbv9qeqNLtc/vvKABOY5RuNhgK6LzVTq42Qm+YYKPYGU1+6wenHAhZATEs c0jtOvgea9CIQrQ9ib2utXCAN5c45PGagTkx8maEiRqBR7Tabe+Xtk6UE8aL4aroniq/ asYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=NuccEDpT333n8yU4ZD3dwhgG+y+Zqhk9kUDG7Uy2GwA=; b=U4kA4eOozc4o89tY8PGuzV8V10HFZJxvt4CcP+/qY9hXE7S/fbqXEMghsLoZJeHJKp PYnxJSWf47u9p5CADtzUG61nnA2jd/rKcARWV7VSoulGKLkTNa/xdgIOTHz4FPd3szqA ij1XothzXu1fj78q18po/2KYJXTbejjvRM/X8oX6sBF7uSK+rPmsaUUBzGBJZ9mE1mXa jHDxh9uRq6jXrXIq4Zi8Go3EdPOme+ST9pN9rJwCxlvk4pEfjzTORoLohuHCv08I+829 ciNEjaQ3GWzPLikfyTFpQmjB86iFdNhpvHij8Z+8wBI0I1n+4FMKugkujr/0NDECv0Ln wSfg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id s21si1845265qkg.298.2021.09.16.08.24.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:24:35 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:54140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQtFa-0003rQ-Rr for patch@linaro.org; Thu, 16 Sep 2021 11:24:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36250) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4L-00030T-QY for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:57 -0400 Received: from mout.kundenserver.de ([212.227.17.13]:40985) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4I-0004GH-ML for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:57 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MJEpp-1mAaIa47Q3-00KfbI; Thu, 16 Sep 2021 17:12:44 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 08/10] linux-user: Don't include gdbstub.h in qemu.h Date: Thu, 16 Sep 2021 17:12:35 +0200 Message-Id: <20210916151237.1188301-9-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:k9SQK62dp9bppCOtgR0jfzRyhPojCs7c9R3310/PyqJk6F0QaMZ bFzFAgEahZqEns+gkn5Y+cZVxUgeveV5AsmX7sORn+Yn3+gucbEMo9yl2zqtWpQ8L5ATKTo f4o55ZmXHCvOo0PxvyWnTFIucoHDJRg5bznHK2OSPvwZiW/VEj5Cxp0NVLKEAWBe8Gtxu0h +vQGu5HSdnsaKzJonBxmQ== X-UI-Out-Filterresults: notjunk:1; V03:K0:Z1wVyVC1350=:CLxW+wuigxGv2tLULeAsJs nMEYU05IZN6opAzxrgjF6S2K4ECq6qKIAeOTD+QuCssvD3GhaZzc74gvn+BM6sBJySPm5mYH+ ZHZuIA+bs1MyuYqAAA2xnpwEmHcAfvv/WNBZqsTEYn6/Je36htDwlqBCEt1iAaoUOO/D53/du KKmqvSG+M7q2PKkDJYt/2+FLNhxqc9NM4YQbrx37qShERqg9RcCDsI45OfV+jE2FUBvh5Vj3f HLFGLaRtYEqhcbOMeytR+KbmOrzJM5tXGVyNrQZ7iODPwJad5xzW0WTbSlpAxyu2+q2+otxd6 IXdPTem9MXjeLCgi6JEX7ryjRJ2UMvxCod5kFh9k2luOdd1wCCjJ9OZFDUXXg9nUuZqZoViCB SqofC7bynK6gHCLDrHriihJwTMYNSE4ntCDWNdnbLb8F5V7Y1baNgC6HGP61kibpgO3vPV9Xc FpAwlz83rkejevgh6CliczyXKKA5zLFgmgCH3V6u33a89JtRHhlG2T+ExgcGf7RbW1ThUy1Dx KxWh+pHQHZ53o5Gf8SE5g80hF62TYYQfb17zlVICTtOb6Q3U+0jD5fDqcM/xwTC2iDYzGxLsk W+P9kRoH3eJOYiEY3Q3MvUUcCiwJi/+z27sqICVxd/hRRyL2OQrE60NpuGpouPooZB6i8bXYI RwoapO5NACuxw2c/4v9j4v10WEGrxAkaTNHiTq4cReyIQSU/mPX3QIWj6tnpgf+dRIPtQXCS3 jiRLv9FwWAk0+uFwci9LEWV2vgAs+a2wH67Ohg== Received-SPF: none client-ip=212.227.17.13; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell Currently the linux-user qemu.h pulls in gdbstub.h. There's no real reason why it should do this; include it directly from the C files which require it, and drop the include line in qemu.h. (Note that several of the C files previously relying on this indirect include were going out of their way to only include gdbstub.h conditionally on not CONFIG_USER_ONLY!) Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-9-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- gdbstub.c | 2 +- linux-user/exit.c | 1 + linux-user/main.c | 1 + linux-user/qemu.h | 1 - linux-user/signal.c | 2 ++ semihosting/arm-compat-semi.c | 2 +- target/m68k/m68k-semi.c | 2 +- target/nios2/nios2-semi.c | 2 +- 8 files changed, 8 insertions(+), 5 deletions(-) -- 2.31.1 diff --git a/gdbstub.c b/gdbstub.c index 5d8e6ae3cd9b..36b85aa50e24 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -31,13 +31,13 @@ #include "qemu/cutils.h" #include "qemu/module.h" #include "trace/trace-root.h" +#include "exec/gdbstub.h" #ifdef CONFIG_USER_ONLY #include "qemu.h" #else #include "monitor/monitor.h" #include "chardev/char.h" #include "chardev/char-fe.h" -#include "exec/gdbstub.h" #include "hw/cpu/cluster.h" #include "hw/boards.h" #endif diff --git a/linux-user/exit.c b/linux-user/exit.c index 68a3a6f9df01..fa6ef0b9b44c 100644 --- a/linux-user/exit.c +++ b/linux-user/exit.c @@ -17,6 +17,7 @@ * along with this program; if not, see . */ #include "qemu/osdep.h" +#include "exec/gdbstub.h" #include "qemu.h" #include "user-internals.h" #ifdef CONFIG_GPROF diff --git a/linux-user/main.c b/linux-user/main.c index 9edc0b222076..5ce17e423db1 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -40,6 +40,7 @@ #include "qemu/module.h" #include "qemu/plugin.h" #include "exec/exec-all.h" +#include "exec/gdbstub.h" #include "tcg/tcg.h" #include "qemu/timer.h" #include "qemu/envlist.h" diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 92290a55c0de..fda90fc28d68 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -11,7 +11,6 @@ #include "syscall_defs.h" #include "target_syscall.h" -#include "exec/gdbstub.h" /* * This is the size of the host kernel's sigset_t, needed where we make diff --git a/linux-user/signal.c b/linux-user/signal.c index 6af66123d0f7..f8346f5ec5fd 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -18,6 +18,8 @@ */ #include "qemu/osdep.h" #include "qemu/bitops.h" +#include "exec/gdbstub.h" + #include #include diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 1c29146dcfa6..01badea99c81 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -37,12 +37,12 @@ #include "semihosting/console.h" #include "semihosting/common-semi.h" #include "qemu/timer.h" +#include "exec/gdbstub.h" #ifdef CONFIG_USER_ONLY #include "qemu.h" #define COMMON_SEMI_HEAP_SIZE (128 * 1024 * 1024) #else -#include "exec/gdbstub.h" #include "qemu/cutils.h" #ifdef TARGET_ARM #include "hw/arm/boot.h" diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index d919245e4f85..44ec7e4612c6 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -20,11 +20,11 @@ #include "qemu/osdep.h" #include "cpu.h" +#include "exec/gdbstub.h" #if defined(CONFIG_USER_ONLY) #include "qemu.h" #define SEMIHOSTING_HEAP_SIZE (128 * 1024 * 1024) #else -#include "exec/gdbstub.h" #include "exec/softmmu-semi.h" #include "hw/boards.h" #endif diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index e508b2fafceb..fe5598bae4d7 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -24,11 +24,11 @@ #include "qemu/osdep.h" #include "cpu.h" +#include "exec/gdbstub.h" #if defined(CONFIG_USER_ONLY) #include "qemu.h" #else #include "qemu-common.h" -#include "exec/gdbstub.h" #include "exec/softmmu-semi.h" #endif #include "qemu/log.h" From patchwork Thu Sep 16 15:12:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512936 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1313323jao; Thu, 16 Sep 2021 08:22:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJybNucV5XBv2djqYxBTTa+/DKU6HVIoflG/55PWq72RjfcFWujPGtfZIxBpAjSV9i5fuz5g X-Received: by 2002:ad4:47a3:: with SMTP id a3mr5710678qvz.31.1631805721784; Thu, 16 Sep 2021 08:22:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805721; cv=none; d=google.com; s=arc-20160816; b=AmUIC9pdlgrayfu4VWoGXFhuGg7n2ZMCGeXGoh98JQnCGz+iedDEz6G5Zp1cdlvjXV uWp/G4TdBDXN6rt1rO0blhKQh/4UhPN9of+ndFASljfenaoOjqfU3wkyN7gWiYhrsJL/ n/gdGeNkpT4vroOsVdRCOKU7bjjgJdBQqYq9JOSbbNd/jF+zTe+hgExu4+YAQmEIHF2T F5U+7qdLsZrNM7iOhKgcEEuTqxdJsSiUZNw2oruHe/C1W0JyW7tlrOdWM26C8h5Ni1KA s+U85z/WeLmpxLoEuX1MXBowvBJI+hVDs3PpAtstiERrN0VwOBEzfrSW3IUQMw3Y9mxt gGLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=3ff/PcRy9zZnkLAcu5QHRaaQwzFQ3ohIOPT92koAzNo=; b=sgTOkScdFrlypaiYNwDdnF3tBNSmWcYpB4zYJmwwMeNDKVl/R9IHGHlnIUf7zeS+iX NAsb+8yMJG1oUdEqVYeq23hpLgCRHuZ0bHZaxJYuBWZkcICBUKINNKF/54jWg5wdv/tc 7B7U7XEmQ8na+aWEgb6FMKzwAcheUL8PCSr9RT+IEG/9nZZt7EhA74ge+WYuSecMQjTI EWdM9ZJ00xQakrUDLTLeXjOm6q/4xFq5yjgYD24FLI5rF91keuF3Iu7E1V7cC+D8ucaV qONLmEl5kGEygA2dtaVEvknFa5lgk5nLdh4qpqWg51ZvW0IqQxQIYaU59F4tlggUwill uOjg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id x13si1853331qkp.301.2021.09.16.08.22.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:22:01 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:46958 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQtD7-0007Pr-Bd for patch@linaro.org; Thu, 16 Sep 2021 11:22:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36254) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4L-00030y-Sh for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:57 -0400 Received: from mout.kundenserver.de ([212.227.17.13]:56961) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4I-0004GF-MT for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:57 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1N5FMB-1msD2f36rF-0116tm; Thu, 16 Sep 2021 17:12:44 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 09/10] linux-user: Drop unneeded includes from qemu.h Date: Thu, 16 Sep 2021 17:12:36 +0200 Message-Id: <20210916151237.1188301-10-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:ne4y8ERRDaP4aq1EtLqQPN1JC1/Ly987RYcTJ0ConyA9aBlqTsU NZteHGI44I8xFIt3KUbjEHMkh/f4Um8sqC1SvCYv8uHQSYO/ZNtrQibo7Ur99mtEkloEZSL 6VOcQ/ssNHOZwcGD9Va1DnseRO84SfhR/018JsrxmstVIlq66viW+IICS1ESeZ2hYfV3Bdz 5NodkHg2TZ1hsH3aABOXw== X-UI-Out-Filterresults: notjunk:1; V03:K0:77sm8Cb5qBE=:7PWukU9TjrhMpuShtKS2R2 WQ/5utgZjINAm38NZDGb3kRRLNTgICF2nz03YmWQb0Wi42VyxvOCUBjtcOVQmAUNEbHHQCNQH +KnXQ8l8uoeVyrfIbYBRmSRMZzTxTckTyHb+He2vK754UxN+M/O5iYNJm81czlomAqv+V0M+V WL0kb6e3vA1pdq2y6y00yIDn79BVaBg1bR0jx/imd7DOVmTbA186M0E0JoMgor4HF8WrfrsjM STsYtcPkzg5J4p6tz+TmURMyRjlxi/zEP5Vh+GPkEMpzBgVx8Vgj4cL1Eu7ZQJH8eY+wecUVZ HH9we4lbJluEfiLXspbsOOPcy3mcgw7aLtfsKVmPXsSfCeKWESgr0jeO0ArYtX8g4afhJEBFQ lLTNVQTA0mc2lksBp20nf5onFa572NXHyqb/rRtn7aLdrh9GG/C0hsslS6Nf+6aKwr3QT9YXv ceGOHl6LhXhlmd2rxMpThezqFKwD8VDdJZqakvP7jd+il01T7I8xdH9Juk7vwTFFL9rkUop1j lb2sKMbwRExEhZxU1I8cAsIsEwQz7p0R+/MiF3G6OvjoGjPCPBs97mDGvfPO1wmmEod9wOvl5 s9gdg1eAohLwmAYyf5sGUDXjssaztbvQPv3ETm4hImqDQRl0RPYgkB4MXdUKDqApBy1XMjGPe Z31gkBX+iDvGhNGDbKnAkQZe4rhbqrw/11zZUyAz7QrouLuTcRg5C66/VVcxtltWcytK1RBN+ DOK5kizXL74RZhtT+hFi6yXOZL8eB6o9qe8kBA== Received-SPF: none client-ip=212.227.17.13; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell Trim down the #includes in qemu.h where we can, either by dropping unneeded headers or by moving them to user-internals.h. This includes deleting a couple of #includes that appear at weird points midway through the header file. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210908154405.15417-10-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/qemu.h | 4 ---- linux-user/user-internals.h | 2 ++ thunk.c | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) -- 2.31.1 diff --git a/linux-user/qemu.h b/linux-user/qemu.h index fda90fc28d68..5c713fa8ab26 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -2,7 +2,6 @@ #define QEMU_H #include "cpu.h" -#include "exec/exec-all.h" #include "exec/cpu_ldst.h" #undef DEBUG_REMAP @@ -163,8 +162,6 @@ typedef struct TaskState { struct target_sigaltstack sigaltstack_used; } __attribute__((aligned(16))) TaskState; -#include "qemu/log.h" - abi_long do_brk(abi_ulong new_brk); /* user access */ @@ -349,5 +346,4 @@ void *lock_user_string(abi_ulong guest_addr); #define unlock_user_struct(host_ptr, guest_addr, copy) \ unlock_user(host_ptr, guest_addr, (copy) ? sizeof(*host_ptr) : 0) -#include #endif /* QEMU_H */ diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h index 1729a8b62e18..661612a088b5 100644 --- a/linux-user/user-internals.h +++ b/linux-user/user-internals.h @@ -20,6 +20,8 @@ #include "hostdep.h" #include "exec/user/thunk.h" +#include "exec/exec-all.h" +#include "qemu/log.h" extern char *exec_path; void init_task_state(TaskState *ts); diff --git a/thunk.c b/thunk.c index fc5be1a502e7..dac4bf11c65b 100644 --- a/thunk.c +++ b/thunk.c @@ -17,6 +17,7 @@ * License along with this library; if not, see . */ #include "qemu/osdep.h" +#include "qemu/log.h" #include "qemu.h" #include "exec/user/thunk.h" From patchwork Thu Sep 16 15:12:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 512937 Delivered-To: patch@linaro.org Received: by 2002:a02:c816:0:0:0:0:0 with SMTP id p22csp1314029jao; Thu, 16 Sep 2021 08:22:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzqIODNegwcCwEoSzmIZDcytSMpBzoXh81AKFgmm7fUZoVoogOJ45WM0tah5AeLr8is4q43 X-Received: by 2002:a05:6102:34b:: with SMTP id e11mr4468434vsa.22.1631805766524; Thu, 16 Sep 2021 08:22:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631805766; cv=none; d=google.com; s=arc-20160816; b=mz7ujP74B663ZaADuPmuHN5TfFX4YKz3qWtElYjWOXKNfGUg8//F+fKDLsJ6067brM 3Y1JGO6qIzteup6eVviii6sBF9mDNODA4Td/+FWcGKb+ZnTCyCMeShZpyaiU0rAOA10e swrRSbAr9fr0ZfcU4qNFosDV7B6Jvm6Z9lBTSWmKc3U/piLEo+CTt2QY0sjcHAS/ZzMf 9WYT401M/BgNK/9n/Y6OPeHbPhTFw666HR78pBOLYmvSV3vApOfw7INsmCbr9Lf092Ii S/nW8yzeEkt+c8QbvC09+aneW0RJJR5PDJfFhV7Nn4liZyOY3CJBomKblPPfDGqGkUpQ 8YDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=wiUnm3OEW6WRpuKBkTxEnZkBdrK5MkCExF/VqNgdtRM=; b=Jg1MmHMvpSmvESMBikB8uwqKcnYW8gd4VUJUztzdNfFvcVb6n//+6+//DL66Mfgq7e KvckryXtqm49ElB7CXnj/xLupjNsbxIn+63cOYLXe7odR3I5zcZieHqV0H2qWs3eJOOK NKrMnCCFLjzxgOZM6rQksmq0XrIwsu8OJSzv5Fr2bTCK1LcpEFgRPShgMQaMTsxcRbZn 8iMxgScJqT0TKQhSywCqeFR+AOqld1FRm63n7OScD5FKugdoD/M0AAvosH5KlTROVPed xhIWNP6l9KYDgRGJSQZvAey3D3O/dMy+klaO56aMMEy0AF8ANcJ0nej02BCZOhemra39 G8oQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id w22si1627452uae.28.2021.09.16.08.22.46 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Sep 2021 08:22:46 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:49558 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQtDq-0000kx-1L for patch@linaro.org; Thu, 16 Sep 2021 11:22:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36244) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4L-0002yS-0q for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:57 -0400 Received: from mout.kundenserver.de ([212.227.17.13]:46493) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQt4I-0004DS-0d for qemu-devel@nongnu.org; Thu, 16 Sep 2021 11:12:56 -0400 Received: from quad ([82.142.27.6]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1N7AEs-1mz3bN0vnw-017Sh9; Thu, 16 Sep 2021 17:12:45 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 10/10] linux-user: Check lock_user result for ip_mreq_source sockopts Date: Thu, 16 Sep 2021 17:12:37 +0200 Message-Id: <20210916151237.1188301-11-laurent@vivier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210916151237.1188301-1-laurent@vivier.eu> References: <20210916151237.1188301-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K1:cbWaAOzvIP0khKP0Qym0iWiHl0L0gbiu89FWT/A59hlC8Bz8/vy xJ64lq+DD2E5db1C30bsxPMqt7WCRT7VehBJiIELCHxCjNxldPVS1NspqU0b6+sVbJVgOWU U7Db0AYvsyQaGLSbKePYUH8mgArpwPTBJh4Jhu9fF8lB5O7u7ryhTPeZdr8bumDOy0qZpak na1r6367ymYgI8YlKFcTA== X-UI-Out-Filterresults: notjunk:1; V03:K0:c34K3mVjxkY=:k+/IfPS/IwWnwOXTVxlcy8 rIGr3zr2lVg7Mo44tuLRqJxbTDM5+0Qs2SdWGmCdNCWOF0V1Rt46Zssr/bLX1D/Gd6Xlj5kTP jNNsGmpo6kVQ1IZB/fkMA8U3oPRzpjLdMrr13M0cgO778d7ptVVkyOeKD1OzGoZhjXEW3SfEu LfuPqpeJJs4H6NxFxN8gl9KVdDwsfcXOm2ePohTB/DMja8iFbApU9InZ8+mo+uEyqmBsK+m2U NJtCcOA8KfuUQq7F3z8L3g8r8ZIlMB0qNYMj3A8kdgUooXqXVsotoh1rCkX8eD6VjToqbodKU MV60ErsfDYBnlJxJrkZszc2gQUIGz3BHVLq9i5XNz5dIXLy/hJ6wHF1lOkndeEqaisBMZeANk wJOaf+TRnPoeObaZ47uSFgE9yoAOBOKUwukkw6vwrijit2M1SbZV503UWO/o7s6XBNMscHvlo ggb6ksRxlmYyijTuf5IBnklrzzRdvZuo06QWwY+u1BS830vDf40aMfzUuEazCkfu6vbbFn+tr guKJ3OdwIWmMShBdGYEfkb34gBDJI8xrQ9+4oDmVSZ9xxx0ps2Zq0AAjCIPyCIv34z7hRv/Tp qAaIIANy4AKEemCFkEtaOM9Ta5/Gk/xx6klaJWKad7Ln9D/1tYWngRkYn7jjFce38k/3LYUlI ZHKoGm02apNcTS/3PNwCvSaA2UXpSbOVs25jlQmRnzdzCu2uoywzoKhUXFU24R9g6Fxu1X5cM yWdWmjD206rA9awhfBLwNl6TiOX8j5WtQ3m4Kw== Received-SPF: none client-ip=212.227.17.13; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?b?YXVkw6k=?= , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell In do_setsockopt(), the code path for the options which take a struct ip_mreq_source (IP_BLOCK_SOURCE, IP_UNBLOCK_SOURCE, IP_ADD_SOURCE_MEMBERSHIP and IP_DROP_SOURCE_MEMBERSHIP) fails to check the return value from lock_user(). Handle this in the usual way by returning -TARGET_EFAULT. (In practice this was probably harmless because we'd pass a NULL pointer to setsockopt() and the kernel would then return EFAULT.) Fixes: Coverity CID 1459987 Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Laurent Vivier Message-Id: <20210809155424.30968-1-peter.maydell@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/syscall.c | 3 +++ 1 file changed, 3 insertions(+) -- 2.31.1 diff --git a/linux-user/syscall.c b/linux-user/syscall.c index e4ffdec0d83c..544f5b662ffe 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -2127,6 +2127,9 @@ static abi_long do_setsockopt(int sockfd, int level, int optname, return -TARGET_EINVAL; ip_mreq_source = lock_user(VERIFY_READ, optval_addr, optlen, 1); + if (!ip_mreq_source) { + return -TARGET_EFAULT; + } ret = get_errno(setsockopt(sockfd, level, optname, ip_mreq_source, optlen)); unlock_user (ip_mreq_source, optval_addr, 0); break;