From nobody Mon Mar 31 21:04:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155180125682077.99929275978957; Tue, 5 Mar 2019 07:54:16 -0800 (PST) Received: from localhost ([127.0.0.1]:44906 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1COR-0000qh-Ii for importer@patchew.org; Tue, 05 Mar 2019 10:54:11 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35729) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1C6m-000345-VC for qemu-devel@nongnu.org; Tue, 05 Mar 2019 10:35:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1C6e-0007zE-9j for qemu-devel@nongnu.org; Tue, 05 Mar 2019 10:35:53 -0500 Received: from smtp.lg.ehu.es ([158.227.0.66]:17071 helo=smtp.ehu.eus) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h1C6d-0007V3-Mx for qemu-devel@nongnu.org; Tue, 05 Mar 2019 10:35:48 -0500 Received: from imsva1.lgp.ehu.es (imsva1.lgp.ehu.es [10.0.3.245]) by postfix.smtp1.imsva1 (Postfix) with ESMTPS id 6433F30842 for ; Tue, 5 Mar 2019 16:35:44 +0100 (CET) Received: from imsva1.lgp.ehu.es (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 11BCA110056 for ; Tue, 5 Mar 2019 16:35:44 +0100 (CET) Received: from imsva1.lgp.ehu.es (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E66B2110053 for ; Tue, 5 Mar 2019 16:35:43 +0100 (CET) Received: from smtp.ehu.eus (unknown [10.0.100.73]) by imsva1.lgp.ehu.es (Postfix) with ESMTPS for ; Tue, 5 Mar 2019 16:35:43 +0100 (CET) Received: from mail-it1-f169.google.com (mail-it1-f169.google.com [209.85.166.169]) by smtp1 (Postfix) with ESMTPSA id 6854930842 for ; Tue, 5 Mar 2019 16:35:43 +0100 (CET) Received: by mail-it1-f169.google.com with SMTP id l15so5089118iti.4 for ; Tue, 05 Mar 2019 07:35:43 -0800 (PST) X-Gm-Message-State: APjAAAVngTPjfIHw0VRW/6KAf2QodFyIBrDK5Kb/fhAiJx/WZ2uGiu6C B5srBUOXTaCjoxq18w+P7GnKOkrXH2DK3iOChQ== X-Google-Smtp-Source: APXvYqwBmqnFlmD0uhRXELP2LDh+ISNy7eBqujIgog9/pGDW4CBkjUirJjXQ/T7/LPMrrWLqEZlovcSmdihS8ULYYN8= X-Received: by 2002:a24:6846:: with SMTP id v67mr1541283itb.116.1551800141846; Tue, 05 Mar 2019 07:35:41 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Unai Martinez Corral Date: Tue, 5 Mar 2019 16:35:32 +0100 X-Gmail-Original-Message-ID: Message-ID: To: =?UTF-8?Q?Unai_Mart=C3=ADnez_Corral?= X-Greylist: ACL 177 matched, not delayed by milter-greylist-4.4.3 (smtp1); Tue, 05 Mar 2019 16:35:43 +0100 (CET) X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSVA-9.1.0.1631-8.2.0.1013-24472.000 X-TM-AS-Result: No--8.345-7.0-31-10 X-imss-scan-details: No--8.345-7.0-31-10 X-TMASE-Version: IMSVA-9.1.0.1631-8.2.1013-24472.000 X-TMASE-Result: 10--8.344900-10.000000 X-TMASE-MatchedRID: JntwZIbuf0CgBUTSh64wSSnjDVPUYtjj7euC4Hkicfs8YVhA78QNGlPW us3yxQNWRuC1/4DoSVvcrth7/w4dPqo+znd4MHO5syw+ZJnFumS5pw2tsxj4tBQLE16MmfDLrYM G4XlWdy1DtX3Y7/TgmIxhWQe7+rXFp7OUOPQ+9P0SEYfcJF0pReYQsENyzR2dymP/1piI/6H02C yYvwGr2GnmzZx8Y+hktmupbCupksISsMJYjeJjbiVypP66BP0QkKAa/khZ3iQKogmGusPLb2XEK MPvolt1dyNal3Gb2pTMJYD0aRF0RTf6GcWCp0/it1AhvyEKdj7XLq4lttlH/zqI/Q1zONHSWgby wE3/if2p4IU3TdlPRyMxVN3ks6IM4ROInNliA3sflhDI6DvVliTzSFehhfJrpsYa/10L1RwDETs 7kDExa/heRyvm5CI7sJVxkt9B662nuow8yO9beStIvCO4dJ0PnTcLR8+TzEp1NVUe2wRsL487mD 4MbtJB4vM1YF6AJbbqChA6lSRJvtLvsKjhs0ldcJktTZ6qE7h2+nEixMccdmLOXmaGLZP++wWdK JekpqPJiAp1dtQu5D8dDflLx2O3tqTlIMyL7Ig/MERO0HIlZd17K4gE3zwpAIstP68EfMokv8wZ gZB/vgNN9GHKmctkzkmAmYrlaqN+3BndfXUhXQ== X-TMASE-SNAP-Result: 1.821001.0001-0-1-12:0,22:0,33:0,34:0-0 X-Greylist: Sender IP whitelisted, Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.4.3 (postfix.smtp1.imsva1); Tue, 05 Mar 2019 16:35:44 +0100 (CET) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 158.227.0.66 X-Content-Filtered-By: Mailman/MimeDel 2.1.21 Subject: [Qemu-devel] [PATCH] qemu-binfmt-conf.sh: add CPUS, add --reset, make -p and -c boolean (no arg) X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: unai.martinezcorral@ehu.eus Cc: riku.voipio@iki.fi, qemu-devel@nongnu.org, laurent@vivier.eu Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Related to https://bugs.launchpad.net/qemu/+bug/1817239 - Positional parameters are supported as [CPUS]. This can be a single target arch, a comma separated list or a space separated list. This parameter replaces qemu_target_list for any mode (default, systemd or debian). If it is left empty or ALL is provided, all the targets are registered. If NONE is provided, no target is registered. - Option [--systemd CPU] is modified to [--systemd], since the functionality is supported by [CPUS] now. - [--credential yes|no] and [--persistent yes|no] are modified to [--credential] and [--persistent], respectively. They are 'no' by default, and 'yes' if the corresponding flag is provided. - [--reset ARCHS] is added. This allows to remove registered interpreters. Supported formats are a single target name or a comma separated list of targets. If ALL is provided, all the existing 'qemu-*' interpreters are removed. - 'usage' is updated according to the changes above. Note that I don't know how to proceed when `--reset` is used together with `--systemd` or `--debian`. At the moment, if `--reset` is provided first, both options are used, one after the other. However, if any of the other two is provided first, a error is shown: 'option reset not implemented for this mode yet'. Some example use cases that are to be supported by this patch: qemu-binfmt-conf.sh -p aarch64 qemu-binfmt-conf.sh -p aarch64 riscv64 qemu-binfmt-conf.sh -p aarch64,riscv64 qemu-binfmt-conf.sh -r ALL -p aarch64 qemu-binfmt-conf.sh -r aarch64 -p aarch64 qemu-binfmt-conf.sh -r ALL -p aarch64 riscv64 qemu-binfmt-conf.sh -r ALL -p aarch64,riscv64 qemu-binfmt-conf.sh -r aarch64,riscv64 -p aarch64 riscv64 qemu-binfmt-conf.sh -r aarch64,riscv64 -p aarch64,riscv64 qemu-binfmt-conf.sh -r ALL NONE The main purpose of these changes is to make it easier to use qemu-user-static to build docker images for foreign architectures. See https://github.com/umarcor/qus/tree/qemu-update Signed-off-by: Unai Martinez-Corral --- scripts/qemu-binfmt-conf.sh | 174 +++++++++++++++++++++++------------- 1 file changed, 110 insertions(+), 64 deletions(-) diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh index b5a16742a1..f044446d5c 100755 --- a/scripts/qemu-binfmt-conf.sh +++ b/scripts/qemu-binfmt-conf.sh @@ -6,6 +6,32 @@ mips mipsel mipsn32 mipsn32el mips64 mips64el \ sh4 sh4eb s390x aarch64 aarch64_be hppa riscv32 riscv64 xtensa xtensaeb \ microblaze microblazeel or1k x86_64" +# check if given target CPUS is/are in the supported target list +qemu_check_target_list() { + all=3D"$qemu_target_list" + if [ "$1" =3D "ALL" ]; then + checked_target_list=3D"$all" + return + fi + list=3D"" + for target in $@; do + unknown_target=3D"true" + for cpu in $all ; do + if [ "$cpu" =3D "$target" ] ; then + list=3D"$list $target" + unknown_target=3D"false" + break + fi + done + if [ "$unknown_target" =3D "true" ] ; then + echo "ERROR: unknown CPU \"$target\"" 1>&2 + usage + exit 1 + fi + done + checked_target_list=3D"$list" +} + i386_magic=3D'\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\= x00\x03\x00' i386_mask=3D'\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\= xff\xfe\xff\xff\xff' i386_family=3Di386 @@ -167,45 +193,48 @@ qemu_get_family() { usage() { cat <&2 + usage + exit 1 +} + +qemu_remove_interpreter() { + if [ "$1" =3D "ALL" ]; then + find /proc/sys/fs/binfmt_misc/ -type f -name 'qemu-*' -exec sh -c 'echo -1 > {}' \; + else + qemu_check_target_list $(echo "$1" | tr ',' ' ') + for t in $checked_target_list; do + find /proc/sys/fs/binfmt_misc/ -type f -name "qemu-$t" -exec sh -c 'echo -1 > {}' \; + done + fi +} + CHECK=3Dqemu_check_bintfmt_misc BINFMT_SET=3Dqemu_register_interpreter +BINFMT_REMOVE=3Dqemu_remove_interpreter SYSTEMDDIR=3D"/etc/binfmt.d" DEBIANDIR=3D"/usr/share/binfmts" @@ -324,37 +381,26 @@ CREDENTIAL=3Dno PERSISTENT=3Dno QEMU_SUFFIX=3D"" -options=3D$(getopt -o ds:Q:S:e:hc:p: -l debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential:,persist= ent: -- "$@") +options=3D$(getopt -o r:dsQ:S:e:hcp -l reset:,debian,systemd,qemu-path:,qemu-suffix:,exportdir:,help,credential,pe= rsistent -- "$@") eval set -- "$options" while true ; do case "$1" in + -r|--reset) + shift + qemu_remove_interpreter $1 + ;; -d|--debian) CHECK=3Dqemu_check_debian BINFMT_SET=3Dqemu_generate_debian + BINFMT_REMOVE=3Dqemu_remove_notimplemented EXPORTDIR=3D${EXPORTDIR:-$DEBIANDIR} ;; -s|--systemd) CHECK=3Dqemu_check_systemd BINFMT_SET=3Dqemu_generate_systemd + BINFMT_REMOVE=3Dqemu_remove_notimplemented EXPORTDIR=3D${EXPORTDIR:-$SYSTEMDDIR} - shift - # check given cpu is in the supported CPU list - if [ "$1" !=3D "ALL" ] ; then - for cpu in ${qemu_target_list} ; do - if [ "$cpu" =3D "$1" ] ; then - break - fi - done - - if [ "$cpu" =3D "$1" ] ; then - qemu_target_list=3D"$1" - else - echo "ERROR: unknown CPU \"$1\"" 1>&2 - usage - exit 1 - fi - fi ;; -Q|--qemu-path) shift @@ -373,12 +419,10 @@ while true ; do exit 1 ;; -c|--credential) - shift - CREDENTIAL=3D"$1" + CREDENTIAL=3Dyes ;; -p|--persistent) - shift - PERSISTENT=3D"$1" + PERSISTENT=3Dyes ;; *) break @@ -387,5 +431,7 @@ while true ; do shift done +shift + $CHECK -qemu_set_binfmts +qemu_set_binfmts $@ -- 2.20.1