From patchwork Tue Jun 7 20:45:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579388 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5543887max; Tue, 7 Jun 2022 14:55:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz/7cm8PlkyDHIc4U8N0QM3rmG5X2fgQtyP2bp8HrvjJOxbq6qslaf2N+5jGiPH0mYRVzav X-Received: by 2002:a05:622a:134e:b0:304:c115:a818 with SMTP id w14-20020a05622a134e00b00304c115a818mr23933846qtk.169.1654638947496; Tue, 07 Jun 2022 14:55:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654638947; cv=none; d=google.com; s=arc-20160816; b=S84dWW8J+EBZKRL4g+077iBEhab6SOa3dvjPq3DbnW6AxBlDxiiRrMa2eGPlVawL3m vKLa2DqEvqH7bvZJEBbCGbrRm1cQubxdwAB7mOof5gMQ7q0MyWFWQ6InRRmAOB0OVij5 hjRGDo7vfadkRpGTYYmZ/Go4eNhG2x/cidB4V0MFN46gOLhvRdcfDOyuJicCk+njxM/b Wo+AWcEAykikDF732YXLAhV9V+NHddnxremC/jHJal6D2m9LDgf2oD9NG4cxO7xxFWT6 bMd/DMejM8b9IJ4sQG7u+zzXs1h1bZYJEVUMHVtW0Y1I0ir9rC16dfYt2GMZTmHG2lhh PDmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=hL15phHiFTEeYUryTllbE9QTsXahphlhPjpE5IcwyII=; b=k31+jX02TWGRVZDXa8EvRnhpkoWCtOK7CTswFNsWjqDdzNnllut98PDk7Mn5Sb9fW2 sRM/Qz5rgXb4SW+/zmaws+Dl+HJqKNyj3SoNv6Y/v22Bei8LTtfecJrBQIjyyJ69CWS7 M/M3FP8MhMCfQWyYsh4w8blnaKVpGINaU5PzlNiloF4ZLxB/IP89D5cBnXRF7jeAbyPC ZHo/qgWkytU2D8fuOiXVgJ7qtK0nYiMJ2MlOkydHnrdM0LOMAOl3nhxuQ6SDgUKoAJpW vpWp7x1ralVZmkCfgggq/JeNp/vvStgF8pa7FQXrsLRvKjOatlvpfCENShpJCW/ZFriH uOkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=QVdmCfJ1; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id iv10-20020ad45cea000000b00453c887d73csi10525837qvb.413.2022.06.07.14.55.47 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 14:55:47 -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; dkim=pass header.i=@linaro.org header.s=google header.b=QVdmCfJ1; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:42272 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhAx-0000uS-2h for patch@linaro.org; Tue, 07 Jun 2022 17:55:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38672) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5U-0006ug-PN for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:05 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:41974) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5R-0001J4-F1 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:03 -0400 Received: by mail-pf1-x430.google.com with SMTP id p8so16526537pfh.8 for ; Tue, 07 Jun 2022 13:46:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hL15phHiFTEeYUryTllbE9QTsXahphlhPjpE5IcwyII=; b=QVdmCfJ1+XHVBNsf6+tkHwaE3JYc3nRCMlyfPYQ3XeD0MpVO9c3RyKe8JXpTF0uzRL jwbhanIaMMbnombweeC8/M7WWMCULG58XS4hqSiNtKhwIIsr9HYdT3bH1+kqi9hVlL0J SMZHW1V2n23wwejuRVqItEkqmR2oKxgOkWExTFY261zRX9nYBK/Oi/LxzCnZIWUNp19M VPJOhS+p+gstvI1vu+mqx9A+Pb0SMcM5lwEQQSOAH2jck2XsKV8v2979hQRaY3z8yF2+ ic3dZpipbGZD6BOkjg/yULLwBzS9JChg/LVmjvfjU9jc+5ovd/h4rz/WBn8r3+AYobdz bHqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hL15phHiFTEeYUryTllbE9QTsXahphlhPjpE5IcwyII=; b=jruOas91RE9go8t8Ek/JjfR29ewFy2nFffqZOzJxl3lR8zRyyZH0ZduXfzcmZo7iHT WGlXNzCym+B2eyK47jkNq7ZC3fUJ7P5410tmp5wnr/jpMAbU1Ia9i9BRY88R8TZgoTXi nnWgbCxgkawmaaVlAeV41vRMKelvrW8p9VasE31eIo0NF9wEe8dI+M1zwNn7Vo230JaN pBWC4803SaDzRJ/al0YWQ2N+J5VDNb0Qsf/Po9sGuuWBGMK130anMID6nkV1VeHdk5cf H30Rwo8kOpFn2GwADQ/JAqfnAFbDvrgvU1J42Vxy2nZN/tBZt9ucNt23wrTP5dbcyeqp ml4w== X-Gm-Message-State: AOAM530+4DpNHa8MkUWpiURrcqfVkq8F9wCKpagoZJ68chIk+OhlIXjI MaazlqFulEXEBD0dMIKwVIzBqIPK8Anu2w== X-Received: by 2002:a65:6854:0:b0:3fc:d602:3cf8 with SMTP id q20-20020a656854000000b003fcd6023cf8mr26899641pgt.176.1654634759919; Tue, 07 Jun 2022 13:45:59 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.45.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:45:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 01/53] semihosting: Move exec/softmmu-semi.h to semihosting/softmmu-uaccess.h Date: Tue, 7 Jun 2022 13:45:05 -0700 Message-Id: <20220607204557.658541-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We have a subdirectory for semihosting; move this file out of exec. Rename to emphasize the contents are a replacement for the functions in linux-user/bsd-user uaccess.c. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- .../{exec/softmmu-semi.h => semihosting/softmmu-uaccess.h} | 6 +++--- semihosting/arm-compat-semi.c | 2 +- target/m68k/m68k-semi.c | 2 +- target/mips/tcg/sysemu/mips-semi.c | 2 +- target/nios2/nios2-semi.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) rename include/{exec/softmmu-semi.h => semihosting/softmmu-uaccess.h} (95%) diff --git a/include/exec/softmmu-semi.h b/include/semihosting/softmmu-uaccess.h similarity index 95% rename from include/exec/softmmu-semi.h rename to include/semihosting/softmmu-uaccess.h index fbcae88f4b..e69e3c8548 100644 --- a/include/exec/softmmu-semi.h +++ b/include/semihosting/softmmu-uaccess.h @@ -7,8 +7,8 @@ * This code is licensed under the GPL */ -#ifndef SOFTMMU_SEMI_H -#define SOFTMMU_SEMI_H +#ifndef SEMIHOSTING_SOFTMMU_UACCESS_H +#define SEMIHOSTING_SOFTMMU_UACCESS_H #include "cpu.h" @@ -98,4 +98,4 @@ static void softmmu_unlock_user(CPUArchState *env, void *p, target_ulong addr, } #define unlock_user(s, args, len) softmmu_unlock_user(env, s, args, len) -#endif +#endif /* SEMIHOSTING_SOFTMMU_UACCESS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index b6ddaf863a..1033e751ef 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -370,7 +370,7 @@ static GuestFD *get_guestfd(int guestfd) #ifndef CONFIG_USER_ONLY static target_ulong syscall_err; -#include "exec/softmmu-semi.h" +#include "semihosting/softmmu-uaccess.h" #endif static inline uint32_t set_swi_errno(CPUState *cs, uint32_t code) diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index 37343d47e2..a31db38fc3 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -25,7 +25,7 @@ #include "qemu.h" #define SEMIHOSTING_HEAP_SIZE (128 * 1024 * 1024) #else -#include "exec/softmmu-semi.h" +#include "semihosting/softmmu-uaccess.h" #include "hw/boards.h" #endif #include "qemu/log.h" diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mips-semi.c index b4a383ae90..6d6296e709 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -21,7 +21,7 @@ #include "cpu.h" #include "qemu/log.h" #include "exec/helper-proto.h" -#include "exec/softmmu-semi.h" +#include "semihosting/softmmu-uaccess.h" #include "semihosting/semihost.h" #include "semihosting/console.h" diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index ec88474a73..373e6b9436 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -28,7 +28,7 @@ #if defined(CONFIG_USER_ONLY) #include "qemu.h" #else -#include "exec/softmmu-semi.h" +#include "semihosting/softmmu-uaccess.h" #endif #include "qemu/log.h" From patchwork Tue Jun 7 20:45:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579408 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5562701max; Tue, 7 Jun 2022 15:20:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyDvg0pRbSKZr3ONk3e3t1hYZD10m8B/ZUJ5GKQJajKTowopmxWD9OhBAPVL4t0bKjEZAMr X-Received: by 2002:a05:622a:110f:b0:2f3:c9f1:ada4 with SMTP id e15-20020a05622a110f00b002f3c9f1ada4mr25032908qty.197.1654640458032; Tue, 07 Jun 2022 15:20:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640458; cv=none; d=google.com; s=arc-20160816; b=WHRrfJo8MG+B2LaToxJmmUks46o2w2bCESeQcuohj+vo5zuptHoceigyQ8IOYAtSo7 m4y/AOUuXuG6bGO4012rsMveHyUM4d2naAnYVMlQ/WFA/+GWO+AsXajFUR41z8Oo2zQj JwzgZN1Nw+caMCtUXqeQlAYoszUl6bi+huXTarclN/W0mhtz/vF7JpWwKXRcnk/Vm0+r 8w64xHPq0qJl0+xx3GSEosHJhniYf2+TUF5IKJlXF3J2nAWax8HzKOix51/00fsqKqEN 0dre0zPRrC2HTEAYr6tQB1GFnyuyg1AInuPrkcA4wxMR5znNYdT+WQQdBI/3TENcuaum DHEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=XykDNb8AiF5XqooTWDspyQ6eumaI59tyN1vSYpnaRMw=; b=prGLQc8U/3xtULd3D0T8k+sa1zk3NCFZqFV1LyNf8uJa5B5GcKcEBD3IdmBKHHGti2 OVdBC66vk3V9I1fjJt7vQeBZpjm1mJM2uBmO+OLrHSy/lu1Y0AUikH9OXsSv43tFjRFM 4Kd8jlE5sFE+Fac13/X7IBvFc8/nsVJUhNSVTxDMiiKPjIlimxBvb/n7bpv9tpC4xBH4 yBgfcHxqpAZFp5A355UHbZ47wtFqScEynvP1TyUdI4AY/+i3BtaxYs7Ek6IysAulsGVv KcVGT8mcGYVDcrMpn66E5/YbWkaV+o619hnfG/3jc46b10qZUGrzvUAye9GJXOCzPz0n MV0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NtqI7CdL; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id b15-20020ac87fcf000000b002f3db7033fbsi10706104qtk.252.2022.06.07.15.20.57 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:20:58 -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; dkim=pass header.i=@linaro.org header.s=google header.b=NtqI7CdL; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:59060 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhZJ-0001vB-J4 for patch@linaro.org; Tue, 07 Jun 2022 18:20:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38824) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5c-0007Cv-3s for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:13 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:37690) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5T-0001J8-M7 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:10 -0400 Received: by mail-pl1-x62e.google.com with SMTP id t2so15827363pld.4 for ; Tue, 07 Jun 2022 13:46:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XykDNb8AiF5XqooTWDspyQ6eumaI59tyN1vSYpnaRMw=; b=NtqI7CdLgyhsC0FcZq669hzvdOhBhSwjoVv3vglTQXcpBAG2X9W2ac/v2FUNXeYAV+ w7UEO4u84+KG32PUAIM4pDwIFJnermZwjhS3qEuUZ/Bue0+GkXhAV7VEjO7J+p9Cq73P SmdDr6LJjC/FwvKp1cNtK/JcI9MIAG/1Hb8Z2Tm1O9OuLOEE4EkKXuDE0E6rxJDpu4Bt U+3vw0pv+RvZKdiEQmUcsldbnsESUqkAeLX7A2cb/mFzAGr1i+tBWrQoGFPN5sGeaFJu tjLbupH97zZq3o1VOO4UVq4YBPEQsf9crN/qOFjTtD4QoLR278RTOLadan0CteZMPntO lpjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XykDNb8AiF5XqooTWDspyQ6eumaI59tyN1vSYpnaRMw=; b=y2oWkKBPtL+GJzIyBMetr8KqVKvV1hZxnLXgUX/1M4eVq+k3zybYn8sVwNapSmdR0/ YXbUFH/sv3H0RzwiFcZgGFbO96U4c+unemPxUhOTZOGCnkA1LhWAH35IU8Xe4mi0m2Yu CWt4dlgaaZ/uhXI3FmexKbwdwWla3E+hqa9t4uskMfi2tVzvlKhgboAZE0WwtmbIsEm0 83ijyx4vCsJlU8UVixPspHG/B49v9TmXabK4UzoMlOI06K8XuWHrxsjFhuvUiSCQyezv CntjR26lTVCk/o6XvBVhUSe4tw817Bot27xvx5zEExX9QYvSxjA6NaBo8p336prA0jVQ x2/A== X-Gm-Message-State: AOAM530XCkPAcy3JID48za0h0B0A+iOb5oafc1oDFzZY9aRySbQXdDuB /MSXROp2bNnK5R2hQoJtZ61amtHQkX8kWA== X-Received: by 2002:a17:90b:224a:b0:1e6:7780:6c8c with SMTP id hk10-20020a17090b224a00b001e677806c8cmr33843519pjb.119.1654634761029; Tue, 07 Jun 2022 13:46:01 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 02/53] semihosting: Return failure from softmmu-uaccess.h functions Date: Tue, 7 Jun 2022 13:45:06 -0700 Message-Id: <20220607204557.658541-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We were reporting unconditional success for these functions; pass on any failure from cpu_memory_rw_debug. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/semihosting/softmmu-uaccess.h | 91 ++++++++++++--------------- 1 file changed, 39 insertions(+), 52 deletions(-) diff --git a/include/semihosting/softmmu-uaccess.h b/include/semihosting/softmmu-uaccess.h index e69e3c8548..5246a91570 100644 --- a/include/semihosting/softmmu-uaccess.h +++ b/include/semihosting/softmmu-uaccess.h @@ -12,82 +12,69 @@ #include "cpu.h" -static inline uint64_t softmmu_tget64(CPUArchState *env, target_ulong addr) -{ - uint64_t val; +#define get_user_u64(val, addr) \ + ({ uint64_t val_ = 0; \ + int ret_ = cpu_memory_rw_debug(env_cpu(env), (addr), \ + &val_, sizeof(val_), 0); \ + (val) = tswap64(val_); ret_; }) - cpu_memory_rw_debug(env_cpu(env), addr, (uint8_t *)&val, 8, 0); - return tswap64(val); -} +#define get_user_u32(val, addr) \ + ({ uint32_t val_ = 0; \ + int ret_ = cpu_memory_rw_debug(env_cpu(env), (addr), \ + &val_, sizeof(val_), 0); \ + (val) = tswap32(val_); ret_; }) -static inline uint32_t softmmu_tget32(CPUArchState *env, target_ulong addr) -{ - uint32_t val; +#define get_user_u8(val, addr) \ + ({ uint8_t val_ = 0; \ + int ret_ = cpu_memory_rw_debug(env_cpu(env), (addr), \ + &val_, sizeof(val_), 0); \ + (val) = val_; ret_; }) - cpu_memory_rw_debug(env_cpu(env), addr, (uint8_t *)&val, 4, 0); - return tswap32(val); -} - -static inline uint32_t softmmu_tget8(CPUArchState *env, target_ulong addr) -{ - uint8_t val; - - cpu_memory_rw_debug(env_cpu(env), addr, &val, 1, 0); - return val; -} - -#define get_user_u64(arg, p) ({ arg = softmmu_tget64(env, p); 0; }) -#define get_user_u32(arg, p) ({ arg = softmmu_tget32(env, p) ; 0; }) -#define get_user_u8(arg, p) ({ arg = softmmu_tget8(env, p) ; 0; }) #define get_user_ual(arg, p) get_user_u32(arg, p) -static inline void softmmu_tput64(CPUArchState *env, - target_ulong addr, uint64_t val) -{ - val = tswap64(val); - cpu_memory_rw_debug(env_cpu(env), addr, (uint8_t *)&val, 8, 1); -} +#define put_user_u64(val, addr) \ + ({ uint64_t val_ = tswap64(val); \ + cpu_memory_rw_debug(env_cpu(env), (addr), &val_, sizeof(val_), 1); }) + +#define put_user_u32(val, addr) \ + ({ uint32_t val_ = tswap32(val); \ + cpu_memory_rw_debug(env_cpu(env), (addr), &val_, sizeof(val_), 1); }) -static inline void softmmu_tput32(CPUArchState *env, - target_ulong addr, uint32_t val) -{ - val = tswap32(val); - cpu_memory_rw_debug(env_cpu(env), addr, (uint8_t *)&val, 4, 1); -} -#define put_user_u64(arg, p) ({ softmmu_tput64(env, p, arg) ; 0; }) -#define put_user_u32(arg, p) ({ softmmu_tput32(env, p, arg) ; 0; }) #define put_user_ual(arg, p) put_user_u32(arg, p) -static void *softmmu_lock_user(CPUArchState *env, - target_ulong addr, target_ulong len, int copy) +static void *softmmu_lock_user(CPUArchState *env, target_ulong addr, + target_ulong len, bool copy) { - uint8_t *p; - /* TODO: Make this something that isn't fixed size. */ - p = malloc(len); + void *p = malloc(len); if (p && copy) { - cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0); + if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) { + free(p); + p = NULL; + } } return p; } #define lock_user(type, p, len, copy) softmmu_lock_user(env, p, len, copy) + static char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) { - char *p; - char *s; - uint8_t c; /* TODO: Make this something that isn't fixed size. */ - s = p = malloc(1024); + char *s = malloc(1024); + size_t len = 0; + if (!s) { return NULL; } do { - cpu_memory_rw_debug(env_cpu(env), addr, &c, 1, 0); - addr++; - *(p++) = c; - } while (c); + if (cpu_memory_rw_debug(env_cpu(env), addr++, s + len, 1, 0)) { + free(s); + return NULL; + } + } while (s[len++]); return s; } #define lock_user_string(p) softmmu_lock_user_string(env, p) + static void softmmu_unlock_user(CPUArchState *env, void *p, target_ulong addr, target_ulong len) { From patchwork Tue Jun 7 20:45:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579391 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5546229max; Tue, 7 Jun 2022 14:59:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwq5qLC3BGVJ52hyMtLOS4EkCJY4cSeU9yd0Tl4y7qi8vOzN1rD57ZV65vR4QtXGF0uGHFv X-Received: by 2002:a05:620a:44c9:b0:6a3:a865:424a with SMTP id y9-20020a05620a44c900b006a3a865424amr21392177qkp.219.1654639162291; Tue, 07 Jun 2022 14:59:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639162; cv=none; d=google.com; s=arc-20160816; b=REx+kcCnYTdVcLu1ZrXzlSBt4JoqPryk48y/XYqX3Lzmz51pkZgp6EeiLU9iVVhI/h ckS0IJ9rNHyhv4tFOgybOKfm6Tu2mQx7qte0SgXwxizLhTvlC36lT1yRnVjN7VSqhBxt 0UIaWeuW7qfm09CCJS8LQF2rB32zcFioYBFdhQ5SkNkw/olNVogTrFES4CwQrVAqgw+j aO8cz8Tf8BYrhqm+lAmYYXn2MvnmtXYlmU08DmWqiyO5IeYJwQdMn6e2QSXbstFgz4JB ImGvey1JG3b5EdWt1ehwJxaPOqZPCb4firQ/3me1mZISDsvB81l2Q3QGqLy/h50ezJxv HESA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=+d9/jr06nswWZQd9Uw/cJzKLCMbhQR5Mz1vx++OuQjc=; b=PH1iCHmX2APndpCTAKxDknlsr/LBtNF8+Gd3OvL1y7a+YpN93SfuEIvhWYqP9ETsSz LTLi/cRrAwrYs87UTFy3seDPHUA2zulKcrNsR2H+v95/9HZfTVrIhvTzPxuEqO5cFIIq GCwkAJs97RSc3YWOuk+ZkbsqSfp3ZXjVWgauupeoykiAbW3P/QuouH9cQsN9ncwXF6e2 bhNo8FqDCCffcUmA58QXcUsWuo6VzYQna7DYlUuGeeTWQuhLTBZ6uDKyxXFSvJh09QrX 9ZJMk16KlOeSU7Oi9vT/KjQILEFCQrgOVVLSTqWaDDV19+YZCsxNe6WD/QHfEDdP3uxQ Di/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=oxa3mn+G; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id c11-20020a05622a024b00b002ff54984aa3si9478262qtx.429.2022.06.07.14.59.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 14:59:22 -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; dkim=pass header.i=@linaro.org header.s=google header.b=oxa3mn+G; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:50934 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhEP-0006wF-Sc for patch@linaro.org; Tue, 07 Jun 2022 17:59:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38760) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5Z-000782-OT for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:38692) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5U-0001JF-Eb for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: by mail-pg1-x52f.google.com with SMTP id 123so6615391pgb.5 for ; Tue, 07 Jun 2022 13:46:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+d9/jr06nswWZQd9Uw/cJzKLCMbhQR5Mz1vx++OuQjc=; b=oxa3mn+GxfVm296cfiN3atYUva8v4/CQoriD+HFveSiqJFKSaEmv3oVGmCDWjoTGxC XhQxxjjvJH+veVIQrkFsoIkDGZ9irSRh9dD89F9ffwhi5cofMalXclwZTXVu/Z4Qv8vz A0A4s1vaItTG+N0kL6oX25QL4LWMoFd4S3VXCv3zz1U1qolOntA/QfX8pPfemM2TYrsu GMFnc8qahdlCnRNj5xFY5Xz41stkqLy+OV9forniZhtUCsd2BN5yi+WGqs4YXjZgz9aV SKNfoOh3TkdXtb3H3xwKrrjfYldvOCeE5/MO20qIJq9u2Hrp47RfUj19pLL0GbPomp4j eiTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+d9/jr06nswWZQd9Uw/cJzKLCMbhQR5Mz1vx++OuQjc=; b=32WtIWXQBMSUXtug+bwhutGlYjiTJAr2CMNmpc3a+KKvjcI65IEOPBCNTNpgLZF/Hl yZlg4/ZZOV2bqQMRhDS9zrSQkuh9Av4js09WdmEMGaoKVKrAlgWepB8FHIXuV63wXZVa rWzsdiGEn0WSg53+L1IJi2MLDTPXUgo9so6h2J1CEracUj/bh4H9Ww9bx20i2LZxytOZ akCwGpnuts+7MwZvWypq3iMyHLR6Wk1T8pQTKWE3YLdNJm130N7qtynaMriOFi/7/+IP xHOYhejgquLDPjx+kySPTrcLf7b0m4Gqff46YkVrh7+kUfakuSzbh9mg3FLIiD0wd75D BQ2w== X-Gm-Message-State: AOAM532lBUB/qyWjXK5l3eeVUhC9r0QHDOxVr+vxSNgVgwonoaUn6IRu t8TR1tBNXcn2NccjLrbYl90ruPkuQsxFDg== X-Received: by 2002:a05:6a00:2403:b0:4fd:e84a:4563 with SMTP id z3-20020a056a00240300b004fde84a4563mr31429780pfh.60.1654634761933; Tue, 07 Jun 2022 13:46:01 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 03/53] semihosting: Improve condition for config.c and console.c Date: Tue, 7 Jun 2022 13:45:07 -0700 Message-Id: <20220607204557.658541-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" While CONFIG_SEMIHOSTING is currently only set for softmmu, this will not continue to be true. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- semihosting/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semihosting/meson.build b/semihosting/meson.build index ea8090abe3..4344e43fb9 100644 --- a/semihosting/meson.build +++ b/semihosting/meson.build @@ -1,4 +1,4 @@ -specific_ss.add(when: 'CONFIG_SEMIHOSTING', if_true: files( +specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_SOFTMMU'], if_true: files( 'config.c', 'console.c', )) From patchwork Tue Jun 7 20:45:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579403 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5557172max; Tue, 7 Jun 2022 15:12:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzh8Rv4NQnv76rH2RfLMTyq9HA6aeY0tMnvyGpGhsR6cVbHd5lP6/RQZBeX66vvEvPbJHdZ X-Received: by 2002:a05:6214:1150:b0:464:4bd3:e931 with SMTP id b16-20020a056214115000b004644bd3e931mr23601377qvt.32.1654639977708; Tue, 07 Jun 2022 15:12:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639977; cv=none; d=google.com; s=arc-20160816; b=aRXGbVTP0F4icQW6FqECrvhVjLQYvt9h9GY+zkkaCzd1S8Ow4om89Qb9AwszeDw4hR 1YZAi2+NvkdGaD4OPPlTjY3cWAkJBAviGtbIFQsh98qyvd0wY6N2LlPFGGTXusn5Bw8H IL57WpiN/HAQjRjT7jIe3JB6hLXRwlA8h/lKJXoN4NPAXDdZY1dwRjCkfT4OVrptJVwb Z1PIzSs9HwDcE6RZK4j27ASTTGhHgrWMH555dnjxo39RTP5cg0jFp79M3fh/e+tpiz50 TvW1Zaz2FasK/AG30vynmvn3tJeVMfGVubIRzqbEF7Ys/InRzZwggI74gv4HDY3CKSOC h6Rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=UtCh1R/o+jWczZ2gQY+9f4Xav0T6t+bxgoxTR2mENvU=; b=qqXoPcyUCJXhtfczqjuWZsVNYw/Y9rUHwmmubPUjVJ/DO//o0KctTAZjAp7LUw0HES aFHZwD1aVkrgOcc9+kafrFxuK/twbT4qMTibBbVPa5KzN8+MQz+2moejESX9aUCfVVFF vY9VZB5gjQbNpR9g+bHW+w7gp1Ml0zfj/IeVQikHKZUWIKNYGLEtF7OwIQfagPcVFzad ++Xbh/IqajdjW0bI/AIbXFUNY2vTV8OmM9Bz2UAb3Wr6mZSo72Kj3ks1uWl3RTJl8lVg OFYVJlVBGbSWZgz/CjkvY3ZL1CeBDe44B+cWyEwBh5zuFogqiYbW0zerMESIR+QszWWX zkxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="n/e/3Ibe"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id dv7-20020a05620a1b8700b0069fe1e839c2si3237259qkb.431.2022.06.07.15.12.57 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:12:57 -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; dkim=pass header.i=@linaro.org header.s=google header.b="n/e/3Ibe"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:48842 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhRZ-00017P-6T for patch@linaro.org; Tue, 07 Jun 2022 18:12:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38968) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5i-0007Ge-4l for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:21 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]:35282) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5f-0001MQ-6I for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:17 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-f16a3e0529so24734200fac.2 for ; Tue, 07 Jun 2022 13:46:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UtCh1R/o+jWczZ2gQY+9f4Xav0T6t+bxgoxTR2mENvU=; b=n/e/3Ibejdwwzk0fO9KDgg5tUdov9K9Py04g5FCk6aVT3+lAH+sd5mOKPHIegAVvOo VvCRN0PwczvP9YXuz3F9IW9ENQHXSVZpnmtT24STLI2upJhmR8xcb2+EII+Ihrkon5PU pjPPH8F98wigudDpmlhdnap4eTZWypn1BttvE7AOOn7RqFEprFuwCUk5Vshvi+whfNw4 HJtH+wrunihnjMM7BigqKB7eDTU0/IzQmYYyQn5C9WsvR8nj+G9ehEHtUQOIQYOM8gOf zjGKaLDRmdTo05BFD975TO9hLIyycic83lsy8VBvHpWCYSiEyPwdMA10PO4RC9yMtPQY CW5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UtCh1R/o+jWczZ2gQY+9f4Xav0T6t+bxgoxTR2mENvU=; b=OyAhGmEueg0PXNh209s5plJSzqPyi5xkYdlpTyrQrKQjr9ChFZVcSfwJXhqTOQYO31 Q+mt/xOcftQNnJEvGVV8LbjNMpzOlPRSZQprQp6uAhS2mJB7j5JxfpRDOc+6Q2bQh1EM DwV+dlc9XrVj0hM08k8GKQWlHla0YdblQCdCalBUlYN4JoqNxllowbnqmDGRvsqH57KO 9yGauCALp5L3TMx3e05rHj6MKOOFn/tuyWAqVbm15fYwv7fl8kRG4TqsiUTKHopg7wzZ JNf9BOhbLu4DA98WBsRZ0lol4vldIz34OivgBPbzxN1W5x5oBbixZdyvQl3gktBRLs3B y3Uw== X-Gm-Message-State: AOAM533MsJ0pNf2yRbJHlc5z+GeZ6jRWsx+qUPETY5ExxTzvy5XhEFuH 0N5ikE2NKuViX+RVsFPp9AeaVysxoyescA== X-Received: by 2002:a17:90b:4b83:b0:1e3:3ad3:612c with SMTP id lr3-20020a17090b4b8300b001e33ad3612cmr42630612pjb.87.1654634762685; Tue, 07 Jun 2022 13:46:02 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 04/53] semihosting: Move softmmu-uaccess.h functions out of line Date: Tue, 7 Jun 2022 13:45:08 -0700 Message-Id: <20220607204557.658541-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2001:4860:4864:20::33; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x33.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Rather that static (and not even inline) functions within a header, move the functions to semihosting/uaccess.c. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/semihosting/softmmu-uaccess.h | 42 +++------------------- semihosting/uaccess.c | 51 +++++++++++++++++++++++++++ semihosting/meson.build | 1 + 3 files changed, 57 insertions(+), 37 deletions(-) create mode 100644 semihosting/uaccess.c diff --git a/include/semihosting/softmmu-uaccess.h b/include/semihosting/softmmu-uaccess.h index 5246a91570..03300376d3 100644 --- a/include/semihosting/softmmu-uaccess.h +++ b/include/semihosting/softmmu-uaccess.h @@ -42,47 +42,15 @@ #define put_user_ual(arg, p) put_user_u32(arg, p) -static void *softmmu_lock_user(CPUArchState *env, target_ulong addr, - target_ulong len, bool copy) -{ - void *p = malloc(len); - if (p && copy) { - if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) { - free(p); - p = NULL; - } - } - return p; -} +void *softmmu_lock_user(CPUArchState *env, target_ulong addr, + target_ulong len, bool copy); #define lock_user(type, p, len, copy) softmmu_lock_user(env, p, len, copy) -static char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) -{ - /* TODO: Make this something that isn't fixed size. */ - char *s = malloc(1024); - size_t len = 0; - - if (!s) { - return NULL; - } - do { - if (cpu_memory_rw_debug(env_cpu(env), addr++, s + len, 1, 0)) { - free(s); - return NULL; - } - } while (s[len++]); - return s; -} +char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr); #define lock_user_string(p) softmmu_lock_user_string(env, p) -static void softmmu_unlock_user(CPUArchState *env, void *p, target_ulong addr, - target_ulong len) -{ - if (len) { - cpu_memory_rw_debug(env_cpu(env), addr, p, len, 1); - } - free(p); -} +void softmmu_unlock_user(CPUArchState *env, void *p, + target_ulong addr, target_ulong len); #define unlock_user(s, args, len) softmmu_unlock_user(env, s, args, len) #endif /* SEMIHOSTING_SOFTMMU_UACCESS_H */ diff --git a/semihosting/uaccess.c b/semihosting/uaccess.c new file mode 100644 index 0000000000..0d3b32b75d --- /dev/null +++ b/semihosting/uaccess.c @@ -0,0 +1,51 @@ +/* + * Helper routines to provide target memory access for semihosting + * syscalls in system emulation mode. + * + * Copyright (c) 2007 CodeSourcery. + * + * This code is licensed under the GPL + */ + +#include "qemu/osdep.h" +#include "semihosting/softmmu-uaccess.h" + +void *softmmu_lock_user(CPUArchState *env, target_ulong addr, + target_ulong len, bool copy) +{ + void *p = malloc(len); + if (p && copy) { + if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) { + free(p); + p = NULL; + } + } + return p; +} + +char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) +{ + /* TODO: Make this something that isn't fixed size. */ + char *s = malloc(1024); + size_t len = 0; + + if (!s) { + return NULL; + } + do { + if (cpu_memory_rw_debug(env_cpu(env), addr++, s + len, 1, 0)) { + free(s); + return NULL; + } + } while (s[len++]); + return s; +} + +void softmmu_unlock_user(CPUArchState *env, void *p, + target_ulong addr, target_ulong len) +{ + if (len) { + cpu_memory_rw_debug(env_cpu(env), addr, p, len, 1); + } + free(p); +} diff --git a/semihosting/meson.build b/semihosting/meson.build index 4344e43fb9..10b3b99921 100644 --- a/semihosting/meson.build +++ b/semihosting/meson.build @@ -1,6 +1,7 @@ specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_SOFTMMU'], if_true: files( 'config.c', 'console.c', + 'uaccess.c', )) specific_ss.add(when: ['CONFIG_ARM_COMPATIBLE_SEMIHOSTING'], From patchwork Tue Jun 7 20:45:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579400 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5554432max; Tue, 7 Jun 2022 15:09:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzKluO329cr8ZiZHWIHC/4VQyC7LCykyB16Q0cIqSQEsICVYEz6PC5IvsfS6gtKUmkG0H6V X-Received: by 2002:a05:622a:1207:b0:305:1a:ffa8 with SMTP id y7-20020a05622a120700b00305001affa8mr1115509qtx.654.1654639751891; Tue, 07 Jun 2022 15:09:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639751; cv=none; d=google.com; s=arc-20160816; b=iz3yMl1mTv4alRY5mksrgRaLZXtJh7kllEplCbE861uUb/xexifSBEyEkniAI5l62u 4ZUpwPk+DxUQeypd1df+rav/0H9PLS4LT43LyuHrixA+5+0vbSnFBz+hBQgJBWbNz+nE p84slOWc+BefMzDl6WoT0qPbsUMAvNnVzEtS26KfjEkDE1WjYVle2gvhTAlltFvfMxxy n7wONxqhQekW2JrH9MGCMyFVW0o49XU73pplg+vSZ38SUZDdnqIpBboWsDHADqUBxY3T FlK1EeeYC91PqTGbgl/IM2g/OIRpm1rNbboT8cz79+NMnH/QAxQW6FY9jlviaGgubMIi RjtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=cs+FpLBc0ayQh/IFdv2ROEUbtJo92UQIPCLnKIxQZ6k=; b=P83FSQY3hR0ndFnUDUKFx1R8OqfxD2F++4qUHRXepDeyH7raIB2qwdTofOLtmPubjh hruvtd2Am8S92wj/lH84bVjcB4e68fqxKJyML6qE7i240plBcC0jACu74jiURlSOK3ao KmRjphhtLgIFWbhmi/+Bku/P54kHYeOVO7OapIkO0ocZaW0Wk62fI9oqX9peMmwnOa0o H01Nsm9wYWU0VxqDDXdfHwzbYuXTzcLm6XzzAduo5ZhJnqnO2Z/ZUnbiw4ELhyYtOIh/ bQXcGV0sr8NBH6HYzt3wd0LHU4HH88ync3ubMQn0QqK6eOKsCPDmuKDlgd5U9Pqg+cGr 2z1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ntEBiMT7; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id bm34-20020a05620a19a200b006a6b54c0c8bsi4845160qkb.614.2022.06.07.15.09.11 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:09:11 -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; dkim=pass header.i=@linaro.org header.s=google header.b=ntEBiMT7; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:41594 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhNv-0003rC-G9 for patch@linaro.org; Tue, 07 Jun 2022 18:09:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38756) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5Z-00077L-LF for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:40890) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5U-0001JY-Qa for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: by mail-pg1-x52c.google.com with SMTP id f65so6779229pgc.7 for ; Tue, 07 Jun 2022 13:46:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=cs+FpLBc0ayQh/IFdv2ROEUbtJo92UQIPCLnKIxQZ6k=; b=ntEBiMT71L5CDVs0otSt3lsAjjuU8P/2cIbA99lmygx/p9nPzC4vd16KjHy+Vv0uv6 UZoLZ3NQxrwoD+eaxAqIjZd0nx2Dr0Z7T2OPCnWXJrAuU+GE37LCAzKn6+kFNO9dEuoa ff16gPLbjWWP71WIMf4ujr2A5/VxBZCkWab1SKoDEIMxdKTickTpehDCfXN98Q2SO3vW M44h+I4JzMtPDByyScWhiV85LD28CZJYHIjLFAv8nSHz+ymQTFWrAlL1pwvcRWDOKwzK hHkPR9Zz4amDioWWNcEjJVUif4V6s+cGsGLdIueN6ihOt0rTRB9P93SsOEO5Yz+lEC+R J6BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cs+FpLBc0ayQh/IFdv2ROEUbtJo92UQIPCLnKIxQZ6k=; b=z/WCzFvM2N79frEG29v/yj1x0sgFtXoW/5cZetUis45IiGhc/H5n+ANUckvRu6vVe1 rZkw8X1nWdnw7dqTHso1L16wnLAA0RmGZlpSPFw855UFNWxV3dXLaWGqyHj4tll3VzAF zyU7mHXJe8luvtl2/qQYHCEOlUSnnBTN3cyn4vNloxdZW9hj6HXIeM/7Ki4aRLT+eR8b 8Ac94LE4kLRTisOmVPwO0KMw5NdxqB8RshcD+ZMGm4GQNTXgIgBXwl7J9ZZuN80c8SbF x4vXhTNsF0MsfJVNQC1vNnT+i4+B6ksDKH/U4CdDUp3VGXiJbmLQ4zpJQA6Zwl4zB+FH R9JQ== X-Gm-Message-State: AOAM532ifUJQsUP05amPQ4uuTWdgN+zphd8Tvr9S0Ev6DHYbdpxNOvyp 3veQw4ariFipEh8x18WCr691TXpI4CKcBQ== X-Received: by 2002:a65:4c41:0:b0:3f5:cf9f:283b with SMTP id l1-20020a654c41000000b003f5cf9f283bmr27229206pgr.301.1654634763515; Tue, 07 Jun 2022 13:46:03 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 05/53] accel/stubs: Add tcg stub for probe_access_flags Date: Tue, 7 Jun 2022 13:45:09 -0700 Message-Id: <20220607204557.658541-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- accel/stubs/tcg-stub.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/accel/stubs/tcg-stub.c b/accel/stubs/tcg-stub.c index ea4a0dd2fb..6ce8a34228 100644 --- a/accel/stubs/tcg-stub.c +++ b/accel/stubs/tcg-stub.c @@ -21,6 +21,13 @@ void tlb_set_dirty(CPUState *cpu, target_ulong vaddr) { } +int probe_access_flags(CPUArchState *env, target_ulong addr, + MMUAccessType access_type, int mmu_idx, + bool nonfault, void **phost, uintptr_t retaddr) +{ + g_assert_not_reached(); +} + void *probe_access(CPUArchState *env, target_ulong addr, int size, MMUAccessType access_type, int mmu_idx, uintptr_t retaddr) { From patchwork Tue Jun 7 20:45:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579405 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5560774max; Tue, 7 Jun 2022 15:18:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyCAq9I/BWBKyTxaMAlWiMTkuXjgdzv+PkEGDENSU51SsHQQG9VEk66Sbyf+R9egpRehjFC X-Received: by 2002:ad4:4ae9:0:b0:467:de78:dfb3 with SMTP id cp9-20020ad44ae9000000b00467de78dfb3mr18744740qvb.77.1654640283883; Tue, 07 Jun 2022 15:18:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640283; cv=none; d=google.com; s=arc-20160816; b=OswEeGoOLtM6dw/TI33l7PSRnCWwPjVwWBEzSpJZq8JMducjpPzsg1p+0+M9A/nlUY sf1TyvLnNTJvyhUc1VVJyzJtjA5khQMtdlo21tnpNG3dVBty8f1XUqCPrcQTtwuICJ+T g/7wGwKkFQb6K3iW2AV55uRIAsjQVRRMhfV40Idv/pxvdzPYoG9KdUKqzu3A+atJ92Sm cLy4l5FHvUlvYBqm+Ylvy9Ig+1e/odY4KiW+rWdekcJkPhMlKBC5nKDz75sJSlWl8m+a lfgKmvtINK1kcA4R5ACeHdmiFPNFSlPs3epRX/BR6Xf3/XUFx+aLRACKW9gjFDYh7LnO 2cKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=RK5M0Iz9OI0w9+qLU0kfHIVs85xFEebhwh/ygRwPj/8=; b=S8HftNhi9SqbeSGnhWiMFPB2e6GHcon6E/teTVGl24smpEDbLDcd+imRO37JmFPHgE 5svW+HhyMjWlU2qiDU/CzalXuaZzQ54LfJuXOmj3LxaiYcOPVfNWo23SPQOjgOJNirxj CY1JBK5kinLaBhcyRnscGYtwMgAcBfYe+lSkfaqdU6Urk1NLah9E+ImuzH6EA5NZU3pW BaGHyLopzLSc4n4YdzlcSdxfYOVf5xCYNXK3h76dZ6qP5CLRonrYcQmSj2gGp51aB1AD S6Pkj/nc70KEHVSKluhNZ4+4gkdJgNFFE9DNFrPwwP97edbQFsvmjoTfBAtHZqxzAOCb YJbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MMBZPsXY; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id fq13-20020a056214258d00b00461f5e48232si10637120qvb.320.2022.06.07.15.18.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:18: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; dkim=pass header.i=@linaro.org header.s=google header.b=MMBZPsXY; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:52932 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhWV-0004xk-2l for patch@linaro.org; Tue, 07 Jun 2022 18:18:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38770) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5Z-000789-Q8 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:41974) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5V-0001J4-A7 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: by mail-pf1-x430.google.com with SMTP id p8so16526537pfh.8 for ; Tue, 07 Jun 2022 13:46:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RK5M0Iz9OI0w9+qLU0kfHIVs85xFEebhwh/ygRwPj/8=; b=MMBZPsXYmM6XJJ+aG7cEo5GCutXmUIDRixJee7hzlfDkcOlUHyFYgOPXZNy4z2Anvg 8vbgHplRfGGJcByPSzmdpEkM3xMQKDHYLpi9MKcs20LKU49ipTue1WU7U3rwltu7c7Wm ajpB++4hX+AKgTDiyrmBHuCZNkzg0jdmEZ3ahwcWfD4DToCLwdwScfCxRUoLOAi5jCv8 Y1jnsUoiEDySRsYhoN8OjcHbwZ9diaa9nqUSdC6w5aQpwRC7dmP4EMvOh69cCVLmlZZ0 C2mSbw4OPANHn+s228Qp2l9SUE4rIlo89SGh/aKnQPo0EgLehxDpv2xHET8dj1StjP2H qjVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RK5M0Iz9OI0w9+qLU0kfHIVs85xFEebhwh/ygRwPj/8=; b=tOufjB2w65u0qD56VxXbwPY8yDszo2UUBzZHf2X+CVRHjkap1cO2+dhBI6EzXI8l0k FHzagfkseGSc1/fvV6/vfaVVB+zmAykWcHts4gqTwdUy3+71lYAAcA7+E9DaPI9b/6l+ 8lZhpZYCG5Oi7vSkCLyOt/sbAKL9eg/XzuysqnzFMaBmy68Van5YMFm5J9J1+Ht4GHSS ka9QbFZH06Y4SA1nBhk31Gswz8uahfhdVPQhtxmhvoACEdNwrA315DjqWU1YjodU0nrb FGuoJIEM4vzJZ3YCU/fecCySJhX84xege91X4WSYfNOxcn1lDxObTUbf7XSHsZ6/xoQJ k02Q== X-Gm-Message-State: AOAM531u85/ijXLnMdpmE40zuQrnocIDGzEvnkNEBKVZMvgHbI/Ufk16 /Z6v26HW81JwFyM8ubWzXwkslQAqf3Qvgw== X-Received: by 2002:a05:6a00:1f1a:b0:51b:fac8:e00c with SMTP id be26-20020a056a001f1a00b0051bfac8e00cmr18055349pfb.26.1654634764547; Tue, 07 Jun 2022 13:46:04 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 06/53] semihosting: Add target_strlen for softmmu-uaccess.h Date: Tue, 7 Jun 2022 13:45:10 -0700 Message-Id: <20220607204557.658541-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Mirror the interface of the user-only function of the same name. Use probe_access_flags for the common case of ram, and cpu_memory_rw_debug for the uncommon case of mmio. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- v3: Use probe_access_flags (pmm) --- include/semihosting/softmmu-uaccess.h | 3 ++ semihosting/uaccess.c | 49 +++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/include/semihosting/softmmu-uaccess.h b/include/semihosting/softmmu-uaccess.h index 03300376d3..4f08dfc098 100644 --- a/include/semihosting/softmmu-uaccess.h +++ b/include/semihosting/softmmu-uaccess.h @@ -53,4 +53,7 @@ void softmmu_unlock_user(CPUArchState *env, void *p, target_ulong addr, target_ulong len); #define unlock_user(s, args, len) softmmu_unlock_user(env, s, args, len) +ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr); +#define target_strlen(p) softmmu_strlen_user(env, p) + #endif /* SEMIHOSTING_SOFTMMU_UACCESS_H */ diff --git a/semihosting/uaccess.c b/semihosting/uaccess.c index 0d3b32b75d..d6997e3c65 100644 --- a/semihosting/uaccess.c +++ b/semihosting/uaccess.c @@ -8,6 +8,7 @@ */ #include "qemu/osdep.h" +#include "exec/exec-all.h" #include "semihosting/softmmu-uaccess.h" void *softmmu_lock_user(CPUArchState *env, target_ulong addr, @@ -23,6 +24,54 @@ void *softmmu_lock_user(CPUArchState *env, target_ulong addr, return p; } +ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr) +{ + int mmu_idx = cpu_mmu_index(env, false); + size_t len = 0; + + while (1) { + size_t left_in_page; + int flags; + void *h; + + /* Find the number of bytes remaining in the page. */ + left_in_page = TARGET_PAGE_SIZE - (addr & ~TARGET_PAGE_MASK); + + flags = probe_access_flags(env, addr, MMU_DATA_LOAD, + mmu_idx, true, &h, 0); + if (flags & TLB_INVALID_MASK) { + return -1; + } + if (flags & TLB_MMIO) { + do { + uint8_t c; + if (cpu_memory_rw_debug(env_cpu(env), addr, &c, 1, 0)) { + return -1; + } + if (c == 0) { + return len; + } + addr++; + len++; + if (len > INT32_MAX) { + return -1; + } + } while (--left_in_page != 0); + } else { + char *p = memchr(h, 0, left_in_page); + if (p) { + len += p - (char *)h; + return len <= INT32_MAX ? (ssize_t)len : -1; + } + addr += left_in_page; + len += left_in_page; + if (len > INT32_MAX) { + return -1; + } + } + } +} + char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) { /* TODO: Make this something that isn't fixed size. */ From patchwork Tue Jun 7 20:45:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579404 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5558077max; Tue, 7 Jun 2022 15:14:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwA66lDhZXQD9u2E1w/T+i6Xblr6+EiedbhGn0iqsKiFF3leBFkOtbj/OVQWEjFB5JHnRLd X-Received: by 2002:ac8:5752:0:b0:304:c7db:2cde with SMTP id 18-20020ac85752000000b00304c7db2cdemr24239181qtx.291.1654640058234; Tue, 07 Jun 2022 15:14:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640058; cv=none; d=google.com; s=arc-20160816; b=ySyjxxHzVUPneXgTqPrAa37gPYpfFWL2aetURGQg64NGwnlhgk7T2OCEcbb+gItg7C zhHr5Vd1t9Z2JJ7f9Atn4IYdiZavClVqxWmNiYhuJIkQIQKpUTiPP6vjJhpQ3E//b8SX Es7SakkC13FxeWHT/8/ssvGnWKeMdnl19vr6LSptLP7XoUmdgagEDAiEwuXGHnRXzxSS ZpMq8djHXy1QKCGH/BxTHvsL2+ov8hTPHsd4IXTf5Y/5chE2pvLjsG48NtVuU/USVfYh OieIzK5iYMlxyB+7arFnN37MomQOd+gkT11objHHLiy8sAFc2KqlYwhanoGFxt2tvnzP G85Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=/8kHpTuA8EYvqEwEVmTpwAp8qVVL2ZJoscaVrRBS+xo=; b=t6+fg/1tyt+AtBEIG6qheLX2FAIkm4dK2cgF9f6pYjwI2p48B/7+ycd8L5rmJRR2wP rXp3HtQ41KfjxENnzrx9N5ND3ufi4UhRd7sUGMVV0qGna6ZIkVA6VkdoVFfBEvw2XLQW nLJIWRlFmcIUPXtkxXdlOGqup16uWBvYQkKfB9+4IxMwbms20y1u3V+Wp4qAxFTU+omM OoUvyJSSHZHRVnXsYWMhFLN9pY3//s2kgcOztSEA7JBhwbsKvvAmMnwJyAWx1N44fR6T mi9X/4/AR2EPUYqCZAONvqrDyc7kaKoWjZVuO7iFIYeFLtWNPwEo9Ca4Ldpitp2cTJR7 rLtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=yqVFEj56; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id l9-20020a05620a28c900b006a3015d862fsi11394882qkp.73.2022.06.07.15.14.18 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:14:18 -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; dkim=pass header.i=@linaro.org header.s=google header.b=yqVFEj56; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:50030 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhSr-00026Y-BQ for patch@linaro.org; Tue, 07 Jun 2022 18:14:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38764) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5Z-000785-Oy for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:43813) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5W-0001Jp-NS for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:09 -0400 Received: by mail-pl1-x634.google.com with SMTP id b5so15803839plx.10 for ; Tue, 07 Jun 2022 13:46:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/8kHpTuA8EYvqEwEVmTpwAp8qVVL2ZJoscaVrRBS+xo=; b=yqVFEj56Ji6vQbLKuRMIndv7VNpzqUqPm867XRuvxeGElqSwuxmJ5Qs2fnQabrK4bb +bvAwsB03PBKCDEiJuHj5adtdyT8TqTvd3EHYEIVQFUfbzdxR652jYyc+1hCXV0jPSoM guvuXY7UUGnDlv2bYYNI9Etb+egO9QvLyA7jvG1HVzCNQrPQGvspaHxJynVuQfvMe2ku mya7+eNfv97NfZtWzsupGBMHM/dtUz6JY9xr+gS9FTnLNyRB9QCsTk4a3UdQS/sl4Pbo muuYildYxYqZmyDIvgaFhDK//ulxRopjnniji+vqgTuOg0lOxNU13JBRVbpmdGQtav4T 1cQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/8kHpTuA8EYvqEwEVmTpwAp8qVVL2ZJoscaVrRBS+xo=; b=QB1QLmh5CfRK0ToVUQG7ADz4YhEIxUUyCowd1/Hp9hALhvUBHVsxeXYAb6rddxAK8s EGYagnpLmLq59JY09kAO4znvuKynDI9cIN4xp5FSU5SpMJrK/2KqNd2683UJrn0WVBIC N9WKvefpx2iV7nusgrNWFSuuvcxicKWXjCNMLZYrVIXwhSyolCvG9TIA5LygxdYceUnG vZjoNayuL6TXHTCLqIWwq6VxjCQg/fJT+jjaDQiO6wPVnK7U5mKBsIES3gLm7kNJcPb8 8lUhoN2s5YngOpfHjweuRFscp++nn0nH2wua8FlvYVpFWJw/shI/qkCqM8CztNejGTlA fJNQ== X-Gm-Message-State: AOAM532hpZMUfJgYFyQPNZzlr8GEekLAnL80f6Ds8iYEUaYfTN8udsnq BTVYFnessor9S9ScBOBbSiV42BSBt36/4Q== X-Received: by 2002:a17:902:cec8:b0:163:e4c1:b302 with SMTP id d8-20020a170902cec800b00163e4c1b302mr30892680plg.123.1654634765366; Tue, 07 Jun 2022 13:46:05 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 07/53] semihosting: Simplify softmmu_lock_user_string Date: Tue, 7 Jun 2022 13:45:11 -0700 Message-Id: <20220607204557.658541-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We are not currently bounding the search to the 1024 bytes that we allocated, possibly overrunning the buffer. Use softmmu_strlen_user to find the length and allocate the correct size from the beginning. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- semihosting/uaccess.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/semihosting/uaccess.c b/semihosting/uaccess.c index d6997e3c65..8018828069 100644 --- a/semihosting/uaccess.c +++ b/semihosting/uaccess.c @@ -74,20 +74,11 @@ ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr) char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) { - /* TODO: Make this something that isn't fixed size. */ - char *s = malloc(1024); - size_t len = 0; - - if (!s) { + ssize_t len = softmmu_strlen_user(env, addr); + if (len < 0) { return NULL; } - do { - if (cpu_memory_rw_debug(env_cpu(env), addr++, s + len, 1, 0)) { - free(s); - return NULL; - } - } while (s[len++]); - return s; + return softmmu_lock_user(env, addr, len + 1, true); } void softmmu_unlock_user(CPUArchState *env, void *p, From patchwork Tue Jun 7 20:45:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579395 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5551075max; Tue, 7 Jun 2022 15:04:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzEUuK4bpcQ38uYiAQg0u8i1UR3HzDuPvhS6nOKUinMHDpqImM4Btl1tl8Uw1uaO+SscXoi X-Received: by 2002:a05:622a:c1:b0:304:b748:be14 with SMTP id p1-20020a05622a00c100b00304b748be14mr25010709qtw.182.1654639476642; Tue, 07 Jun 2022 15:04:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639476; cv=none; d=google.com; s=arc-20160816; b=Q89HY9jxi4Jez1nuuam9hfTd5z1x1aPXJy6c1wWwNBN2cLQvjEM+IhWqePV3LousH0 q4NRSEBu2GaxT8PFqRqBu1dx50DO22+W9nQmXE4UA2aALw1ja42dZycFuS82oaQkJ8Qg EKh4OHZNI5mw86doftR6ATyqUXM0vOEyijW9Eot8pQUFsEpZjzKXlsqr9Ftq/TVEWIBH kE2Br6PQbsWscDg8xFrOevwo9f+iNflIJRrmWnZsrEX/8p71j9MijHPpGuT0NjulXaTR HOuKdLIKnYsf1kUUc2u8s/vO7OS4g7yp5OLhTNodJ22wrOvKXvulwm1OzlzxJktsduBy ilfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=rkh+LDqP33Cbq4HWpFkXCgNp8t9Pp+94sT7PUU0Lz2Q=; b=bZID6XmrzT8n/SBwMiTbKog4CvaqndX4GtsgWxVYTAkUuIMPzG93YylNLWiL/2KL8k P7MA5VyKawkGLg4gNQRzJ5D9SG24iAqPV6cN9j7T4DhkJy8/MDQB3plOjhwoXKK87a2U Zr+kk4eiaieZv1f9P+ueBnFj2w2jJXV4zHxdV1bf4anMKZv7kkeJpQklTEkK6pFim2Xh GnQsVedCf2kLx8ZC+cq3o+yOpSeeThIJGEhMn0ExPKGNsQwxMu40pLTE1ZncgJFWplHf HvpG1WYBcTSoHluyiBrFShAW7DvTBinG8ZoFBjjb6b4F8WwZquVn7umIHwQ++4TPAyXS n/Gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=izrApHPt; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id f8-20020a0562141d2800b0045aecd3df84si8907211qvd.589.2022.06.07.15.04.36 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:04:36 -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; dkim=pass header.i=@linaro.org header.s=google header.b=izrApHPt; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:59448 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhJU-0004m1-6O for patch@linaro.org; Tue, 07 Jun 2022 18:04:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5c-0007Cs-2u for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:13 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:35659) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5X-0001Jw-TU for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:11 -0400 Received: by mail-pf1-x435.google.com with SMTP id u2so16537423pfc.2 for ; Tue, 07 Jun 2022 13:46:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rkh+LDqP33Cbq4HWpFkXCgNp8t9Pp+94sT7PUU0Lz2Q=; b=izrApHPtoWeehapJRTiOaMS/z/z/GWe+PNZY5Mjn5TRwb/GGNIbaUh5b7F4RKVWJIB MwXg1D20iK/c9QGfnDhxBBMMXE8Zp8+FKaS6wFFs48vJdANe3LIlKOKlZ4g3FTYwi57B kwM38oSiJO1Vczr17EgMqVAef97hfE6rcFEL25yySFxXrrqGf/ZQSslkELtu5zO42t9B FOFZLk5yipSva4IPqBDO7TtBknLHXBvK7PA1zucEdlkaQz4PW+x5QMSUYtpHK0ZZxMcA BD4pn2n4HwPTN2swAOMAeNkRnckKtIZGLIK8h9muSVjtJYriyOPVFROjTUKbkfwBhTJU gM8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rkh+LDqP33Cbq4HWpFkXCgNp8t9Pp+94sT7PUU0Lz2Q=; b=lJ1pqhJ1qixhE7ONui9dCywLzG6IupunDqUZfthqY5foJZciXTY15uznI6lyGiEUJ1 5uBmFA7T9a+fP7h/JWf2qwq6kepaPXNdoue+rd0wOUB5oj+FB3pcVNrZRy3DcgffrgWk jYh++gvJIB9HRxWh/5S4XHvPTMNKZrYPzJcxXsLhI9O4yqUlN2rG2IxnmCHC073gIT0y zmyKyfLNsBHxh0ZJ20q93RCT4V8sQJABYMs/MHqndXjS090nc7zIqrcGV5sILpqz9yih 8QX6qDCKOnjzqdBnbIgUPGYfniIx6XvkoK1f/8DyLNAZoT8xOPeac4K+7r/psA1+mqY3 okTQ== X-Gm-Message-State: AOAM530xCYi7BQBOovJFhCpn5+7tFLZFWK3ONPZ8H/q512CDPionFDse RN6LM65BXJso3H3X1h2haJ1Prr6k1e4Dfg== X-Received: by 2002:a05:6a00:15c9:b0:51c:178:ac7e with SMTP id o9-20020a056a0015c900b0051c0178ac7emr16521101pfu.64.1654634766357; Tue, 07 Jun 2022 13:46:06 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 08/53] semihosting: Split out guestfd.c Date: Tue, 7 Jun 2022 13:45:12 -0700 Message-Id: <20220607204557.658541-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" In arm-compat-semi.c, we have more advanced treatment of guest file descriptors than we do in other implementations. Split out GuestFD and related functions to a new file so that they can be shared. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- configs/targets/aarch64-linux-user.mak | 1 + configs/targets/aarch64_be-linux-user.mak | 1 + configs/targets/arm-linux-user.mak | 1 + configs/targets/armeb-linux-user.mak | 1 + configs/targets/riscv32-linux-user.mak | 1 + configs/targets/riscv64-linux-user.mak | 1 + include/semihosting/guestfd.h | 83 +++++++++++ semihosting/arm-compat-semi.c | 164 +++------------------- semihosting/guestfd.c | 118 ++++++++++++++++ semihosting/meson.build | 4 + 10 files changed, 233 insertions(+), 142 deletions(-) create mode 100644 include/semihosting/guestfd.h create mode 100644 semihosting/guestfd.c diff --git a/configs/targets/aarch64-linux-user.mak b/configs/targets/aarch64-linux-user.mak index d0c603c54e..db552f1839 100644 --- a/configs/targets/aarch64-linux-user.mak +++ b/configs/targets/aarch64-linux-user.mak @@ -2,4 +2,5 @@ TARGET_ARCH=aarch64 TARGET_BASE_ARCH=arm TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml TARGET_HAS_BFLT=y +CONFIG_SEMIHOSTING=y CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y diff --git a/configs/targets/aarch64_be-linux-user.mak b/configs/targets/aarch64_be-linux-user.mak index 7794424745..dc78044fb1 100644 --- a/configs/targets/aarch64_be-linux-user.mak +++ b/configs/targets/aarch64_be-linux-user.mak @@ -3,4 +3,5 @@ TARGET_BASE_ARCH=arm TARGET_BIG_ENDIAN=y TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml TARGET_HAS_BFLT=y +CONFIG_SEMIHOSTING=y CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y diff --git a/configs/targets/arm-linux-user.mak b/configs/targets/arm-linux-user.mak index 3e10d6b15d..7f5d65794c 100644 --- a/configs/targets/arm-linux-user.mak +++ b/configs/targets/arm-linux-user.mak @@ -3,4 +3,5 @@ TARGET_SYSTBL_ABI=common,oabi TARGET_SYSTBL=syscall.tbl TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml TARGET_HAS_BFLT=y +CONFIG_SEMIHOSTING=y CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y diff --git a/configs/targets/armeb-linux-user.mak b/configs/targets/armeb-linux-user.mak index a249cc2e29..943d0d87bf 100644 --- a/configs/targets/armeb-linux-user.mak +++ b/configs/targets/armeb-linux-user.mak @@ -4,4 +4,5 @@ TARGET_SYSTBL=syscall.tbl TARGET_BIG_ENDIAN=y TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml TARGET_HAS_BFLT=y +CONFIG_SEMIHOSTING=y CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y diff --git a/configs/targets/riscv32-linux-user.mak b/configs/targets/riscv32-linux-user.mak index bd2f1fd497..9761618e67 100644 --- a/configs/targets/riscv32-linux-user.mak +++ b/configs/targets/riscv32-linux-user.mak @@ -2,4 +2,5 @@ TARGET_ARCH=riscv32 TARGET_BASE_ARCH=riscv TARGET_ABI_DIR=riscv TARGET_XML_FILES= gdb-xml/riscv-32bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-32bit-virtual.xml +CONFIG_SEMIHOSTING=y CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y diff --git a/configs/targets/riscv64-linux-user.mak b/configs/targets/riscv64-linux-user.mak index 4aca7662ce..cfd1fd382f 100644 --- a/configs/targets/riscv64-linux-user.mak +++ b/configs/targets/riscv64-linux-user.mak @@ -2,4 +2,5 @@ TARGET_ARCH=riscv64 TARGET_BASE_ARCH=riscv TARGET_ABI_DIR=riscv TARGET_XML_FILES= gdb-xml/riscv-64bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-64bit-virtual.xml +CONFIG_SEMIHOSTING=y CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y diff --git a/include/semihosting/guestfd.h b/include/semihosting/guestfd.h new file mode 100644 index 0000000000..ef268abe85 --- /dev/null +++ b/include/semihosting/guestfd.h @@ -0,0 +1,83 @@ +/* + * Hosted file support for semihosting syscalls. + * + * Copyright (c) 2005, 2007 CodeSourcery. + * Copyright (c) 2019 Linaro + * Copyright © 2020 by Keith Packard + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef SEMIHOSTING_GUESTFD_H +#define SEMIHOSTING_GUESTFD_H + +typedef enum GuestFDType { + GuestFDUnused = 0, + GuestFDHost = 1, + GuestFDGDB = 2, + GuestFDStatic = 3, +} GuestFDType; + +/* + * Guest file descriptors are integer indexes into an array of + * these structures (we will dynamically resize as necessary). + */ +typedef struct GuestFD { + GuestFDType type; + union { + int hostfd; + struct { + const uint8_t *data; + size_t len; + size_t off; + } staticfile; + }; +} GuestFD; + +/** + * alloc_guestfd: + * + * Allocate an unused GuestFD index. The associated guestfd index + * will still be GuestFDUnused until it is initialized. + */ +int alloc_guestfd(void); + +/** + * dealloc_guestfd: + * @guestfd: GuestFD index + * + * Deallocate a GuestFD index. The associated GuestFD structure + * will be recycled for a subsequent allocation. + */ +void dealloc_guestfd(int guestfd); + +/** + * get_guestfd: + * @guestfd: GuestFD index + * + * Return the GuestFD structure associated with an initialized @guestfd, + * or NULL if it has not been allocated, or hasn't been initialized. + */ +GuestFD *get_guestfd(int guestfd); + +/** + * associate_guestfd: + * @guestfd: GuestFD index + * @hostfd: host file descriptor + * + * Initialize the GuestFD for @guestfd to GuestFDHost using @hostfd. + */ +void associate_guestfd(int guestfd, int hostfd); + +/** + * staticfile_guestfd: + * @guestfd: GuestFD index + * @data: data to be read + * @len: length of @data + * + * Initialize the GuestFD for @guestfd to GuestFDStatic. + * The @len bytes at @data will be returned to the guest on reads. + */ +void staticfile_guestfd(int guestfd, const uint8_t *data, size_t len); + +#endif /* SEMIHOSTING_GUESTFD_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 1033e751ef..2fa7f23d8b 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -32,12 +32,13 @@ */ #include "qemu/osdep.h" - #include "semihosting/semihost.h" #include "semihosting/console.h" #include "semihosting/common-semi.h" +#include "semihosting/guestfd.h" #include "qemu/timer.h" #include "exec/gdbstub.h" + #ifdef CONFIG_USER_ONLY #include "qemu.h" @@ -123,27 +124,6 @@ static int open_modeflags[12] = { O_RDWR | O_CREAT | O_APPEND | O_BINARY }; -typedef enum GuestFDType { - GuestFDUnused = 0, - GuestFDHost = 1, - GuestFDGDB = 2, - GuestFDFeatureFile = 3, -} GuestFDType; - -/* - * Guest file descriptors are integer indexes into an array of - * these structures (we will dynamically resize as necessary). - */ -typedef struct GuestFD { - GuestFDType type; - union { - int hostfd; - target_ulong featurefile_offset; - }; -} GuestFD; - -static GArray *guestfd_array; - #ifndef CONFIG_USER_ONLY /** @@ -268,98 +248,6 @@ common_semi_sys_exit_extended(CPUState *cs, int nr) #endif -/* - * Allocate a new guest file descriptor and return it; if we - * couldn't allocate a new fd then return -1. - * This is a fairly simplistic implementation because we don't - * expect that most semihosting guest programs will make very - * heavy use of opening and closing fds. - */ -static int alloc_guestfd(void) -{ - guint i; - - if (!guestfd_array) { - /* New entries zero-initialized, i.e. type GuestFDUnused */ - guestfd_array = g_array_new(FALSE, TRUE, sizeof(GuestFD)); - } - - /* SYS_OPEN should return nonzero handle on success. Start guestfd from 1 */ - for (i = 1; i < guestfd_array->len; i++) { - GuestFD *gf = &g_array_index(guestfd_array, GuestFD, i); - - if (gf->type == GuestFDUnused) { - return i; - } - } - - /* All elements already in use: expand the array */ - g_array_set_size(guestfd_array, i + 1); - return i; -} - -/* - * Look up the guestfd in the data structure; return NULL - * for out of bounds, but don't check whether the slot is unused. - * This is used internally by the other guestfd functions. - */ -static GuestFD *do_get_guestfd(int guestfd) -{ - if (!guestfd_array) { - return NULL; - } - - if (guestfd <= 0 || guestfd >= guestfd_array->len) { - return NULL; - } - - return &g_array_index(guestfd_array, GuestFD, guestfd); -} - -/* - * Associate the specified guest fd (which must have been - * allocated via alloc_fd() and not previously used) with - * the specified host/gdb fd. - */ -static void associate_guestfd(int guestfd, int hostfd) -{ - GuestFD *gf = do_get_guestfd(guestfd); - - assert(gf); - gf->type = use_gdb_syscalls() ? GuestFDGDB : GuestFDHost; - gf->hostfd = hostfd; -} - -/* - * Deallocate the specified guest file descriptor. This doesn't - * close the host fd, it merely undoes the work of alloc_fd(). - */ -static void dealloc_guestfd(int guestfd) -{ - GuestFD *gf = do_get_guestfd(guestfd); - - assert(gf); - gf->type = GuestFDUnused; -} - -/* - * Given a guest file descriptor, get the associated struct. - * If the fd is not valid, return NULL. This is the function - * used by the various semihosting calls to validate a handle - * from the guest. - * Note: calling alloc_guestfd() or dealloc_guestfd() will - * invalidate any GuestFD* obtained by calling this function. - */ -static GuestFD *get_guestfd(int guestfd) -{ - GuestFD *gf = do_get_guestfd(guestfd); - - if (!gf || gf->type == GuestFDUnused) { - return NULL; - } - return gf; -} - /* * The semihosting API has no concept of its errno being thread-safe, * as the API design predates SMP CPUs and was intended as a simple @@ -665,22 +553,13 @@ static const uint8_t featurefile_data[] = { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; -static void init_featurefile_guestfd(int guestfd) -{ - GuestFD *gf = do_get_guestfd(guestfd); - - assert(gf); - gf->type = GuestFDFeatureFile; - gf->featurefile_offset = 0; -} - -static uint32_t featurefile_closefn(CPUState *cs, GuestFD *gf) +static uint32_t staticfile_closefn(CPUState *cs, GuestFD *gf) { /* Nothing to do */ return 0; } -static uint32_t featurefile_writefn(CPUState *cs, GuestFD *gf, +static uint32_t staticfile_writefn(CPUState *cs, GuestFD *gf, target_ulong buf, uint32_t len) { /* This fd can never be open for writing */ @@ -689,7 +568,7 @@ static uint32_t featurefile_writefn(CPUState *cs, GuestFD *gf, return set_swi_errno(cs, -1); } -static uint32_t featurefile_readfn(CPUState *cs, GuestFD *gf, +static uint32_t staticfile_readfn(CPUState *cs, GuestFD *gf, target_ulong buf, uint32_t len) { CPUArchState *env = cs->env_ptr; @@ -703,11 +582,11 @@ static uint32_t featurefile_readfn(CPUState *cs, GuestFD *gf, } for (i = 0; i < len; i++) { - if (gf->featurefile_offset >= sizeof(featurefile_data)) { + if (gf->staticfile.off >= gf->staticfile.len) { break; } - s[i] = featurefile_data[gf->featurefile_offset]; - gf->featurefile_offset++; + s[i] = gf->staticfile.data[gf->staticfile.off]; + gf->staticfile.off++; } unlock_user(s, buf, len); @@ -716,21 +595,21 @@ static uint32_t featurefile_readfn(CPUState *cs, GuestFD *gf, return len - i; } -static uint32_t featurefile_isattyfn(CPUState *cs, GuestFD *gf) +static uint32_t staticfile_isattyfn(CPUState *cs, GuestFD *gf) { return 0; } -static uint32_t featurefile_seekfn(CPUState *cs, GuestFD *gf, +static uint32_t staticfile_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) { - gf->featurefile_offset = offset; + gf->staticfile.off = offset; return 0; } -static uint32_t featurefile_flenfn(CPUState *cs, GuestFD *gf) +static uint32_t staticfile_flenfn(CPUState *cs, GuestFD *gf) { - return sizeof(featurefile_data); + return gf->staticfile.len; } typedef struct GuestFDFunctions { @@ -759,13 +638,13 @@ static const GuestFDFunctions guestfd_fns[] = { .seekfn = gdb_seekfn, .flenfn = gdb_flenfn, }, - [GuestFDFeatureFile] = { - .closefn = featurefile_closefn, - .writefn = featurefile_writefn, - .readfn = featurefile_readfn, - .isattyfn = featurefile_isattyfn, - .seekfn = featurefile_seekfn, - .flenfn = featurefile_flenfn, + [GuestFDStatic] = { + .closefn = staticfile_closefn, + .writefn = staticfile_writefn, + .readfn = staticfile_readfn, + .isattyfn = staticfile_isattyfn, + .seekfn = staticfile_seekfn, + .flenfn = staticfile_flenfn, }, }; @@ -886,7 +765,8 @@ target_ulong do_common_semihosting(CPUState *cs) errno = EACCES; return set_swi_errno(cs, -1); } - init_featurefile_guestfd(guestfd); + staticfile_guestfd(guestfd, featurefile_data, + sizeof(featurefile_data)); return guestfd; } diff --git a/semihosting/guestfd.c b/semihosting/guestfd.c new file mode 100644 index 0000000000..b6405f5663 --- /dev/null +++ b/semihosting/guestfd.c @@ -0,0 +1,118 @@ +/* + * Hosted file support for semihosting syscalls. + * + * Copyright (c) 2005, 2007 CodeSourcery. + * Copyright (c) 2019 Linaro + * Copyright © 2020 by Keith Packard + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "exec/gdbstub.h" +#include "semihosting/guestfd.h" + +static GArray *guestfd_array; + +/* + * Allocate a new guest file descriptor and return it; if we + * couldn't allocate a new fd then return -1. + * This is a fairly simplistic implementation because we don't + * expect that most semihosting guest programs will make very + * heavy use of opening and closing fds. + */ +int alloc_guestfd(void) +{ + guint i; + + if (!guestfd_array) { + /* New entries zero-initialized, i.e. type GuestFDUnused */ + guestfd_array = g_array_new(FALSE, TRUE, sizeof(GuestFD)); + } + + /* SYS_OPEN should return nonzero handle on success. Start guestfd from 1 */ + for (i = 1; i < guestfd_array->len; i++) { + GuestFD *gf = &g_array_index(guestfd_array, GuestFD, i); + + if (gf->type == GuestFDUnused) { + return i; + } + } + + /* All elements already in use: expand the array */ + g_array_set_size(guestfd_array, i + 1); + return i; +} + +/* + * Look up the guestfd in the data structure; return NULL + * for out of bounds, but don't check whether the slot is unused. + * This is used internally by the other guestfd functions. + */ +static GuestFD *do_get_guestfd(int guestfd) +{ + if (!guestfd_array) { + return NULL; + } + + if (guestfd <= 0 || guestfd >= guestfd_array->len) { + return NULL; + } + + return &g_array_index(guestfd_array, GuestFD, guestfd); +} + +/* + * Given a guest file descriptor, get the associated struct. + * If the fd is not valid, return NULL. This is the function + * used by the various semihosting calls to validate a handle + * from the guest. + * Note: calling alloc_guestfd() or dealloc_guestfd() will + * invalidate any GuestFD* obtained by calling this function. + */ +GuestFD *get_guestfd(int guestfd) +{ + GuestFD *gf = do_get_guestfd(guestfd); + + if (!gf || gf->type == GuestFDUnused) { + return NULL; + } + return gf; +} + +/* + * Associate the specified guest fd (which must have been + * allocated via alloc_fd() and not previously used) with + * the specified host/gdb fd. + */ +void associate_guestfd(int guestfd, int hostfd) +{ + GuestFD *gf = do_get_guestfd(guestfd); + + assert(gf); + gf->type = use_gdb_syscalls() ? GuestFDGDB : GuestFDHost; + gf->hostfd = hostfd; +} + +void staticfile_guestfd(int guestfd, const uint8_t *data, size_t len) +{ + GuestFD *gf = do_get_guestfd(guestfd); + + assert(gf); + gf->type = GuestFDStatic; + gf->staticfile.data = data; + gf->staticfile.len = len; + gf->staticfile.off = 0; +} + +/* + * Deallocate the specified guest file descriptor. This doesn't + * close the host fd, it merely undoes the work of alloc_fd(). + */ +void dealloc_guestfd(int guestfd) +{ + GuestFD *gf = do_get_guestfd(guestfd); + + assert(gf); + gf->type = GuestFDUnused; +} diff --git a/semihosting/meson.build b/semihosting/meson.build index 10b3b99921..d2c1c37bfd 100644 --- a/semihosting/meson.build +++ b/semihosting/meson.build @@ -1,3 +1,7 @@ +specific_ss.add(when: 'CONFIG_SEMIHOSTING', if_true: files( + 'guestfd.c', +)) + specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_SOFTMMU'], if_true: files( 'config.c', 'console.c', From patchwork Tue Jun 7 20:45:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579409 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5563522max; Tue, 7 Jun 2022 15:22:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxl44Iu+1Mb/jqJnOlLwd00PrTssYW/9BpB9EmfZCLYvUh9Q2xubWs7CDP8uOuHWiZnH1Pg X-Received: by 2002:ac8:5981:0:b0:304:fcb8:f39f with SMTP id e1-20020ac85981000000b00304fcb8f39fmr3910318qte.115.1654640542263; Tue, 07 Jun 2022 15:22:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640542; cv=none; d=google.com; s=arc-20160816; b=bV7ODbVWIhmswbmophQauW+IXC8IaIvig99abWiO+Sweu7aUvX89lcWj/nSYEqwQUL knIvlnJCcFZuGXAMlc8fp8AqT6Df/EgkxgeThQ9si2DtC2+DAWCr8AZd22xUg9uWVRMg yEZkQLBb+lxlPB62OgKxx27wTSyda+5hLnhKlg3GxcGzDM4pVFHYGKQI8kBvsx+U/XSb m8r7eJmjM1eB1toqTcDSoH64GKEVoKGiNq9qOvzfelH9oakNoM2MrMyk49Iflg0Sjia+ KxiZPGKk4oq551GHY8IpNxl9GFFTqa3fs8W8M5hYC1iDZLd7ESHjrau8HWIg+DcGsY4l qwkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=POGsKDtk5VyDw6taq7a+DFAfnB+E161joQzVuaaJQNU=; b=c9cZsggM3CaCMYuwi6bEaB9ckqdpjNpCNab96SIHC6MU7XpihNeTCcs5oJYd0GtTeJ aN9A01/zTa9te3GHB8HVbsVa6NHsXTanC1Fj7JN6ZRHh7e+BMWrbKTRKFNktJjAJRekq SUoDLTjjNMzXEITqwXfT8RW4iTCOFkCg3KsBqmJMZS0XAQuRzCKbYFtoPW8Q7g4UUu77 WGj3ZkY8s27xtf37y7XO1GBtTRxXviMFwLDge3moL/u7dSMk75DwElntyCv4m4ZwID94 HPB3j0zoaqcVzLd439TwU/1+DWHEubeQRkYhgaIbrt1rw45FvFVAQOFg3E5GMwjJLVIQ 3aNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cdJA+Ohu; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id i8-20020a05620a404800b006a631b466d4si11359661qko.240.2022.06.07.15.22.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:22:22 -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; dkim=pass header.i=@linaro.org header.s=google header.b=cdJA+Ohu; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33484 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhaf-00041b-R6 for patch@linaro.org; Tue, 07 Jun 2022 18:22:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38822) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5c-0007Ct-4K for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:13 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:35780) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5Y-0001K0-N0 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:10 -0400 Received: by mail-pl1-x62e.google.com with SMTP id o6so10746352plg.2 for ; Tue, 07 Jun 2022 13:46:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=POGsKDtk5VyDw6taq7a+DFAfnB+E161joQzVuaaJQNU=; b=cdJA+OhuMNA9km320k51AmEz84uDQtA2I+HfjAtThXtywErjqPo6adztkYtsynTinm M37tzfBf233PdzjNY8M4U6VOLA/2A4gzbDUgJWPGytGhQtv/5sTcmWt4J5V/aDNVKzgP lt1TerMW/o5IFPlBVkuwJN82UKAFT8iZy96C4FzQFc9wOUFN5syUPfs9ueSwiqU/vX/f GBVsAdDwsiunvC6nc/s7puiw1BvrJxVgwCOHLcX05mG90eorlt3pGEuyF90/9YQ/c/7g lFxnpXrgW7NLcp38ULaQV1vLPPFrL+ohy+wkxqN7qF+JlpukS5TTa8eewDkWUSLgDwat A/fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=POGsKDtk5VyDw6taq7a+DFAfnB+E161joQzVuaaJQNU=; b=s0Pd9WCfp1le2iGSPOeSL1LEjcz1T/RydD9P7vNEnhD+jNNL2frJPQmi1ylv18ymh4 JmnR6eOF2w96RrEV7FcDE5OA8UgbvOCk7W77KHqOBm6VO9MeLdOW5soYeZvdH3vhs4d0 y0Xgi5nlBPP5J/Rtw32nD/iGfCpUv3itCEiqWInEpFBoQLsLn4PF6CKwAy3dQbUPBeVT aDwizC3fITbd1zEd7YbSyn5hkzFlH/gIdABzdfVyVod2AisaenS0/ZL2BNk8iKJSLbMk Mw6Gh2s6rUvUTMcOpCdPZ+vVo+/h/Ni8evKQbfwG24Uv+1zXdOnqKFB4R4TyS8vIuDKQ ZXDQ== X-Gm-Message-State: AOAM53307974niCvnOcibBtOUAX64aCNhcv05BWM42oZtKIzUZYYYIoK fpBsckt0brbMtjOXvUYKBx7yxxV0XyjcBQ== X-Received: by 2002:a17:902:d4d1:b0:167:8b6c:5254 with SMTP id o17-20020a170902d4d100b001678b6c5254mr7558835plg.142.1654634767466; Tue, 07 Jun 2022 13:46:07 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 09/53] semihosting: Inline set_swi_errno into common_semi_cb Date: Tue, 7 Jun 2022 13:45:13 -0700 Message-Id: <20220607204557.658541-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Do not store 'err' into errno only to read it back immediately. Use 'ret' for the return value, not 'reg0'. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 2fa7f23d8b..9d1f13ea8b 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -290,28 +290,29 @@ static target_ulong common_semi_syscall_len; static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) { - target_ulong reg0 = common_semi_arg(cs, 0); - if (ret == (target_ulong)-1) { - errno = err; - set_swi_errno(cs, -1); - reg0 = ret; +#ifdef CONFIG_USER_ONLY + TaskState *ts = cs->opaque; + ts->swi_errno = err; +#else + syscall_err = err; +#endif } else { /* Fixup syscalls that use nonstardard return conventions. */ + target_ulong reg0 = common_semi_arg(cs, 0); switch (reg0) { case TARGET_SYS_WRITE: case TARGET_SYS_READ: - reg0 = common_semi_syscall_len - ret; + ret = common_semi_syscall_len - ret; break; case TARGET_SYS_SEEK: - reg0 = 0; + ret = 0; break; default: - reg0 = ret; break; } } - common_semi_set_ret(cs, reg0); + common_semi_set_ret(cs, ret); } static target_ulong common_semi_flen_buf(CPUState *cs) From patchwork Tue Jun 7 20:45:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579387 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5543754max; Tue, 7 Jun 2022 14:55:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxsVgOMe3MZ3ruKWx1BaJ0NlzpytKzQPFhrn0BYclQrpQkpheabSwAFNWPu8D/AUBRMH1SB X-Received: by 2002:ac8:5943:0:b0:304:b749:fb40 with SMTP id 3-20020ac85943000000b00304b749fb40mr25101597qtz.591.1654638935522; Tue, 07 Jun 2022 14:55:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654638935; cv=none; d=google.com; s=arc-20160816; b=DUR5eOYxpL8fKcjMPSr0OuhZF0PnlvAL/ebWTK9b31Y1Wqp1PYQD54pJGlUOp8TCOF Oo67o29L8eJ7ZrK8hiVgydq7hwUd3axJoPWzcNSPmbI0tFOIQo/WZ+cLp1qbKT72MlC0 4gI9P0s+riCNSSlHqhrXhfWu4A0ezeFr2XiG1d/YuRAqgyEz8x7ZBRiUdOZLfiD3aa8K vHrhFRlxRzFyoJgIGsQwWEYs94/gBaOQr4VJIXaNJ5X3PWQVBDR+RYXgow0P0eelvo6k ufc/bDCkyWzer2bR5NFcRaM0ovKfCIbRcZKon2ng4wpW0+xOUgeu+D252VCAkkcPfDaJ UxMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=p/ByxHSH2cGT1rev+93zutWkxBbbXGRHAxNMtlkHM9g=; b=EIPkX4Bl83NDaqmIKjjrDwOun4JxecuDwVMHBW9v94Rd/XCjUfRKwYm6V6CXVA2xKF T995VWI6xcvD4qk2Nzr1QDpk7gpPgSN0urbbFnYD8kOEmaqcI+GYLRGUleylCTKnlE22 OAgfkFGNj4MilqwCer8q3BEoP8EeFT893qiLauqG6W/x8Ze/xW/QQotRjUtWLZ7kllN+ WlZIgxGSbzx7AORBIvSedqLm/4Wbvx9+ai3eyfh5tU+82BjPPV7FiVCeGYaImu4kVGaM sfbfg2/RfC5oiq7pB3x4XB6hQhLOMnDqFGxf89O2byX453JViHnVhzPBu+bFC9qo5grV O0rw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NHJKBzLD; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id f23-20020ae9ea17000000b006a5edac52f9si9015120qkg.79.2022.06.07.14.55.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 14:55: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; dkim=pass header.i=@linaro.org header.s=google header.b=NHJKBzLD; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:41302 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhAl-0000HF-4X for patch@linaro.org; Tue, 07 Jun 2022 17:55:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5c-0007Cr-2P for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:13 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:43805) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5Z-0001K7-LA for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:10 -0400 Received: by mail-pl1-x62b.google.com with SMTP id b5so15803937plx.10 for ; Tue, 07 Jun 2022 13:46:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=p/ByxHSH2cGT1rev+93zutWkxBbbXGRHAxNMtlkHM9g=; b=NHJKBzLDihWDNWaYOr2MWXQCAGxmIS/LjaAL+dkaPpmGIAGSSa/wN4m6J0A3EJ+T01 ygxYDgxIBZjtoJFjZH/VdmehIxPNnSar2B0F3uefz/q5YfID0/QEE4kGhyLXZusefuXv J21h+8pYzljyavTwdvC5qloljBsxaDiBMIzCpoqoHXUZo7YfMBWD1UFmzvhn0LTZtMdc +iD0UejCKfzQWAQgWVuLVpdVVmUEUkRXvVazmDWuoQ2WL80B+Q50lhwmEcYsolFja8ow CRTBVdPD68SVFGM0EZdg3lW+sUZPq9emNujXqRoVPWJmml4+Ga6p7h/a4ZOuE7etbnJC dBCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=p/ByxHSH2cGT1rev+93zutWkxBbbXGRHAxNMtlkHM9g=; b=s3Qf/y7K3nybcRXPQ2Wy414EbzQtRegiFeF3y1DVeHyJToIWcWRV9jzxd6JzSh/YLp 3t3gl1PNMYGVjcBquIkqYmmxqhoKAF2xtWuWHJlVD8DZvbNHiByoGk9ZnU3AmbSb2Eb8 0xu0mINZjTVRlL+AI9FJqg7vJ9e9qpcx2+iritAz7Vurk681i+umN0CvuezvRw2s0qOM 51t5MltsxpVdyyS+OUKrWx7M22mbkWig+008q4OCvQt+8EXqmlAW31qyeviDKLxMJ70U 91RdLKg0eKsBUvI8BUbu/qm4Tmc0chc1aaGk1NE5wuqpEVCFeW4L3KK+zd4xGT7lGdJm qwLw== X-Gm-Message-State: AOAM5327rnMAZkGmbQNvO3bPa1vEYfcMl3TL2kaWWw1DmNf23bqDGFP4 ikkZXWLEK5YPQ2cNs+4ldXSjiX1LP1PXqg== X-Received: by 2002:a17:903:4049:b0:167:515b:3efa with SMTP id n9-20020a170903404900b00167515b3efamr21558026pla.41.1654634768230; Tue, 07 Jun 2022 13:46:08 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 10/53] semihosting: Adjust error checking in common_semi_cb Date: Tue, 7 Jun 2022 13:45:14 -0700 Message-Id: <20220607204557.658541-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The err parameter is non-zero if and only if an error occured. Use this instead of ret == -1 for determining if we need to update the saved errno. This fixes the errno setting of SYS_ISTTY, which returns 0 on error, not -1. Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- semihosting/arm-compat-semi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 9d1f13ea8b..88d6bdeaf2 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -290,7 +290,7 @@ static target_ulong common_semi_syscall_len; static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) { - if (ret == (target_ulong)-1) { + if (err) { #ifdef CONFIG_USER_ONLY TaskState *ts = cs->opaque; ts->swi_errno = err; From patchwork Tue Jun 7 20:45:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579384 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5540198max; Tue, 7 Jun 2022 14:49:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzFGSaRjo2NvjHssDWLTtSrQwf/RRdyPjXZiKoPs9kTmEpNO5x1xohbltUPM9zkaH5ilcRr X-Received: by 2002:a05:622a:606:b0:304:fc8c:535f with SMTP id z6-20020a05622a060600b00304fc8c535fmr3864103qta.387.1654638572774; Tue, 07 Jun 2022 14:49:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654638572; cv=none; d=google.com; s=arc-20160816; b=OkFmlgPcbnnPp5weNYOPB/WMMXgBgEj0wOW7Oi6Z4yrlud1HH0oKpO83jAoY6qDMnW avWWcmK03EmNLBVxCpTdFenKlWQM6wXzNcJ3EVPdJp9FBWgvEt8pndoU7J2P7XGJmGAD z+yfe0xU6g+M0hkr70ZbEmK0Y4QvR6L11sGdv5kqrJk6XSRbYKeyjftghz5fpYBaGTs6 nuvs/HfZ2NfUdNsTnr31tmeL4Gv3X3xG05Oehk8LMZu76M9sFjNTsWqyWm63KvPjYxqk 4l22iubmg34A2KvTJJrG9sy8Ihm2NLYmadHejBIedad5lYvM7g8XbZNF2TerzJLI0uGx sL5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=S8Pjs5cOqk+oGTnK7FdV4C/Z/WLlWltx0dBsRwUkzCw=; b=uEp5eGeTTxUGzb7eZ8eE7jwMWeEi+bw8DubFDi51ZDGrBD6qI0RNJtJFOnNrK2KQzY NJdOQgGvSIrjd9W23ZiMsRzljZND+l+jydCBiv0PJRpqXbTWZ5F2S5VPTkXtXSJZDAx+ LsGThQrOItHtFvyM750bQebqu2IU0typh+po+JJW2tz7GfxPV7C6Hdm1zchw930HiXxV OPp60TPAQtlqUGluftsW4VKP3/RUEMC0r2gt13eSu1V1bKhpicn7BMhIFLnH5f4wYR+Y 1whnA06Pg7CufBMLAxoCv5tylFtZdfhgLGBeZYsslhX0EpQTtibUtpPYBOM4dYs9/fWN 3FsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="HPrXU/kT"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id v3-20020a05622a130300b002f3d3f49f34si10315578qtk.26.2022.06.07.14.49.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 14:49:32 -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; dkim=pass header.i=@linaro.org header.s=google header.b="HPrXU/kT"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:60762 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyh4u-0002a1-CP for patch@linaro.org; Tue, 07 Jun 2022 17:49:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38816) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5c-0007Cp-20 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:13 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:36769) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5a-0001KN-FX for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:11 -0400 Received: by mail-pj1-x102b.google.com with SMTP id u12-20020a17090a1d4c00b001df78c7c209so21944920pju.1 for ; Tue, 07 Jun 2022 13:46:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=S8Pjs5cOqk+oGTnK7FdV4C/Z/WLlWltx0dBsRwUkzCw=; b=HPrXU/kTRijuDnYeEVjoKIVG0t8qu7hjCgUGJV/pB4igexTPbrbINj6pNPtNDNy3sT LvsQ7ZHk2GLEKLQy8SF80Lb5OBygbR3S8l6m60hXkEqqhNSzeORiAatLmFs/4MD7dwS2 4etrQD/wFjv1pFOV8nHqFNJIzEQ58UAlxzfIXkxVFWJ4WR1k9IK1sUI9KQzn5WV5rDju pwByaWGUrkNYViWIRrXYRckGR2QD4cX4l5OLUKapy+hZit1ZO1JgsZE0Lcjlwx9SLEg0 SkcGgquR1QRDWJZs3CU8QhoNZpYyzE8lh+mjQ0qUgsvsgIzrrXhIFXAZHEmlFFZr7wT2 E6Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=S8Pjs5cOqk+oGTnK7FdV4C/Z/WLlWltx0dBsRwUkzCw=; b=NwAxUNy2SfCFD5WocCNlagANzw5vq3kvtre6V5LvX4pAMOAvpCrJFf0DDoQF6wA4O8 JWm26VI/14QuxfUeIlaeeH152DRuLNyIThwj0wrgZ8VMtC9pLNjsPxmy1kuV3/Mh5imZ sxXRFY5QWY96888bmmFUSTuYMmji5PsJGa/LQr/H9hnS+FIDopezEeMKOde1kdvpk3NA qU+Xh6mkWfWogymP9t2wQZk91X7zCGK0RE6uR18E8umnnRDmaMktGsrSwA/50+mofK1z SyYadLCSpLT9Pcg8/iOtma8bB6icFJc4FLO5z4+MPCrsOVnqzf/mM6IYMN8Q6OPs9xtC 9L8w== X-Gm-Message-State: AOAM533t+JyZuUi/3wXGnkmXis6tamyRn60fygd9z2MGUhtpo9eOiMbh pfDvhUtiM+Dsdo84oa/B8p56NXuxQ9Ih/g== X-Received: by 2002:a17:902:7b93:b0:162:bc8:935a with SMTP id w19-20020a1709027b9300b001620bc8935amr30433332pll.44.1654634769049; Tue, 07 Jun 2022 13:46:09 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?utf-8?q?Alex_Benn=C3=A9e?= Subject: [PATCH v4 11/53] semihosting: Clean up common_semi_flen_cb Date: Tue, 7 Jun 2022 13:45:15 -0700 Message-Id: <20220607204557.658541-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Do not read from the gdb struct stat buffer if the callback is reporting an error. Use common_semi_cb to finish returning results. Reviewed-by: Alex Bennée Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 88d6bdeaf2..cc13fcb0ef 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -346,15 +346,17 @@ static target_ulong common_semi_flen_buf(CPUState *cs) static void common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) { - /* The size is always stored in big-endian order, extract - the value. We assume the size always fit in 32 bits. */ - uint32_t size; - cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + 32, - (uint8_t *)&size, 4, 0); - size = be32_to_cpu(size); - common_semi_set_ret(cs, size); - errno = err; - set_swi_errno(cs, -1); + if (!err) { + /* + * The size is always stored in big-endian order, extract + * the value. We assume the size always fit in 32 bits. + */ + uint32_t size; + cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + 32, + (uint8_t *)&size, 4, 0); + ret = be32_to_cpu(size); + } + common_semi_cb(cs, ret, err); } static int common_semi_open_guestfd; From patchwork Tue Jun 7 20:45:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579390 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5545780max; Tue, 7 Jun 2022 14:58:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwb4IO//inK0fl8jwhNyXOsX04fyzuaAJ0FYHRLL8x27LwsWy4nPeCC4RcF4Vk1vWcdkkxa X-Received: by 2002:ac8:5956:0:b0:304:d85d:f16 with SMTP id 22-20020ac85956000000b00304d85d0f16mr22074179qtz.606.1654639125680; Tue, 07 Jun 2022 14:58:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639125; cv=none; d=google.com; s=arc-20160816; b=i899azZfgEpTY9NCa0kHNdoKFfY58hJkYhqntlK2phoT5At4jfx1TReLZ6cJ7gFYm0 GKKg2sSQcdW0oleAS9rOw1Jy7P3kG6foRN+L70EA+Yl9hzBkANeVM+zUOavi+i+drefV ROu639dVcbHRht6gGbVP4Jyd7PlfKTJCga6vtMVRVXlIDCq1/dFipx1Y0PiklzAsiexF 3J0MJsibmNRh0/pFpmk1n4m8mStCBZP3sSduyGNRLcpiBpytSZlS2pkt4M4VbStuZjvr 9JRBhMh6ydgwpOrUli3hnPws2tcnjbIE69UVcHqZIOvPZK1hzeD60XvJ5msIWn9xlR4M 0+NQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=C3K2YfSefvABy7M7hq8Nd6JC/pCWOqgHqbPOWNo+9Kc=; b=rQcqTiJRCMD8vxg98xpthdD8/wwYEu+0nuec7Y1QXLXoqaBwg0wcDj9ci1G1sw19Xk 3uAWenVSoMpivVD4W3AuwDJac+qdhSCztANMvs9cTDz3h11YiE1WlXqlfFCQsRwCTRB6 4xo6kKnS3bdxvminIrzFDFXONxLmm4QTvflRd05noRMgG6BbjYt9Jg3zrcNHtORi99mg EIPNoZlFo1XYRixFiOaedompt4z1Fhz7hGb+w6CWSg1EJQsr+AiO5lLt+0CDS8OnJoKJ 6zTGaM1BIU0gRYUn+SGVir9tTXPAce/EbsfdFzypxZ82IGpCtCYtvMXVrX2RKkrhEFsD A9lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LjfYiPv0; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id g6-20020a05620a40c600b006a6ccb630b3si3288415qko.470.2022.06.07.14.58.45 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 14:58:45 -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; dkim=pass header.i=@linaro.org header.s=google header.b=LjfYiPv0; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:49914 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhDp-0006Fs-5s for patch@linaro.org; Tue, 07 Jun 2022 17:58:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38850) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5d-0007Du-TL for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:15 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:37656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5b-0001Kf-Q6 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:12 -0400 Received: by mail-pg1-x530.google.com with SMTP id h192so10191908pgc.4 for ; Tue, 07 Jun 2022 13:46:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C3K2YfSefvABy7M7hq8Nd6JC/pCWOqgHqbPOWNo+9Kc=; b=LjfYiPv0AWj/xLIpLalJ8xVi5jCODIY9uKhvuVsW58krhM7m9NN0K3ghk4Kx5HfigX YcJc7s+GrgW7u1ZQ45jYS5yuOZ6tIKBkixioP/N5AZ9cHAlAK7jQ3TRlqk30eUwstGOU GuWlDmT97Eb72L5roT6TB+Zwcc4OOdWaWtEaTolZGCvz/8xCqMJ9lgnkUKA3YBJPnZzv PjBBGnW1N5feWAygUK2/Ng3btPZuN1y2y67kUxJKTssTzTA2HaAc+y7++Y3UxfDyIeDd /4u09+mcvsm48Ful3VthD8Zmy+bnL0Ujb2g6Mj1tlzVOKe5c0cUAw44CTSm4Bkz0hS3i RxWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C3K2YfSefvABy7M7hq8Nd6JC/pCWOqgHqbPOWNo+9Kc=; b=AhjKjOQNemgg4ygCsAkFvdlFD5qijlEKeG7jibLSYPRVFjZT6y1GObnBe/yddtoDZC j5DXg6ElIOjvijIaDK7fZiSr7GVELKenjE0CkSza96pxYfRuWm/fiz59ygL0fhK2g5zL ZNYAF3HCSw94P7s9dKe+rrQ2g982x62IpaDCRyA0nDMoXByQwlukz/pgSQslextpcQe+ shlm85AX4l3VpmBqnq9GRilpPvCQLXrzG6KUQSH6mqfj8yRe6a21J0rS4oXn1/Tw+X7K U7+WRKWSjqEZKcgM/JoAG4aCkCSUTc1CohVdKLaxNlzd9qS4y3b9KTMf9RtSdVmGUR6f AaOw== X-Gm-Message-State: AOAM530a/5lpExY5XxFq15s//M39XOaVMw9IzxV0cB+b+WrXt9+snGcS iUS10cc+9zj49bQK1l0XYAmjwwMRRTqegg== X-Received: by 2002:a63:8743:0:b0:3fe:c9c:b59 with SMTP id i64-20020a638743000000b003fe0c9c0b59mr3619423pge.192.1654634769962; Tue, 07 Jun 2022 13:46:09 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?utf-8?q?Alex_Benn=C3=A9e?= Subject: [PATCH v4 12/53] semihosting: Clean up common_semi_open_cb Date: Tue, 7 Jun 2022 13:45:16 -0700 Message-Id: <20220607204557.658541-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Use common_semi_cb to return results instead of calling set_swi_errno and common_semi_set_ret directly. Reviewed-by: Alex Bennée Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index cc13fcb0ef..6414caa749 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -364,15 +364,13 @@ static int common_semi_open_guestfd; static void common_semi_open_cb(CPUState *cs, target_ulong ret, target_ulong err) { - if (ret == (target_ulong)-1) { - errno = err; - set_swi_errno(cs, -1); + if (err) { dealloc_guestfd(common_semi_open_guestfd); } else { associate_guestfd(common_semi_open_guestfd, ret); ret = common_semi_open_guestfd; } - common_semi_set_ret(cs, ret); + common_semi_cb(cs, ret, err); } static target_ulong From patchwork Tue Jun 7 20:45:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579399 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5554198max; Tue, 7 Jun 2022 15:08:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzlCZUnI2mKiTF8ZRkN8tvVGQ7BxCEk6i9am45QLtflHJ32+A/dowKqGsGi0ccn+riKTV+L X-Received: by 2002:a05:620a:13a2:b0:6a6:f149:6d82 with SMTP id m2-20020a05620a13a200b006a6f1496d82mr2831756qki.342.1654639730883; Tue, 07 Jun 2022 15:08:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639730; cv=none; d=google.com; s=arc-20160816; b=tSsFFoXJlxSl772A3tC+7s4Hn78uqV7TywS7Z8q1QWT8kX8Rd94FkeV5MOWitMhwnh hj4M7lynI506WlnjbGnon31dvd+O+FDqqOwQIWyFg/htVENrbdgggVsyDg0QuMO7Kp70 UuPN+LtNJP+frqLi8G5AIrikakEQMFjFPyYwx1kKw1OkN0ok9howPiTp/YFDlvtS40W2 RS2GJ7ONOhFplglzlWJG0wyrH21nZJnhPyKkOj+KmEiTeUU7/Cop2fXQAE8Lx0iew9mF Fafq5fjLD8fqoDqguEi5sZVgQHamdnL1BTEXd7IjF9+IoqLFNILOup262AKuKl0SSR99 PUow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=flfdYEEk3NMKhEfMPxtBMupTnCfSumkwbaxeL9Y18Qo=; b=XhFtEyquFMOUAFqY8nlqB7YPKBd1EaUOaSAaP8cJGV/9pk5NFOD9lK4r9prDumJ/d/ o8pL+tuNZhfHIPuY263k4SDiLXjJR5WtwissQ9RSJS+LngsPyC2d7gjk1JTrjVcH9vIA 70aErp0hf6N9iVROhFz57SSUFzXJgD8MwhhYBcRa/mtfDm38f4SEvreqjFTfKF4W+yEz SnpYMB0P8RNh/ws6qLXqp4dbnzT26T0yEKHqr8lgQgqctzcRxhjqDOeFJjRcE6aemrnv ET6KrhU5kHKcYw4u4V2kSU+8UXtR9q3Ltu0nK8E1RpqcpSGb8a01R2ukhjv1eLK7q22y jVaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CakCrAHn; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d18-20020a05622a05d200b00304cb1c8b14si9504367qtb.322.2022.06.07.15.08.50 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:08:50 -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; dkim=pass header.i=@linaro.org header.s=google header.b=CakCrAHn; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:40066 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhNa-0002e5-E5 for patch@linaro.org; Tue, 07 Jun 2022 18:08:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38904) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5g-0007FW-I8 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:17 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:38447) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5c-0001Lt-IP for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:16 -0400 Received: by mail-pl1-x62b.google.com with SMTP id n18so15827586plg.5 for ; Tue, 07 Jun 2022 13:46:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=flfdYEEk3NMKhEfMPxtBMupTnCfSumkwbaxeL9Y18Qo=; b=CakCrAHnvkOefBm12sg+kQJAYWBxXuHQGKlp8s3qplxxKilMvcby7zAn7gDC8b19FU v55frRDkdivAuBdu15yoh6/1ToKhxK1J8S6U4GAaYJDQJKofdDgfBwbrmGXfsEz85bhX ARRRNY+/Hwq1bTqfivO2jvKoEMi/JaxXUEKiE8wSUCY0RcEEQFuXL6JnH8QLOLf5WLNm 8BwJVNSweYJp6Iy/6c9TiqDvXxNIBdxu85hrfoyGDJvuM4umRXWaBEygmlGrfhz1DQ9q PDbLsPsQbFCeCWWCExFBhH7pCH7k781wmGD+PSzzrb2WDTRuawOEldPCg1x8/7RWPyPF BeWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=flfdYEEk3NMKhEfMPxtBMupTnCfSumkwbaxeL9Y18Qo=; b=2rugQFq7kjRawcIvKvzthKSobVaoQKvfS5ae2sXFPRHs/+Nt7h8PTICmh6F359LWK9 29jzn43ykwpcPtQ2gszmNPorpMblG9E2fGawOV+MissFM0edNz8rEbR2g40PZh8wekRM YIHpsTmjgzO6HrRQ5bphvNuJUZ+sOWfEITs897nKTlm0h1mzfBhWp/gSHCHYcrBAdFic PASAy5/9gOXREDRqqO/fYp7PJgrpof1+IvIE15MMSUN07xl61aYXXoXMzwDSyVRb2yDe +k5oXvvQN8ELaN56p7CPtvm9MY98JlAqpv33EZ0vDaMBdML5XWiPaTRuiiBqBIl7axa3 /WRA== X-Gm-Message-State: AOAM533d7nYUK6UkvKb4VVuxd7QWo5DF09tgZNp0IwXxHh6WWKNfjwB2 m1JJbPPBr6NCOTLrNsnUUovcixEkfJTECg== X-Received: by 2002:a17:902:854c:b0:159:a70:deca with SMTP id d12-20020a170902854c00b001590a70decamr31045908plo.142.1654634771083; Tue, 07 Jun 2022 13:46:11 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 13/53] semihosting: Return void from do_common_semihosting Date: Tue, 7 Jun 2022 13:45:17 -0700 Message-Id: <20220607204557.658541-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Perform the cleanup in the FIXME comment in common_semi_gdb_syscall. Do not modify guest registers until the syscall is complete, which in the gdbstub case is asynchronous. In the synchronous non-gdbstub case, use common_semi_set_ret to set the result. Merge set_swi_errno into common_semi_cb. Rely on the latter for combined return value / errno setting. Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- semihosting/common-semi.h | 2 +- linux-user/aarch64/cpu_loop.c | 2 +- linux-user/arm/cpu_loop.c | 2 +- linux-user/riscv/cpu_loop.c | 2 +- semihosting/arm-compat-semi.c | 543 ++++++++++++++++------------------ target/arm/helper.c | 4 +- target/arm/m_helper.c | 2 +- target/riscv/cpu_helper.c | 2 +- 8 files changed, 264 insertions(+), 295 deletions(-) diff --git a/semihosting/common-semi.h b/semihosting/common-semi.h index 0bfab1c669..0a91db7c41 100644 --- a/semihosting/common-semi.h +++ b/semihosting/common-semi.h @@ -34,6 +34,6 @@ #ifndef COMMON_SEMI_H #define COMMON_SEMI_H -target_ulong do_common_semihosting(CPUState *cs); +void do_common_semihosting(CPUState *cs); #endif /* COMMON_SEMI_H */ diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 3b273f6299..f7ef36cd9f 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -154,7 +154,7 @@ void cpu_loop(CPUARMState *env) force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc); break; case EXCP_SEMIHOST: - env->xregs[0] = do_common_semihosting(cs); + do_common_semihosting(cs); env->pc += 4; break; case EXCP_YIELD: diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index d950409d5b..c0790f3246 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -449,7 +449,7 @@ void cpu_loop(CPUARMState *env) } break; case EXCP_SEMIHOST: - env->regs[0] = do_common_semihosting(cs); + do_common_semihosting(cs); env->regs[15] += env->thumb ? 2 : 4; break; case EXCP_INTERRUPT: diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c index 29084c1421..bffca7db12 100644 --- a/linux-user/riscv/cpu_loop.c +++ b/linux-user/riscv/cpu_loop.c @@ -81,7 +81,7 @@ void cpu_loop(CPURISCVState *env) force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc); break; case RISCV_EXCP_SEMIHOST: - env->gpr[xA0] = do_common_semihosting(cs); + do_common_semihosting(cs); env->pc += 4; break; default: diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 6414caa749..cebbad2355 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -261,20 +261,6 @@ static target_ulong syscall_err; #include "semihosting/softmmu-uaccess.h" #endif -static inline uint32_t set_swi_errno(CPUState *cs, uint32_t code) -{ - if (code == (uint32_t)-1) { -#ifdef CONFIG_USER_ONLY - TaskState *ts = cs->opaque; - - ts->swi_errno = errno; -#else - syscall_err = errno; -#endif - } - return code; -} - static inline uint32_t get_swi_errno(CPUState *cs) { #ifdef CONFIG_USER_ONLY @@ -373,54 +359,24 @@ common_semi_open_cb(CPUState *cs, target_ulong ret, target_ulong err) common_semi_cb(cs, ret, err); } -static target_ulong -common_semi_gdb_syscall(CPUState *cs, gdb_syscall_complete_cb cb, - const char *fmt, ...) -{ - va_list va; - - va_start(va, fmt); - gdb_do_syscallv(cb, fmt, va); - va_end(va); - - /* - * FIXME: in softmmu mode, the gdbstub will schedule our callback - * to occur, but will not actually call it to complete the syscall - * until after this function has returned and we are back in the - * CPU main loop. Therefore callers to this function must not - * do anything with its return value, because it is not necessarily - * the result of the syscall, but could just be the old value of X0. - * The only thing safe to do with this is that the callers of - * do_common_semihosting() will write it straight back into X0. - * (In linux-user mode, the callback will have happened before - * gdb_do_syscallv() returns.) - * - * We should tidy this up so neither this function nor - * do_common_semihosting() return a value, so the mistake of - * doing something with the return value is not possible to make. - */ - - return common_semi_arg(cs, 0); -} - /* * Types for functions implementing various semihosting calls * for specific types of guest file descriptor. These must all - * do the work and return the required return value for the guest, - * setting the guest errno if appropriate. + * do the work and return the required return value to the guest + * via common_semi_cb. */ -typedef uint32_t sys_closefn(CPUState *cs, GuestFD *gf); -typedef uint32_t sys_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len); -typedef uint32_t sys_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len); -typedef uint32_t sys_isattyfn(CPUState *cs, GuestFD *gf); -typedef uint32_t sys_seekfn(CPUState *cs, GuestFD *gf, - target_ulong offset); -typedef uint32_t sys_flenfn(CPUState *cs, GuestFD *gf); +typedef void sys_closefn(CPUState *cs, GuestFD *gf); +typedef void sys_writefn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len); +typedef void sys_readfn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len); +typedef void sys_isattyfn(CPUState *cs, GuestFD *gf); +typedef void sys_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset); +typedef void sys_flenfn(CPUState *cs, GuestFD *gf); -static uint32_t host_closefn(CPUState *cs, GuestFD *gf) +static void host_closefn(CPUState *cs, GuestFD *gf) { + int ret; /* * Only close the underlying host fd if it's one we opened on behalf * of the guest in SYS_OPEN. @@ -428,113 +384,106 @@ static uint32_t host_closefn(CPUState *cs, GuestFD *gf) if (gf->hostfd == STDIN_FILENO || gf->hostfd == STDOUT_FILENO || gf->hostfd == STDERR_FILENO) { - return 0; + ret = 0; + } else { + ret = close(gf->hostfd); } - return set_swi_errno(cs, close(gf->hostfd)); + common_semi_cb(cs, ret, ret ? errno : 0); } -static uint32_t host_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) +static void host_writefn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len) { CPUArchState *env = cs->env_ptr; - uint32_t ret; + uint32_t ret = 0; char *s = lock_user(VERIFY_READ, buf, len, 1); (void) env; /* Used in arm softmmu lock_user implicitly */ - if (!s) { - /* Return bytes not written on error */ - return len; + if (s) { + ret = write(gf->hostfd, s, len); + unlock_user(s, buf, 0); + if (ret == (uint32_t)-1) { + ret = 0; + } } - ret = set_swi_errno(cs, write(gf->hostfd, s, len)); - unlock_user(s, buf, 0); - if (ret == (uint32_t)-1) { - ret = 0; - } - /* Return bytes not written */ - return len - ret; + /* Return bytes not written, on error as well. */ + common_semi_cb(cs, len - ret, 0); } -static uint32_t host_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) +static void host_readfn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len) { CPUArchState *env = cs->env_ptr; - uint32_t ret; + uint32_t ret = 0; char *s = lock_user(VERIFY_WRITE, buf, len, 0); (void) env; /* Used in arm softmmu lock_user implicitly */ - if (!s) { - /* return bytes not read */ - return len; + if (s) { + do { + ret = read(gf->hostfd, s, len); + } while (ret == -1 && errno == EINTR); + unlock_user(s, buf, len); + if (ret == (uint32_t)-1) { + ret = 0; + } } - do { - ret = set_swi_errno(cs, read(gf->hostfd, s, len)); - } while (ret == -1 && errno == EINTR); - unlock_user(s, buf, len); - if (ret == (uint32_t)-1) { - ret = 0; - } - /* Return bytes not read */ - return len - ret; + /* Return bytes not read, on error as well. */ + common_semi_cb(cs, len - ret, 0); } -static uint32_t host_isattyfn(CPUState *cs, GuestFD *gf) +static void host_isattyfn(CPUState *cs, GuestFD *gf) { - return isatty(gf->hostfd); + common_semi_cb(cs, isatty(gf->hostfd), 0); } -static uint32_t host_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) +static void host_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) { - uint32_t ret = set_swi_errno(cs, lseek(gf->hostfd, offset, SEEK_SET)); - if (ret == (uint32_t)-1) { - return -1; - } - return 0; + off_t ret = lseek(gf->hostfd, offset, SEEK_SET); + common_semi_cb(cs, ret, ret == -1 ? errno : 0); } -static uint32_t host_flenfn(CPUState *cs, GuestFD *gf) +static void host_flenfn(CPUState *cs, GuestFD *gf) { struct stat buf; - uint32_t ret = set_swi_errno(cs, fstat(gf->hostfd, &buf)); - if (ret == (uint32_t)-1) { - return -1; + + if (fstat(gf->hostfd, &buf)) { + common_semi_cb(cs, -1, errno); + } else { + common_semi_cb(cs, buf.st_size, 0); } - return buf.st_size; } -static uint32_t gdb_closefn(CPUState *cs, GuestFD *gf) +static void gdb_closefn(CPUState *cs, GuestFD *gf) { - return common_semi_gdb_syscall(cs, common_semi_cb, "close,%x", gf->hostfd); + gdb_do_syscall(common_semi_cb, "close,%x", gf->hostfd); } -static uint32_t gdb_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) +static void gdb_writefn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len) { common_semi_syscall_len = len; - return common_semi_gdb_syscall(cs, common_semi_cb, "write,%x,%x,%x", - gf->hostfd, buf, len); + gdb_do_syscall(common_semi_cb, "write,%x,%x,%x", gf->hostfd, buf, len); } -static uint32_t gdb_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) +static void gdb_readfn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len) { common_semi_syscall_len = len; - return common_semi_gdb_syscall(cs, common_semi_cb, "read,%x,%x,%x", - gf->hostfd, buf, len); + gdb_do_syscall(common_semi_cb, "read,%x,%x,%x", gf->hostfd, buf, len); } -static uint32_t gdb_isattyfn(CPUState *cs, GuestFD *gf) +static void gdb_isattyfn(CPUState *cs, GuestFD *gf) { - return common_semi_gdb_syscall(cs, common_semi_cb, "isatty,%x", gf->hostfd); + gdb_do_syscall(common_semi_cb, "isatty,%x", gf->hostfd); } -static uint32_t gdb_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) +static void gdb_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) { - return common_semi_gdb_syscall(cs, common_semi_cb, "lseek,%x,%x,0", - gf->hostfd, offset); + gdb_do_syscall(common_semi_cb, "lseek,%x,%x,0", gf->hostfd, offset); } -static uint32_t gdb_flenfn(CPUState *cs, GuestFD *gf) +static void gdb_flenfn(CPUState *cs, GuestFD *gf) { - return common_semi_gdb_syscall(cs, common_semi_flen_cb, "fstat,%x,%x", - gf->hostfd, common_semi_flen_buf(cs)); + gdb_do_syscall(common_semi_flen_cb, "fstat,%x,%x", + gf->hostfd, common_semi_flen_buf(cs)); } #define SHFB_MAGIC_0 0x53 @@ -554,63 +503,57 @@ static const uint8_t featurefile_data[] = { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; -static uint32_t staticfile_closefn(CPUState *cs, GuestFD *gf) +static void staticfile_closefn(CPUState *cs, GuestFD *gf) { /* Nothing to do */ - return 0; + common_semi_cb(cs, 0, 0); } -static uint32_t staticfile_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) +static void staticfile_writefn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len) { /* This fd can never be open for writing */ - - errno = EBADF; - return set_swi_errno(cs, -1); + common_semi_cb(cs, -1, EBADF); } -static uint32_t staticfile_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) +static void staticfile_readfn(CPUState *cs, GuestFD *gf, + target_ulong buf, uint32_t len) { CPUArchState *env = cs->env_ptr; - uint32_t i; + uint32_t i = 0; char *s; (void) env; /* Used in arm softmmu lock_user implicitly */ s = lock_user(VERIFY_WRITE, buf, len, 0); - if (!s) { - return len; - } - - for (i = 0; i < len; i++) { - if (gf->staticfile.off >= gf->staticfile.len) { - break; + if (s) { + for (i = 0; i < len; i++) { + if (gf->staticfile.off >= gf->staticfile.len) { + break; + } + s[i] = gf->staticfile.data[gf->staticfile.off]; + gf->staticfile.off++; } - s[i] = gf->staticfile.data[gf->staticfile.off]; - gf->staticfile.off++; + unlock_user(s, buf, len); } - unlock_user(s, buf, len); - /* Return number of bytes not read */ - return len - i; + common_semi_cb(cs, len - i, 0); } -static uint32_t staticfile_isattyfn(CPUState *cs, GuestFD *gf) +static void staticfile_isattyfn(CPUState *cs, GuestFD *gf) { - return 0; + common_semi_cb(cs, 0, 0); } -static uint32_t staticfile_seekfn(CPUState *cs, GuestFD *gf, - target_ulong offset) +static void staticfile_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) { gf->staticfile.off = offset; - return 0; + common_semi_cb(cs, 0, 0); } -static uint32_t staticfile_flenfn(CPUState *cs, GuestFD *gf) +static void staticfile_flenfn(CPUState *cs, GuestFD *gf) { - return gf->staticfile.len; + common_semi_cb(cs, gf->staticfile.len, 0); } typedef struct GuestFDFunctions { @@ -669,13 +612,11 @@ static inline bool is_64bit_semihosting(CPUArchState *env) #define GET_ARG(n) do { \ if (is_64bit_semihosting(env)) { \ if (get_user_u64(arg ## n, args + (n) * 8)) { \ - errno = EFAULT; \ - return set_swi_errno(cs, -1); \ + goto do_fault; \ } \ } else { \ if (get_user_u32(arg ## n, args + (n) * 4)) { \ - errno = EFAULT; \ - return set_swi_errno(cs, -1); \ + goto do_fault; \ } \ } \ } while (0) @@ -695,7 +636,7 @@ static inline bool is_64bit_semihosting(CPUArchState *env) * leave the register unchanged. We use 0xdeadbeef as the return value * when there isn't a defined return value for the call. */ -target_ulong do_common_semihosting(CPUState *cs) +void do_common_semihosting(CPUState *cs) { CPUArchState *env = cs->env_ptr; target_ulong args; @@ -715,32 +656,23 @@ target_ulong do_common_semihosting(CPUState *cs) switch (nr) { case TARGET_SYS_OPEN: { - int guestfd; + int ret, err = 0; + int hostfd; GET_ARG(0); GET_ARG(1); GET_ARG(2); s = lock_user_string(arg0); if (!s) { - errno = EFAULT; - return set_swi_errno(cs, -1); + goto do_fault; } if (arg1 >= 12) { unlock_user(s, arg0, 0); - errno = EINVAL; - return set_swi_errno(cs, -1); - } - - guestfd = alloc_guestfd(); - if (guestfd < 0) { - unlock_user(s, arg0, 0); - errno = EMFILE; - return set_swi_errno(cs, -1); + common_semi_cb(cs, -1, EINVAL); + break; } if (strcmp(s, ":tt") == 0) { - int result_fileno; - /* * We implement SH_EXT_STDOUT_STDERR, so: * open for read == stdin @@ -748,63 +680,67 @@ target_ulong do_common_semihosting(CPUState *cs) * open for append == stderr */ if (arg1 < 4) { - result_fileno = STDIN_FILENO; + hostfd = STDIN_FILENO; } else if (arg1 < 8) { - result_fileno = STDOUT_FILENO; + hostfd = STDOUT_FILENO; } else { - result_fileno = STDERR_FILENO; + hostfd = STDERR_FILENO; } - associate_guestfd(guestfd, result_fileno); - unlock_user(s, arg0, 0); - return guestfd; - } - if (strcmp(s, ":semihosting-features") == 0) { - unlock_user(s, arg0, 0); + ret = alloc_guestfd(); + associate_guestfd(ret, hostfd); + } else if (strcmp(s, ":semihosting-features") == 0) { /* We must fail opens for modes other than 0 ('r') or 1 ('rb') */ if (arg1 != 0 && arg1 != 1) { - dealloc_guestfd(guestfd); - errno = EACCES; - return set_swi_errno(cs, -1); - } - staticfile_guestfd(guestfd, featurefile_data, - sizeof(featurefile_data)); - return guestfd; - } - - if (use_gdb_syscalls()) { - common_semi_open_guestfd = guestfd; - ret = common_semi_gdb_syscall(cs, common_semi_open_cb, - "open,%s,%x,1a4", arg0, (int)arg2 + 1, - gdb_open_modeflags[arg1]); - } else { - ret = set_swi_errno(cs, open(s, open_modeflags[arg1], 0644)); - if (ret == (uint32_t)-1) { - dealloc_guestfd(guestfd); + ret = -1; + err = EACCES; } else { - associate_guestfd(guestfd, ret); - ret = guestfd; + ret = alloc_guestfd(); + staticfile_guestfd(ret, featurefile_data, + sizeof(featurefile_data)); + } + } else if (use_gdb_syscalls()) { + unlock_user(s, arg0, 0); + common_semi_open_guestfd = alloc_guestfd(); + gdb_do_syscall(common_semi_open_cb, + "open,%s,%x,1a4", arg0, (int)arg2 + 1, + gdb_open_modeflags[arg1]); + break; + } else { + hostfd = open(s, open_modeflags[arg1], 0644); + if (hostfd < 0) { + ret = -1; + err = errno; + } else { + ret = alloc_guestfd(); + associate_guestfd(ret, hostfd); } } unlock_user(s, arg0, 0); - return ret; + common_semi_cb(cs, ret, err); + break; } + case TARGET_SYS_CLOSE: GET_ARG(0); gf = get_guestfd(arg0); if (!gf) { - errno = EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } - - ret = guestfd_fns[gf->type].closefn(cs, gf); + guestfd_fns[gf->type].closefn(cs, gf); dealloc_guestfd(arg0); - return ret; + break; + case TARGET_SYS_WRITEC: qemu_semihosting_console_outc(cs->env_ptr, args); - return 0xdeadbeef; + common_semi_set_ret(cs, 0xdeadbeef); + break; + case TARGET_SYS_WRITE0: - return qemu_semihosting_console_outs(cs->env_ptr, args); + ret = qemu_semihosting_console_outs(cs->env_ptr, args); + common_semi_set_ret(cs, ret); + break; + case TARGET_SYS_WRITE: GET_ARG(0); GET_ARG(1); @@ -813,11 +749,11 @@ target_ulong do_common_semihosting(CPUState *cs) gf = get_guestfd(arg0); if (!gf) { - errno = EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].writefn(cs, gf, arg1, len); + break; - return guestfd_fns[gf->type].writefn(cs, gf, arg1, len); case TARGET_SYS_READ: GET_ARG(0); GET_ARG(1); @@ -826,129 +762,150 @@ target_ulong do_common_semihosting(CPUState *cs) gf = get_guestfd(arg0); if (!gf) { - errno = EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].readfn(cs, gf, arg1, len); + break; - return guestfd_fns[gf->type].readfn(cs, gf, arg1, len); case TARGET_SYS_READC: - return qemu_semihosting_console_inc(cs->env_ptr); + ret = qemu_semihosting_console_inc(cs->env_ptr); + common_semi_set_ret(cs, ret); + break; + case TARGET_SYS_ISERROR: GET_ARG(0); - return (target_long) arg0 < 0 ? 1 : 0; + common_semi_set_ret(cs, (target_long)arg0 < 0); + break; + case TARGET_SYS_ISTTY: GET_ARG(0); gf = get_guestfd(arg0); if (!gf) { - errno = EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].isattyfn(cs, gf); + break; - return guestfd_fns[gf->type].isattyfn(cs, gf); case TARGET_SYS_SEEK: GET_ARG(0); GET_ARG(1); gf = get_guestfd(arg0); if (!gf) { - errno = EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].seekfn(cs, gf, arg1); + break; - return guestfd_fns[gf->type].seekfn(cs, gf, arg1); case TARGET_SYS_FLEN: GET_ARG(0); gf = get_guestfd(arg0); if (!gf) { - errno = EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].flenfn(cs, gf); + break; - return guestfd_fns[gf->type].flenfn(cs, gf); case TARGET_SYS_TMPNAM: + { + int len; + char *p; + GET_ARG(0); GET_ARG(1); GET_ARG(2); - if (asprintf(&s, "/tmp/qemu-%x%02x", getpid(), - (int) (arg1 & 0xff)) < 0) { - return -1; - } - ul_ret = (target_ulong) -1; - + len = asprintf(&s, "/tmp/qemu-%x%02x", getpid(), (int)arg1 & 0xff); /* Make sure there's enough space in the buffer */ - if (strlen(s) < arg2) { - char *output = lock_user(VERIFY_WRITE, arg0, arg2, 0); - strcpy(output, s); - unlock_user(output, arg0, arg2); - ul_ret = 0; + if (len < 0 || len >= arg2) { + common_semi_set_ret(cs, -1); + break; } + p = lock_user(VERIFY_WRITE, arg0, len, 0); + if (!p) { + goto do_fault; + } + memcpy(p, s, len + 1); + unlock_user(p, arg0, len); free(s); - return ul_ret; + common_semi_set_ret(cs, 0); + break; + } + case TARGET_SYS_REMOVE: GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - ret = common_semi_gdb_syscall(cs, common_semi_cb, "unlink,%s", - arg0, (int)arg1 + 1); - } else { - s = lock_user_string(arg0); - if (!s) { - errno = EFAULT; - return set_swi_errno(cs, -1); - } - ret = set_swi_errno(cs, remove(s)); - unlock_user(s, arg0, 0); + gdb_do_syscall(common_semi_cb, "unlink,%s", + arg0, (int)arg1 + 1); + break; } - return ret; + s = lock_user_string(arg0); + if (!s) { + goto do_fault; + } + ret = remove(s); + unlock_user(s, arg0, 0); + common_semi_cb(cs, ret, ret ? errno : 0); + break; + case TARGET_SYS_RENAME: GET_ARG(0); GET_ARG(1); GET_ARG(2); GET_ARG(3); if (use_gdb_syscalls()) { - return common_semi_gdb_syscall(cs, common_semi_cb, "rename,%s,%s", - arg0, (int)arg1 + 1, arg2, - (int)arg3 + 1); + gdb_do_syscall(common_semi_cb, "rename,%s,%s", + arg0, (int)arg1 + 1, arg2, (int)arg3 + 1); } else { char *s2; + s = lock_user_string(arg0); - s2 = lock_user_string(arg2); - if (!s || !s2) { - errno = EFAULT; - ret = set_swi_errno(cs, -1); - } else { - ret = set_swi_errno(cs, rename(s, s2)); + if (!s) { + goto do_fault; } - if (s2) - unlock_user(s2, arg2, 0); - if (s) + s2 = lock_user_string(arg2); + if (!s2) { unlock_user(s, arg0, 0); - return ret; + goto do_fault; + } + ret = rename(s, s2); + unlock_user(s2, arg2, 0); + unlock_user(s, arg0, 0); + common_semi_cb(cs, ret, ret ? errno : 0); } + break; + case TARGET_SYS_CLOCK: - return clock() / (CLOCKS_PER_SEC / 100); + common_semi_set_ret(cs, clock() / (CLOCKS_PER_SEC / 100)); + break; + case TARGET_SYS_TIME: - return set_swi_errno(cs, time(NULL)); + ul_ret = time(NULL); + common_semi_cb(cs, ul_ret, ul_ret == -1 ? errno : 0); + break; + case TARGET_SYS_SYSTEM: GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - return common_semi_gdb_syscall(cs, common_semi_cb, "system,%s", - arg0, (int)arg1 + 1); - } else { - s = lock_user_string(arg0); - if (!s) { - errno = EFAULT; - return set_swi_errno(cs, -1); - } - ret = set_swi_errno(cs, system(s)); - unlock_user(s, arg0, 0); - return ret; + gdb_do_syscall(common_semi_cb, "system,%s", arg0, (int)arg1 + 1); + break; } + s = lock_user_string(arg0); + if (!s) { + goto do_fault; + } + ret = system(s); + unlock_user(s, arg0, 0); + common_semi_cb(cs, ret, ret == -1 ? errno : 0); + break; + case TARGET_SYS_ERRNO: - return get_swi_errno(cs); + common_semi_set_ret(cs, get_swi_errno(cs)); + break; + case TARGET_SYS_GET_CMDLINE: { /* Build a command-line from the original argv. @@ -999,22 +956,20 @@ target_ulong do_common_semihosting(CPUState *cs) if (output_size > input_size) { /* Not enough space to store command-line arguments. */ - errno = E2BIG; - return set_swi_errno(cs, -1); + common_semi_cb(cs, -1, E2BIG); + break; } /* Adjust the command-line length. */ if (SET_ARG(1, output_size - 1)) { /* Couldn't write back to argument block */ - errno = EFAULT; - return set_swi_errno(cs, -1); + goto do_fault; } /* Lock the buffer on the ARM side. */ output_buffer = lock_user(VERIFY_WRITE, arg0, output_size, 0); if (!output_buffer) { - errno = EFAULT; - return set_swi_errno(cs, -1); + goto do_fault; } /* Copy the command-line arguments. */ @@ -1029,9 +984,8 @@ target_ulong do_common_semihosting(CPUState *cs) if (copy_from_user(output_buffer, ts->info->arg_strings, output_size)) { - errno = EFAULT; - status = set_swi_errno(cs, -1); - goto out; + unlock_user(output_buffer, arg0, 0); + goto do_fault; } /* Separate arguments by white spaces. */ @@ -1044,9 +998,10 @@ target_ulong do_common_semihosting(CPUState *cs) #endif /* Unlock the buffer on the ARM side. */ unlock_user(output_buffer, arg0, output_size); - - return status; + common_semi_cb(cs, status, 0); } + break; + case TARGET_SYS_HEAPINFO: { target_ulong retvals[4]; @@ -1103,12 +1058,13 @@ target_ulong do_common_semihosting(CPUState *cs) if (fail) { /* Couldn't write back to argument block */ - errno = EFAULT; - return set_swi_errno(cs, -1); + goto do_fault; } } - return 0; + common_semi_set_ret(cs, 0); } + break; + case TARGET_SYS_EXIT: case TARGET_SYS_EXIT_EXTENDED: if (common_semi_sys_exit_extended(cs, nr)) { @@ -1138,6 +1094,7 @@ target_ulong do_common_semihosting(CPUState *cs) } gdb_exit(ret); exit(ret); + case TARGET_SYS_ELAPSED: elapsed = get_clock() - clock_start; if (sizeof(target_ulong) == 8) { @@ -1146,10 +1103,14 @@ target_ulong do_common_semihosting(CPUState *cs) SET_ARG(0, (uint32_t) elapsed); SET_ARG(1, (uint32_t) (elapsed >> 32)); } - return 0; + common_semi_set_ret(cs, 0); + break; + case TARGET_SYS_TICKFREQ: /* qemu always uses nsec */ - return 1000000000; + common_semi_set_ret(cs, 1000000000); + break; + case TARGET_SYS_SYNCCACHE: /* * Clean the D-cache and invalidate the I-cache for the specified @@ -1158,16 +1119,24 @@ target_ulong do_common_semihosting(CPUState *cs) */ #ifdef TARGET_ARM if (is_a64(cs->env_ptr)) { - return 0; + common_semi_set_ret(cs, 0); + break; } #endif #ifdef TARGET_RISCV - return 0; + common_semi_set_ret(cs, 0); #endif /* fall through -- invalid for A32/T32 */ default: fprintf(stderr, "qemu: Unsupported SemiHosting SWI 0x%02x\n", nr); cpu_dump_state(cs, stderr, 0); abort(); + + do_badf: + common_semi_cb(cs, -1, EBADF); + break; + do_fault: + common_semi_cb(cs, -1, EFAULT); + break; } } diff --git a/target/arm/helper.c b/target/arm/helper.c index 40da63913c..902abe67cf 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -10313,13 +10313,13 @@ static void handle_semihosting(CPUState *cs) qemu_log_mask(CPU_LOG_INT, "...handling as semihosting call 0x%" PRIx64 "\n", env->xregs[0]); - env->xregs[0] = do_common_semihosting(cs); + do_common_semihosting(cs); env->pc += 4; } else { qemu_log_mask(CPU_LOG_INT, "...handling as semihosting call 0x%x\n", env->regs[0]); - env->regs[0] = do_common_semihosting(cs); + do_common_semihosting(cs); env->regs[15] += env->thumb ? 2 : 4; } } diff --git a/target/arm/m_helper.c b/target/arm/m_helper.c index a740c3e160..308610f6b4 100644 --- a/target/arm/m_helper.c +++ b/target/arm/m_helper.c @@ -2373,7 +2373,7 @@ void arm_v7m_cpu_do_interrupt(CPUState *cs) "...handling as semihosting call 0x%x\n", env->regs[0]); #ifdef CONFIG_TCG - env->regs[0] = do_common_semihosting(cs); + do_common_semihosting(cs); #else g_assert_not_reached(); #endif diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index d99fac9d2d..4ace38214c 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -1345,7 +1345,7 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (cause == RISCV_EXCP_SEMIHOST) { if (env->priv >= PRV_S) { - env->gpr[xA0] = do_common_semihosting(cs); + do_common_semihosting(cs); env->pc += 4; return; } From patchwork Tue Jun 7 20:45:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579412 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5564645max; Tue, 7 Jun 2022 15:24:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy2I1svNWrCHoVQ9TJVcwCCLO3bK9p6cKAUX0qqQcAgrOsz+nygcMTH36CjvWjvxTMAg8md X-Received: by 2002:a05:622a:1208:b0:304:cb1c:8b0d with SMTP id y8-20020a05622a120800b00304cb1c8b0dmr25463386qtx.615.1654640652219; Tue, 07 Jun 2022 15:24:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640652; cv=none; d=google.com; s=arc-20160816; b=fygFA9hR4egjTqtBPT9k/c9gNF+OMiGmwyf2t8YoMmcuuI+gfObo61WXqNmZJiuHmP ZWfwUImmDyjNfTs39UeCpZ8/wy6fP9jD3p9QxTYww3urjGbOqeVx2CZHxi/jSurYwbAi sHqaWkFYuQnqmJhBqHMTCHUQ4D39tPRL7PrrJy2qH0Uno31iOuDZWG0giEBSBLRZM9cM zQW8165DZHMFWlDBj+KTVPGaV26u5NmCEEyrbtk3+VO7hrj+Fxp15E7MOoa5bzh2AzeK /c3fDnRPcka1BpoKsJa5May669hXN8KxXApEsR2fkPevnpjN43OWUfgvZMbG9PqIX1E5 jOtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=uMtpnimZ5QgXW0nogoQSK/48rYQQQjk5GcZeidEuLkk=; b=JQbleEZSzB6lXHywKOSV6acfJ3Pxtk+gtdK6emToEDhfyp/AvWObs+PZd5KKvrOuVd LmLA2yumpjsTyBuAS+OLsk3RMniWm+Gv4G0KG67tHXQgZgtIvE/wmZobgXictBq9pE0U Q+4HXQHM3vNVy04xavmFvwinbhHORUb/dYHb+Ig19/1zRnV8quYWk/+02+LqIpjycd2r 3hVww5+AsNfzarUFT0+cuRLKwb8F4TzIavrUI11oGbobx+oRZDNc2ItI7dyuyL2cy5tb TVk372oD+cFd2ST6YiGLAdkf0vfwql5Xc00UCGoU1Au0okf+fta7ycfjE/Ygk/jG8JHu 5/RQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="RC0kdQV/"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id a6-20020ad45c46000000b00464470ce07fsi11060330qva.178.2022.06.07.15.24.12 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:24:12 -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; dkim=pass header.i=@linaro.org header.s=google header.b="RC0kdQV/"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:39174 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhcR-00080o-P4 for patch@linaro.org; Tue, 07 Jun 2022 18:24:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5f-0007Es-EQ for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:15 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:46854) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5d-0001MI-KR for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:14 -0400 Received: by mail-pf1-x42c.google.com with SMTP id j6so16493793pfe.13 for ; Tue, 07 Jun 2022 13:46:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uMtpnimZ5QgXW0nogoQSK/48rYQQQjk5GcZeidEuLkk=; b=RC0kdQV/uPNhqLm72RijpkLUF5L7QVTprW9SL39brQvjT6o5QBz4J/fq5YEncTAy8T bnRFmfZoSGbgv8VOgbXBUx1MLAVr2XzNj8XnNdJkomCDccym0iHRjZKkpkRGN6cwr/Uq zl0WINYYS6bIvE75X3ZGo8st8s+W/1cbm9ofMDcp8XQuXIMTCS4ih+4QF87wtGglBl6K 0ghVFSHt1odqsJo/AFtyTOHy1+akXD0oo22n7JQFmraO3YHHf2PfW8WV9J0d5/Mx5PHY sDdLfHGNV7qGea+SDyOkmqzi3llNM32mdwR4nirxa4gTGqXgjqZoeCdsTp0jEJyhcECn 45/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uMtpnimZ5QgXW0nogoQSK/48rYQQQjk5GcZeidEuLkk=; b=pylZ5s2VKaEvP9J7w2nFvgd1A3qjF9jHdugdZbT4g+GkyEdsoBUno/5G+bBO7SpGna BY3b7KSc0oMpI1bBKl7PXYPzZfc+Qwmk8GCW7yUCPyzInIKxl6Dav0iNEEoZmY+Sv4WA haepEcmoTS8PM7U0OY/1//1bQRZ/CpOUmcRM4ohfJwS3KHt4MRK3XYPXl6D66bljbkXI aCmxFw0UzS9a75HnFLpRmf5YQie6I0SbHyYIG4adg9rWzBlB/K8X0df4Sq/DHJrWjtvz ir6s3wNXTfv8h+SEuxYWyREITfYWcAbOHpexe3lmqW9zqVa3DToUZ+ju2OzWkjs/vKLf vrvQ== X-Gm-Message-State: AOAM530IYpKXf3mh1H2yUnsPwbj8hJoCg8dfqyn8qxRunOtGBqka6jbs QODBlh1yPpXrgHaXpL7X2XEnskxcQe4Hog== X-Received: by 2002:a05:6a00:a04:b0:51b:6ea0:43ca with SMTP id p4-20020a056a000a0400b0051b6ea043camr30940093pfh.78.1654634772020; Tue, 07 Jun 2022 13:46:12 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 14/53] semihosting: Move common-semi.h to include/semihosting/ Date: Tue, 7 Jun 2022 13:45:18 -0700 Message-Id: <20220607204557.658541-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This header is not private to the top-level semihosting directory, so place it in the public include directory. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- {semihosting => include/semihosting}/common-semi.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {semihosting => include/semihosting}/common-semi.h (100%) diff --git a/semihosting/common-semi.h b/include/semihosting/common-semi.h similarity index 100% rename from semihosting/common-semi.h rename to include/semihosting/common-semi.h From patchwork Tue Jun 7 20:45:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579394 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5550552max; Tue, 7 Jun 2022 15:03:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyx3dIaFoNSVoB79MJBVtgOJm3UCqKtc8tqnISOHPA+x1PB2tR7c6vU7mKNTBqcpZnVGatj X-Received: by 2002:a37:a64c:0:b0:6a6:c320:bb3f with SMTP id p73-20020a37a64c000000b006a6c320bb3fmr7830329qke.12.1654639439089; Tue, 07 Jun 2022 15:03:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639439; cv=none; d=google.com; s=arc-20160816; b=nSPr0ApuL1ZUDiKvRvvkKQ9akY7efK673KCQuxiWNPi9tC6ngcNEKikYlK9JDvsJR+ fnr0sh3xz3ptrTMK3PcKThIi7nV9uhPHuR2GruuhilAxnNF28bzuutuGmauE6P09+G5B ETdlNZ3egI13oal5NNZvngWykb6sQulibjwnPEnmxVLk+7lqFY956RhthYi0AUHdT1uV d79GmW+jPgNFFmk4KE7jfKvnfukDESXF1A4qnmvzHfPKZJEDoAvWjJsz+9godqarvYHQ sTDbn25o2dYJ4LJ5XSqo3yJ8VFkKgcfVAQEacnPWaihZ+LfpE3ByuJFoNOk5LO9GYV0U WcOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=iN+ZQSw54uXkjIjlKW1pFe1Mm40xsm8fxs3pFQz2QI0=; b=CmhV+OmEmHB8psML+ppFuxXg2nNcsekvDSC5gmkiNOaGgyIl4qkEVoqkJxySfpwyed l7Xenz2nERjrzK32HXMqkzXol93xTdQlN0Pv5qSsN2Pu3B0vIJTIIQy7v3tCUAZRA8iA d7sjDZVBImusdJRfN/krz4HwduDnd2BwV80iIyVTqEsuvqgbOr1lWiE/wUTDgiqm+EOo Q9dGWa2rdDA9i2pQv6ZzZM772FP+oaZDN8w132jRA/Una0EF00si8C8dpvrVCF85nBhv gfyVzmANV8v96V1nS64G58e2unf/z+cZPFtqCUspxp/iFIN/j1JTQsnc7TA1xndi7cjQ s41A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=vicYudqv; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id v18-20020a05622a015200b002f9175beab3si9250231qtw.208.2022.06.07.15.03.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:03:59 -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; dkim=pass header.i=@linaro.org header.s=google header.b=vicYudqv; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:58204 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhIr-0003xq-LQ for patch@linaro.org; Tue, 07 Jun 2022 18:03:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5g-0007FV-90 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:17 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:40890) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5d-0001JY-MY for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:16 -0400 Received: by mail-pg1-x52c.google.com with SMTP id f65so6779229pgc.7 for ; Tue, 07 Jun 2022 13:46:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=iN+ZQSw54uXkjIjlKW1pFe1Mm40xsm8fxs3pFQz2QI0=; b=vicYudqvcclxAoOqhlETQImNvV4SEX43HVC9LQhd4A+ubPugNW3ke7QwdDZhdwKKu+ anV6wXdhT4tQmEePESyaCA+cpPu2SFHxms4bGDoKnvgIOHAupKo/5hJqFB5uMFVqJF4S PzIx657g6m+QYMldnfO0I0m5MpjdN/QxLKPceUvj9muUxZ+SES6sHm7/yQ4Luni7BHRF 22ZFBetSe575uPXBVNZQL709ISV/BgAPUtLQiNIIZJ3SrrDw++wjh7FmvmwDISjeU0IP ekFkyW/lwk0cA8hsBso80eUilDbtoiSOnjxOj10r8EdiP+6nVv5yJllMQJsSQznefT/b sv6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iN+ZQSw54uXkjIjlKW1pFe1Mm40xsm8fxs3pFQz2QI0=; b=f+P9ogxx1kc/cG4+Sa+AC28njR7WRCoZnYjsy62MFMoi3PmNleby5DQhRo4xl1dZC1 cEz9D4MNt8aB3/XYjSZ0sfrOr8b8ms/Et+u8jlAWkwXVDjKWrDzT4sFHUyf3FJVtr7Im qVghBk42CQOnIFaOdSaCQ5mkUZFZTi+HKstRWiYsJTzIyVUUK4PXgT+xb4lR9cVuHAyo ml5lyRFiDhTp8vJEUfWYaDBqxmjyNu5Fj21C36JaxiUN/K9KA0VWHcPHU4FBuAArvAVg +EY8dk79P1bcflrYCBj4ivN5IqdCGATYYPJlaVUysodzswWJziCVKvs3cVMLc5UkW82e 3SGw== X-Gm-Message-State: AOAM530/plrt701JRLRNcX+8WQeUse76uxDt2b2IyIO9mX1PQhgJpeib m+XUmzeBLGOpEEGALkaWYFzGyyn6xCqlPw== X-Received: by 2002:a63:90c9:0:b0:3fc:f0c9:d0f with SMTP id a192-20020a6390c9000000b003fcf0c90d0fmr24091360pge.608.1654634772915; Tue, 07 Jun 2022 13:46:12 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 15/53] semihosting: Remove GDB_O_BINARY Date: Tue, 7 Jun 2022 13:45:19 -0700 Message-Id: <20220607204557.658541-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, UPPERCASE_50_75=0.008 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The value is zero, and gdb always opens files in binary mode. Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- semihosting/arm-compat-semi.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index cebbad2355..92c1375b15 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -92,21 +92,20 @@ #define GDB_O_APPEND 0x008 #define GDB_O_CREAT 0x200 #define GDB_O_TRUNC 0x400 -#define GDB_O_BINARY 0 static int gdb_open_modeflags[12] = { GDB_O_RDONLY, - GDB_O_RDONLY | GDB_O_BINARY, + GDB_O_RDONLY, + GDB_O_RDWR, GDB_O_RDWR, - GDB_O_RDWR | GDB_O_BINARY, GDB_O_WRONLY | GDB_O_CREAT | GDB_O_TRUNC, - GDB_O_WRONLY | GDB_O_CREAT | GDB_O_TRUNC | GDB_O_BINARY, + GDB_O_WRONLY | GDB_O_CREAT | GDB_O_TRUNC, + GDB_O_RDWR | GDB_O_CREAT | GDB_O_TRUNC, GDB_O_RDWR | GDB_O_CREAT | GDB_O_TRUNC, - GDB_O_RDWR | GDB_O_CREAT | GDB_O_TRUNC | GDB_O_BINARY, GDB_O_WRONLY | GDB_O_CREAT | GDB_O_APPEND, - GDB_O_WRONLY | GDB_O_CREAT | GDB_O_APPEND | GDB_O_BINARY, + GDB_O_WRONLY | GDB_O_CREAT | GDB_O_APPEND, + GDB_O_RDWR | GDB_O_CREAT | GDB_O_APPEND, GDB_O_RDWR | GDB_O_CREAT | GDB_O_APPEND, - GDB_O_RDWR | GDB_O_CREAT | GDB_O_APPEND | GDB_O_BINARY }; static int open_modeflags[12] = { From patchwork Tue Jun 7 20:45:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579407 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5562380max; Tue, 7 Jun 2022 15:20:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw041DP6dOdYixvkAlpDPtwjPmRCOpKq6G5m3eNxzpGdO/nU5KSmLtGPxMsjawut7LEl6EB X-Received: by 2002:a05:6214:27cd:b0:46a:a9cb:7aed with SMTP id ge13-20020a05621427cd00b0046aa9cb7aedmr14466084qvb.9.1654640423514; Tue, 07 Jun 2022 15:20:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640423; cv=none; d=google.com; s=arc-20160816; b=U+SKGC9n2+58FaLq8553EUwOsIim2Nb50megRlCJcguVLuMg1ej9EWh0sch9HGjLFz 8HLBOnhLBipcPynoBkoAbn/mv8OH1/6vZTVapKuY/GFJBuaQiQxZSSHA95VzahgpjwRs JKSuOBiPNC+qXsqQU72HStSDMyKVDVbcvQWvS9sGBN8x2fBbGTXfGfUUdUkpSKEpRO0P DLUPDKxejVFfzkLMXTEiBgmsiVBw+gFPb1bowj8ENTyvzLrGQ1KWbhpNzVHvycV16SO2 nVZqh2wMosTBoH8KfDMhsLE9BINoCe6o5sW1POyAK9b+BIe+UtPAABlgkr8gjZA/ZsES zCPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=0Xz6wzUwopMbPAdNCjdjT86fVDAwIGV9xu3XdWWd8EM=; b=pFAdNY2vGLDOapu36l9atSwebj/huIe++ZQhmtun4yMKSSg4lmVuDRbkqacvDN+jbK 5pDA/4LDdCtlnSsWx6Yl4Mi4g1C48tExmUmZJRoDPW96sIRHUZ+LHkn3nRItr/5MyTeX Diuk2Q0kTGgNmVj69PB9nAelU4OpVmK5qcQM/i9X/w5WQa8vyyE4QO0vEbNGRmxvyQNA RKMME81IgDtxIp6JTTSupkZQCyybdSF8KxRD62/jRkpMR3/tAvgVi8LRtsD1KskEcpzS Hpii/7n5x3w4qMV6Iaaji4LLIfFFwR5g98l7OZUjV78xh5xfOpmKN+sslgeTd+a/IhZd MvFg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LvGCXFSx; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id r199-20020a37a8d0000000b006a6a7a6f9b4si6471669qke.615.2022.06.07.15.20.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:20:23 -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; dkim=pass header.i=@linaro.org header.s=google header.b=LvGCXFSx; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:58074 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhYk-0000lb-Ue for patch@linaro.org; Tue, 07 Jun 2022 18:20:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38964) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5i-0007Gb-4c for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:21 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:53946) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5f-0001MZ-69 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:17 -0400 Received: by mail-pj1-x1033.google.com with SMTP id a10so16678680pju.3 for ; Tue, 07 Jun 2022 13:46:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0Xz6wzUwopMbPAdNCjdjT86fVDAwIGV9xu3XdWWd8EM=; b=LvGCXFSx5Ydt0+i3bT9OWIxQblSrj0qBB7svNQJUy1PsdZA6qMCxw05PdAHM3iaO3i xRCysyecZ7aTHJu82Xrw/2pH9RB2fpRlQ2Rt+1mbmHzMjH5SJ8IHvZIvL6r1/q60vY8p IVKSepQmC4wjQjl1+YiAl2kzPC+p4I26DlhK2IwOkUjY3dW2Dn+7zDvQrfa5TnphKauj q4fS7+gkHMGzZjVBL0m/c6Xo0jYkNpwbTcTQHCZqAAWRWw4pPIOjiK+Z9pRo6pKgkhB5 CKysTEFQ7laGGPQ8EECvKFTiCXqYd2IxLNbyWgO9WnjXn8avP71ilUA4yBbmJ25/Pryc yVmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0Xz6wzUwopMbPAdNCjdjT86fVDAwIGV9xu3XdWWd8EM=; b=ax+93+I8QPBvNSPCKeA8uxdr6/4EkzrOleLgdzMINGBib/bRaqynvea++dxrkXCF+z +fc5l4kWD57NM1N7aeCAo2JDMX1avOu6140ir8G/JEWM8FqVODN1EmOuFiyqImZ0se8M cU7QBPw97jU+FzOc4LeLJcTzMyfkgN4AgE9RThXCGK8tkw7xyPpZWpa/dtF5CmxqWhk+ PxCln0AsAkJtjtC8M+7kVkNYblWPipySDMiVzJ6Zqpbeh4rzdSDtf/5gXC+8ncKaR16c AGBzQ3TqLKzCrxvnV5MZyKjTW+sleeSazSmnmp2z31fDjKEwBlqtCnGKPu+MIC9FbO5V ho9Q== X-Gm-Message-State: AOAM533F97h0uu5psKmYtOGqfug8c+D4ZEphF0dzki8RYLy/Q7azZbS9 xtG7eOPgK6ecGhbszu6ayttsE+QDnyip3Q== X-Received: by 2002:a17:903:1103:b0:167:839e:7ba1 with SMTP id n3-20020a170903110300b00167839e7ba1mr10168500plh.136.1654634773851; Tue, 07 Jun 2022 13:46:13 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?utf-8?q?Alex_Benn=C3=A9e?= , Peter Maydell Subject: [PATCH v4 16/53] include/exec: Move gdb open flags to gdbstub.h Date: Tue, 7 Jun 2022 13:45:20 -0700 Message-Id: <20220607204557.658541-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" There were 3 copies of these flags. Place them in the file with gdb_do_syscall, with which they belong. Reviewed-by: Alex Bennée Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/gdbstub.h | 9 +++++++++ semihosting/arm-compat-semi.c | 7 ------- target/m68k/m68k-semi.c | 8 -------- target/nios2/nios2-semi.c | 8 -------- 4 files changed, 9 insertions(+), 23 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index c35d7334b4..603e22ae80 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -10,6 +10,15 @@ #define GDB_WATCHPOINT_READ 3 #define GDB_WATCHPOINT_ACCESS 4 +/* For gdb file i/o remote protocol open flags. */ +#define GDB_O_RDONLY 0 +#define GDB_O_WRONLY 1 +#define GDB_O_RDWR 2 +#define GDB_O_APPEND 8 +#define GDB_O_CREAT 0x200 +#define GDB_O_TRUNC 0x400 +#define GDB_O_EXCL 0x800 + #ifdef NEED_CPU_H #include "cpu.h" diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 92c1375b15..abf543ce91 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -86,13 +86,6 @@ #define O_BINARY 0 #endif -#define GDB_O_RDONLY 0x000 -#define GDB_O_WRONLY 0x001 -#define GDB_O_RDWR 0x002 -#define GDB_O_APPEND 0x008 -#define GDB_O_CREAT 0x200 -#define GDB_O_TRUNC 0x400 - static int gdb_open_modeflags[12] = { GDB_O_RDONLY, GDB_O_RDONLY, diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index a31db38fc3..475a6b13b7 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -69,14 +69,6 @@ struct gdb_timeval { uint64_t tv_usec; /* microsecond */ } QEMU_PACKED; -#define GDB_O_RDONLY 0x0 -#define GDB_O_WRONLY 0x1 -#define GDB_O_RDWR 0x2 -#define GDB_O_APPEND 0x8 -#define GDB_O_CREAT 0x200 -#define GDB_O_TRUNC 0x400 -#define GDB_O_EXCL 0x800 - static int translate_openflags(int flags) { int hf; diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index 373e6b9436..0eec1f9a1c 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -71,14 +71,6 @@ struct gdb_timeval { uint64_t tv_usec; /* microsecond */ } QEMU_PACKED; -#define GDB_O_RDONLY 0x0 -#define GDB_O_WRONLY 0x1 -#define GDB_O_RDWR 0x2 -#define GDB_O_APPEND 0x8 -#define GDB_O_CREAT 0x200 -#define GDB_O_TRUNC 0x400 -#define GDB_O_EXCL 0x800 - static int translate_openflags(int flags) { int hf; From patchwork Tue Jun 7 20:45:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579417 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5568326max; Tue, 7 Jun 2022 15:29:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxgjvnl8NeQjh6b9tnK0n8laol2ZeCpmsGSXpbd79LP8JKeFGa+eafa2rlRzHjT3z6EzX/J X-Received: by 2002:ac8:5dca:0:b0:304:e1e2:8a17 with SMTP id e10-20020ac85dca000000b00304e1e28a17mr18558256qtx.12.1654640977950; Tue, 07 Jun 2022 15:29:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640977; cv=none; d=google.com; s=arc-20160816; b=H7wmg1VxZUTn27tN14Sk18LpQWZPDFlvBLZDF6TRCTK/toOrVIYWAX4gy9eCeAG+lu Ar7lGGcqGgKKCSkqgrHqKD0lX9xDNEeD/fLFasBtcnTgb66b3xIdZtGdsPILfcnSPshK cHuidIqBCsVsZYtZXgBZZUsghlhbySjAWk0oo/SJgqya1YF0cQyKfqV5Se3A2gbasOsH i8QwDXn2v50R42ZfFlSydn2bQntD86LrU8JD2SBLvI2Vzt7EyXrG+he/igrtGWJjByjd MdzYGidy0WCewf3cIW1I92+rO5j9lsIAvG/LKjiHCyD2QQWNkuEwXccjz+wAtW1K9vA5 Sc6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=oxNDqSzg5Hw13giw27gxbf2VZjOoolDUxgjGkiB+OjI=; b=1D/MVvv5suS3Vv0rUVd1ai2OAiEDhsdA2OuQfGPu0dtLXvY7sbna18d/tL76zpePDu zJTlTPL7TSu3VQX+68QWDoXA8l7bLXu+BrKNlzTKhpSEhPI2j3VL6d1umlpHlIZ/06l8 Uhh2cy8XZpaSCl5QxahQJSxu9ePnjGIDpefFBRznWZoSzd8AZorLJTTtJjECz259rtjY E44JThoiM7gbIboiDGeFE8OkEyoZp8Afn2dsxzQAQa/2lzkXbvAxc1Rl3rZIOgK8sqUP +0NY6r20Axa4ARNSmtAGYA83w8Yr2ANmNVkcXU+PPgERKaL2EW7tSaFVgToTcmCf73n1 T3aA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=g7GI5eJj; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id w17-20020a05622a191100b00304e2c56e8bsi7558738qtc.177.2022.06.07.15.29.37 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:29:37 -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; dkim=pass header.i=@linaro.org header.s=google header.b=g7GI5eJj; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:50306 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhhg-00078s-Qr for patch@linaro.org; Tue, 07 Jun 2022 18:29:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38966) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5i-0007Gd-4o for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:21 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:33404) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5g-0001Mg-0s for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:17 -0400 Received: by mail-pg1-x533.google.com with SMTP id r71so17015993pgr.0 for ; Tue, 07 Jun 2022 13:46:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oxNDqSzg5Hw13giw27gxbf2VZjOoolDUxgjGkiB+OjI=; b=g7GI5eJj97SG063ZqeBvHi0ZQ1Fg4ZJa9fqxmZzolElaodj9My3CQg19R6wbsGHHHV MeBqcjDlnlQRlp46WQsb5FJEtaFGp8aoX7jsPuPcTOL49AU0fwNr9oJwZL8g22+ahPtZ OIfckUhDnDhghe7Q0A3pwyHYpjdgdsn+w6FAzJhGwmzXSj0AnbpPbx5oZ8hX77GDl74f i4JAJOKjFyG5nImS0NqkZeARvUpQumUZNDCJCUbShw4gJ2TUyRO4FtdZ8Nz7Yx6CIRMo ToR4F+2gcgV/Wsd5sYV7i23FVlqjGCVIq7p6zvkgHa7gnFgfFsIDTFLTgGe2ix8+r/5D bdHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oxNDqSzg5Hw13giw27gxbf2VZjOoolDUxgjGkiB+OjI=; b=Co5p3J8T0Pqj3tXJIIAwHKk3hSFTplEJr2Y/s14p2UjZVs3Horx3jQUJ8X128ZTutf h68XX+3rjnVnG6XUxwuiIOd81LxOVJ9cWKaBZayqQ+PNJQC5gGmrR59jHgpMfDWEX2r/ 2BxLwGiyw+98da/bJUUVXjT8Xyg0hcGBqHXuW+F13yajmEENQCWDGaR8WJKGNoK1TjsP SlNCj49+7miyuwccdE6tlZa/dJnGhQcivdDKzZh99Jm3KpiqktSkBkqNFi5VTBFpsFxh 5/gT3j/Gx5PAA2vST1kc7jYommkYaCV136JP0QXiADDGIIEuUYvPoXPg5221Bp6VtGrO Ow0w== X-Gm-Message-State: AOAM5308jCB9mIlIkiaVJ8QVLxvL9UgGiNQOqkSPLtQh+gJuFqKVArbv 4arFE90ss2AJ8CETusMGoFt7b4lE9NY++w== X-Received: by 2002:a05:6a00:148d:b0:51c:4b1e:9436 with SMTP id v13-20020a056a00148d00b0051c4b1e9436mr2407066pfu.38.1654634774659; Tue, 07 Jun 2022 13:46:14 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?utf-8?q?Alex_Benn=C3=A9e?= , Peter Maydell Subject: [PATCH v4 17/53] include/exec: Move gdb_stat and gdb_timeval to gdbstub.h Date: Tue, 7 Jun 2022 13:45:21 -0700 Message-Id: <20220607204557.658541-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We have two copies of these structures, and require them in semihosting/ going forward. Reviewed-by: Alex Bennée Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/gdbstub.h | 25 +++++++++++++++++++++++++ target/m68k/m68k-semi.c | 32 +++++--------------------------- target/nios2/nios2-semi.c | 30 +++--------------------------- 3 files changed, 33 insertions(+), 54 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 603e22ae80..7413ffeba2 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -19,6 +19,31 @@ #define GDB_O_TRUNC 0x400 #define GDB_O_EXCL 0x800 +/* For gdb file i/o stat/fstat. */ +typedef uint32_t gdb_mode_t; +typedef uint32_t gdb_time_t; + +struct gdb_stat { + uint32_t gdb_st_dev; /* device */ + uint32_t gdb_st_ino; /* inode */ + gdb_mode_t gdb_st_mode; /* protection */ + uint32_t gdb_st_nlink; /* number of hard links */ + uint32_t gdb_st_uid; /* user ID of owner */ + uint32_t gdb_st_gid; /* group ID of owner */ + uint32_t gdb_st_rdev; /* device type (if inode device) */ + uint64_t gdb_st_size; /* total size, in bytes */ + uint64_t gdb_st_blksize; /* blocksize for filesystem I/O */ + uint64_t gdb_st_blocks; /* number of blocks allocated */ + gdb_time_t gdb_st_atime; /* time of last access */ + gdb_time_t gdb_st_mtime; /* time of last modification */ + gdb_time_t gdb_st_ctime; /* time of last change */ +} QEMU_PACKED; + +struct gdb_timeval { + gdb_time_t tv_sec; /* second */ + uint64_t tv_usec; /* microsecond */ +} QEMU_PACKED; + #ifdef NEED_CPU_H #include "cpu.h" diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index 475a6b13b7..b886ebf714 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -45,30 +45,6 @@ #define HOSTED_ISATTY 12 #define HOSTED_SYSTEM 13 -typedef uint32_t gdb_mode_t; -typedef uint32_t gdb_time_t; - -struct m68k_gdb_stat { - uint32_t gdb_st_dev; /* device */ - uint32_t gdb_st_ino; /* inode */ - gdb_mode_t gdb_st_mode; /* protection */ - uint32_t gdb_st_nlink; /* number of hard links */ - uint32_t gdb_st_uid; /* user ID of owner */ - uint32_t gdb_st_gid; /* group ID of owner */ - uint32_t gdb_st_rdev; /* device type (if inode device) */ - uint64_t gdb_st_size; /* total size, in bytes */ - uint64_t gdb_st_blksize; /* blocksize for filesystem I/O */ - uint64_t gdb_st_blocks; /* number of blocks allocated */ - gdb_time_t gdb_st_atime; /* time of last access */ - gdb_time_t gdb_st_mtime; /* time of last modification */ - gdb_time_t gdb_st_ctime; /* time of last change */ -} QEMU_PACKED; - -struct gdb_timeval { - gdb_time_t tv_sec; /* second */ - uint64_t tv_usec; /* microsecond */ -} QEMU_PACKED; - static int translate_openflags(int flags) { int hf; @@ -90,11 +66,13 @@ static int translate_openflags(int flags) static void translate_stat(CPUM68KState *env, target_ulong addr, struct stat *s) { - struct m68k_gdb_stat *p; + struct gdb_stat *p; - if (!(p = lock_user(VERIFY_WRITE, addr, sizeof(struct m68k_gdb_stat), 0))) + p = lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); + if (!p) { /* FIXME - should this return an error code? */ return; + } p->gdb_st_dev = cpu_to_be32(s->st_dev); p->gdb_st_ino = cpu_to_be32(s->st_ino); p->gdb_st_mode = cpu_to_be32(s->st_mode); @@ -114,7 +92,7 @@ static void translate_stat(CPUM68KState *env, target_ulong addr, struct stat *s) p->gdb_st_atime = cpu_to_be32(s->st_atime); p->gdb_st_mtime = cpu_to_be32(s->st_mtime); p->gdb_st_ctime = cpu_to_be32(s->st_ctime); - unlock_user(p, addr, sizeof(struct m68k_gdb_stat)); + unlock_user(p, addr, sizeof(struct gdb_stat)); } static void m68k_semi_return_u32(CPUM68KState *env, uint32_t ret, uint32_t err) diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index 0eec1f9a1c..3e504a6c5f 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -47,30 +47,6 @@ #define HOSTED_ISATTY 12 #define HOSTED_SYSTEM 13 -typedef uint32_t gdb_mode_t; -typedef uint32_t gdb_time_t; - -struct nios2_gdb_stat { - uint32_t gdb_st_dev; /* device */ - uint32_t gdb_st_ino; /* inode */ - gdb_mode_t gdb_st_mode; /* protection */ - uint32_t gdb_st_nlink; /* number of hard links */ - uint32_t gdb_st_uid; /* user ID of owner */ - uint32_t gdb_st_gid; /* group ID of owner */ - uint32_t gdb_st_rdev; /* device type (if inode device) */ - uint64_t gdb_st_size; /* total size, in bytes */ - uint64_t gdb_st_blksize; /* blocksize for filesystem I/O */ - uint64_t gdb_st_blocks; /* number of blocks allocated */ - gdb_time_t gdb_st_atime; /* time of last access */ - gdb_time_t gdb_st_mtime; /* time of last modification */ - gdb_time_t gdb_st_ctime; /* time of last change */ -} QEMU_PACKED; - -struct gdb_timeval { - gdb_time_t tv_sec; /* second */ - uint64_t tv_usec; /* microsecond */ -} QEMU_PACKED; - static int translate_openflags(int flags) { int hf; @@ -102,9 +78,9 @@ static int translate_openflags(int flags) static bool translate_stat(CPUNios2State *env, target_ulong addr, struct stat *s) { - struct nios2_gdb_stat *p; + struct gdb_stat *p; - p = lock_user(VERIFY_WRITE, addr, sizeof(struct nios2_gdb_stat), 0); + p = lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); if (!p) { return false; @@ -128,7 +104,7 @@ static bool translate_stat(CPUNios2State *env, target_ulong addr, p->gdb_st_atime = cpu_to_be32(s->st_atime); p->gdb_st_mtime = cpu_to_be32(s->st_mtime); p->gdb_st_ctime = cpu_to_be32(s->st_ctime); - unlock_user(p, addr, sizeof(struct nios2_gdb_stat)); + unlock_user(p, addr, sizeof(struct gdb_stat)); return true; } From patchwork Tue Jun 7 20:45:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579420 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5570565max; Tue, 7 Jun 2022 15:32:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxMNiOvJejJXjBVFIokIQfzFot85TkgEYVyQIfiznnPsGMoZmbynn/IF084KMEPTV0CM2Ie X-Received: by 2002:a05:620a:31a4:b0:6a6:d53b:409 with SMTP id bi36-20020a05620a31a400b006a6d53b0409mr4567694qkb.292.1654641140586; Tue, 07 Jun 2022 15:32:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641140; cv=none; d=google.com; s=arc-20160816; b=G4vf1R2Gfyb9sqp65mAr9RZ4XqA8kZvYd+SSDqxwZtoIOxef1PRUvYNU2lt3wvMCtl fFOR4+MIID6z72013qJ3q9gBCCn91A89UEpmSGRJsXWG4olXjFPRNAWm9jv4B+fG3oJX 5P6tSp3dVR/8z66h7mOJJyrBaoesMJTq/U541QNGTAwbgRg2lRc2PceX4BqcLV2d7hsv 6j5n/25qEig69UlpqPOmjjzORPWgM+Fk/8oIUvtH/APJPWhycBNJye48K1pJYIlc6rtW GFdnutQQ79wxZ81G2EMm0ijQIBre4ZhjgqFH7IxqXXS1TAEYwGKYu3o0BIJAJI14nkBV mazg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=Kx+MEVjvVE2Ahq5JmBhmO/kM2x5CWc0DLkolZoxHrtg=; b=jTzvvJSx/SJCtUDhw1YatY50oDeIzgJP+oSWb4gaT9KSmLiIpc2xqE2xDYEyNvjdbD ygT99gta0Nww0Wxl2tfEt4Bbbrz08vQFiQporgVcngtyDBc0i6QAm5X6HExitUfVYR7q bpQInmvsWvwWnhXKCw0cacD4vgnPmye3xy5HeigsSnzR9MEzH+73ejo/y2OO4HVtxw1G mEJXxpHvI3EwG5e3/BEnQ8dcOh+o/0O8TvhekaRyFeIRXIJPI47vVQ4VofAIj5AEEZ/r USESis6h649zqpS8GCLtofqorEOoQTHgTroeM0vRCkwluuKRJ+eztKKA3InqNmQIiYbj Wr+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TmAe1kqu; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 4-20020ad45ba4000000b0046af6667767si5636234qvq.110.2022.06.07.15.32.20 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:32:20 -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; dkim=pass header.i=@linaro.org header.s=google header.b=TmAe1kqu; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:56028 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhkJ-0002ie-PU for patch@linaro.org; Tue, 07 Jun 2022 18:32:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38970) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5i-0007Gg-6e for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:21 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]:33405) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5g-0001Nf-Kr for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:17 -0400 Received: by mail-pg1-x534.google.com with SMTP id r71so17016008pgr.0 for ; Tue, 07 Jun 2022 13:46:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Kx+MEVjvVE2Ahq5JmBhmO/kM2x5CWc0DLkolZoxHrtg=; b=TmAe1kqu26MoZ3025tAqmAztniaP7vSJwLu18oFfWJar2vyqhsJMpzLhwbQ9SfCZNd F3yHo1q+kes19j/sTixS6NqgZU0xdjPnYY6yqFaJZ19WHdS9THn/UZCgEmWRDTJ9wBPy tUL6/1SKAnRm5sDp18WZhDo7QLzNPQX/4uyfsLiqTLCAUXdP5xpVxNoCgkItqJ2A5IQ8 qU0fBU5YUW3ajS/IEulXgdDkE7sxOMGLGIryCKvhpX6ZIViMps706oZnEPf1iqUO93KO tfl+UUG91LzXe+luTrwJ0C+vP1aVbhrvi4lvfzLWmw4TsMlg2Z1ikBnhRjUggQw33Shx u7ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Kx+MEVjvVE2Ahq5JmBhmO/kM2x5CWc0DLkolZoxHrtg=; b=2VbRZiRav2eulH0qRL86rD1elVqJJZrAa0azyhN0D+0J27mbpQdiu9TvsckcdGIKcF SQj9EcX2wZnMKOTsVHbgJg05+J46moI56wYjlP9dYt+OxomOScbnbVpv+pRB9vt56YWl 2bE0NRZeFR0MYYfJJV5h+iF2w1sTAq6cjtp2OBe9r/lkWWN8A9fSiM+jRJQ2kDz0C72V FlDoBkmdJHIgL7iBNLPYd2iTfPwq14X1Yt2yfO8/NwUBeL6Clw8FqL1okFTW1c6Ztrcc 75etdbwvkxfaaBWVznHK1pYdccs7Do1EkYmo4xFKnHM+QCRDJ6Rpx/NYOW9dN/nbOrcn lB+g== X-Gm-Message-State: AOAM531nuizymdnWP8pxXra7O5jGa8G8mXo9uaQPdjUXBvUA8cvRJ63Z 8nCdQ3Ogy8DWkgteDjmt3dhz7R61mK/ueg== X-Received: by 2002:a63:9142:0:b0:3fc:c021:e237 with SMTP id l63-20020a639142000000b003fcc021e237mr27412081pge.279.1654634775383; Tue, 07 Jun 2022 13:46:15 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 18/53] include/exec: Define errno values in gdbstub.h Date: Tue, 7 Jun 2022 13:45:22 -0700 Message-Id: <20220607204557.658541-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Define constants for the errno values defined by the gdb remote fileio protocol. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- include/exec/gdbstub.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 7413ffeba2..95a8b7b056 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -19,6 +19,28 @@ #define GDB_O_TRUNC 0x400 #define GDB_O_EXCL 0x800 +/* For gdb file i/o remote protocol errno values */ +#define GDB_EPERM 1 +#define GDB_ENOENT 2 +#define GDB_EINTR 4 +#define GDB_EBADF 9 +#define GDB_EACCES 13 +#define GDB_EFAULT 14 +#define GDB_EBUSY 16 +#define GDB_EEXIST 17 +#define GDB_ENODEV 19 +#define GDB_ENOTDIR 20 +#define GDB_EISDIR 21 +#define GDB_EINVAL 22 +#define GDB_ENFILE 23 +#define GDB_EMFILE 24 +#define GDB_EFBIG 27 +#define GDB_ENOSPC 28 +#define GDB_ESPIPE 29 +#define GDB_EROFS 30 +#define GDB_ENAMETOOLONG 91 +#define GDB_EUNKNOWN 9999 + /* For gdb file i/o stat/fstat. */ typedef uint32_t gdb_mode_t; typedef uint32_t gdb_time_t; From patchwork Tue Jun 7 20:45:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579416 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5566946max; Tue, 7 Jun 2022 15:27:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyu4oR41Rrt6pYg185Cz1tNJpoC1AZSYekKKw8K71Ou5DiOnGaq5iBd1djIqEfQ4uezdOnK X-Received: by 2002:a05:620a:1355:b0:6a6:be35:e22a with SMTP id c21-20020a05620a135500b006a6be35e22amr8752870qkl.700.1654640865051; Tue, 07 Jun 2022 15:27:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640865; cv=none; d=google.com; s=arc-20160816; b=yavzSSS5dSQMRPP7fZ/xV8Tz6cks1D7/uBCaauWjRexZpKG536FoLDdZqHb1l10dMP BNTxM1kCOqjJNOIvEsK4xa2FoYrOlxnWzHzVoxh4fG+VlaecQ6GY8a9rJDQin8iNT09t UUt2Jyr2RiLkactk3+ipysIJ+VQlgFGpBk8bHkX/jF/oGHl5jTQSAqqo/V1yGkwFfJ3/ b1HRiYQ/gCs2Hz8SrFD3q4e1oJ0yyB1W1bwJ8hYGtTGbwdTrKar4Ro7op1b0+S8koSpn ZTOlGv63+C0JuUvO/OmepJ7xaS1wHmE0e21qWSpTusMOGT5Vqq2+SMbvT2eh37eMtcj9 4mJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=DQgmHJOF15U5zzhYNDvf6Vx+wAM6Z86OsiDfINyn1f0=; b=qdKrXGIwyw3PemvGF6oR9oJ89cNIIMzkO5xv14pPwpLALhxDzS9kLgOokn7wK1jeif 5/3vbdAE7gv/WkYuYMuPexMQmTD+pyABf/TBKp4a7HK6k/UFuwhPTowvakKGNz5c4D0c uTmt86qC+VczoHvFaSFnDmjQhPtmL6z5P1Bjelj0XhkeN7JVyqyrJILs4uUN7EO6rY6Z GnJmmlo1q9cb+/SbnPELuqmVATlXb7VAIXyxlSGAHaLT/6AZgkWXYbk8jLbC2bGtOnlW 7ZUE7IkST42QXuf6l+AVxnnz9U1jdaQ/e36U3FmfostPpzUMIoc3aJgPK+NI5PR+8D0U C1ZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=mVZpV9NF; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id l3-20020a05620a28c300b006a3a9f1cf57si10725198qkp.513.2022.06.07.15.27.44 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:27:45 -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; dkim=pass header.i=@linaro.org header.s=google header.b=mVZpV9NF; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:47706 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhfr-0005Nn-Kl for patch@linaro.org; Tue, 07 Jun 2022 18:27:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39000) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5j-0007Gn-DP for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:23 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:35830) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5h-0001O6-QG for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:19 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 129so16993761pgc.2 for ; Tue, 07 Jun 2022 13:46:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=DQgmHJOF15U5zzhYNDvf6Vx+wAM6Z86OsiDfINyn1f0=; b=mVZpV9NFDPTM1fBkVtLtX+rVnpBVZIOO2qO1JOxSAjFezXoHS3+D56flBpQwvDcABq 4m57uM4S8FQTRFALwcHpUrWuusknLyalf6e3dqxwwdH+VwedyAEBNtyPmgIPOdl2ZjxR fmy5iaHNMvl083XVxS9FqZ7Gq/irz2lVvBgEGzNe23WzyoJDvvpwzdwhJTAEiKFzojZH CDHV8IDihrbhmyFRe4b1iMKUeWFqQ+apjrayjCYtBnrOi/S9SPqNtvvKAulASkP6DRdK OULy4WFNpQ5XJOWYrqJagn70Ii4hh92fO3n5UP+89Wajs0udFgwgKe3zR5wryZJe6hPT h72Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DQgmHJOF15U5zzhYNDvf6Vx+wAM6Z86OsiDfINyn1f0=; b=FQ5KAt/cc7EEvF98yjY+9MruISwzW8qdTHV0kIsds/nj7dlWiku2azkIz8NrT/mKbk BNvffuSPLAgJ+H06WwssKtcRSeNjGhZVP9sEwN/2+Hy75TIFC+3v1nvVcqVAQag+myn+ D9zCYvTgfysBJwgs3NGAdKNxuD+d9Qxf7jhFtLww+feAiyD2Il//2Ek8hLbuqkhUpx+K 5RnwV8IOvJjgWOWijH6Ypcb3cJ2Nxtlr32WVrGLRcxLjG64N3dQtDz/J3Z9hiwEdkDqB /8ZtiCf9MsyOCu+Vi9jFQlQQEpWB2ohycSVm+qSb3/XwX+GmrppPaaQIfTfUe6NLOyxU DXrQ== X-Gm-Message-State: AOAM533K1nh1ucI2C4GceVfvHZiiUjd7OjxTJjOWHoMJcHnVCfvPmNt6 wje0H/haRUhjrDmyjtSRQbBu3qR63sQUfA== X-Received: by 2002:a05:6a00:1502:b0:51c:2991:f1c with SMTP id q2-20020a056a00150200b0051c29910f1cmr9128470pfu.37.1654634776065; Tue, 07 Jun 2022 13:46:16 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 19/53] gdbstub: Convert GDB error numbers to host error numbers Date: Tue, 7 Jun 2022 13:45:23 -0700 Message-Id: <20220607204557.658541-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Provide the callback with consistent state -- always use host error numbers. The individual callback can then decide if the errno requires conversion for the guest. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- gdbstub.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index a3ff8702ce..ecc9d9cd6f 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1878,6 +1878,37 @@ static void handle_file_io(GArray *params, void *user_ctx) } else { err = 0; } + + /* Convert GDB error numbers back to host error numbers. */ +#define E(X) case GDB_E##X: err = E##X; break + switch (err) { + case 0: + break; + E(PERM); + E(NOENT); + E(INTR); + E(BADF); + E(ACCES); + E(FAULT); + E(BUSY); + E(EXIST); + E(NODEV); + E(NOTDIR); + E(ISDIR); + E(INVAL); + E(NFILE); + E(MFILE); + E(FBIG); + E(NOSPC); + E(SPIPE); + E(ROFS); + E(NAMETOOLONG); + default: + err = EINVAL; + break; + } +#undef E + gdbserver_state.current_syscall_cb(gdbserver_state.c_cpu, ret, err); gdbserver_state.current_syscall_cb = NULL; } From patchwork Tue Jun 7 20:45:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579413 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5565186max; Tue, 7 Jun 2022 15:25:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwzpPxW/0r3ej+4AEGJW6hWVPK0QqYG4/DDPY910y3n92iN9yjXBba2bcsR5qbJxg8CFXcl X-Received: by 2002:a05:6214:508a:b0:46b:97e7:e62c with SMTP id kk10-20020a056214508a00b0046b97e7e62cmr10366995qvb.26.1654640701849; Tue, 07 Jun 2022 15:25:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640701; cv=none; d=google.com; s=arc-20160816; b=XQLBDfymRaTfZUYqVkpgEUGkgswVWlSQsEsJGm3+lkHpw/5zZ5/WI3N9MvRyC4wx+k LZKq0XqlKxJkNqftjpAT1moFVdoibzJAPEKxfm5yM+k+z6Gvn9cZ+06tk6we7mTPeJk0 ecot90Aw01rCH5k+rG6vrKSxaUjJ2+5s4SWA3pJyU05OrTW4ll/nmHfMSqFC6Yc8ur47 fWxj8SPSgnRkvX2M4/+oo8jC5FIOfp8cL4lVT5byfeJ7EosVuqna2UHVgbkKjFv4KGOT CAkOaL/pOHUYpQ0cjUBcCpqQagnXQXqZDHZpOGGXPLe8suyrSr9fEE372B75Ot0H4V84 dCHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=+SUmfyQ28nnP+FCpGEWeUk9jn7QL0Ax1+bQ0aHyUN6Q=; b=ZsknGh7GXSh1ZfO6NNVlkFSvUJ5NTyksblhocDI+Pn7KWbkZ6W6bXWK2iq0Y+VSMrT QCc0jdEKREovXCvbwjJgmZ/VgghCgzWwmkl/JEw70q5KTUplYVQXXuDhBi3ixXD3/yG2 HbbbfV2tY0FGQo4qKomAMOzGpOs0GpMHYSEZrCv3tU5910hWaaUepYdBdbsySvwcDpos X5O5hpfkCit/TLZ6czB/Pqgpan2ONhj7zapfuyYFJpSiVhu9SgZ3W7DHB0w4mNq09D+l lRnpAP8/EmhpDC5wJFR7lswXAtE1kyYTLI6ou2JAluVCtTg9uwH0qfKVL0bfKj0+A1e9 tN9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rHTCta5i; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id j18-20020a05620a289200b006a3ae9bbe53si11502713qkp.7.2022.06.07.15.25.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:25: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; dkim=pass header.i=@linaro.org header.s=google header.b=rHTCta5i; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:41900 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhdF-0001OB-5h for patch@linaro.org; Tue, 07 Jun 2022 18:25:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38998) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5j-0007Gm-B3 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:21 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:46854) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5h-0001MI-Qt for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:19 -0400 Received: by mail-pf1-x42c.google.com with SMTP id j6so16493793pfe.13 for ; Tue, 07 Jun 2022 13:46:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+SUmfyQ28nnP+FCpGEWeUk9jn7QL0Ax1+bQ0aHyUN6Q=; b=rHTCta5iXLncsMhFb7Bkmg2PxayoLYRmlU5ineF1wvPoRBxJeM2QELlh8unW5hrg0w o+mbSWA1aYqmagWAy0l8FCM6CskIpDEzCu5aV3ka8chYljApPSpM+nbINE5boBrWJ/bI YumvnYe2jC+wkmCTxgPwJEq2vWUT7Iip2Vi53VntmLU352aJIJYTMvLFO0DFhY+Uuj7o XLT473yWCvLJzHgC9J69TzQE/1DCWjN9tZuaBphrcIT9wephRgJ6xQrwAvFgID98oDI9 k21Fu1ejHeNC+IBusqaogYo4+0Sa7+1EabRNCW/IOcowVeMDVNIYcA0a3Qgtd+6kkUqy xp6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+SUmfyQ28nnP+FCpGEWeUk9jn7QL0Ax1+bQ0aHyUN6Q=; b=quYOelOxOtsKxH+/WREvDvknK9MIsdPNZ35Brv/9lZFeh/QWFK3prKHb/lTDPb0qjP xOngjuViPbGvoUsIpn+KDw9m8rCOv4UJB3zx6N1JnW3gzllRSUaD7f8D/oqB70LqNNPZ K6PLr8tIgtFZqpC0isuDJ5NArj94nnztAl7/r9mq1m4M03CxnMFxMGBCi6YbCtvjWJ0+ OcOcCr5KEeA++3RjQgJBxMPD1IGd8cFhIuN2Q9evfGV519zRa+Opyo1oFC3Wob8MR1co MqXbpHTtz7+lePsqCBPUDV5TpQQyCgCsKNc+Ll82PsHfAc6b7UzOPSgsFOHWf293tsZh splA== X-Gm-Message-State: AOAM5325wApH1RsGMDn+cdOsf/LOzJobJrfwO3ADhfIhx/6Ba2Q9JEYf 9O+7vKcE8099jv50YNO/9tdaVHyHZ0hYnQ== X-Received: by 2002:a63:84c3:0:b0:3fc:87ff:cdfa with SMTP id k186-20020a6384c3000000b003fc87ffcdfamr26435593pgd.460.1654634776973; Tue, 07 Jun 2022 13:46:16 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 20/53] semihosting: Use struct gdb_stat in common_semi_flen_cb Date: Tue, 7 Jun 2022 13:45:24 -0700 Message-Id: <20220607204557.658541-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Load the entire 64-bit size value. While we're at it, use offsetof instead of an integer constant. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index abf543ce91..a9e488886a 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -325,14 +325,12 @@ static void common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) { if (!err) { - /* - * The size is always stored in big-endian order, extract - * the value. We assume the size always fit in 32 bits. - */ - uint32_t size; - cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + 32, - (uint8_t *)&size, 4, 0); - ret = be32_to_cpu(size); + /* The size is always stored in big-endian order, extract the value. */ + uint64_t size; + cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + + offsetof(struct gdb_stat, gdb_st_size), + &size, 8, 0); + ret = be64_to_cpu(size); } common_semi_cb(cs, ret, err); } From patchwork Tue Jun 7 20:45:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579411 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5564539max; Tue, 7 Jun 2022 15:24:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwiqRrJq2+zOy749mPLZiLk1/Hv2FDUPj+VOrGwlOU+PJSPD638DX/WagxU8z1gYyPZMCVG X-Received: by 2002:a05:622a:14cc:b0:2f3:d4c0:d53a with SMTP id u12-20020a05622a14cc00b002f3d4c0d53amr25010148qtx.68.1654640641367; Tue, 07 Jun 2022 15:24:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640641; cv=none; d=google.com; s=arc-20160816; b=LCQ31Cw0lU5Yh985V7nc7kuD3v3lNypk17ffdAoiBsO5ByfMf5J90ubtvfjU261GCt yJK0HGf17JelZjCnmWM5gXqdATjG1D/1/OOOgEdvIR6sQnrEAJEyfxhWI1adDkhylO9G HsIfamEz97xOrnKUPk7Ssdit+7onDNXmorPxYIJ5PnBOvzrPWQLkP5kaoQ8R3UAb7MdG LvWZawaDOBmbedRJN4CqP1zG9OzK4/AOvtKKmwHno9LUdOj4JhjXYIFSpAPmR+9QWd9B JCLvnPTWrgoeSfaSkQ7Pxx1z1d27E7v/lo6noTQH2cuMtq2lkCp+phg99v9KwysWqbyS g0Xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=97oCc36lcB1BPvxIKIrtIrCafpxgp+n+HDsHM7STsDo=; b=paqkLMzDfF8ErE3UhtYLbdMZUs57GpkhQFfPKH2AOm8HAAvp+nmWhz8eGDyzSd+v87 hETDjUtKrlPSHjvmf/lGk9JLpgSMrwqBLRlaxzMUzBxqr3TlEUc3jvvNYyrH5fd6g8tt N3gSc74PHRtH5c14ZxgVyX/aZhWFMVZO5c3p8WtTnYJvm8aTtATZMgu+mYT4OjnADErG 0BnbFuxRparYdOsXahMkOzC8EH1ZxHTBXmwPKQr3QHbW+B5orVTrcOvWW9LEFp7HLqJq ng+Fh+97H0sEAwOnPqUuRNGGewpy+wEMeWSL9XzREE2PqdOn8lzWvY6XXbT6/ltCfuzU Epzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=yCKb9adg; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id q21-20020a05622a031500b002fbff356b08si190981qtw.174.2022.06.07.15.24.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:24: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; dkim=pass header.i=@linaro.org header.s=google header.b=yCKb9adg; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:38304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhcG-0007PO-TN for patch@linaro.org; Tue, 07 Jun 2022 18:24:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39016) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5k-0007Gq-NV for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:23 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:45667) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5j-0001Ol-5y for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:20 -0400 Received: by mail-pf1-x433.google.com with SMTP id b135so16505623pfb.12 for ; Tue, 07 Jun 2022 13:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=97oCc36lcB1BPvxIKIrtIrCafpxgp+n+HDsHM7STsDo=; b=yCKb9adgUi6AZH33vd+4TvNRdEzeOCQ1mPCrFK3GKa3Z0CJFu0wKrvk19tH/cth8yS OFj5OmAo92jH8HkVY+loDtFTAzb92IyWbndp9iNHApF0rdGNmv2hY43SsZcbHyEH/uJy BWh4mCTxhZb3PFd8CdnnO9hNXKEPKqVaoScr4p6yNz4Ihb0W+3wkpcEHCTw9P08U8iWh XChWeemHzgPgUEvuFZNZLoxLiOm787cJrGxkqe/kn8wDdBg6pyYdMMeXutrxzUKC+nYR YWgpC+FOakGLa6T7P952H/H2eCS2gzZs+wNir0cbgpMVXH4Q1GAqzwd8TKx//HBpCBcw mFyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=97oCc36lcB1BPvxIKIrtIrCafpxgp+n+HDsHM7STsDo=; b=PDFx3L5tSyIfioYdr4Xf5seKQieduK3N1AmjFoGzCw8SmFfvsLYzBveTT1P3tAfVkg kFl9Hpf9RhSvIiaBTbo26aFeJRfxGk5SFrysDHvx2oZ3hblN4Cx7e17fMwadI2hhucw4 P+8YcLTVKEJC4ym7kppdPS2E5xIXGjb7Jad0AQ8Hju069l/iD45GgycqTrsVxM2ZnlD8 /7LsqlfeNGNx3jXJ1ysOY/2WNrKnNQxG/3It267+oz6cVw7YkSAP/TV7Qx8sz65EZArR g6Fd0rOIeqnmMR7lCRYXO2GFGHFfRyK5kNWUvcCsdJtuDYddu8zTYpApj7AmolepjfVx garw== X-Gm-Message-State: AOAM530URLjyjRLZnRCXKXlXTJAd+2FYnCTOvPt34UtmrU/gz0sBPmPt lGFMVlRHgO6DNcOe7lYB/2qpfha/8oQqHg== X-Received: by 2002:a63:f312:0:b0:3fd:12b7:193b with SMTP id l18-20020a63f312000000b003fd12b7193bmr21855777pgh.9.1654634777892; Tue, 07 Jun 2022 13:46:17 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell , Alistair Francis Subject: [PATCH v4 21/53] semihosting: Split is_64bit_semihosting per target Date: Tue, 7 Jun 2022 13:45:25 -0700 Message-Id: <20220607204557.658541-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We already have some larger ifdef blocks for ARM and RISCV; split the function into multiple implementations per arch. Reviewed-by: Peter Maydell Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index a9e488886a..d2ce214078 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -213,6 +213,10 @@ common_semi_sys_exit_extended(CPUState *cs, int nr) return (nr == TARGET_SYS_EXIT_EXTENDED || is_a64(cs->env_ptr)); } +static inline bool is_64bit_semihosting(CPUArchState *env) +{ + return is_a64(env); +} #endif /* TARGET_ARM */ #ifdef TARGET_RISCV @@ -238,6 +242,10 @@ common_semi_sys_exit_extended(CPUState *cs, int nr) return (nr == TARGET_SYS_EXIT_EXTENDED || sizeof(target_ulong) == 8); } +static inline bool is_64bit_semihosting(CPUArchState *env) +{ + return riscv_cpu_mxl(env) != MXL_RV32; +} #endif /* @@ -587,17 +595,6 @@ static const GuestFDFunctions guestfd_fns[] = { * call if the memory read fails. Eventually we could use a generic * CPUState helper function here. */ -static inline bool is_64bit_semihosting(CPUArchState *env) -{ -#if defined(TARGET_ARM) - return is_a64(env); -#elif defined(TARGET_RISCV) - return riscv_cpu_mxl(env) != MXL_RV32; -#else -#error un-handled architecture -#endif -} - #define GET_ARG(n) do { \ if (is_64bit_semihosting(env)) { \ From patchwork Tue Jun 7 20:45:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579415 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5566872max; Tue, 7 Jun 2022 15:27:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxo+hqjc83rpWfShRonlkhYiRgtcTeXp/7ZWY4aMmfDdvxc+L7SVem06Z6KF/IXFbh5a7LZ X-Received: by 2002:a05:622a:1907:b0:304:d3ff:ee27 with SMTP id w7-20020a05622a190700b00304d3ffee27mr22305381qtc.346.1654640846785; Tue, 07 Jun 2022 15:27:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640846; cv=none; d=google.com; s=arc-20160816; b=rDLd+sHda26Lk1MGRQKvaSZZ+vAk368leJJs5ryzOVsuLmO2w3iU5cYkv0luV4bABV 0X51ztUFcNQ7wbyikNs5riygJ1VFYp1tb+7YRqktyclD+/bv/wrc0DTlMdx/tCyyBJ3K L0FB0rQisOdH1QEeArMoCZIs24MgIGYt9vLKWxJTea9jmSJsnmnZOkZLi5k7Cgw/7otM 7EpwlpZ6Aj1ksFlTx0X2mRE9vLadWBd+7q6rk02YEZ6Fjvhw37e/HjYyDEY9k/L8cR0a HycTBTn5pJVZRo81yde461yJ3+6H05oAfEYNxAtXEEPIpNWLCf8mvb4MpzvF9mrGDbdG hBkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=zVpqLWTsPExWd6f8jF1EY/VDSSozWoVLxOFKhLPqh5c=; b=1K8PtBWupoA0kk0GPM6Cv4Qzd1YYEiI4hyn94M7sn7E/thpgg1JIz62eGLbVKobcVR QQa+XzoAn5gL8fLfAwSol8sn6wbYKcysqFoSSuWnykuuAv7x2EzgLyHU7MJRudvR43w0 5JB0bGp7q/6Xszddx7Wzt0Jh71GN7fTLdhrJnN4hLTHwbUtBM4LAK2ojcJJajp5muVgy H2iRcGO6eV92iwTBi83mXhyUZEH4MTkPqqMEnwxwV9P4DWSKY5eXla66gRUzxQMD3gJb saITCD08caMi88h1laovxfdk9hl3JO7t8xe/y9xW/8wdWKQ3deJ46tJp5cZ4iOrtUqP3 YGMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SJknkGx8; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id ay33-20020a05620a17a100b006a6ed810103si1431102qkb.393.2022.06.07.15.27.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:27: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; dkim=pass header.i=@linaro.org header.s=google header.b=SJknkGx8; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:46876 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhfa-0004jS-B8 for patch@linaro.org; Tue, 07 Jun 2022 18:27:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39034) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5l-0007H3-Tn for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:23 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:44016) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5k-0001P6-9R for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:21 -0400 Received: by mail-pg1-x536.google.com with SMTP id s135so1341699pgs.10 for ; Tue, 07 Jun 2022 13:46:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zVpqLWTsPExWd6f8jF1EY/VDSSozWoVLxOFKhLPqh5c=; b=SJknkGx8/pq3lb6/gLJhL5UIi8p3mx6c+Syrkssfa6HTjwfxO/RpyTMHGGucB/Mc+J 2mgK6QA3TUB3I1VZj9Z6aDt2u5yBNWsSigGIXTDOqRBxI3yAGg0Tm8z9dJ9Ujgxr4HiI acREI4cU041T48qwwToCodtav5vaGwpxTREivyi/agY+7NqIrfsM3xJYpxG/sp5b3FJz nTeCeHJV3Y5NwFhPkly8MrbGUS8t4Kenu8wUjwD7DCiPXRklRJTzKegZ1bM86R842xAG 8NopC2f7EGxooYxB8QeSiO90iEq/M0LPD3lt2V91hDOd/4fq2QVPndbaTdJWuFCsbv5L qn8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zVpqLWTsPExWd6f8jF1EY/VDSSozWoVLxOFKhLPqh5c=; b=VFM98XspYR+ZR+9nhY9FYtwRg18/tVAd4Zk21JocaK/XNVUSZEvRL4CGLcbeoghwoa jW1kkf9YjATejushQxww44NmQxhX8U3JxyldP9XjFiiZU6f8CO/ip4pdbqIq3bozKG8C cIh7IfwaXyqbPeC8nQBiOcfVSors8eDD+LdjI01bz6qwVSdI0lqtQOdGfs7fBCPk5CEg I6I3yn6ZulV/3JHziTH5gA7z8aQfeyqUqn3Xj1ppKzD0UD7JjNnB5RXWH9rxqgL6pihZ 7SyaTwWW8oei3KnRwpPEcBTR+opYGnId536lqAm/w98l54bAOZSzEJCSTiuCDvUGKD63 maow== X-Gm-Message-State: AOAM530ceP6KL9/IukCb7rEhW0wc4ZWAQbdw6vZPabTQ1c3Lan+vcT2E qWlEKtJoh+IZGgpj0eDFZ9pNoYzyKGqgPw== X-Received: by 2002:a63:4a4b:0:b0:3fa:8a72:b2 with SMTP id j11-20020a634a4b000000b003fa8a7200b2mr27283079pgl.544.1654634779024; Tue, 07 Jun 2022 13:46:19 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell , Alistair Francis Subject: [PATCH v4 22/53] semihosting: Split common_semi_flen_buf per target Date: Tue, 7 Jun 2022 13:45:26 -0700 Message-Id: <20220607204557.658541-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We already have some larger ifdef blocks for ARM and RISCV; split out common_semi_stack_bottom per target. Reviewed-by: Peter Maydell Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 44 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index d2ce214078..7550dce622 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -217,6 +217,13 @@ static inline bool is_64bit_semihosting(CPUArchState *env) { return is_a64(env); } + +static inline target_ulong common_semi_stack_bottom(CPUState *cs) +{ + ARMCPU *cpu = ARM_CPU(cs); + CPUARMState *env = &cpu->env; + return is_a64(env) ? env->xregs[31] : env->regs[13]; +} #endif /* TARGET_ARM */ #ifdef TARGET_RISCV @@ -246,6 +253,13 @@ static inline bool is_64bit_semihosting(CPUArchState *env) { return riscv_cpu_mxl(env) != MXL_RV32; } + +static inline target_ulong common_semi_stack_bottom(CPUState *cs) +{ + RISCVCPU *cpu = RISCV_CPU(cs); + CPURISCVState *env = &cpu->env; + return env->gpr[xSP]; +} #endif /* @@ -301,31 +315,15 @@ static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) common_semi_set_ret(cs, ret); } +/* + * Return an address in target memory of 64 bytes where the remote + * gdb should write its stat struct. (The format of this structure + * is defined by GDB's remote protocol and is not target-specific.) + * We put this on the guest's stack just below SP. + */ static target_ulong common_semi_flen_buf(CPUState *cs) { - target_ulong sp; -#ifdef TARGET_ARM - /* Return an address in target memory of 64 bytes where the remote - * gdb should write its stat struct. (The format of this structure - * is defined by GDB's remote protocol and is not target-specific.) - * We put this on the guest's stack just below SP. - */ - ARMCPU *cpu = ARM_CPU(cs); - CPUARMState *env = &cpu->env; - - if (is_a64(env)) { - sp = env->xregs[31]; - } else { - sp = env->regs[13]; - } -#endif -#ifdef TARGET_RISCV - RISCVCPU *cpu = RISCV_CPU(cs); - CPURISCVState *env = &cpu->env; - - sp = env->gpr[xSP]; -#endif - + target_ulong sp = common_semi_stack_bottom(cs); return sp - 64; } From patchwork Tue Jun 7 20:45:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579398 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5553730max; Tue, 7 Jun 2022 15:08:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfBQddsyZvVIZt/2Po8xBg+9fEqohMca32iEKP/PHYTBj7vsWp/oZpaSaytCTQHV7d/Uxp X-Received: by 2002:a37:5e87:0:b0:6a6:b45d:8e48 with SMTP id s129-20020a375e87000000b006a6b45d8e48mr10628485qkb.730.1654639689201; Tue, 07 Jun 2022 15:08:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639689; cv=none; d=google.com; s=arc-20160816; b=0Z3N2BGqIRWcl0qUhiz700adJgD5aWJ08vWZCf3CXHjWgepFKgjFsEZlL8KtkYgW1B PvdMKOeAi/smFWhshiSdTQKAR0xYn+oWpYhU/V4WDc3IjvKrNI/Qy2jMSQNzOInNveFO YhyMoVGPoIJRLDLQaJbliVvA09s/FRqV4JzIx+quFS1gg2vehPnwRJnIzr54+zGx5wBP IddvJwSBfNu+L5SkWFftmbEJr7Vz0K6rQ1sM3AfwWd/XuPNmWIZYVoC5qExVFlZtIqG/ 3jor3znn3hqlUl6pv6AJtzrn+hNGZYDCkX5YS74i1a5GtgQ6PBLT7KL2CRpn1Y5Pc4Wr Q09Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=Lkal5KDK4537KjIiM5DwOIkXPoQZ/flNccQ9lkg/eXQ=; b=q5LOaRqU5UZ3ViJGy6XzDILWDTMQ8Xxjdc1HiO18XyAFwyxob4cJqBGdRftKmsxjbD oLm5LCNQvslEgcxuiMH0aLOcYtFgjFctqo0PjWoKdC6N9+9m9bbkIvIijzh13cV6t51A nlbFvMIDjuUsdW5Tz3xIVrx5vekzxVbUZs2a1dk6JZWidA88HiclKyvDBNmxf+2nnYcI 0/lSdci+YT3TG+ux3Al7/DdXIOvAY6P4h4gJoe0Ry1lojuiePAZRQiO0myVBaU2Il0L2 PBkWT10iJi++SwkGHJJftbLLCp24kFSg1QFYTEPU4c40gVLWOwN+Y/YBHp4hA6GsJMk4 +ctQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="BKwrP/V6"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id h9-20020a37c449000000b006a6a4b98a34si6741953qkm.681.2022.06.07.15.08.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:08:09 -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; dkim=pass header.i=@linaro.org header.s=google header.b="BKwrP/V6"; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:38466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhMu-0001Ko-P8 for patch@linaro.org; Tue, 07 Jun 2022 18:08:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39062) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5n-0007IP-T1 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:25 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:44667) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5l-0001Pj-BX for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:22 -0400 Received: by mail-pf1-x432.google.com with SMTP id g205so16507992pfb.11 for ; Tue, 07 Jun 2022 13:46:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Lkal5KDK4537KjIiM5DwOIkXPoQZ/flNccQ9lkg/eXQ=; b=BKwrP/V6wehA/E0kailighFLe4S1AMzDd9JRJgXCdGcGeDLfC4D8ZA1Zux5xTCMOEV GRbRCa9MFxWg8DsQfmeU8YJZ4h1rav7y0YnpOEUax8/j3vc2dA0FGNYWDeO4psesf/74 bvxdK9GpNtcQ1lraq7bWcT3LOCJjKeupAZK6el4gSzO7Z34orK7mwsZCOqU1SYMTii1q ER5uGJ0nj0+NqHT8AuTb7I0Ei9dOe/ez1kvDxmBnN8vjgeWeNC3OhKznMa6+4u38oRJe ODCdiEykNQxeZg2ZYsd91KfnQgNPElov7n1ZViVF+G7EXoJCGhpAHhd+Ojh/jtrrVbTy IbWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Lkal5KDK4537KjIiM5DwOIkXPoQZ/flNccQ9lkg/eXQ=; b=YqkcBHx3TSmDHo6M2/qu+k6xgTKHdLOPzjiw4urOJDbnumnt3O/Wuaiz5JHMV+wLx1 cAH30XKHFsYu+YXPgzLVnSWkGpuhH98f7tYIgLDV+A8tv8vIcLfVPJSWEXFLvo9nJ64b atf7+5YOJTsc+pCyuTsjU12ZWXipP5BPnbrnnxSyBCOuhHXurjB5B9zo7x1TWiB+ojgn 1Cv8v6hjb0LhTvmUYZz0WU+E4m8MxMRwwRG31k8ULGSlTIc5r6c8pLcgLJF6v93eKXuU C/OmzojzRooL3aAanRRIZi8jQtfckIhkzi90Xeov7ZGUbGT7ai+Ex9E0EWRWi6ejdoKo /y/A== X-Gm-Message-State: AOAM530K4H7OUR+c8qWlfUreaogH0BV9tdomZ14aAeyityFuQyA5W4Lo nJImVl/wLhzXrz3/lZjn+Aes6uIDNa8xGQ== X-Received: by 2002:a05:6a00:194d:b0:51b:eb84:49b1 with SMTP id s13-20020a056a00194d00b0051beb8449b1mr21619672pfk.77.1654634779972; Tue, 07 Jun 2022 13:46:19 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Alistair Francis Subject: [PATCH v4 23/53] semihosting: Split out common_semi_has_synccache Date: Tue, 7 Jun 2022 13:45:27 -0700 Message-Id: <20220607204557.658541-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We already have some larger ifdef blocks for ARM and RISCV; split out a boolean test for SYS_SYNCCACHE. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 7550dce622..50f40a2a1a 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -224,6 +224,12 @@ static inline target_ulong common_semi_stack_bottom(CPUState *cs) CPUARMState *env = &cpu->env; return is_a64(env) ? env->xregs[31] : env->regs[13]; } + +static inline bool common_semi_has_synccache(CPUArchState *env) +{ + /* Ok for A64, invalid for A32/T32. */ + return is_a64(env); +} #endif /* TARGET_ARM */ #ifdef TARGET_RISCV @@ -260,6 +266,11 @@ static inline target_ulong common_semi_stack_bottom(CPUState *cs) CPURISCVState *env = &cpu->env; return env->gpr[xSP]; } + +static inline bool common_semi_has_synccache(CPUArchState *env) +{ + return true; +} #endif /* @@ -1102,16 +1113,11 @@ void do_common_semihosting(CPUState *cs) * virtual address range. This is a nop for us since we don't * implement caches. This is only present on A64. */ -#ifdef TARGET_ARM - if (is_a64(cs->env_ptr)) { + if (common_semi_has_synccache(env)) { common_semi_set_ret(cs, 0); break; } -#endif -#ifdef TARGET_RISCV - common_semi_set_ret(cs, 0); -#endif - /* fall through -- invalid for A32/T32 */ + /* fall through */ default: fprintf(stderr, "qemu: Unsupported SemiHosting SWI 0x%02x\n", nr); cpu_dump_state(cs, stderr, 0); From patchwork Tue Jun 7 20:45:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579424 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5572409max; Tue, 7 Jun 2022 15:35:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwGQcTyoLcJZpeLhF8r5IY2lNvT86IKwKHZkjVF5ktlECJ2mcBEjh8NpJBo4eWZpo0nkNEL X-Received: by 2002:a05:6214:dc3:b0:464:5efe:3d63 with SMTP id 3-20020a0562140dc300b004645efe3d63mr31910683qvt.92.1654641303085; Tue, 07 Jun 2022 15:35:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641303; cv=none; d=google.com; s=arc-20160816; b=gLrGqWDwGatjxrD8uIlIFInX+HpSt6F7EYK5YeO1l9DrE/nIX4genbdlf2Whl8fG51 UUpBXFeyTW7obD2IjbIZQIm5V8MxZrRs6XtJUDVE3Hdn3/VGm6GRWrf9kjbEVva18SzT UjEc5BUtlnQGbVqF0i2O8vPxIgTBoAewnEE4V1xanzPimI3brKvJ/BS6HENQuYEHTwdV C7stnT5LvEzEH1bsbbEzsxfqJ50wKoidwQIJFQb8/Mb5D+FqjhFE/RXJgsLvKSN+wEjP D/rWLM+lZwSwBY2fWCkCLB5E4l9q+RL+GxBkh/lW3qlvkfCHbRKoJneXQx0h4wp7eaMU MC2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=G9K32Uykj512TMGRbyCkUtnhTvXkXswNZtlz1FFInW0=; b=tO4nBdalRJ7bRMjekaOeIbJo9eBo4HSC893EtDAHvjgFGZ5h9YWLwZ6K21+r6/Ibsi WaWAbDzn78HipnEVuCW3SstRPy249sQJ0mUkq4Im5vgbskDmZ4G5a1jycJcFXCjb6gPW sror7xF6n7RSoPR8PORcYjk3RoqCjUb1Pec6axIhpHUbjb8KG6rS/oy2rNPMP5FeOsWz Aq41ADdtdRi2DHcYc6dpkA4rEOrNt/VW5SL3MmLtHOjmJU78N+P6VN38K+ooNuc7xs9Q auyhn7/2g41m58cztplzopedmR9dXT9yid6fNiQpCgHZfS0XJYvBDcKzGDqlDTyHw7b5 aAlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ggxYQ7XK; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id n73-20020a37274c000000b006a699a034dbsi7707137qkn.207.2022.06.07.15.35.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:35: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; dkim=pass header.i=@linaro.org header.s=google header.b=ggxYQ7XK; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36078 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhmw-0008Ma-DH for patch@linaro.org; Tue, 07 Jun 2022 18:35:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39082) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5o-0007J3-Gl for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:25 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:37656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5l-0001Kf-U9 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:24 -0400 Received: by mail-pg1-x530.google.com with SMTP id h192so10191908pgc.4 for ; Tue, 07 Jun 2022 13:46:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=G9K32Uykj512TMGRbyCkUtnhTvXkXswNZtlz1FFInW0=; b=ggxYQ7XK8vCza4fF4ufkR2ALuiubsAEdT1YXizhZaGq8ahTHPYCs0gpPfcivojAx2k Khl4Z9yJV+EuuSthE3fj2+1HcrpIvRyk0QJG/lp6Vulv85Xes1jnqNDDDJPnFOIL6lvj G/5F90X+EqtZwzyz8rShnXuXxo/qm4PIBDKdn925oi1PH2gas3452ZF3/ATRCjQGDZLk I0DTfpgnrjChYv40THYvJTkRplq0H0vFnHFZI+zxIflQHuYSnUD9GNMLQ1INwFGe86FK jipeS/HzY1+CZDuk+MKEmRau8Sj4ggCrWjXhfpYPXHFl52Ec5+5acybm8lbIpVG6snFh kjXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=G9K32Uykj512TMGRbyCkUtnhTvXkXswNZtlz1FFInW0=; b=aXSlnV+7ErBy+zF85b4oZ4T/SOglBgAvPsXQlBkW16EHGTuG1Q0X8F8V/LvNZGWexv U2sSb6RNqKjPVk73CNotFUFsepEkwmZ8/KFuWM9Y+fVW3A4YIikmcZ42hUAAP/ZDi6u5 pCbGbCQOaPeJId/QJ+Cpwvj+QBk6Pd4026PEh4ArW0I17KbO10UAJX3950C4HYBoDj6J ZVObB51Sf58czXT/O6B//8PHbHAWmvF5Iqn4pguF17G5NLq9sTBvlQshFIMO4mMo7lR/ 05RN2RQWv6KV+v14DtTh/XQYs3W/jalW5WzO0wt8wfjPnEywSYgHJGzKyMeuNmAGEamf plBA== X-Gm-Message-State: AOAM533cojwpScEb93jBuc9ZvORWqrXTBd0iC5okXcjafSj4S5ifONzL 4aqtfoxpmPyzPoPi9G6ar3I8b+plRli8Ag== X-Received: by 2002:a63:5fc3:0:b0:3fd:f15d:5df6 with SMTP id t186-20020a635fc3000000b003fdf15d5df6mr6065351pgb.573.1654634780876; Tue, 07 Jun 2022 13:46:20 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 24/53] semihosting: Split out common-semi-target.h Date: Tue, 7 Jun 2022 13:45:28 -0700 Message-Id: <20220607204557.658541-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Move the ARM and RISCV specific helpers into their own header file. Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée Reviewed-by: Luc Michel --- target/arm/common-semi-target.h | 62 ++++++++++++++++++++ target/riscv/common-semi-target.h | 50 ++++++++++++++++ semihosting/arm-compat-semi.c | 94 +------------------------------ 3 files changed, 113 insertions(+), 93 deletions(-) create mode 100644 target/arm/common-semi-target.h create mode 100644 target/riscv/common-semi-target.h diff --git a/target/arm/common-semi-target.h b/target/arm/common-semi-target.h new file mode 100644 index 0000000000..629d75ca5a --- /dev/null +++ b/target/arm/common-semi-target.h @@ -0,0 +1,62 @@ +/* + * Target-specific parts of semihosting/arm-compat-semi.c. + * + * Copyright (c) 2005, 2007 CodeSourcery. + * Copyright (c) 2019, 2022 Linaro + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef TARGET_ARM_COMMON_SEMI_TARGET_H +#define TARGET_ARM_COMMON_SEMI_TARGET_H + +#ifndef CONFIG_USER_ONLY +#include "hw/arm/boot.h" +#endif + +static inline target_ulong common_semi_arg(CPUState *cs, int argno) +{ + ARMCPU *cpu = ARM_CPU(cs); + CPUARMState *env = &cpu->env; + if (is_a64(env)) { + return env->xregs[argno]; + } else { + return env->regs[argno]; + } +} + +static inline void common_semi_set_ret(CPUState *cs, target_ulong ret) +{ + ARMCPU *cpu = ARM_CPU(cs); + CPUARMState *env = &cpu->env; + if (is_a64(env)) { + env->xregs[0] = ret; + } else { + env->regs[0] = ret; + } +} + +static inline bool common_semi_sys_exit_extended(CPUState *cs, int nr) +{ + return (nr == TARGET_SYS_EXIT_EXTENDED || is_a64(cs->env_ptr)); +} + +static inline bool is_64bit_semihosting(CPUArchState *env) +{ + return is_a64(env); +} + +static inline target_ulong common_semi_stack_bottom(CPUState *cs) +{ + ARMCPU *cpu = ARM_CPU(cs); + CPUARMState *env = &cpu->env; + return is_a64(env) ? env->xregs[31] : env->regs[13]; +} + +static inline bool common_semi_has_synccache(CPUArchState *env) +{ + /* Ok for A64, invalid for A32/T32 */ + return is_a64(env); +} + +#endif diff --git a/target/riscv/common-semi-target.h b/target/riscv/common-semi-target.h new file mode 100644 index 0000000000..7c8a59e0cc --- /dev/null +++ b/target/riscv/common-semi-target.h @@ -0,0 +1,50 @@ +/* + * Target-specific parts of semihosting/arm-compat-semi.c. + * + * Copyright (c) 2005, 2007 CodeSourcery. + * Copyright (c) 2019, 2022 Linaro + * Copyright © 2020 by Keith Packard + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef TARGET_RISCV_COMMON_SEMI_TARGET_H +#define TARGET_RISCV_COMMON_SEMI_TARGET_H + +static inline target_ulong common_semi_arg(CPUState *cs, int argno) +{ + RISCVCPU *cpu = RISCV_CPU(cs); + CPURISCVState *env = &cpu->env; + return env->gpr[xA0 + argno]; +} + +static inline void common_semi_set_ret(CPUState *cs, target_ulong ret) +{ + RISCVCPU *cpu = RISCV_CPU(cs); + CPURISCVState *env = &cpu->env; + env->gpr[xA0] = ret; +} + +static inline bool common_semi_sys_exit_extended(CPUState *cs, int nr) +{ + return (nr == TARGET_SYS_EXIT_EXTENDED || sizeof(target_ulong) == 8); +} + +static inline bool is_64bit_semihosting(CPUArchState *env) +{ + return riscv_cpu_mxl(env) != MXL_RV32; +} + +static inline target_ulong common_semi_stack_bottom(CPUState *cs) +{ + RISCVCPU *cpu = RISCV_CPU(cs); + CPURISCVState *env = &cpu->env; + return env->gpr[xSP]; +} + +static inline bool common_semi_has_synccache(CPUArchState *env) +{ + return true; +} + +#endif diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 50f40a2a1a..5e442e549d 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -46,9 +46,6 @@ #else #include "qemu/cutils.h" #include "hw/loader.h" -#ifdef TARGET_ARM -#include "hw/arm/boot.h" -#endif #include "hw/boards.h" #endif @@ -182,96 +179,7 @@ static LayoutInfo common_semi_find_bases(CPUState *cs) #endif -#ifdef TARGET_ARM -static inline target_ulong -common_semi_arg(CPUState *cs, int argno) -{ - ARMCPU *cpu = ARM_CPU(cs); - CPUARMState *env = &cpu->env; - if (is_a64(env)) { - return env->xregs[argno]; - } else { - return env->regs[argno]; - } -} - -static inline void -common_semi_set_ret(CPUState *cs, target_ulong ret) -{ - ARMCPU *cpu = ARM_CPU(cs); - CPUARMState *env = &cpu->env; - if (is_a64(env)) { - env->xregs[0] = ret; - } else { - env->regs[0] = ret; - } -} - -static inline bool -common_semi_sys_exit_extended(CPUState *cs, int nr) -{ - return (nr == TARGET_SYS_EXIT_EXTENDED || is_a64(cs->env_ptr)); -} - -static inline bool is_64bit_semihosting(CPUArchState *env) -{ - return is_a64(env); -} - -static inline target_ulong common_semi_stack_bottom(CPUState *cs) -{ - ARMCPU *cpu = ARM_CPU(cs); - CPUARMState *env = &cpu->env; - return is_a64(env) ? env->xregs[31] : env->regs[13]; -} - -static inline bool common_semi_has_synccache(CPUArchState *env) -{ - /* Ok for A64, invalid for A32/T32. */ - return is_a64(env); -} -#endif /* TARGET_ARM */ - -#ifdef TARGET_RISCV -static inline target_ulong -common_semi_arg(CPUState *cs, int argno) -{ - RISCVCPU *cpu = RISCV_CPU(cs); - CPURISCVState *env = &cpu->env; - return env->gpr[xA0 + argno]; -} - -static inline void -common_semi_set_ret(CPUState *cs, target_ulong ret) -{ - RISCVCPU *cpu = RISCV_CPU(cs); - CPURISCVState *env = &cpu->env; - env->gpr[xA0] = ret; -} - -static inline bool -common_semi_sys_exit_extended(CPUState *cs, int nr) -{ - return (nr == TARGET_SYS_EXIT_EXTENDED || sizeof(target_ulong) == 8); -} - -static inline bool is_64bit_semihosting(CPUArchState *env) -{ - return riscv_cpu_mxl(env) != MXL_RV32; -} - -static inline target_ulong common_semi_stack_bottom(CPUState *cs) -{ - RISCVCPU *cpu = RISCV_CPU(cs); - CPURISCVState *env = &cpu->env; - return env->gpr[xSP]; -} - -static inline bool common_semi_has_synccache(CPUArchState *env) -{ - return true; -} -#endif +#include "common-semi-target.h" /* * The semihosting API has no concept of its errno being thread-safe, From patchwork Tue Jun 7 20:45:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579421 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5571178max; Tue, 7 Jun 2022 15:33:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPaLd5kcU7kDgt0ScvjnTUSj98KRabL1au3J8lsohhB67qXVqM2YNXPRkDv+2IStrExETk X-Received: by 2002:a0c:fe48:0:b0:462:6a02:a17d with SMTP id u8-20020a0cfe48000000b004626a02a17dmr23569964qvs.108.1654641198421; Tue, 07 Jun 2022 15:33:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641198; cv=none; d=google.com; s=arc-20160816; b=BFWNfC7sTP8P7ZDAtSuw0p1RTp+q6a1OAOvhYnicNM5ljNqIFgo3siSxe0Un5wa0dZ t6tI8bmS60QptbXxRRY49BOAFc15WRuHXGrqn+76oAJxJanFPXuiZHk62xeKxJiPMLRU EYrLnERQxfTYO41n7+QFUSLqOMYgKsn1ksLtA/jV3DdM0PzqIfT3hjApxcdUO9bf7C8v L7r46QKxg3/tWqfvd8vN3vcRWU6ncfcUgVBo/2AM4pzVI+Scb2FVR+f4YqUO+En2/wd3 SnHeoVzKbIFWPW/AkJNTEdFKpYoOZJpYS3nNSv4OBjSHVvvcgcdqujDkcSeJ22V01eqD YtFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=EuRn4zS6JF83w7ZKExtBXrrlNlKkOsGtWU334MtZYfk=; b=tjGoBKi5/uhTalNEZaNXim4iZvUpL51X7aFOvx1is/K+1WHKP3Lr5KgyZa2Y3MKFnW 7Q/4tzhM+xk+GvJfvC7SI4RNGR0m9KSNbzxTMZpE+cXo+zjTtoMSSEClG1gCOlUTpq0X 2kTTvzHBweXb587Kw9+1Lv8FSI+Yb+OQQQygYorNHO4Q6nvtsdzGp9EoDwb57wmjinq2 L0wkdA8D4IvUCakO0St02TdC0ujj6eUy3EvDs/OYrKprzYzQE4EhA/Sf2xL0phQyNHQ4 SD+G21NZjNX0MctTPO/6NF+9DFhxRV4Vt/SOQwr6pkLCaE5Q8xom2UsSXUeiBmM0X2fW kzLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SW5hHhPc; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id v12-20020a05622a188c00b002f347192afesi10080400qtc.125.2022.06.07.15.33.18 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:33:18 -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; dkim=pass header.i=@linaro.org header.s=google header.b=SW5hHhPc; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:58908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhlF-0004gF-TD for patch@linaro.org; Tue, 07 Jun 2022 18:33:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39090) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5p-0007J5-2X for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:25 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:34783) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5n-0001Rb-Hd for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:24 -0400 Received: by mail-pf1-x432.google.com with SMTP id c196so16548579pfb.1 for ; Tue, 07 Jun 2022 13:46:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=EuRn4zS6JF83w7ZKExtBXrrlNlKkOsGtWU334MtZYfk=; b=SW5hHhPczZVFvnyL8PFr7Vd8VWT8xJgHFuGBlrh/6vOl/oCFm5D63BZ7xgGs2SNHsE jS/aCWl8IcpiqbWvwpVfjWesEoWpyz/YO9PU1/Ni2tna5FDwpSmf8PLvquLom/OOwUQQ u3MSRguA0GEknjKxcWvQxb8mTutqRBoXSSaiDnD4cswXm4LGc84VCazbBFo9U3P799ua 3ZPfwbvACw1jl+btWXLd7RUHm1MOxhpXbhkig/awsO8//QM/XKe0hxoQZmXNClY9+xPG UXk3YJ5t1SGg6Hj8/W/Ehh8Z0VRNBvR3XjHJQ//PQEw7MvbwkNBZ/9G8nnI4jHvA8jL3 ADEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EuRn4zS6JF83w7ZKExtBXrrlNlKkOsGtWU334MtZYfk=; b=vYIFzVMk8KDKR527P5lFMZx7STPLrWvf7gM0+iQeaofec4NSqgkO/Yg6nApza2sMT5 Iu9sfgNFAXcm84tqCUHLpOfjsCsfkrNJ3E3ZIm9LmvQk7iC04cCaY4NmsCVO63Z6/Vp/ xqN1uXNzqhR9Us0WXQZMwDUssaV/CEDWgzV2o9aAyPzF3gg8WhI0pXrieHM0McwPIKxu nbHhopM/zV2eTSmhpy7nNQiSNkKJ7R24ZK0Br6XzDIFNRPYyCbNN44TZhg+wgCtGZhrs cRDh80pvruHL0lLoL4KQT2oR5qKNQ1sdK3KIFlXkrbmAIOfsIayj3WrTq0L0F7N4mNrH sYPg== X-Gm-Message-State: AOAM533/3yHQjIbNNHMAagBIjlaAAIWQ5gVoCBYnbjlZ5uwe4hlSrMfs XXLomqj9u402FrdYAcHGCoZb+cHUrcOcsA== X-Received: by 2002:a63:e018:0:b0:3fd:94e9:aa0 with SMTP id e24-20020a63e018000000b003fd94e90aa0mr13095613pgh.618.1654634781849; Tue, 07 Jun 2022 13:46:21 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 25/53] semihosting: Use env more often in do_common_semihosting Date: Tue, 7 Jun 2022 13:45:29 -0700 Message-Id: <20220607204557.658541-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We've already loaded cs->env_ptr into a local variable; use it. Since env is unconditionally used, we don't need a dummy use. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- semihosting/arm-compat-semi.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 5e442e549d..adb4e5b581 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -553,7 +553,6 @@ void do_common_semihosting(CPUState *cs) GuestFD *gf; int64_t elapsed; - (void) env; /* Used implicitly by arm lock_user macro */ nr = common_semi_arg(cs, 0) & 0xffffffffU; args = common_semi_arg(cs, 1); @@ -636,12 +635,12 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_WRITEC: - qemu_semihosting_console_outc(cs->env_ptr, args); + qemu_semihosting_console_outc(env, args); common_semi_set_ret(cs, 0xdeadbeef); break; case TARGET_SYS_WRITE0: - ret = qemu_semihosting_console_outs(cs->env_ptr, args); + ret = qemu_semihosting_console_outs(env, args); common_semi_set_ret(cs, ret); break; @@ -672,7 +671,7 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_READC: - ret = qemu_semihosting_console_inc(cs->env_ptr); + ret = qemu_semihosting_console_inc(env); common_semi_set_ret(cs, ret); break; From patchwork Tue Jun 7 20:45:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579428 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5574509max; Tue, 7 Jun 2022 15:37:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyIXa9Hq2j3ky8k0T26S7Mve3N+yl23VPAOxf+OvrbBwXbmQDvUDmpLll0UxtZMfrckEpiZ X-Received: by 2002:a05:620a:46a9:b0:6a7:24f:42da with SMTP id bq41-20020a05620a46a900b006a7024f42damr306127qkb.670.1654641469558; Tue, 07 Jun 2022 15:37:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641469; cv=none; d=google.com; s=arc-20160816; b=bRCu3D8DCLJ4HjGkYh/JkqR0R2BvPPWBSx43qsrdW6NEEaGf40IFVdf3olk2Wznwbo i1LExLDpo5oLPNoZ9bmGX3yy/xjCQENmZGliFbFT44bQrpFZyDleUOsFGHlFLITZqGiS uBcoUn/MLNyh5XD4dC5YwMSzSdzIaq436BPvzkV4dFUmKOUkA2F0N8CUZ05G7uyXFshD d5Xrunwz+uEb61PU6PA75GBlVp/FxS/acXMIyuqnVe/D6Pua8vM6OJSKEW3pzxtCzPmA P7fzQwy2337m9TcA5sL31ErSkpADBj1QnzomfzsqwTXeiMtY+W7rTJyfmxzHEFezrL8L oUdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=q02gLvDTypu1IqXBxqUwd894XkIlOvDDNDcpgAlYDsE=; b=W15VkbKYSCTmySNQRMVak481bdcPm/Ksp7evdzqgecAZAmWIdld9/7HiEKDZQN2Bkx AR0hNHP6wVXk5+fczose6YQHqKH/YPPb2F2b46T58CB/o0FqKLB2DHy0FwAICjY4BWuq 7dEmlZpquCSwIW4W/1pbIDza0k8UY3VeVuHlAhiRc9FKlGYtg2jeqAFhum4leqHwMFaE BI5/i6pePHTKh+uzaJ/UwdsiMb7Y+6gfIpIVbVYTHiV2tC0jdbs056X88f0Yc/eWK0Du pr3pxgXkwVJZfKqBXjWi5qspRFtRXwTeQ5rPpyaj5ZAq1Ybf8v2SHayvtkQHN8cg9TkW iUXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HyrAXwgv; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id y11-20020a05620a25cb00b0069fb5373d60si11263674qko.529.2022.06.07.15.37.49 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:37:49 -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; dkim=pass header.i=@linaro.org header.s=google header.b=HyrAXwgv; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:44562 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhpd-0005ll-40 for patch@linaro.org; Tue, 07 Jun 2022 18:37:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39106) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5q-0007KW-3k for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:26 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:51024) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5n-0001TU-WB for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:25 -0400 Received: by mail-pj1-x1033.google.com with SMTP id e24so16726291pjt.0 for ; Tue, 07 Jun 2022 13:46:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q02gLvDTypu1IqXBxqUwd894XkIlOvDDNDcpgAlYDsE=; b=HyrAXwgvl/td8bZE2qQppBm95E/JcwLC8mVBvK6VAcGv3c0dkVRccxllD6RkPj2uSp a5ykA4bsjyQ6XnA5jm44mOCkoKilaNw6q4AHNGJTiHEkPizTx0SlURmlVicQ8LsMdHC5 8TXl6xURuerx34Fx7hDXWSz83vg4QSUxra8XKV09Cpr7V/joPX/w/ryW247+5eWBMJga 7QxF2pI580tDdaqH86StAiZNav4C8UlKq9MTcid5HRI8zvFoTWRLPIJT8ZfjPfs55T5k t8+tci+0tmazZMTO8xdZsekI9xS5dVtDND1BnqgYfKuTeXh0J9GsEiFgT+gm32vUxaoF CDsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q02gLvDTypu1IqXBxqUwd894XkIlOvDDNDcpgAlYDsE=; b=H0lOp4cwQK20NiKlWRB2EATRt2sP95Uaoqi09ch4GOzZ1MoLdbopOYHstCzDwSYIeU lJYB30LzFllm3XziNl787awfER4lTJhOmldtkl4PMrPPaK2/imrvWsjBFlY7WidjcwtA wOd5PdNqfxX046EMpI8fOU7LZ6utsP/o2wT7HVopvMZSJZtWZ2T+cFuRyzWxFb7Q8qlW Z57f++ahLdTzCXbhbTGTb7WlLS8rdBdogFY0Pnhrcd4RTjDlQAYmcZ2Pxky+SpJl8b4T RYaRTSldtlmZw/hP91auQagZnqFmIeykHwtJe4Y7GtK/0cOcK+8djFemcRhupaF1kFLb 4Sxw== X-Gm-Message-State: AOAM531C9sR5yIOV7b03uqox41KiVy2Esv9iEHDVrgUU6fsVaL2vQhZH YM5ksA+/CyFTHWZw04ELC8ga1DftOO5+cg== X-Received: by 2002:a17:90b:4b90:b0:1e8:48bd:453 with SMTP id lr16-20020a17090b4b9000b001e848bd0453mr22799673pjb.86.1654634782702; Tue, 07 Jun 2022 13:46:22 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 26/53] semihosting: Move GET_ARG/SET_ARG earlier in the file Date: Tue, 7 Jun 2022 13:45:30 -0700 Message-Id: <20220607204557.658541-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Moving this to be useful for another function besides do_common_semihosting. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée --- semihosting/arm-compat-semi.c | 48 +++++++++++++++++------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index adb4e5b581..72a1350512 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -181,6 +181,30 @@ static LayoutInfo common_semi_find_bases(CPUState *cs) #include "common-semi-target.h" +/* + * Read the input value from the argument block; fail the semihosting + * call if the memory read fails. Eventually we could use a generic + * CPUState helper function here. + */ + +#define GET_ARG(n) do { \ + if (is_64bit_semihosting(env)) { \ + if (get_user_u64(arg ## n, args + (n) * 8)) { \ + goto do_fault; \ + } \ + } else { \ + if (get_user_u32(arg ## n, args + (n) * 4)) { \ + goto do_fault; \ + } \ + } \ +} while (0) + +#define SET_ARG(n, val) \ + (is_64bit_semihosting(env) ? \ + put_user_u64(val, args + (n) * 8) : \ + put_user_u32(val, args + (n) * 4)) + + /* * The semihosting API has no concept of its errno being thread-safe, * as the API design predates SMP CPUs and was intended as a simple @@ -507,30 +531,6 @@ static const GuestFDFunctions guestfd_fns[] = { }, }; -/* - * Read the input value from the argument block; fail the semihosting - * call if the memory read fails. Eventually we could use a generic - * CPUState helper function here. - */ - -#define GET_ARG(n) do { \ - if (is_64bit_semihosting(env)) { \ - if (get_user_u64(arg ## n, args + (n) * 8)) { \ - goto do_fault; \ - } \ - } else { \ - if (get_user_u32(arg ## n, args + (n) * 4)) { \ - goto do_fault; \ - } \ - } \ -} while (0) - -#define SET_ARG(n, val) \ - (is_64bit_semihosting(env) ? \ - put_user_u64(val, args + (n) * 8) : \ - put_user_u32(val, args + (n) * 4)) - - /* * Do a semihosting call. * From patchwork Tue Jun 7 20:45:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579419 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5570240max; Tue, 7 Jun 2022 15:31:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx9PQ4Ze+fEwErDD4B24uUe/8jFKYZyMfT0063wczdyU50DH61ttdgokwSx2ktGJqEE9rK6 X-Received: by 2002:a05:622a:58f:b0:2f9:16f3:95b0 with SMTP id c15-20020a05622a058f00b002f916f395b0mr25190879qtb.493.1654641115751; Tue, 07 Jun 2022 15:31:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641115; cv=none; d=google.com; s=arc-20160816; b=Ftt6LYPz5/qRe7YboXJCreYNWgu9oLVXVGAV4n1UGX1MRmzIO5F24kw6rrgHpxkXCB SrI/g07pPTUNRm2pghXSz/Hbu7T6rzbSDsNY4EBwFTMJYZMeJ2shRgyKxdNUcrgwjOHy cWqXIdKbMPDv50qEgIvwTes7bzKzF8Ib3tgh+JNjYPl8pVibJ6REhQS0ETydA8ehNO+m IqYyz6U6im4FWwkgkCSnM5L/3BUIItqpwYwY4QhH69mFCLR3SJs8UKf71GP+wy+yA344 kov9dc6a5Y5j2vmCKp+FemNJV87gXZxOpb8E4ekvf0Vk5fpVFxZ1VQTaEtXNiN+i3CYh m/EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=z+JtWho86ij1SieoVrV2spu+O+srn9UNC1GawTS88jY=; b=XXZLb8nkGQe6j/g4POveILHCjThscLG5rcF8hDix8CVABoBwGQ5mlkhCoeIqNLfbna YgeTaDTqIaJ9y2EDcCtTWCp03E2fPgShRPpU6UmH+Zu2rASknft1ecyxcuG8YbetNhY6 0lnHC2Eje02w7zfVl9ATZMc/bi9Gqpva0B2gZC7E718Aaj1lUTwVPqs/GOh5HShtbfzM UJOLTn4P/MXefpbavBnASBXRafK/UacDusn5kD7Ax0vwXCGS2+gEkJCDKbeziIDsiXBD Imf22cUryUeAOGESyi6TpilHvLOs6vBuazqL7DaLDGN4pvjslVNEuyHlDTlcogG9k9Vq 9HBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kvHRItQn; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id q15-20020a05621419ef00b00469bed5e542si8351769qvc.133.2022.06.07.15.31.55 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:31:55 -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; dkim=pass header.i=@linaro.org header.s=google header.b=kvHRItQn; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:55002 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhjv-0001vn-A1 for patch@linaro.org; Tue, 07 Jun 2022 18:31:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5r-0007Pa-Q1 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:27 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:34786) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5o-0001Uu-Te for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:27 -0400 Received: by mail-pf1-x435.google.com with SMTP id c196so16548647pfb.1 for ; Tue, 07 Jun 2022 13:46:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=z+JtWho86ij1SieoVrV2spu+O+srn9UNC1GawTS88jY=; b=kvHRItQn8IR6H6E+dyX0cFDrHX8ws0YkB2nYPa5+rVxjdW3nR86KbAt6Z8dhsVqePK glRtB6nNQ8w3yKfocjaua5mwNsLPdqDRvBlTnpCPP593ru//l0xnV+TGMSlHJ2U+oRl1 jRK8FveRm9VQbB7mjHYuz0PF+hKCakMcO8rxjzXW3XWRS7Qt3JTv9C8q5gyMyiXT5QUb DCxgstM6CuXq/MjWh+c2eQFOn+A1KqUzc0i0pJrO7wRv3OAPM7gEXrHb/5tl4XkI9Kta Fb2VCVwbj2aeDhW/4VX9rexUueIF/Xp7Kbihkc8YoIw+DXe+EtPsRCjVYDTTW0Duibe5 e8DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=z+JtWho86ij1SieoVrV2spu+O+srn9UNC1GawTS88jY=; b=PPta4T2JXOo9socVIhMma/CKqd9w41U8E8UalrFWCA6MmIDmJ5KwIbg1NZQWWaC3ET xswNV7vGZYLbnSC6NYebw8SEZt8eraK/0oUmJE0NCynV8g6AZovvnTEZe74Ab0WIm4Kg McuDvWcW39d6uBFh5rPWb708ucRaOmVCuqYFBEpNOMGD4Zj11Ri6jmF+7rubhM/9mH6c lsg5k62D0Xw20pzSvzOCcTrbkle+ypoq/uIq787p8r6Ma1DeYm3nNJXf+kpgJsh914tj VCWMVK3P3Upka5dP9zHizIhLxqdCG7U3GiN3g5UGCyLSinJ7KgHuN5FqBZwVGg1iCiL2 An3A== X-Gm-Message-State: AOAM533646X7jh3qJj9SkszSmC2fbY0McjNvPCXOowNxCN52SGMyJSq/ SFUqT6jvuNeWCbL8afwZOWiRFWrOeLuuQA== X-Received: by 2002:a62:1bd3:0:b0:51c:505b:e35 with SMTP id b202-20020a621bd3000000b0051c505b0e35mr1132432pfb.38.1654634783543; Tue, 07 Jun 2022 13:46:23 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 27/53] semihosting: Split out semihost_sys_open Date: Tue, 7 Jun 2022 13:45:31 -0700 Message-Id: <20220607204557.658541-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_OPEN to a reusable function. This handles gdb and host file i/o. Add helpers to validate the length of the filename string. Prepare for usage by other semihosting by allowing the filename length parameter to be 0, and calling strlen. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 25 ++++++ semihosting/arm-compat-semi.c | 52 ++--------- semihosting/guestfd.c | 5 ++ semihosting/syscalls.c | 156 +++++++++++++++++++++++++++++++++ semihosting/meson.build | 1 + 5 files changed, 193 insertions(+), 46 deletions(-) create mode 100644 include/semihosting/syscalls.h create mode 100644 semihosting/syscalls.c diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h new file mode 100644 index 0000000000..991658bf79 --- /dev/null +++ b/include/semihosting/syscalls.h @@ -0,0 +1,25 @@ +/* + * Syscall implementations for semihosting. + * + * Copyright (c) 2022 Linaro + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef SEMIHOSTING_SYSCALLS_H +#define SEMIHOSTING_SYSCALLS_H + +/* + * Argument loading from the guest is performed by the caller; + * results are returned via the 'complete' callback. + * + * String operands are in address/len pairs. The len argument may be 0 + * (when the semihosting abi does not already provide the length), + * or non-zero (where it should include the terminating zero). + */ + +void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + int gdb_flags, int mode); + +#endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 72a1350512..3239eda513 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -32,12 +32,13 @@ */ #include "qemu/osdep.h" +#include "qemu/timer.h" +#include "exec/gdbstub.h" #include "semihosting/semihost.h" #include "semihosting/console.h" #include "semihosting/common-semi.h" #include "semihosting/guestfd.h" -#include "qemu/timer.h" -#include "exec/gdbstub.h" +#include "semihosting/syscalls.h" #ifdef CONFIG_USER_ONLY #include "qemu.h" @@ -98,21 +99,6 @@ static int gdb_open_modeflags[12] = { GDB_O_RDWR | GDB_O_CREAT | GDB_O_APPEND, }; -static int open_modeflags[12] = { - O_RDONLY, - O_RDONLY | O_BINARY, - O_RDWR, - O_RDWR | O_BINARY, - O_WRONLY | O_CREAT | O_TRUNC, - O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, - O_RDWR | O_CREAT | O_TRUNC, - O_RDWR | O_CREAT | O_TRUNC | O_BINARY, - O_WRONLY | O_CREAT | O_APPEND, - O_WRONLY | O_CREAT | O_APPEND | O_BINARY, - O_RDWR | O_CREAT | O_APPEND, - O_RDWR | O_CREAT | O_APPEND | O_BINARY -}; - #ifndef CONFIG_USER_ONLY /** @@ -284,20 +270,6 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) common_semi_cb(cs, ret, err); } -static int common_semi_open_guestfd; - -static void -common_semi_open_cb(CPUState *cs, target_ulong ret, target_ulong err) -{ - if (err) { - dealloc_guestfd(common_semi_open_guestfd); - } else { - associate_guestfd(common_semi_open_guestfd, ret); - ret = common_semi_open_guestfd; - } - common_semi_cb(cs, ret, err); -} - /* * Types for functions implementing various semihosting calls * for specific types of guest file descriptor. These must all @@ -601,22 +573,10 @@ void do_common_semihosting(CPUState *cs) staticfile_guestfd(ret, featurefile_data, sizeof(featurefile_data)); } - } else if (use_gdb_syscalls()) { - unlock_user(s, arg0, 0); - common_semi_open_guestfd = alloc_guestfd(); - gdb_do_syscall(common_semi_open_cb, - "open,%s,%x,1a4", arg0, (int)arg2 + 1, - gdb_open_modeflags[arg1]); - break; } else { - hostfd = open(s, open_modeflags[arg1], 0644); - if (hostfd < 0) { - ret = -1; - err = errno; - } else { - ret = alloc_guestfd(); - associate_guestfd(ret, hostfd); - } + semihost_sys_open(cs, common_semi_cb, arg0, arg2 + 1, + gdb_open_modeflags[arg1], 0644); + break; } unlock_user(s, arg0, 0); common_semi_cb(cs, ret, err); diff --git a/semihosting/guestfd.c b/semihosting/guestfd.c index b6405f5663..7ac2e147a8 100644 --- a/semihosting/guestfd.c +++ b/semihosting/guestfd.c @@ -11,6 +11,11 @@ #include "qemu/osdep.h" #include "exec/gdbstub.h" #include "semihosting/guestfd.h" +#ifdef CONFIG_USER_ONLY +#include "qemu.h" +#else +#include "semihosting/softmmu-uaccess.h" +#endif static GArray *guestfd_array; diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c new file mode 100644 index 0000000000..9f9d19a59a --- /dev/null +++ b/semihosting/syscalls.c @@ -0,0 +1,156 @@ +/* + * Syscall implementations for semihosting. + * + * Copyright (c) 2022 Linaro + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "exec/gdbstub.h" +#include "semihosting/guestfd.h" +#include "semihosting/syscalls.h" +#ifdef CONFIG_USER_ONLY +#include "qemu.h" +#else +#include "semihosting/softmmu-uaccess.h" +#endif + + +/* + * Validate or compute the length of the string (including terminator). + */ +static int validate_strlen(CPUState *cs, target_ulong str, target_ulong tlen) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char c; + + if (tlen == 0) { + ssize_t slen = target_strlen(str); + + if (slen < 0) { + return -EFAULT; + } + if (slen >= INT32_MAX) { + return -ENAMETOOLONG; + } + return slen + 1; + } + if (tlen > INT32_MAX) { + return -ENAMETOOLONG; + } + if (get_user_u8(c, str + tlen - 1)) { + return -EFAULT; + } + if (c != 0) { + return -EINVAL; + } + return tlen; +} + +static int validate_lock_user_string(char **pstr, CPUState *cs, + target_ulong tstr, target_ulong tlen) +{ + int ret = validate_strlen(cs, tstr, tlen); + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char *str = NULL; + + if (ret > 0) { + str = lock_user(VERIFY_READ, tstr, ret, true); + ret = str ? 0 : -EFAULT; + } + *pstr = str; + return ret; +} + +/* + * GDB semihosting syscall implementations. + */ + +static gdb_syscall_complete_cb gdb_open_complete; + +static void gdb_open_cb(CPUState *cs, target_ulong ret, target_ulong err) +{ + if (!err) { + int guestfd = alloc_guestfd(); + associate_guestfd(guestfd, ret); + ret = guestfd; + } + gdb_open_complete(cs, ret, err); +} + +static void gdb_open(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + int gdb_flags, int mode) +{ + int len = validate_strlen(cs, fname, fname_len); + if (len < 0) { + complete(cs, -1, -len); + return; + } + + gdb_open_complete = complete; + gdb_do_syscall(gdb_open_cb, "open,%s,%x,%x", + fname, len, (target_ulong)gdb_flags, (target_ulong)mode); +} + +/* + * Host semihosting syscall implementations. + */ + +static void host_open(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + int gdb_flags, int mode) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char *p; + int ret, host_flags; + + ret = validate_lock_user_string(&p, cs, fname, fname_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + + if (gdb_flags & GDB_O_WRONLY) { + host_flags = O_WRONLY; + } else if (gdb_flags & GDB_O_RDWR) { + host_flags = O_RDWR; + } else { + host_flags = O_RDONLY; + } + if (gdb_flags & GDB_O_CREAT) { + host_flags |= O_CREAT; + } + if (gdb_flags & GDB_O_TRUNC) { + host_flags |= O_TRUNC; + } + if (gdb_flags & GDB_O_EXCL) { + host_flags |= O_EXCL; + } + + ret = open(p, host_flags, mode); + if (ret < 0) { + complete(cs, -1, errno); + } else { + int guestfd = alloc_guestfd(); + associate_guestfd(guestfd, ret); + complete(cs, guestfd, 0); + } + unlock_user(p, fname, 0); +} + +/* + * Syscall entry points. + */ + +void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + int gdb_flags, int mode) +{ + if (use_gdb_syscalls()) { + gdb_open(cs, complete, fname, fname_len, gdb_flags, mode); + } else { + host_open(cs, complete, fname, fname_len, gdb_flags, mode); + } +} diff --git a/semihosting/meson.build b/semihosting/meson.build index d2c1c37bfd..8057db5494 100644 --- a/semihosting/meson.build +++ b/semihosting/meson.build @@ -1,5 +1,6 @@ specific_ss.add(when: 'CONFIG_SEMIHOSTING', if_true: files( 'guestfd.c', + 'syscalls.c', )) specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_SOFTMMU'], if_true: files( From patchwork Tue Jun 7 20:45:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579422 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5572251max; Tue, 7 Jun 2022 15:34:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJynHTWV9dN5SEKlG28z1M9OjDJ7AVF1363d1xE1pQ0oEqZLquF+mhPFLe8HDFpZs/6vldEb X-Received: by 2002:ac8:584c:0:b0:304:c990:93dc with SMTP id h12-20020ac8584c000000b00304c99093dcmr24776698qth.660.1654641289938; Tue, 07 Jun 2022 15:34:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641289; cv=none; d=google.com; s=arc-20160816; b=KieI93/Td9Qpd32Z6hQGOQzmrm0+1fbJ3wNXr3XjRS1qXehyIEtVhsAERtmdgfFeyQ 9PG81kSTNDnz5DXTvxXinuTfnfne0btM7liX62Olk7FXtK59RfFZnKFW3Myqt38VC+mn RN7Q48eW2YgLmy1r2qIPSXRxKO9fYv59J7YtVurJfq3HpnO1FcSiPHqQJqC9GnM0dYsf EDWfLIbyugQNxPLqojPZybw2vE2FzkU1wUIoa66XFoSsW++aw6OCONGXWqrlA6E7aU/Y lwkj/mjLL/LpeA6WgFzupVWjMnWYGtLKpSo2Ldcf4x4vSbdr+3l/KsPdjzAD77tBd10s 1gnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=b+MA80j3xqUJAkmx63/7RsbQGAdy+LQJceEO3bo0dWc=; b=uI6pUANs1goJTOeLj+aKhLBW9cDPFR2zwdg5mMUs3OiwQRCYmE5HMEozgckvvFHwxi r181rADlrZqIhVdr1sIWMq/zwEyNlW9jpGkV5cCVTBEZT1ThrLdXEA9jlMu2NuOXdkL2 dnzqZyoNHeyRSmrkIy2dJEn20H+NbcbOw7R4phaXETcFH+l/S2AApHBPK5Y1/CvS+zh7 HQWxsQtrwUlXMFx4jGQAZd3E2JRpd/XzXdo4vabfld7S2AdKMlrY8V1xXqfmys6BU7hx NXxCoU6LN7iBm8Dxy+G7u6i38kKtqvii2ZUFSCAiWpv3AJJAcGpRO7pihkiML50tXZr0 7qxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=DnP9AeQ5; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id p10-20020a05621421ea00b0045aea162dd7si9417786qvj.285.2022.06.07.15.34.49 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:34:49 -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; dkim=pass header.i=@linaro.org header.s=google header.b=DnP9AeQ5; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:35208 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhmj-0007no-FA for patch@linaro.org; Tue, 07 Jun 2022 18:34:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39150) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5s-0007RM-LX for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:28 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:46031) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5p-0001W8-P7 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:28 -0400 Received: by mail-pg1-x536.google.com with SMTP id 184so1031052pga.12 for ; Tue, 07 Jun 2022 13:46:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=b+MA80j3xqUJAkmx63/7RsbQGAdy+LQJceEO3bo0dWc=; b=DnP9AeQ580A63IXqN3y6e0uHrih8l1w4ja0Ywl/a9LgklI5fgfsdmgapdCdrUzYKHv vvHgPKHbfJlxCtY7AKBVEmyH7ztXSjkH7jYSnb0f0Lfr7e8K2XDdBRg+vIm6KJDVZYVc AyCEzKBZtsVcxTAXwwpjWKU/vm7+x6NRr6OauwHbWt7V03a826lbRv4j/4ddjvGKcNKR EGYOwy/RnmxyCHANtrVCxGqp2sFxdkZuFhD5kzcY2xIdBMc9blU6LDKNG1xYBYZos6WN zmmM8aQL658oQ3qqtdwhUSJh64v/6bx7hQpvVKLav3+wjZObPNHbA9wryqOqIBXSwfaP 10KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b+MA80j3xqUJAkmx63/7RsbQGAdy+LQJceEO3bo0dWc=; b=dGsFaY+lgpPFMfCq9fKbR19Ey5YMLbAEz5l03XL5je4Jg7Ivsx1mA4mGjpey3PEiV3 kcTsuJbUyvdU51zMvvUfZ1rmh/t1LdgzHC3v4bBofaIUlVaLuYsdf+JZFVQI2pqmB+qr PQs6fJeOaZe4WzkhHvsD7UBm3qixRQYKufl6Zi+hlU0vVBGVCpTmZcjz5RIdjciDGAlY wUYYMgFakGCzk0dAUCN6R2hk7qDQRuao8TA7fNk/UgUcR9Wh2dH446KOnpXbezx8oRcF 9vFyeaBN7CSEq6Qsg3/pM9Nv2A/BNPBqxVAy8hZmlhzgkkzkr4XS/XgJClLftkyuRrCm e9Lw== X-Gm-Message-State: AOAM5324HOki8tfb4moa6njqbytEEQwLQiWFVwE3qidfwTpveBHCW01Y B4Rov0+qJIwWzABJ1iJJlEqz7BFVr23uSQ== X-Received: by 2002:a05:6a00:1687:b0:518:6c6b:6a9a with SMTP id k7-20020a056a00168700b005186c6b6a9amr31173903pfc.81.1654634784370; Tue, 07 Jun 2022 13:46:24 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 28/53] semihosting: Split out semihost_sys_close Date: Tue, 7 Jun 2022 13:45:32 -0700 Message-Id: <20220607204557.658541-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_CLOSE to a reusable function. This handles all GuestFD. Note that gdb_do_syscall %x reads target_ulong, not int. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 3 +++ semihosting/arm-compat-semi.c | 41 +---------------------------- semihosting/guestfd.c | 7 ++++- semihosting/syscalls.c | 47 ++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 41 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 991658bf79..00e718f11d 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -22,4 +22,7 @@ void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong fname, target_ulong fname_len, int gdb_flags, int mode); +void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, + int fd); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 3239eda513..a6dddb2aa2 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -276,7 +276,6 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) * do the work and return the required return value to the guest * via common_semi_cb. */ -typedef void sys_closefn(CPUState *cs, GuestFD *gf); typedef void sys_writefn(CPUState *cs, GuestFD *gf, target_ulong buf, uint32_t len); typedef void sys_readfn(CPUState *cs, GuestFD *gf, @@ -285,23 +284,6 @@ typedef void sys_isattyfn(CPUState *cs, GuestFD *gf); typedef void sys_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset); typedef void sys_flenfn(CPUState *cs, GuestFD *gf); -static void host_closefn(CPUState *cs, GuestFD *gf) -{ - int ret; - /* - * Only close the underlying host fd if it's one we opened on behalf - * of the guest in SYS_OPEN. - */ - if (gf->hostfd == STDIN_FILENO || - gf->hostfd == STDOUT_FILENO || - gf->hostfd == STDERR_FILENO) { - ret = 0; - } else { - ret = close(gf->hostfd); - } - common_semi_cb(cs, ret, ret ? errno : 0); -} - static void host_writefn(CPUState *cs, GuestFD *gf, target_ulong buf, uint32_t len) { @@ -362,11 +344,6 @@ static void host_flenfn(CPUState *cs, GuestFD *gf) } } -static void gdb_closefn(CPUState *cs, GuestFD *gf) -{ - gdb_do_syscall(common_semi_cb, "close,%x", gf->hostfd); -} - static void gdb_writefn(CPUState *cs, GuestFD *gf, target_ulong buf, uint32_t len) { @@ -414,12 +391,6 @@ static const uint8_t featurefile_data[] = { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; -static void staticfile_closefn(CPUState *cs, GuestFD *gf) -{ - /* Nothing to do */ - common_semi_cb(cs, 0, 0); -} - static void staticfile_writefn(CPUState *cs, GuestFD *gf, target_ulong buf, uint32_t len) { @@ -468,7 +439,6 @@ static void staticfile_flenfn(CPUState *cs, GuestFD *gf) } typedef struct GuestFDFunctions { - sys_closefn *closefn; sys_writefn *writefn; sys_readfn *readfn; sys_isattyfn *isattyfn; @@ -478,7 +448,6 @@ typedef struct GuestFDFunctions { static const GuestFDFunctions guestfd_fns[] = { [GuestFDHost] = { - .closefn = host_closefn, .writefn = host_writefn, .readfn = host_readfn, .isattyfn = host_isattyfn, @@ -486,7 +455,6 @@ static const GuestFDFunctions guestfd_fns[] = { .flenfn = host_flenfn, }, [GuestFDGDB] = { - .closefn = gdb_closefn, .writefn = gdb_writefn, .readfn = gdb_readfn, .isattyfn = gdb_isattyfn, @@ -494,7 +462,6 @@ static const GuestFDFunctions guestfd_fns[] = { .flenfn = gdb_flenfn, }, [GuestFDStatic] = { - .closefn = staticfile_closefn, .writefn = staticfile_writefn, .readfn = staticfile_readfn, .isattyfn = staticfile_isattyfn, @@ -585,13 +552,7 @@ void do_common_semihosting(CPUState *cs) case TARGET_SYS_CLOSE: GET_ARG(0); - - gf = get_guestfd(arg0); - if (!gf) { - goto do_badf; - } - guestfd_fns[gf->type].closefn(cs, gf); - dealloc_guestfd(arg0); + semihost_sys_close(cs, common_semi_cb, arg0); break; case TARGET_SYS_WRITEC: diff --git a/semihosting/guestfd.c b/semihosting/guestfd.c index 7ac2e147a8..e3122ebba9 100644 --- a/semihosting/guestfd.c +++ b/semihosting/guestfd.c @@ -49,6 +49,11 @@ int alloc_guestfd(void) return i; } +static void do_dealloc_guestfd(GuestFD *gf) +{ + gf->type = GuestFDUnused; +} + /* * Look up the guestfd in the data structure; return NULL * for out of bounds, but don't check whether the slot is unused. @@ -119,5 +124,5 @@ void dealloc_guestfd(int guestfd) GuestFD *gf = do_get_guestfd(guestfd); assert(gf); - gf->type = GuestFDUnused; + do_dealloc_guestfd(gf); } diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 9f9d19a59a..3648b9dd49 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -94,6 +94,12 @@ static void gdb_open(CPUState *cs, gdb_syscall_complete_cb complete, fname, len, (target_ulong)gdb_flags, (target_ulong)mode); } +static void gdb_close(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf) +{ + gdb_do_syscall(complete, "close,%x", (target_ulong)gf->hostfd); +} + /* * Host semihosting syscall implementations. */ @@ -140,6 +146,23 @@ static void host_open(CPUState *cs, gdb_syscall_complete_cb complete, unlock_user(p, fname, 0); } +static void host_close(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf) +{ + /* + * Only close the underlying host fd if it's one we opened on behalf + * of the guest in SYS_OPEN. + */ + if (gf->hostfd != STDIN_FILENO && + gf->hostfd != STDOUT_FILENO && + gf->hostfd != STDERR_FILENO && + close(gf->hostfd) < 0) { + complete(cs, -1, errno); + } else { + complete(cs, 0, 0); + } +} + /* * Syscall entry points. */ @@ -154,3 +177,27 @@ void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete, host_open(cs, complete, fname, fname_len, gdb_flags, mode); } } + +void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, int fd) +{ + GuestFD *gf = get_guestfd(fd); + + if (!gf) { + complete(cs, -1, EBADF); + return; + } + switch (gf->type) { + case GuestFDGDB: + gdb_close(cs, complete, gf); + break; + case GuestFDHost: + host_close(cs, complete, gf); + break; + case GuestFDStatic: + complete(cs, 0, 0); + break; + default: + g_assert_not_reached(); + } + dealloc_guestfd(fd); +} From patchwork Tue Jun 7 20:45:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579432 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5577698max; Tue, 7 Jun 2022 15:42:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzFRPe0NkS4S3D+7Vs0Op5FfuYfuow/A1EKnmh2m+IZkrAtVHnKB/jYfNIRV3c1thZp2M+B X-Received: by 2002:a05:622a:50e:b0:304:fda0:5ac0 with SMTP id l14-20020a05622a050e00b00304fda05ac0mr3621774qtx.279.1654641776082; Tue, 07 Jun 2022 15:42:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641776; cv=none; d=google.com; s=arc-20160816; b=K782wlFPqoqw11RKNabvNVoA02oIqlHAsP9uSv+w904edhLf/VQjoZ6B6wjFXAhzth P+cX1aQ5jo5PIuJoVRpW8EImCODsHeWYkk9qIIjvExsk2ldddt1GH2hVOjGdVDa/WJd8 YAeOyghroTPk+n60SF0y6nC14TGO5oBf23KZDaQ3hMgzYtjSl8QBsWWzfAILBVwq2SvI NsgMLhx86pUcIwW2XEJo8IKgv92bdcefrl6qjlph7tT2pqDdcB5R+/x2tDq9TIqazx5q D+IRZJaXKbazvqbUwCnH6z2wEAYzGW/1LvaAHASGO5BsCtts5/G9fgn6pC30vT+bnw3G xSdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=yudZM/x/b/b005gZSABZ/vgFwSBuZhYdS78za3bDPvA=; b=sxwHhNV+7yDWTbzr7yx7fGo7dSP2S1OfUG2dhZPk95Gc1oo1UPE+KsLktTiyRDtsCs rIKiCgZZ02IEhmONSQT2affTdWIqEKjsCzK+scN2YoSpRc2eSbjICq9p58bT+GNyQSSn u4jFVo+gTlElmEWIOIV2GKUEBRDs/t0hGfW0r5OEVjU5lX35KOTRqHoC+Cg5bIqxAawp aCMXkz5GJIL0Kwrt0XWfMHESdm74npJALz8IUE/eFpyolNb79o9n70nafFw5rvnZ0D6J eKIi7Fg6YwSYcOUp3tPRlW8qXNf5pEKIS7CzM1rBqaHVls1oFnUZueuwXWKxh4j41n1A uK2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NDBVOkJu; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id bs33-20020a05620a472100b006a678af3a3bsi9430075qkb.359.2022.06.07.15.42.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:42:56 -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; dkim=pass header.i=@linaro.org header.s=google header.b=NDBVOkJu; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:55926 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhuZ-00055T-L0 for patch@linaro.org; Tue, 07 Jun 2022 18:42:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39170) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5t-0007Tu-Lh for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:29 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:37780) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5q-0001Wr-M9 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:29 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 3-20020a17090a174300b001e426a02ac5so18756915pjm.2 for ; Tue, 07 Jun 2022 13:46:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=yudZM/x/b/b005gZSABZ/vgFwSBuZhYdS78za3bDPvA=; b=NDBVOkJuBHFkwxiagdql+UGI+g6FmOEnNwWK/76O/XLm733veGmsu3XNGitAcEm7qZ r3MJS0NApY1D0gd8HlSX2PljwVpKhf6X4ikgdCF8IqLhfV0s0fAIaCtqfzYHqYgklkrs EU8YHff1/8MEl9DoOeG5sd27OmFCJd3LLmIRPa/i4Go+BbME/VHeCFqeacNLAS+JpAo4 tdjQuHx+40QmeoRUxs4PtyDCJo3nEyAD+/EzEN0+lHEaHJxIqBAZkc4/tzcx5CemFYVS TmzP9Ya3Ll7bLVrpyYumIoTZPkFLmeZJSIkTJv2pJCl7jJdfZ+m13fRde7FDk7A5MPQ0 dk2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yudZM/x/b/b005gZSABZ/vgFwSBuZhYdS78za3bDPvA=; b=AqiCZrnA88s4T/yl9/jpppPSNZXhHgypGNVpfnEtXXEbmQ0wTaIqOXKmQwwTpssZ9m RcmR8rm78IxmbeTrmvMSsRYTy+SFdoPGGG7/jWWCUm1XphO7c/VcEJHFWxanQ7m2Zc6C SFpoxcBpy0v9d8rGB9XLYrgKWNVXSjsk9bgzvhpmaIuxtAuqZawxdmRFCZ+0wnGsAr8U 4nF2dSWPCn9AcCiOGnLB7hUr/TN8nKkJa+K4n96+LkX6bH0/vsQg6PGW54InisoJUxBA wJLkC0/TV5uR2kcR/8xoRVQHVcunmttV0ULEbZgLNHQc3ML4r6dLYud1mqhWsiERfU19 47Dw== X-Gm-Message-State: AOAM531Idsr+VUVZm7DvT8qvq3tS1ONj09oiVq515q9Qbqm/X+BjD4zW K92dIjv65RT25i7ovW3+ZOSnYz3v4ZmkKg== X-Received: by 2002:a17:902:f64c:b0:156:7ceb:b579 with SMTP id m12-20020a170902f64c00b001567cebb579mr30131985plg.73.1654634785209; Tue, 07 Jun 2022 13:46:25 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 29/53] semihosting: Split out semihost_sys_read Date: Tue, 7 Jun 2022 13:45:33 -0700 Message-Id: <20220607204557.658541-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_READ to a reusable function. This handles all GuestFD. Isolate the curious ARM-specific return value processing to a new callback, common_semi_rw_cb. Note that gdb_do_syscall %x reads target_ulong, not int. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 8 ++++ semihosting/arm-compat-semi.c | 85 ++++++++-------------------------- semihosting/syscalls.c | 85 ++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 65 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 00e718f11d..20da8138b0 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -18,6 +18,8 @@ * or non-zero (where it should include the terminating zero). */ +typedef struct GuestFD GuestFD; + void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong fname, target_ulong fname_len, int gdb_flags, int mode); @@ -25,4 +27,10 @@ void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, int fd); +void semihost_sys_read(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, target_ulong buf, target_ulong len); + +void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index a6dddb2aa2..5e11ec307a 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -231,7 +231,6 @@ static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) target_ulong reg0 = common_semi_arg(cs, 0); switch (reg0) { case TARGET_SYS_WRITE: - case TARGET_SYS_READ: ret = common_semi_syscall_len - ret; break; case TARGET_SYS_SEEK: @@ -244,6 +243,25 @@ static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) common_semi_set_ret(cs, ret); } +/* + * SYS_READ and SYS_WRITE always return the number of bytes not read/written. + * There is no error condition, other than returning the original length. + */ +static void common_semi_rw_cb(CPUState *cs, target_ulong ret, target_ulong err) +{ + /* Recover the original length from the third argument. */ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + target_ulong args = common_semi_arg(cs, 1); + target_ulong arg2; + GET_ARG(2); + + if (err) { + do_fault: + ret = 0; /* error: no bytes transmitted */ + } + common_semi_set_ret(cs, arg2 - ret); +} + /* * Return an address in target memory of 64 bytes where the remote * gdb should write its stat struct. (The format of this structure @@ -278,8 +296,6 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) */ typedef void sys_writefn(CPUState *cs, GuestFD *gf, target_ulong buf, uint32_t len); -typedef void sys_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len); typedef void sys_isattyfn(CPUState *cs, GuestFD *gf); typedef void sys_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset); typedef void sys_flenfn(CPUState *cs, GuestFD *gf); @@ -302,26 +318,6 @@ static void host_writefn(CPUState *cs, GuestFD *gf, common_semi_cb(cs, len - ret, 0); } -static void host_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - CPUArchState *env = cs->env_ptr; - uint32_t ret = 0; - char *s = lock_user(VERIFY_WRITE, buf, len, 0); - (void) env; /* Used in arm softmmu lock_user implicitly */ - if (s) { - do { - ret = read(gf->hostfd, s, len); - } while (ret == -1 && errno == EINTR); - unlock_user(s, buf, len); - if (ret == (uint32_t)-1) { - ret = 0; - } - } - /* Return bytes not read, on error as well. */ - common_semi_cb(cs, len - ret, 0); -} - static void host_isattyfn(CPUState *cs, GuestFD *gf) { common_semi_cb(cs, isatty(gf->hostfd), 0); @@ -351,13 +347,6 @@ static void gdb_writefn(CPUState *cs, GuestFD *gf, gdb_do_syscall(common_semi_cb, "write,%x,%x,%x", gf->hostfd, buf, len); } -static void gdb_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - common_semi_syscall_len = len; - gdb_do_syscall(common_semi_cb, "read,%x,%x,%x", gf->hostfd, buf, len); -} - static void gdb_isattyfn(CPUState *cs, GuestFD *gf) { gdb_do_syscall(common_semi_cb, "isatty,%x", gf->hostfd); @@ -398,30 +387,6 @@ static void staticfile_writefn(CPUState *cs, GuestFD *gf, common_semi_cb(cs, -1, EBADF); } -static void staticfile_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - CPUArchState *env = cs->env_ptr; - uint32_t i = 0; - char *s; - - (void) env; /* Used in arm softmmu lock_user implicitly */ - s = lock_user(VERIFY_WRITE, buf, len, 0); - if (s) { - for (i = 0; i < len; i++) { - if (gf->staticfile.off >= gf->staticfile.len) { - break; - } - s[i] = gf->staticfile.data[gf->staticfile.off]; - gf->staticfile.off++; - } - unlock_user(s, buf, len); - } - - /* Return number of bytes not read */ - common_semi_cb(cs, len - i, 0); -} - static void staticfile_isattyfn(CPUState *cs, GuestFD *gf) { common_semi_cb(cs, 0, 0); @@ -440,7 +405,6 @@ static void staticfile_flenfn(CPUState *cs, GuestFD *gf) typedef struct GuestFDFunctions { sys_writefn *writefn; - sys_readfn *readfn; sys_isattyfn *isattyfn; sys_seekfn *seekfn; sys_flenfn *flenfn; @@ -449,21 +413,18 @@ typedef struct GuestFDFunctions { static const GuestFDFunctions guestfd_fns[] = { [GuestFDHost] = { .writefn = host_writefn, - .readfn = host_readfn, .isattyfn = host_isattyfn, .seekfn = host_seekfn, .flenfn = host_flenfn, }, [GuestFDGDB] = { .writefn = gdb_writefn, - .readfn = gdb_readfn, .isattyfn = gdb_isattyfn, .seekfn = gdb_seekfn, .flenfn = gdb_flenfn, }, [GuestFDStatic] = { .writefn = staticfile_writefn, - .readfn = staticfile_readfn, .isattyfn = staticfile_isattyfn, .seekfn = staticfile_seekfn, .flenfn = staticfile_flenfn, @@ -582,13 +543,7 @@ void do_common_semihosting(CPUState *cs) GET_ARG(0); GET_ARG(1); GET_ARG(2); - len = arg2; - - gf = get_guestfd(arg0); - if (!gf) { - goto do_badf; - } - guestfd_fns[gf->type].readfn(cs, gf, arg1, len); + semihost_sys_read(cs, common_semi_rw_cb, arg0, arg1, arg2); break; case TARGET_SYS_READC: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 3648b9dd49..d42a190746 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -100,6 +100,13 @@ static void gdb_close(CPUState *cs, gdb_syscall_complete_cb complete, gdb_do_syscall(complete, "close,%x", (target_ulong)gf->hostfd); } +static void gdb_read(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + gdb_do_syscall(complete, "read,%x,%x,%x", + (target_ulong)gf->hostfd, buf, len); +} + /* * Host semihosting syscall implementations. */ @@ -163,6 +170,54 @@ static void host_close(CPUState *cs, gdb_syscall_complete_cb complete, } } +static void host_read(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + void *ptr = lock_user(VERIFY_WRITE, buf, len, 0); + ssize_t ret; + + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + do { + ret = read(gf->hostfd, ptr, len); + } while (ret == -1 && errno == EINTR); + if (ret == -1) { + complete(cs, -1, errno); + unlock_user(ptr, buf, 0); + } else { + complete(cs, ret, 0); + unlock_user(ptr, buf, ret); + } +} + +/* + * Static file semihosting syscall implementations. + */ + +static void staticfile_read(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + target_ulong rest = gf->staticfile.len - gf->staticfile.off; + void *ptr; + + if (len > rest) { + len = rest; + } + ptr = lock_user(VERIFY_WRITE, buf, len, 0); + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + memcpy(ptr, gf->staticfile.data + gf->staticfile.off, len); + gf->staticfile.off += len; + complete(cs, len, 0); + unlock_user(ptr, buf, len); +} + /* * Syscall entry points. */ @@ -201,3 +256,33 @@ void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, int fd) } dealloc_guestfd(fd); } + +void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + switch (gf->type) { + case GuestFDGDB: + gdb_read(cs, complete, gf, buf, len); + break; + case GuestFDHost: + host_read(cs, complete, gf, buf, len); + break; + case GuestFDStatic: + staticfile_read(cs, complete, gf, buf, len); + break; + default: + g_assert_not_reached(); + } +} + +void semihost_sys_read(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, target_ulong buf, target_ulong len) +{ + GuestFD *gf = get_guestfd(fd); + + if (gf) { + semihost_sys_read_gf(cs, complete, gf, buf, len); + } else { + complete(cs, -1, EBADF); + } +} From patchwork Tue Jun 7 20:45:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579406 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5561596max; Tue, 7 Jun 2022 15:19:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwGl5tK/7hQk1cKTAEKyK8T4Q6iu6PAkNgJgsx1xTr6+frFmGrXLBKdLjzSWTh1n6DaPK0k X-Received: by 2002:a05:620a:4016:b0:6a6:bfec:6d6f with SMTP id h22-20020a05620a401600b006a6bfec6d6fmr8747118qko.735.1654640355428; Tue, 07 Jun 2022 15:19:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640355; cv=none; d=google.com; s=arc-20160816; b=l0Hjj+vYf5HzQSIfltqL6+MsbRxDI0EMJRWiHPI4TE04FGNYAzRS+riUiRb1wSa+iy eH7Fg3hYQ4PFX3PlKV9f3/95pqzTN36BloCCUR6eGfj764HrWT/NSvRA+EPXdq0EB0lo r6BdnjmxgOXavzVsBV3W6aQ9qXcoMGfeKxT4ryWDJ2SgWsdqToG97ebrHpzLokLbdxJo qTrkZQ5fE8Hx1jXtRVnSJX3+yp5iUch5il5tavvKV4R/e6UO/7GKhZBbHGXs93Ylo/8K Yv29ZxPka25xYwMKwUcd508iNYbrYZaPlSAQ+8IDKFHmSGSRKovFpOjm9Ud/kbEGofGD 21iQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=aIvUmlrlxeBsrl8hvkOSPQp6kZeifrxdpoCRLiGBt5g=; b=ELuJ6loh98FRy5DgeOsffF0wChs9D15N5+15hPyTZOTM2klSog81+M/B+/OVNW9BnW NYv9IEj5WUVxglrbAJczmj1IJUrISKtt42YOt6qC8TJburMAvthIqqhmcsLIJe6edOOd 13LG6lH4L4KRTpmhQ0qdqID7aek1N13beZqsLbKutP49WxXcjdlnk6aOdUq1ho2bIk2s qpss2Hb+nJgVVpiLLOh9KhOhhqbTYjKEaauVKQDIKS6eqNclwpBC77oDf3WAoKQYBhZn VPpFNU2b+gyOjbQBjKZvCrCzwgMSpblxTQJmeVYr7/ZMIueJSd/b1MItwy/ke4KKMnGN Y9fw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TlkorlHX; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id g9-20020a05620a40c900b006a6a49dffb2si8856116qko.22.2022.06.07.15.19.15 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:19:15 -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; dkim=pass header.i=@linaro.org header.s=google header.b=TlkorlHX; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:55780 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhXe-0007VQ-VL for patch@linaro.org; Tue, 07 Jun 2022 18:19:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39220) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5w-0007co-Qc for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:32 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:39794) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5r-0001Xn-OX for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:32 -0400 Received: by mail-pf1-x432.google.com with SMTP id y196so16528489pfb.6 for ; Tue, 07 Jun 2022 13:46:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=aIvUmlrlxeBsrl8hvkOSPQp6kZeifrxdpoCRLiGBt5g=; b=TlkorlHX8DGQz1NlaXORiNWVTG7/ph8MggbjxTQEL/BaFMTKc40ZlzEvJSjxmki/cz BG2Jx9zMs36nrYvnLEcaE1PXxjsedVWp3Up1uywQPtgg+0db/8lZvwc6Tn4c3+xC5ilw BiVpCqMOtc+0CAnDf1dctLYZtV1uetnhoLtF2c7li4f+9KSvSzoR/oNi0m39OPX+W0Nn kZygpE/88hd3BqsPvgsqo1JjOxhRKZH9YK0pwdfhcVo6oel1WKHme/ZH37uBB5hQwZxg wZRT7ku+4Xy0DfFPIQcJAodJReB5cee5s8VsdCp7Ti1puJsDB2TixIJi3Uaqh5bVWQbj 4HFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aIvUmlrlxeBsrl8hvkOSPQp6kZeifrxdpoCRLiGBt5g=; b=S5q9HuebqYPDb7FyH+gD3+x8UhFQjSKXFTqX6EA5W3WsBbuWryrGNbVjc3OsxGxqC4 Uy/3eGwVP1RdiwsLQXiKSP1h501DeIaJ7NTao6LH/Cv8VTxRItToDFqSAri3qJ4hjqs5 0uO1ioleiLlLRrFlflIl4hqJOMW+wZLX+efsdeV71SQEASPNpNM0H3px7vTZy/93J3wg 7ZTAO2uZpL3nc2VWj/PuPihHLjh/zESmxpnF8ObESGD4Kol1/3WxlsdtQ5eKiXYjIi58 jVWHSSJob4wUndPWFl+s4NP3zHmYl47o9LHNamtXNH1d0tcinW1uSRIoC/bnrIyEHH0N jw1A== X-Gm-Message-State: AOAM53341ltGCqTfXIsnnScRVDd4Z3iuUrEiPqSAwHwtV7+HPzh9trg2 H/dvFWvymNCyi2ueMpxEuBY/9V7qY6Nv9A== X-Received: by 2002:a63:171a:0:b0:3fc:1970:804a with SMTP id x26-20020a63171a000000b003fc1970804amr27239433pgl.299.1654634786451; Tue, 07 Jun 2022 13:46:26 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 30/53] semihosting: Split out semihost_sys_write Date: Tue, 7 Jun 2022 13:45:34 -0700 Message-Id: <20220607204557.658541-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_HELO_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_WRITE to a reusable function. This handles all GuestFD. This removes the last use of common_semi_syscall_len. Note that gdb_do_syscall %x reads target_ulong, not int. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 6 ++++ semihosting/arm-compat-semi.c | 52 +------------------------------- semihosting/syscalls.c | 54 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 51 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 20da8138b0..2464467579 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -33,4 +33,10 @@ void semihost_sys_read(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete, GuestFD *gf, target_ulong buf, target_ulong len); +void semihost_sys_write(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, target_ulong buf, target_ulong len); + +void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 5e11ec307a..d1d35e6032 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -215,8 +215,6 @@ static inline uint32_t get_swi_errno(CPUState *cs) #endif } -static target_ulong common_semi_syscall_len; - static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) { if (err) { @@ -230,9 +228,6 @@ static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) /* Fixup syscalls that use nonstardard return conventions. */ target_ulong reg0 = common_semi_arg(cs, 0); switch (reg0) { - case TARGET_SYS_WRITE: - ret = common_semi_syscall_len - ret; - break; case TARGET_SYS_SEEK: ret = 0; break; @@ -294,30 +289,10 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) * do the work and return the required return value to the guest * via common_semi_cb. */ -typedef void sys_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len); typedef void sys_isattyfn(CPUState *cs, GuestFD *gf); typedef void sys_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset); typedef void sys_flenfn(CPUState *cs, GuestFD *gf); -static void host_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - CPUArchState *env = cs->env_ptr; - uint32_t ret = 0; - char *s = lock_user(VERIFY_READ, buf, len, 1); - (void) env; /* Used in arm softmmu lock_user implicitly */ - if (s) { - ret = write(gf->hostfd, s, len); - unlock_user(s, buf, 0); - if (ret == (uint32_t)-1) { - ret = 0; - } - } - /* Return bytes not written, on error as well. */ - common_semi_cb(cs, len - ret, 0); -} - static void host_isattyfn(CPUState *cs, GuestFD *gf) { common_semi_cb(cs, isatty(gf->hostfd), 0); @@ -340,13 +315,6 @@ static void host_flenfn(CPUState *cs, GuestFD *gf) } } -static void gdb_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - common_semi_syscall_len = len; - gdb_do_syscall(common_semi_cb, "write,%x,%x,%x", gf->hostfd, buf, len); -} - static void gdb_isattyfn(CPUState *cs, GuestFD *gf) { gdb_do_syscall(common_semi_cb, "isatty,%x", gf->hostfd); @@ -380,13 +348,6 @@ static const uint8_t featurefile_data[] = { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; -static void staticfile_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - /* This fd can never be open for writing */ - common_semi_cb(cs, -1, EBADF); -} - static void staticfile_isattyfn(CPUState *cs, GuestFD *gf) { common_semi_cb(cs, 0, 0); @@ -404,7 +365,6 @@ static void staticfile_flenfn(CPUState *cs, GuestFD *gf) } typedef struct GuestFDFunctions { - sys_writefn *writefn; sys_isattyfn *isattyfn; sys_seekfn *seekfn; sys_flenfn *flenfn; @@ -412,19 +372,16 @@ typedef struct GuestFDFunctions { static const GuestFDFunctions guestfd_fns[] = { [GuestFDHost] = { - .writefn = host_writefn, .isattyfn = host_isattyfn, .seekfn = host_seekfn, .flenfn = host_flenfn, }, [GuestFDGDB] = { - .writefn = gdb_writefn, .isattyfn = gdb_isattyfn, .seekfn = gdb_seekfn, .flenfn = gdb_flenfn, }, [GuestFDStatic] = { - .writefn = staticfile_writefn, .isattyfn = staticfile_isattyfn, .seekfn = staticfile_seekfn, .flenfn = staticfile_flenfn, @@ -449,7 +406,6 @@ void do_common_semihosting(CPUState *cs) char * s; int nr; uint32_t ret; - uint32_t len; GuestFD *gf; int64_t elapsed; @@ -530,13 +486,7 @@ void do_common_semihosting(CPUState *cs) GET_ARG(0); GET_ARG(1); GET_ARG(2); - len = arg2; - - gf = get_guestfd(arg0); - if (!gf) { - goto do_badf; - } - guestfd_fns[gf->type].writefn(cs, gf, arg1, len); + semihost_sys_write(cs, common_semi_rw_cb, arg0, arg1, arg2); break; case TARGET_SYS_READ: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index d42a190746..5cb12d6adc 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -107,6 +107,13 @@ static void gdb_read(CPUState *cs, gdb_syscall_complete_cb complete, (target_ulong)gf->hostfd, buf, len); } +static void gdb_write(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + gdb_do_syscall(complete, "write,%x,%x,%x", + (target_ulong)gf->hostfd, buf, len); +} + /* * Host semihosting syscall implementations. */ @@ -193,6 +200,22 @@ static void host_read(CPUState *cs, gdb_syscall_complete_cb complete, } } +static void host_write(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + void *ptr = lock_user(VERIFY_READ, buf, len, 1); + ssize_t ret; + + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + ret = write(gf->hostfd, ptr, len); + complete(cs, ret, ret == -1 ? errno : 0); + unlock_user(ptr, buf, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -286,3 +309,34 @@ void semihost_sys_read(CPUState *cs, gdb_syscall_complete_cb complete, complete(cs, -1, EBADF); } } + +void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + switch (gf->type) { + case GuestFDGDB: + gdb_write(cs, complete, gf, buf, len); + break; + case GuestFDHost: + host_write(cs, complete, gf, buf, len); + break; + case GuestFDStatic: + /* Static files are never open for writing: EBADF. */ + complete(cs, -1, EBADF); + break; + default: + g_assert_not_reached(); + } +} + +void semihost_sys_write(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, target_ulong buf, target_ulong len) +{ + GuestFD *gf = get_guestfd(fd); + + if (gf) { + semihost_sys_write_gf(cs, complete, gf, buf, len); + } else { + complete(cs, -1, EBADF); + } +} From patchwork Tue Jun 7 20:45:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579402 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5556745max; Tue, 7 Jun 2022 15:12:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxtGeokyDFgpY2Vv1WzqoEQhKcq3y0/xmnUa5YFT8sgGJgLb1VKh5uUeNViBPkY7CFsNm1F X-Received: by 2002:a05:622a:1a27:b0:304:f1cb:e8c4 with SMTP id f39-20020a05622a1a2700b00304f1cbe8c4mr7896463qtb.194.1654639941953; Tue, 07 Jun 2022 15:12:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654639941; cv=none; d=google.com; s=arc-20160816; b=WqOtz9ZpBZDLvrD010U1MutyBrskorUM0ApZ32uMTA9wnyAoZ/hm8PH1bNQvQ+hc27 KnVHc6lUcWerj2doW4Fah1qltMb9pvDPDRsiD0jZKusGQ2hPawHx8knkZgeD4aqEB+qX RVbV8YDUIqPBQH+Xa2czPzvX7GtOFXZaHJ/EW7s+GzX7yGAgsUasGmR5MJIzGIckk5q1 WIOTH1beEmEo9BvJlE9jEuFLzuZjybB0i22HavwM91rf4/m2/UEBnR99lTZD84vBgAp0 jC/ZJ/Di7uBlT9qxh64fwPsKLdgPK70ErYx2wl1mmbL93OrvknqOPsoJRJ97BD+qjPyo SvRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=aBrl+ytbZVErgWrNLoalp3tVxQVgRG0j/fJKDA/VkdQ=; b=JS2AKGK/2KebYoSO5kZR/0fm+Q1FKfqViag9WYNHxilg1JLVM4+ykdOmn+34dpvfl0 OzAMIiNX5KYA1EHlvPUii11eTxwdYK6w8bqgf8vBVUaLEhBUPyEJkcgbXOy1aEAKVdOL ti+FcycCPGpjHizui4V+bTiuT18kb6EONvfVnw8cE2DacuDZ3glxw2uob6ZkAm5bFstM PRPd/4HSlMNJBiCFvU0U/PftjBRp4LxgItPggmsDlD8oUwmcUS81MEpTSbQz0NZV6Yyp eFfUK9QRQAMIywq3ALTo51Et7qfaDIAOT+NQxwWXE6bd+3qB1Pq9bSyOWgtIv0IQThx5 UAaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=cSxRTCXl; 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"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id z22-20020a05620a261600b006a6c21e653bsi3549448qko.602.2022.06.07.15.12.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:12:21 -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; dkim=fail header.i=@linaro.org header.s=google header.b=cSxRTCXl; 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"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:46894 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhQy-0007n4-Hv for patch@linaro.org; Tue, 07 Jun 2022 18:12:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5t-0007VD-V4 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:29 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:33404) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5s-0001Mg-6y for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:29 -0400 Received: by mail-pg1-x533.google.com with SMTP id r71so17015993pgr.0 for ; Tue, 07 Jun 2022 13:46:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=aBrl+ytbZVErgWrNLoalp3tVxQVgRG0j/fJKDA/VkdQ=; b=cSxRTCXl+SWRUws1CpeT2W1ErcHDYkmVZMc9QB8W30nmAM1cKxs1Dp1FfOnJag9Rh7 JgkLlVJW7Y46OBTK6Xt3stZCHkUzZPhMXAVnpyNE9eh/05zqpNgmvJyBT+iD1jPt21hD +N510fzQufntPm5cY//R9cvSwsiJ/pomQH060SA1UXDMTy5bj6tff3xnbMeU/j/C/2fq NUEMLxbiNzwxqvO5HfzNRW9VRVwY0dtKiiZeHJ/rgYDfhSOLr5yvkWwk/h+WFPI4XWXW MM9pDD/U5P8uTONV+8pb5XAviqYDVd+Gr757icWb8UTeHznAYVuW1qa4bewKUAMyq0jZ 7srg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aBrl+ytbZVErgWrNLoalp3tVxQVgRG0j/fJKDA/VkdQ=; b=dcSJgVS5TaSWPDBzEqLd7T1mR+pSfKYAqOei2IKRiERUnTHpKK8hbXL4LHKXIJOsw/ qG2ajNOjXU9/NNP4TfIQfWKF8VqHNnkxgu4pTyg6uJRTHWiUpWDP5Zicm/eq00e4GsdM OaXtT5ol/15L5ftZOO2E2899g7NxQn+w0VdOih4TJCHWIL0nQF18NFSoASTJesWGQlSB y0UylrA/GKTctzv4SPg1A5OYaVPO6VPSeb18wBCEv7/JzRhRIsiRaAmwvenq/BY6BAHR XgmCvVQ4HlnuLDj4evc9xVc8NEqqybwmN67OFXwNCjBExjO/wN6xsW/l8rs+NM0buOdj jQVQ== X-Gm-Message-State: AOAM531heAKvkt/CEmpiZ0LjwRRxpEGf0b3Z9IhuszLAcc9jZawoI+99 d09nYEzNJc1YxdJ0Vo1OpHQDSFZecA37Fw== X-Received: by 2002:a63:d013:0:b0:3fc:e50f:8e2a with SMTP id z19-20020a63d013000000b003fce50f8e2amr25171067pgf.283.1654634787409; Tue, 07 Jun 2022 13:46:27 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 31/53] semihosting: Bound length for semihost_sys_{read, write} Date: Tue, 7 Jun 2022 13:45:35 -0700 Message-Id: <20220607204557.658541-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Fixes a minor bug in which a 64-bit guest on a 32-bit host could truncate the length. This would only ever cause a problem if there were no bits set in the low 32, so that it truncates to 0. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- semihosting/syscalls.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 5cb12d6adc..eefbae74f1 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -283,6 +283,14 @@ void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, int fd) void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete, GuestFD *gf, target_ulong buf, target_ulong len) { + /* + * Bound length for 64-bit guests on 32-bit hosts, not overlowing ssize_t. + * Note the Linux kernel does this with MAX_RW_COUNT, so it's not a bad + * idea to do this unconditionally. + */ + if (len > INT32_MAX) { + len = INT32_MAX; + } switch (gf->type) { case GuestFDGDB: gdb_read(cs, complete, gf, buf, len); @@ -313,6 +321,14 @@ void semihost_sys_read(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete, GuestFD *gf, target_ulong buf, target_ulong len) { + /* + * Bound length for 64-bit guests on 32-bit hosts, not overlowing ssize_t. + * Note the Linux kernel does this with MAX_RW_COUNT, so it's not a bad + * idea to do this unconditionally. + */ + if (len > INT32_MAX) { + len = INT32_MAX; + } switch (gf->type) { case GuestFDGDB: gdb_write(cs, complete, gf, buf, len); From patchwork Tue Jun 7 20:45:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579426 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5574369max; Tue, 7 Jun 2022 15:37:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw/kPIUX+qu2aSDs9gi4Mf19D9AN4L/iocSUu0/BWxQcVKCewpjgmaVafMyAVSqNK8yTlnb X-Received: by 2002:a37:a304:0:b0:6a6:9fbf:882a with SMTP id m4-20020a37a304000000b006a69fbf882amr16317185qke.97.1654641458476; Tue, 07 Jun 2022 15:37:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641458; cv=none; d=google.com; s=arc-20160816; b=V5mpVm4paAy/WXn/82s7WGYcHq7Kp/ngpmbiBSQKZKQwMGORWXa+L4lH6xLAaUKh9S NZtJoc3quXT172HW3I0Ng/G6yXP76prlvJvZMm+myw1hNg8Y2ARgCyyhwv/eSHjBwC3v WfE5cFTd+cxdh7Ew78OLtT0lVAJpP+2qdi5VP8nm/RIST5w31nYzB1Uit781ec70fVw7 H1AFuoBHXWPQ+AsXCnQVexOOHGlVgpW6XiVG1MPPxW+Pxm2IZ5K8/aNTBMmXgzAUfeJl VXv8+bIU9r24VlfLBoq9Rd10PvjV2FuIBMRfJei8GBgGZRDKtSsl3Wmz4X7ELjXQsvvR ilvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=ncxNUdZR+IqcBU6qK03iSEs/qihonQF0cMe72FdHDTw=; b=icFaJ1SMZUrHudXMIvJL5ovUQcZi11bS4JiGNSusgQuN3u/rPY531xzrS+wkvpyotn 6PIrGNVftvLdoWCFtgmrJkMmg/UBCqbmLjg2RjONa83MsEx+eW8dOrJNBwso/4hJ0O4s pMWczd9xWO7/bXCeR45ZvabahMd8mBa9xr9C1z6Cz8Pki4LpmcfQVLnoiQu8kTwIQ2/9 4Envdwh0T5LLOIELGG6ac0Nt7PX+yDHtcnGMbnlnxVcr5nyOJSq7OfwfC+reXdvtHPrB n/wkZK/FHQPLZIs+9D/ztSQR8kjD0g4gPjklct6ZhTeMQwzVoVGRgTueDMqAf9PUd/Mh 5M6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ct0X6RwV; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 3-20020a0562140dc300b0045a85fbf823si11498865qvt.176.2022.06.07.15.37.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:37:38 -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; dkim=pass header.i=@linaro.org header.s=google header.b=ct0X6RwV; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:43610 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhpS-00057m-15 for patch@linaro.org; Tue, 07 Jun 2022 18:37:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39188) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5v-0007Yr-IG for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:31 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:37656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5t-0001Kf-3L for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:30 -0400 Received: by mail-pg1-x530.google.com with SMTP id h192so10191908pgc.4 for ; Tue, 07 Jun 2022 13:46:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ncxNUdZR+IqcBU6qK03iSEs/qihonQF0cMe72FdHDTw=; b=ct0X6RwVbwUgDx1vpC62vYTyWzOiQbZMqnQsjaVMKa9Eh0IYdzNSEcWdCmUu6cnQVB 4cBYf4YC/1Cqq+kgy6Usd8zm+cbKVzxzB0QqSqfQeRIgrzewgibCAF+qlIvajGGX5nMW 6fxdMrQpffSNt2uuGsdgygO0kt1/Wx1ACt0qjQPQO3j7ywYa+sficI657WjDQ5QXXJF5 kcExkh06p7bJ62qfga/W0NS5E8g3yKJG8A7/nNtY4PZJHpLrXb6RdxW2AOmGuhRBteTN UowyTBE7GrQR2Ac4HHUdWqm8omq0FmlnEYgAjcPoC/OMeErFQJaBRg5t6Bm9OnllJrKF Ua4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ncxNUdZR+IqcBU6qK03iSEs/qihonQF0cMe72FdHDTw=; b=Po4SntyD/NzIa6z9g/To7xNW3IuLtu/Z3OHXyAkAuphhVDMHY1ExsHWHZCPDyu8Ayg agb9Oqu7/CWcjSFyIGv1OHhZ5Zg3zCui2Sg+NTjUmgXSKSAy+QsOhQPd2g2gGui/SDDo XmGNJzGItxkyWOCIDKyy6R8+IyFy47c5oAWI1I/W+dZobUvV8eO6ilgKBGvmYxKEeUQS TFunXQPHlkz7ssOSZGCwFOvL9SDpZ4mc9kFgoOvu0pHtNZqPyqGmZu9TD8w1DpTSuaPK J7IEvCl6JcXvZ5DUVcpExfGbI24beFrzQ186GgLYst4LUUK9GQs7SfBtwTHm/sPEYBnv LwBQ== X-Gm-Message-State: AOAM532Vhd+/Ihk3OBnk+OgnpsZpTtwNbZTN66UzDIdqb/CwOwzQenNL xyqqjmvf62dxLF92LAfSKGuclTL72GlyCg== X-Received: by 2002:a05:6a00:248b:b0:51c:4f53:a932 with SMTP id c11-20020a056a00248b00b0051c4f53a932mr1324147pfv.51.1654634788263; Tue, 07 Jun 2022 13:46:28 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 32/53] semihosting: Split out semihost_sys_lseek Date: Tue, 7 Jun 2022 13:45:36 -0700 Message-Id: <20220607204557.658541-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_SEEK to a reusable function. This handles all GuestFD. Isolate the curious ARM-specific return value processing to a new callback, common_semi_seek_cb. Expand the internal type of the offset to int64_t, and provide the whence argument, which will be required by m68k and nios2 semihosting. Note that gdb_do_syscall %x reads target_ulong, not int. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/exec/gdbstub.h | 5 +++ include/semihosting/syscalls.h | 3 ++ semihosting/arm-compat-semi.c | 51 ++++++--------------- semihosting/syscalls.c | 81 ++++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 38 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 95a8b7b056..b588c306cc 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -41,6 +41,11 @@ #define GDB_ENAMETOOLONG 91 #define GDB_EUNKNOWN 9999 +/* For gdb file i/o remote protocol lseek whence. */ +#define GDB_SEEK_SET 0 +#define GDB_SEEK_CUR 1 +#define GDB_SEEK_END 2 + /* For gdb file i/o stat/fstat. */ typedef uint32_t gdb_mode_t; typedef uint32_t gdb_time_t; diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 2464467579..841a93d25b 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -39,4 +39,7 @@ void semihost_sys_write(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete, GuestFD *gf, target_ulong buf, target_ulong len); +void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, int64_t off, int gdb_whence); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index d1d35e6032..8c6c39daf5 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -224,16 +224,6 @@ static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) #else syscall_err = err; #endif - } else { - /* Fixup syscalls that use nonstardard return conventions. */ - target_ulong reg0 = common_semi_arg(cs, 0); - switch (reg0) { - case TARGET_SYS_SEEK: - ret = 0; - break; - default: - break; - } } common_semi_set_ret(cs, ret); } @@ -257,6 +247,18 @@ static void common_semi_rw_cb(CPUState *cs, target_ulong ret, target_ulong err) common_semi_set_ret(cs, arg2 - ret); } +/* + * SYS_SEEK returns 0 on success, not the resulting offset. + */ +static void common_semi_seek_cb(CPUState *cs, target_ulong ret, + target_ulong err) +{ + if (!err) { + ret = 0; + } + common_semi_cb(cs, ret, err); +} + /* * Return an address in target memory of 64 bytes where the remote * gdb should write its stat struct. (The format of this structure @@ -290,7 +292,6 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) * via common_semi_cb. */ typedef void sys_isattyfn(CPUState *cs, GuestFD *gf); -typedef void sys_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset); typedef void sys_flenfn(CPUState *cs, GuestFD *gf); static void host_isattyfn(CPUState *cs, GuestFD *gf) @@ -298,12 +299,6 @@ static void host_isattyfn(CPUState *cs, GuestFD *gf) common_semi_cb(cs, isatty(gf->hostfd), 0); } -static void host_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) -{ - off_t ret = lseek(gf->hostfd, offset, SEEK_SET); - common_semi_cb(cs, ret, ret == -1 ? errno : 0); -} - static void host_flenfn(CPUState *cs, GuestFD *gf) { struct stat buf; @@ -320,11 +315,6 @@ static void gdb_isattyfn(CPUState *cs, GuestFD *gf) gdb_do_syscall(common_semi_cb, "isatty,%x", gf->hostfd); } -static void gdb_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) -{ - gdb_do_syscall(common_semi_cb, "lseek,%x,%x,0", gf->hostfd, offset); -} - static void gdb_flenfn(CPUState *cs, GuestFD *gf) { gdb_do_syscall(common_semi_flen_cb, "fstat,%x,%x", @@ -353,12 +343,6 @@ static void staticfile_isattyfn(CPUState *cs, GuestFD *gf) common_semi_cb(cs, 0, 0); } -static void staticfile_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) -{ - gf->staticfile.off = offset; - common_semi_cb(cs, 0, 0); -} - static void staticfile_flenfn(CPUState *cs, GuestFD *gf) { common_semi_cb(cs, gf->staticfile.len, 0); @@ -366,24 +350,20 @@ static void staticfile_flenfn(CPUState *cs, GuestFD *gf) typedef struct GuestFDFunctions { sys_isattyfn *isattyfn; - sys_seekfn *seekfn; sys_flenfn *flenfn; } GuestFDFunctions; static const GuestFDFunctions guestfd_fns[] = { [GuestFDHost] = { .isattyfn = host_isattyfn, - .seekfn = host_seekfn, .flenfn = host_flenfn, }, [GuestFDGDB] = { .isattyfn = gdb_isattyfn, - .seekfn = gdb_seekfn, .flenfn = gdb_flenfn, }, [GuestFDStatic] = { .isattyfn = staticfile_isattyfn, - .seekfn = staticfile_seekfn, .flenfn = staticfile_flenfn, }, }; @@ -519,12 +499,7 @@ void do_common_semihosting(CPUState *cs) case TARGET_SYS_SEEK: GET_ARG(0); GET_ARG(1); - - gf = get_guestfd(arg0); - if (!gf) { - goto do_badf; - } - guestfd_fns[gf->type].seekfn(cs, gf, arg1); + semihost_sys_lseek(cs, common_semi_seek_cb, arg0, arg1, GDB_SEEK_SET); break; case TARGET_SYS_FLEN: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index eefbae74f1..9e3eb464b5 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -114,6 +114,13 @@ static void gdb_write(CPUState *cs, gdb_syscall_complete_cb complete, (target_ulong)gf->hostfd, buf, len); } +static void gdb_lseek(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, int64_t off, int gdb_whence) +{ + gdb_do_syscall(complete, "lseek,%x,%lx,%x", + (target_ulong)gf->hostfd, off, (target_ulong)gdb_whence); +} + /* * Host semihosting syscall implementations. */ @@ -216,6 +223,29 @@ static void host_write(CPUState *cs, gdb_syscall_complete_cb complete, unlock_user(ptr, buf, 0); } +static void host_lseek(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, int64_t off, int whence) +{ + /* So far, all hosts use the same values. */ + QEMU_BUILD_BUG_ON(GDB_SEEK_SET != SEEK_SET); + QEMU_BUILD_BUG_ON(GDB_SEEK_CUR != SEEK_CUR); + QEMU_BUILD_BUG_ON(GDB_SEEK_END != SEEK_END); + + off_t ret = off; + int err = 0; + + if (ret == off) { + ret = lseek(gf->hostfd, ret, whence); + if (ret == -1) { + err = errno; + } + } else { + ret = -1; + err = EINVAL; + } + complete(cs, ret, err); +} + /* * Static file semihosting syscall implementations. */ @@ -241,6 +271,33 @@ static void staticfile_read(CPUState *cs, gdb_syscall_complete_cb complete, unlock_user(ptr, buf, len); } +static void staticfile_lseek(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, int64_t off, int gdb_whence) +{ + int64_t ret; + + switch (gdb_whence) { + case GDB_SEEK_SET: + ret = off; + break; + case GDB_SEEK_CUR: + ret = gf->staticfile.off + off; + break; + case GDB_SEEK_END: + ret = gf->staticfile.len + off; + break; + default: + ret = -1; + break; + } + if (ret >= 0 && ret <= gf->staticfile.len) { + gf->staticfile.off = ret; + complete(cs, ret, 0); + } else { + complete(cs, -1, EINVAL); + } +} + /* * Syscall entry points. */ @@ -356,3 +413,27 @@ void semihost_sys_write(CPUState *cs, gdb_syscall_complete_cb complete, complete(cs, -1, EBADF); } } + +void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, int64_t off, int gdb_whence) +{ + GuestFD *gf = get_guestfd(fd); + + if (!gf) { + complete(cs, -1, EBADF); + return; + } + switch (gf->type) { + case GuestFDGDB: + gdb_lseek(cs, complete, gf, off, gdb_whence); + return; + case GuestFDHost: + host_lseek(cs, complete, gf, off, gdb_whence); + break; + case GuestFDStatic: + staticfile_lseek(cs, complete, gf, off, gdb_whence); + break; + default: + g_assert_not_reached(); + } +} From patchwork Tue Jun 7 20:45:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579425 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5573325max; Tue, 7 Jun 2022 15:36:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwRXne6dzKnYzpz01biti0/l9dDPXqCa+TS8xRePtAwAU/X2GYarmEQsBSYUyg9iQbQkfGa X-Received: by 2002:a05:622a:8e:b0:2f9:3f18:ddd with SMTP id o14-20020a05622a008e00b002f93f180dddmr25046866qtw.32.1654641375135; Tue, 07 Jun 2022 15:36:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641375; cv=none; d=google.com; s=arc-20160816; b=ePwv9/p6hJQWwc44legNcDHTdO/xRdJ4OJKtB490ssdezardOwu4tJ6LRciMmttgWF twTBQuIJ8AL7v1KIsqWq2ijR02TBHzqxNfQ46uIyPy6QxFCUrfnZYAunXlNMVAXH5Tls GArzRwVKu0h92lX0E03PsM5cXbD9Zjdpv17Sl4x2Hf1jczk9zcHP/aNshicMcIXr9pnn ybzaApwf1wCoZUTUXn73uxirdLDTfSakXYDh0qf3/kZlacOSQBocDl/gHP+uZA1N6wat YNAYtmeqJq1rcp1112pUxbg9ayw93tyE8dTxmKLxnsDh6n0TgN8lUYMVE4JRpX6Ee06M CIIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=m29THT8oiVBS6TamWun4OZTko5yiLk5msUbdr5P5elM=; b=zjayvWYH/sTXyiR+ftx2DfJz/pxUP9ZrLQUWl0+N+4Iwu9x/VCnQjXhOfqyars8IYn 11/IesKRJSRgdW5XimznkBkobCungCMfqsAkP061/2eYZvHeDRqwFdGHK/eS11I0hYvq qYPHkZA73ryzQCfdrNr5o2NvAaMBT+XEuggam2HUZeEeOqHvrz6tCIV9AtVcxhezD6Mf tfe8mNqsKSJC0IJPI4ZNoTJNMYiU9ZltoH9H4UPoEhORhXJLF8lrf4v7V22cJCl4OSKy 4dopWmQ2k25EEDjPCSUfNB2yuk9yAcDHszRn6Pwz64HGqo2rd/JFm73PtehJF/PPYWwh stPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kTYJz4vR; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id b16-20020ac87fd0000000b00304e8588ae0si2696830qtk.633.2022.06.07.15.36.15 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:36:15 -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; dkim=pass header.i=@linaro.org header.s=google header.b=kTYJz4vR; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:39046 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyho4-0001xL-K8 for patch@linaro.org; Tue, 07 Jun 2022 18:36:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39250) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5x-0007eg-Ad for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:33 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:34774) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5u-0001ZW-EC for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:33 -0400 Received: by mail-pj1-x1031.google.com with SMTP id mh16-20020a17090b4ad000b001e8313301f1so8479569pjb.1 for ; Tue, 07 Jun 2022 13:46:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=m29THT8oiVBS6TamWun4OZTko5yiLk5msUbdr5P5elM=; b=kTYJz4vRwMKrVvMsUDplC7WIab0geERoBwU+IoGEgiwXWsnKGalFZY+nfHqlz9Nbu1 D3wD4iRoDFTbgmMCyncpl64fx44dp54kKmcYOlmNpSnYgM+YmdHANmbmBhfFc6UXiHMm /Orw+X4T2gGzQF4HzC24J0v8OumJFsmueJbYyA/WRTqN6eSUU7BJIrQjmHlkoLGPyZAv Sktm4By1oG81HDuX1fZ0uBPIAbcm0Pu9MnJrBXLiwhxGrUqaK+bhUcqseK2zatRBKiEL 8yO7nu1hmDTo8nNZhRyObF1FMKYXzG7cKhH35CmD76onBfWO1wgR64Ej4p70COadf/Pw o+0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=m29THT8oiVBS6TamWun4OZTko5yiLk5msUbdr5P5elM=; b=Fr0jt4OKaVRxMeX+qPviN4xdK01dXfFQvMlvBsztX/voBiUzk9Ll5hsuMuSzTNQrU5 vEXl+umtlxMYSnTOWbAdZxaJmcce6TBl5KjkgjtUm5UC30QMqxblB01rTm/vY82WQmES Ssj4jRN4X3jztNB42aL1lxoRVpmuTBl0zL3i/quXF1Qm5yJEpo/uIVm0QDlzr8fEBhpe s8INM8zfZuo28KvwzzzIyMWzBJNZrg1RrdRrh2sEvZE98vAVTea57ml3ibi+iB5mw2k2 6SFyHW1PdXPFJJuDScNBMfOQd2Mep98Z7ycw4H0QEfJTfAQOjSbHoW6mFPYXZ8O8U7BK DYjA== X-Gm-Message-State: AOAM530Q7tNhlaou00Oh9EVZ1p3o1eSSjcAhEu2xdkZSSA7cwmPfKNre g6YXlLH4cMtZqOx0y8c8+XszgxmgNrYLog== X-Received: by 2002:a17:902:e54c:b0:166:6322:e747 with SMTP id n12-20020a170902e54c00b001666322e747mr25117212plf.151.1654634789006; Tue, 07 Jun 2022 13:46:29 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 33/53] semihosting: Split out semihost_sys_isatty Date: Tue, 7 Jun 2022 13:45:37 -0700 Message-Id: <20220607204557.658541-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_ISTTY to a reusable function. This handles all GuestFD. Add a common_semi_istty_cb helper to translate the Posix error return, 0+ENOTTY, to the Arm semihosting not-a-file success result. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 3 +++ semihosting/arm-compat-semi.c | 40 ++++++++++++---------------------- semihosting/syscalls.c | 36 ++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 26 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 841a93d25b..c60ebafb85 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -42,4 +42,7 @@ void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete, int fd, int64_t off, int gdb_whence); +void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete, + int fd); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 8c6c39daf5..4529c9df06 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -247,6 +247,19 @@ static void common_semi_rw_cb(CPUState *cs, target_ulong ret, target_ulong err) common_semi_set_ret(cs, arg2 - ret); } +/* + * Convert from Posix ret+errno to Arm SYS_ISTTY return values. + * With gdbstub, err is only ever set for protocol errors to EIO. + */ +static void common_semi_istty_cb(CPUState *cs, target_ulong ret, + target_ulong err) +{ + if (err) { + ret = (err == ENOTTY ? 0 : -1); + } + common_semi_cb(cs, ret, err); +} + /* * SYS_SEEK returns 0 on success, not the resulting offset. */ @@ -291,14 +304,8 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) * do the work and return the required return value to the guest * via common_semi_cb. */ -typedef void sys_isattyfn(CPUState *cs, GuestFD *gf); typedef void sys_flenfn(CPUState *cs, GuestFD *gf); -static void host_isattyfn(CPUState *cs, GuestFD *gf) -{ - common_semi_cb(cs, isatty(gf->hostfd), 0); -} - static void host_flenfn(CPUState *cs, GuestFD *gf) { struct stat buf; @@ -310,11 +317,6 @@ static void host_flenfn(CPUState *cs, GuestFD *gf) } } -static void gdb_isattyfn(CPUState *cs, GuestFD *gf) -{ - gdb_do_syscall(common_semi_cb, "isatty,%x", gf->hostfd); -} - static void gdb_flenfn(CPUState *cs, GuestFD *gf) { gdb_do_syscall(common_semi_flen_cb, "fstat,%x,%x", @@ -338,32 +340,23 @@ static const uint8_t featurefile_data[] = { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; -static void staticfile_isattyfn(CPUState *cs, GuestFD *gf) -{ - common_semi_cb(cs, 0, 0); -} - static void staticfile_flenfn(CPUState *cs, GuestFD *gf) { common_semi_cb(cs, gf->staticfile.len, 0); } typedef struct GuestFDFunctions { - sys_isattyfn *isattyfn; sys_flenfn *flenfn; } GuestFDFunctions; static const GuestFDFunctions guestfd_fns[] = { [GuestFDHost] = { - .isattyfn = host_isattyfn, .flenfn = host_flenfn, }, [GuestFDGDB] = { - .isattyfn = gdb_isattyfn, .flenfn = gdb_flenfn, }, [GuestFDStatic] = { - .isattyfn = staticfile_isattyfn, .flenfn = staticfile_flenfn, }, }; @@ -488,12 +481,7 @@ void do_common_semihosting(CPUState *cs) case TARGET_SYS_ISTTY: GET_ARG(0); - - gf = get_guestfd(arg0); - if (!gf) { - goto do_badf; - } - guestfd_fns[gf->type].isattyfn(cs, gf); + semihost_sys_isatty(cs, common_semi_istty_cb, arg0); break; case TARGET_SYS_SEEK: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 9e3eb464b5..1f1baf7e2d 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -121,6 +121,12 @@ static void gdb_lseek(CPUState *cs, gdb_syscall_complete_cb complete, (target_ulong)gf->hostfd, off, (target_ulong)gdb_whence); } +static void gdb_isatty(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf) +{ + gdb_do_syscall(complete, "isatty,%x", (target_ulong)gf->hostfd); +} + /* * Host semihosting syscall implementations. */ @@ -246,6 +252,13 @@ static void host_lseek(CPUState *cs, gdb_syscall_complete_cb complete, complete(cs, ret, err); } +static void host_isatty(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf) +{ + int ret = isatty(gf->hostfd); + complete(cs, ret, ret ? 0 : errno); +} + /* * Static file semihosting syscall implementations. */ @@ -437,3 +450,26 @@ void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete, g_assert_not_reached(); } } + +void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete, int fd) +{ + GuestFD *gf = get_guestfd(fd); + + if (!gf) { + complete(cs, 0, EBADF); + return; + } + switch (gf->type) { + case GuestFDGDB: + gdb_isatty(cs, complete, gf); + break; + case GuestFDHost: + host_isatty(cs, complete, gf); + break; + case GuestFDStatic: + complete(cs, 0, ENOTTY); + break; + default: + g_assert_not_reached(); + } +} From patchwork Tue Jun 7 20:45:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579429 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5575212max; Tue, 7 Jun 2022 15:38:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwLwWYovKjDtNL1pExxRRZgYBzOcAwvwANtz8mCamuSojefRWqSGQiWAbht51RHACRXMVQ8 X-Received: by 2002:a05:620a:2697:b0:699:cca7:f8b2 with SMTP id c23-20020a05620a269700b00699cca7f8b2mr21177273qkp.738.1654641529593; Tue, 07 Jun 2022 15:38:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641529; cv=none; d=google.com; s=arc-20160816; b=GJpKmC6iuEaEqd3QDlzSL+1gjTzHaGLtA5vmiYJetAQpTq6iLQXH5a31DGATRyYea3 SnHf8UNjamRfrT48d0fEKMV0li8LuT++2etv8ttlninS8NORVM1DmO3HXV6J6dpxeI41 6XHJXkMXEGCDSmhCzp+Df3MV000YffgKT35I3mCC1J2feNyMB7DLa5QtmCBkhItwyZkJ Z3Y+pERxdcaialIdzhr8wudKWgTNqKxVIV6zd/PupxOA3jHVdho4eKb9ql6qiT/Rm7bB 5u4VKtE2q3kpwLWcqS0Xvxye4NNH3ky5Iw+mkP/7s1CwD8XJapmEUnnq984NbF7DouIG J8Nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=b9Wo1kud3FfZ/iyFDZ+Amrek5//uugm/ypgN75Evzkg=; b=Rk8xpCoY0/ozEU3w02hYCEJSJL7WH+2lKGjFOQoDuPaekCKEBWGHkL7V3uFpORNU6s aa5d6SIIhyrTIKt42rGyVxcw/m/PrbVNoQC6Q7ATAY0XmohED5uRYePFiJwIRXLooUCP VOofTwSrq2ts1BYhIT+34+Y3fwUw45AcYf/EvEkQToOTDhADl2cOXov5DN/JLmYVltVL RFbFxHdKs458xJ2qJiaRaBHUBtBLRtupVL1m/0/V+cpz+va9ireqaT5KLR6dULYLC1RS ct7vVWAmzKnqGIxtpU21Yw6fJ/t3FT/6S9EKK9H4CT5nGviJ5x8BZN6N+LDKkkrQ3Pj4 mvdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=YcaOKdhZ; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id w12-20020a05620a148c00b006a6a7d451afsi6133883qkj.87.2022.06.07.15.38.49 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:38:49 -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; dkim=pass header.i=@linaro.org header.s=google header.b=YcaOKdhZ; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:47470 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhqb-0007iV-3f for patch@linaro.org; Tue, 07 Jun 2022 18:38:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39274) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5y-0007h9-3O for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:34 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:43813) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5w-0001Jp-6V for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:33 -0400 Received: by mail-pl1-x634.google.com with SMTP id b5so15803839plx.10 for ; Tue, 07 Jun 2022 13:46:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=b9Wo1kud3FfZ/iyFDZ+Amrek5//uugm/ypgN75Evzkg=; b=YcaOKdhZ0kxUeOWuLIT3yDfT7jddHhFmpH0ZNAoqYfMCe3MEYShCNhyfQ1qjH9Pxm5 +yR0O3fhBFuK0gZ/n0RlM0H6CZBV6K8q65OLrtl+ZWnc6zzin4ZZiqteBiAOrXpabl5y oINFBG6rrt+XdR6KRJz9ff8w9wBihSESmfIiQ9C6tGae4Qf1nPbTlt8TlH+fFwB0PSpb TxQRCn1eZUrQoUXZLiE8S43bD+7fkK8e5bCtR4CtgJYxU6xzupg4C2/EiOLXPnc6xT+p +netiuE+FXUhQQ/Kq4p1RZAe7X3W9srYYr0jc/uNhAD9HcTXdfl6H1Wl3y0qh1c9usYF 5dtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b9Wo1kud3FfZ/iyFDZ+Amrek5//uugm/ypgN75Evzkg=; b=uOuryZ85E6cmiKRcWV6E2upWOEyrg3Hu1s7qpuRFIa9MP0WGhWzNq6+5XPx7uGqUDJ HA45mhzE+Z/DKD0glJv217BdkZxsbX3jtInq521xkEg3fnvvZwR2JVt+6i+73mRYgodQ cwqEHlr8MhWdBMprM+R76nzdZYdQ5shcFBRI2S5qEETH541Pah+ZKbpFT6LyPIHBH1Pi gxi+AvYjpc8a2SB2/g7VAOQ0HPGqqxHNfgEecPXR40z0ce7Pwe3+86OXZJQ1gfnignp7 ofHyH0jkp+wL8ACukiOK55tjUEUlpxfBojNgOC4IAjHFgDq5D4mZFN0v8AfSsPGwojqC AKwQ== X-Gm-Message-State: AOAM530Btubqzr8foDxCzyk3FWbtxHjz6GaDzYy4Z21FQHDXxcHrOs5E CvWXPomyFrszwgR3hDJisVkT7S7WZoh8Lw== X-Received: by 2002:a17:90b:4d11:b0:1e8:436b:a9cc with SMTP id mw17-20020a17090b4d1100b001e8436ba9ccmr23894035pjb.40.1654634789861; Tue, 07 Jun 2022 13:46:29 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 34/53] semihosting: Split out semihost_sys_flen Date: Tue, 7 Jun 2022 13:45:38 -0700 Message-Id: <20220607204557.658541-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The ARM-specific SYS_FLEN isn't really something that can be reused by other semihosting apis, but there are parts that can reused for the implementation of semihost_sys_fstat. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 4 ++ semihosting/arm-compat-semi.c | 74 ++++++---------------------------- semihosting/syscalls.c | 49 ++++++++++++++++++++++ 3 files changed, 66 insertions(+), 61 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index c60ebafb85..1ae5ba6716 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -45,4 +45,8 @@ void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete, int fd); +void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, + gdb_syscall_complete_cb flen_cb, + int fd, target_ulong fstat_addr); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 4529c9df06..81dd22e1c5 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -285,44 +285,25 @@ static target_ulong common_semi_flen_buf(CPUState *cs) } static void -common_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) +common_semi_flen_fstat_cb(CPUState *cs, target_ulong ret, target_ulong err) { if (!err) { /* The size is always stored in big-endian order, extract the value. */ uint64_t size; - cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + - offsetof(struct gdb_stat, gdb_st_size), - &size, 8, 0); - ret = be64_to_cpu(size); + if (cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + + offsetof(struct gdb_stat, gdb_st_size), + &size, 8, 0)) { + ret = -1, err = EFAULT; + } else { + size = be64_to_cpu(size); + if (ret != size) { + ret = -1, err = EOVERFLOW; + } + } } common_semi_cb(cs, ret, err); } -/* - * Types for functions implementing various semihosting calls - * for specific types of guest file descriptor. These must all - * do the work and return the required return value to the guest - * via common_semi_cb. - */ -typedef void sys_flenfn(CPUState *cs, GuestFD *gf); - -static void host_flenfn(CPUState *cs, GuestFD *gf) -{ - struct stat buf; - - if (fstat(gf->hostfd, &buf)) { - common_semi_cb(cs, -1, errno); - } else { - common_semi_cb(cs, buf.st_size, 0); - } -} - -static void gdb_flenfn(CPUState *cs, GuestFD *gf) -{ - gdb_do_syscall(common_semi_flen_cb, "fstat,%x,%x", - gf->hostfd, common_semi_flen_buf(cs)); -} - #define SHFB_MAGIC_0 0x53 #define SHFB_MAGIC_1 0x48 #define SHFB_MAGIC_2 0x46 @@ -340,27 +321,6 @@ static const uint8_t featurefile_data[] = { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; -static void staticfile_flenfn(CPUState *cs, GuestFD *gf) -{ - common_semi_cb(cs, gf->staticfile.len, 0); -} - -typedef struct GuestFDFunctions { - sys_flenfn *flenfn; -} GuestFDFunctions; - -static const GuestFDFunctions guestfd_fns[] = { - [GuestFDHost] = { - .flenfn = host_flenfn, - }, - [GuestFDGDB] = { - .flenfn = gdb_flenfn, - }, - [GuestFDStatic] = { - .flenfn = staticfile_flenfn, - }, -}; - /* * Do a semihosting call. * @@ -379,7 +339,6 @@ void do_common_semihosting(CPUState *cs) char * s; int nr; uint32_t ret; - GuestFD *gf; int64_t elapsed; nr = common_semi_arg(cs, 0) & 0xffffffffU; @@ -492,12 +451,8 @@ void do_common_semihosting(CPUState *cs) case TARGET_SYS_FLEN: GET_ARG(0); - - gf = get_guestfd(arg0); - if (!gf) { - goto do_badf; - } - guestfd_fns[gf->type].flenfn(cs, gf); + semihost_sys_flen(cs, common_semi_flen_fstat_cb, common_semi_cb, + arg0, common_semi_flen_buf(cs)); break; case TARGET_SYS_TMPNAM: @@ -819,9 +774,6 @@ void do_common_semihosting(CPUState *cs) cpu_dump_state(cs, stderr, 0); abort(); - do_badf: - common_semi_cb(cs, -1, EBADF); - break; do_fault: common_semi_cb(cs, -1, EFAULT); break; diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 1f1baf7e2d..fff9550c89 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -127,6 +127,12 @@ static void gdb_isatty(CPUState *cs, gdb_syscall_complete_cb complete, gdb_do_syscall(complete, "isatty,%x", (target_ulong)gf->hostfd); } +static void gdb_fstat(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong addr) +{ + gdb_do_syscall(complete, "fstat,%x,%x", (target_ulong)gf->hostfd, addr); +} + /* * Host semihosting syscall implementations. */ @@ -259,6 +265,18 @@ static void host_isatty(CPUState *cs, gdb_syscall_complete_cb complete, complete(cs, ret, ret ? 0 : errno); } +static void host_flen(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf) +{ + struct stat buf; + + if (fstat(gf->hostfd, &buf) < 0) { + complete(cs, -1, errno); + } else { + complete(cs, buf.st_size, 0); + } +} + /* * Static file semihosting syscall implementations. */ @@ -311,6 +329,12 @@ static void staticfile_lseek(CPUState *cs, gdb_syscall_complete_cb complete, } } +static void staticfile_flen(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf) +{ + complete(cs, gf->staticfile.len, 0); +} + /* * Syscall entry points. */ @@ -473,3 +497,28 @@ void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete, int fd) g_assert_not_reached(); } } + +void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, + gdb_syscall_complete_cb flen_cb, int fd, + target_ulong fstat_addr) +{ + GuestFD *gf = get_guestfd(fd); + + if (!gf) { + flen_cb(cs, -1, EBADF); + return; + } + switch (gf->type) { + case GuestFDGDB: + gdb_fstat(cs, fstat_cb, gf, fstat_addr); + break; + case GuestFDHost: + host_flen(cs, flen_cb, gf); + break; + case GuestFDStatic: + staticfile_flen(cs, flen_cb, gf); + break; + default: + g_assert_not_reached(); + } +} From patchwork Tue Jun 7 20:45:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579410 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5564178max; Tue, 7 Jun 2022 15:23:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxYRLLYKgdw9JeoYv52ye5AeE331Oz0dtILcZ3DOvnh+p1yVkkeNQaJXoCPCbcr318D0g86 X-Received: by 2002:a05:6214:d8b:b0:46b:a79a:2f2b with SMTP id e11-20020a0562140d8b00b0046ba79a2f2bmr8086368qve.36.1654640609272; Tue, 07 Jun 2022 15:23:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640609; cv=none; d=google.com; s=arc-20160816; b=rUxYQU7jJsSG7hPlnan1xj4iHHa7KU1BpI22HOUvuD4LTrJsa1bvJ0bzce49JjuS2F ylIMNKFR3sqHasjInvMr7IsaOuZVJmlwTtAy3O3VLAsygx6rXj2H3M5I6F/LEe0XkCec jltUC+p9tyQjLt+7cgfwJCXVtn6F/EUNEGDwBiz+0uFMwhio4AdRPNVlLVpDalD4gyT8 pFFQl8jDLkU282oSAU8FgYQkTcaYz6eani+ivCaIkId7GpaqFjfxgJBr6uwbZupbm+uN KwljYyZf37Wp5og+yE/t28VShovMtettdpEFfPW3xk3eu+pH2cki82TOErHFjQWPvbz/ 6Isg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=4sagk9WK8UfUwwphTVx4M3L/8wzZLywpfR5arWi4wQI=; b=oTgNVBA9gIW1hIYOiBR13qPF2bVANXHHXW7FbXJQHD5w50HFExUVjqioxFiVSCwX4e LnhIhML7KCXx9LvC+/YQGTGWMOPoxKAZ4QgEZ/W4Ib3gseV52V6GVzLx13vSYSfMboWi t1AnqmZD1Id8YKc8kiOhwEXwUNNUUs+ShML3Y5lEtus/wUt3gaTFgZocpO++clo+FvkB 2xhLqjQ7x7euzGrCAzt96ys9leRRRVUjMKogdXaTgawfLLmqXtCmQbDJVG/V6hROXAA8 vWvCWv+c78HuS2LhwWPgLOanTOTv/4fPSU9N3AJK7vDxnIsgLMz7d7qSNgF5S6xbLETY LSZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MYyB1Oye; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id a30-20020a05620a439e00b006a6c99de0dbsi2814581qkp.61.2022.06.07.15.23.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:23:29 -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; dkim=pass header.i=@linaro.org header.s=google header.b=MYyB1Oye; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36016 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhbk-0005q8-O3 for patch@linaro.org; Tue, 07 Jun 2022 18:23:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39278) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5y-0007hi-8i for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:34 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:37656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5w-0001Kf-DW for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:33 -0400 Received: by mail-pg1-x530.google.com with SMTP id h192so10191908pgc.4 for ; Tue, 07 Jun 2022 13:46:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=4sagk9WK8UfUwwphTVx4M3L/8wzZLywpfR5arWi4wQI=; b=MYyB1Oye5aBfoZTGzUF24SryUceyVsyplnCPxZpRHyfy+Otl990DSUU7l1xcUeTWcX llLoqMsfUiWKF4TUeBj+71jN2vgJ2UehwWvIBnn4i1yN73y6XsFcT1XlAhcTldg/eIXZ RIxaeLyq4523VW7mETDg7GeC8LdQVeomFEqWJV+DbFJ6h/prvoyOFABornSVSaURVUMn ZX7/0/MJG7obymda+CP8TOy806kUz7QGw0pOM0xnY4TuZiuZMsw4ZHsoYost0FrKbDby gREXXMmDBPJq7XbhpHBQxZL7tvF0nyBWIj6eo7gWqFvYPgMciuxOQRtpZd9UQsACei5K Ofsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4sagk9WK8UfUwwphTVx4M3L/8wzZLywpfR5arWi4wQI=; b=51FHtrVYRab7t/YuGfpvqInRxt85VXNQyVmqS3tYH62APthSHDssqDP7QWOnComkED oOEJ3rKmI5+qVzwdLvYlMydflEFblpox/5T3yl7apnzyhJ4kCTmnxWtop+vVcwuLhenr kW4h4bHihNiRyVlY2YALMhpvq+u9pODSr0TfNXqxjvf8fUgDwOu/7tYjOlhOPT4z/9OS bu0xbCQxGvfIGfMASNMYzuVp4pEw0fjV5fkJVebg3+YbFo/vjcZwYjEMlffynbscc9IE 7noe97Vo7BMJusMEWo+SN6GpHc1abWFYsEfMnok/BQUI6I8UcGaZvwq8hGMmJ6Hw2e/R AhpA== X-Gm-Message-State: AOAM532CE3R9PdYT61TnlgRhpIu0SU3f/f1yRCXJoIwV3boLRPs0nXEh Z7WoQmkxVhV7outnuxKsJMFbLJ1+0Lc6KA== X-Received: by 2002:a05:6a00:2809:b0:51b:f239:d24d with SMTP id bl9-20020a056a00280900b0051bf239d24dmr20127354pfb.73.1654634790655; Tue, 07 Jun 2022 13:46:30 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 35/53] semihosting: Split out semihost_sys_remove Date: Tue, 7 Jun 2022 13:45:39 -0700 Message-Id: <20220607204557.658541-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_REMOVE to a reusable function. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 3 +++ semihosting/arm-compat-semi.c | 13 +---------- semihosting/syscalls.c | 40 ++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 1ae5ba6716..748a4b5e47 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -49,4 +49,7 @@ void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, gdb_syscall_complete_cb flen_cb, int fd, target_ulong fstat_addr); +void semihost_sys_remove(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 81dd22e1c5..6c9d50176a 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -483,18 +483,7 @@ void do_common_semihosting(CPUState *cs) case TARGET_SYS_REMOVE: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(common_semi_cb, "unlink,%s", - arg0, (int)arg1 + 1); - break; - } - s = lock_user_string(arg0); - if (!s) { - goto do_fault; - } - ret = remove(s); - unlock_user(s, arg0, 0); - common_semi_cb(cs, ret, ret ? errno : 0); + semihost_sys_remove(cs, common_semi_cb, arg0, arg1 + 1); break; case TARGET_SYS_RENAME: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index fff9550c89..5ec4e8f827 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -133,6 +133,18 @@ static void gdb_fstat(CPUState *cs, gdb_syscall_complete_cb complete, gdb_do_syscall(complete, "fstat,%x,%x", (target_ulong)gf->hostfd, addr); } +static void gdb_remove(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len) +{ + int len = validate_strlen(cs, fname, fname_len); + if (len < 0) { + complete(cs, -1, -len); + return; + } + + gdb_do_syscall(complete, "unlink,%s", fname, len); +} + /* * Host semihosting syscall implementations. */ @@ -277,6 +289,24 @@ static void host_flen(CPUState *cs, gdb_syscall_complete_cb complete, } } +static void host_remove(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char *p; + int ret; + + ret = validate_lock_user_string(&p, cs, fname, fname_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + + ret = remove(p); + complete(cs, ret, ret ? errno : 0); + unlock_user(p, fname, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -522,3 +552,13 @@ void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, g_assert_not_reached(); } } + +void semihost_sys_remove(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len) +{ + if (use_gdb_syscalls()) { + gdb_remove(cs, complete, fname, fname_len); + } else { + host_remove(cs, complete, fname, fname_len); + } +} From patchwork Tue Jun 7 20:45:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579414 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5566169max; Tue, 7 Jun 2022 15:26:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyMi2yJXhEbPT5CPs3eY8tlt2rwdnaLVEv9Vy+9VkmBwdyswyfr3kq/ge0KGD6xD/NCLzQB X-Received: by 2002:a05:6214:5d06:b0:465:a991:3506 with SMTP id me6-20020a0562145d0600b00465a9913506mr23537812qvb.112.1654640790411; Tue, 07 Jun 2022 15:26:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654640790; cv=none; d=google.com; s=arc-20160816; b=xMjyhMCVjUt1H2Mm+3fNW3UkU/9lWolTHQf6YEFj4DOKJOWRI/sHl++X/CVJJV2Q2e qf/7ongN3wXfIhY91asZ4XwvXnocdxjKaNGjDM3NgDxJDGJslpqWh8rz7xJk+5QOqAi8 9LiTtqhPD/gMSYyXgkCZRy+GjWrLmiQGQR9PIJknpXrm+j9lafgF115yHNpcZ9mFGy8C ewF1JWQaZnMATTKu+RAGjLUKMqQVNjyTqz8GTsocZmqq61D52VCfbtyvPpUl5MJfyPw3 wd6ZqVgJ7MlcZUweNK6c6eUmMPWtyrs3ElFdNMw+3is6jbKD5Qw4epbc467j16DOvEs0 FMxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=EyKpAGdKnRqUyWCkixrBsiIlLJNPzOZLPQD/wXw+KgI=; b=HndgzasI0T4mAlXSOCa0ZXG6LSggGHmTWUvPPXiKuX5km/qqNQ0lFcfsq09TQ+xPEa j8XmKV39RHBrfs6qb99tl7WnUonhwmG2tzRCoKOFvAqfVkwdUT1tGYAtScDTNloYaaLK XerrdwtOIGF9kzHIAEQ8FehoiLbCurWJ+F+Hx6HZPqzXT3XVbK5vBgn0/PnKJSwpTHe/ SR34u2IyMnfyH5ZJQJf2HxglgHUEav1yk10u7UuUqZhlpOtDtq2XuUzzTdqrSMasWJQm mPXRnbZHJX7kt2zuCo/MElRH0Noy4kODD1MtfENbWt3xANxxh8SrvBih3SM1LB8lMXkB YFrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NTaDVaVo; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id l203-20020a37a2d4000000b006a6b1cceb25si4628357qke.572.2022.06.07.15.26.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:26: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; dkim=pass header.i=@linaro.org header.s=google header.b=NTaDVaVo; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:44462 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhef-00036d-V4 for patch@linaro.org; Tue, 07 Jun 2022 18:26:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39294) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5y-0007js-RZ for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:34 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:53099) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5w-0001Zt-Rx for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:34 -0400 Received: by mail-pj1-x102d.google.com with SMTP id gd1so16698356pjb.2 for ; Tue, 07 Jun 2022 13:46:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=EyKpAGdKnRqUyWCkixrBsiIlLJNPzOZLPQD/wXw+KgI=; b=NTaDVaVoeHR5K2efkOuHAi9eKbfWb1puSJDsYMOxZRzF3CFrBSwId+9zK/UHGqyz0k Yppzwev7yUX9OnRyKsLXY+Ex4dX7uNWdmaKZ29dyxEY8oL4hNA8RNk9sv7iavS17gTKS d8Ps3WjzB9ijQbicfM2fMRyATjYEohd+oyNKbh3UHoGoQs2OeFXi+YZEfvJjTXeQtFSB Z+hg5FNHbJGxOk7nMPWtki7Sr7RElBzh289IDm73qTIH8MsD5KngfVTbGlZTznd9WdLg LTNewW5s2GBCFLCRhnrW6CBQaNTP10pqYZeCivrIi1WX2LsAKjb/O//1HgTeXKzhaYm/ FcpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EyKpAGdKnRqUyWCkixrBsiIlLJNPzOZLPQD/wXw+KgI=; b=XVRp5fK9LV006BznhnEJItgiIxn6rFnkIcLom8f/fn4c9lgJTNYXiDRPDghHvruJwD Wff0ykyn21CV/ROEWLZEq4mmJTQRbklauzpZMK05mzvBIyG8CbPOrw4Xss1kgSMNsOdG IO7yNUc0AsO3VzSBrmZ+EiMsSK+UtRzq0ZfvF1oTo+qKsRj8UKL62D+OGCrUeflsd8Yo 6y43alNMFyr4ScNgqZByxwwFvEjqeg1DASlbdAPL8EqHIBeQmXTk9hQjA/zUCFwoypZA zOdKfjIMIZtA+UGkWL6EnIr9MvlJwYdK8vyY1JWOOIlqnEMJSghkPT8JtlBqJoQd2TsD h9/Q== X-Gm-Message-State: AOAM530LdC1cd7MfC6EP/jsXN5qPmDuPKFQ1FkbUeW4iw4omAXtB5Rfe SMpJtficy5nkRChUtCOPNicr/E0JSEAeLA== X-Received: by 2002:a17:90a:c202:b0:1e2:e772:5f0a with SMTP id e2-20020a17090ac20200b001e2e7725f0amr33951733pjt.109.1654634791448; Tue, 07 Jun 2022 13:46:31 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 36/53] semihosting: Split out semihost_sys_rename Date: Tue, 7 Jun 2022 13:45:40 -0700 Message-Id: <20220607204557.658541-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_RENAME to a reusable function. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 4 +++ semihosting/arm-compat-semi.c | 21 +------------ semihosting/syscalls.c | 57 ++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 748a4b5e47..21430aa0ef 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -52,4 +52,8 @@ void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, void semihost_sys_remove(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong fname, target_ulong fname_len); +void semihost_sys_rename(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong oname, target_ulong oname_len, + target_ulong nname, target_ulong nname_len); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 6c9d50176a..da5c80b3d5 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -491,26 +491,7 @@ void do_common_semihosting(CPUState *cs) GET_ARG(1); GET_ARG(2); GET_ARG(3); - if (use_gdb_syscalls()) { - gdb_do_syscall(common_semi_cb, "rename,%s,%s", - arg0, (int)arg1 + 1, arg2, (int)arg3 + 1); - } else { - char *s2; - - s = lock_user_string(arg0); - if (!s) { - goto do_fault; - } - s2 = lock_user_string(arg2); - if (!s2) { - unlock_user(s, arg0, 0); - goto do_fault; - } - ret = rename(s, s2); - unlock_user(s2, arg2, 0); - unlock_user(s, arg0, 0); - common_semi_cb(cs, ret, ret ? errno : 0); - } + semihost_sys_rename(cs, common_semi_cb, arg0, arg1 + 1, arg2, arg3 + 1); break; case TARGET_SYS_CLOCK: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 5ec4e8f827..223916b110 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -145,6 +145,26 @@ static void gdb_remove(CPUState *cs, gdb_syscall_complete_cb complete, gdb_do_syscall(complete, "unlink,%s", fname, len); } +static void gdb_rename(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong oname, target_ulong oname_len, + target_ulong nname, target_ulong nname_len) +{ + int olen, nlen; + + olen = validate_strlen(cs, oname, oname_len); + if (olen < 0) { + complete(cs, -1, -olen); + return; + } + nlen = validate_strlen(cs, nname, nname_len); + if (nlen < 0) { + complete(cs, -1, -nlen); + return; + } + + gdb_do_syscall(complete, "rename,%s,%s", oname, olen, nname, nlen); +} + /* * Host semihosting syscall implementations. */ @@ -307,6 +327,32 @@ static void host_remove(CPUState *cs, gdb_syscall_complete_cb complete, unlock_user(p, fname, 0); } +static void host_rename(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong oname, target_ulong oname_len, + target_ulong nname, target_ulong nname_len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char *ostr, *nstr; + int ret; + + ret = validate_lock_user_string(&ostr, cs, oname, oname_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + ret = validate_lock_user_string(&nstr, cs, nname, nname_len); + if (ret < 0) { + unlock_user(ostr, oname, 0); + complete(cs, -1, -ret); + return; + } + + ret = rename(ostr, nstr); + complete(cs, ret, ret ? errno : 0); + unlock_user(ostr, oname, 0); + unlock_user(nstr, nname, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -562,3 +608,14 @@ void semihost_sys_remove(CPUState *cs, gdb_syscall_complete_cb complete, host_remove(cs, complete, fname, fname_len); } } + +void semihost_sys_rename(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong oname, target_ulong oname_len, + target_ulong nname, target_ulong nname_len) +{ + if (use_gdb_syscalls()) { + gdb_rename(cs, complete, oname, oname_len, nname, nname_len); + } else { + host_rename(cs, complete, oname, oname_len, nname, nname_len); + } +} From patchwork Tue Jun 7 20:45:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579436 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5580156max; Tue, 7 Jun 2022 15:47:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxXlpw3Vj6D2lUOUKxENn3ND3+ZM/6+InjpXGUYUCEEzlXCm1dVN+T7d9EgGXVl7YzOh6wQ X-Received: by 2002:a05:6214:2525:b0:462:661b:3d11 with SMTP id gg5-20020a056214252500b00462661b3d11mr31990338qvb.56.1654642044333; Tue, 07 Jun 2022 15:47:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642044; cv=none; d=google.com; s=arc-20160816; b=AxPe+BgmwPYtaexg2ZhSSszxoBQJCpgM16mFzLwz16uYD+zDQTjqecDcquD2SbKsVI FzDNobp9cZlB2u/gigxzaYH9b+H9n0Lw4hQxqukSTnIC04guHMYL3yUT1OR7GMA40JDl ezS98f5dKIG0nSLxTsvaspZlvajWV0bbj0M0gyPCGDEGwCqbeD5gd1dgmVPnSgB2O46w gR4dbVm4AaZkRxGfthAs7dnYlc50wNtMTNLkxPvIlutG9If6F5WCnEg6z5deHEDW/SpX JDRsol0C7J9+/T5Qy5h1zIy0dJG2LaJ2M28/x/6ovH25uHvN674xHxp0ZEQ7yAr9fPKl n2kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=ZXHdblC6SrA06FFaTRv5QA7GGElan0kMMWhWUA3e/yM=; b=sIEO+63Tx78EY/dpJI+eB6FikIg+de8JhImcV6ym8YdXi9Oyd0RN45kipDyMTeSoRo jyA2BQB68z52sOQUy7SNi7KTt5CB51hqQiVOkpak6NuOOaDtbTCegNLhrWjnqmlr0KfY OT9YI+XblEq+KKKSHwU48YBVPDN1/0sW/6oWTg9PGf8hndjE5YMghTe2YcW2tUgAI/Yg nVFIUzc1fs6g/bga49IL5RzRW1PM92bQjBpFgyrLya/OFVycJClhADRPwwnbcKj147Ch h7qTFjJngJpUVa+YlN+TgRFkAE0VUndwOAGLmG0kIt2ShLVQQuOXDAsFvlZ+JXx9Ak8g +q5g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CDtJU4to; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id r8-20020ad45768000000b00444061ecbbfsi10100239qvx.474.2022.06.07.15.47.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:47:24 -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; dkim=pass header.i=@linaro.org header.s=google header.b=CDtJU4to; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:39030 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhyt-0004Ii-RQ for patch@linaro.org; Tue, 07 Jun 2022 18:47:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39292) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg5y-0007jk-PZ for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:34 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:35747) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5x-0001Iw-0d for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:34 -0400 Received: by mail-pj1-x1035.google.com with SMTP id o6-20020a17090a0a0600b001e2c6566046so21958880pjo.0 for ; Tue, 07 Jun 2022 13:46:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ZXHdblC6SrA06FFaTRv5QA7GGElan0kMMWhWUA3e/yM=; b=CDtJU4toah72Nf6irckQg6uSMNz724bf0GyVhovKAxw7hYf7H3eFKuEMrADipk15Bv mH6vudeFt7sYpA39ATUos8gf2Dt2lUIITQVg9E70jfOVHCCpqWNkB8tFizbXGra6Ilrg SjRAGX6G61q4Y6NdSwGChKAQ+NcDk0uIGLZE13sAdglXhrafn4dGxbha6eBH5+pGDgfV qmHMbucC2sVO65ANK3rqInrOhm3zYmmRAfKhLh7Iq4MbMq1uQVgnCufp/q7mozyE2fgg 8dOAkoa7TRUq1+qztQR5CQzubYDsuwXeS12hoHD8kgtISMMWWMA657OwqHuj0Z4MOEQm xXag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZXHdblC6SrA06FFaTRv5QA7GGElan0kMMWhWUA3e/yM=; b=CxgF6zOJ1XlO3R4VjnRmo/N8kRw2lH1bccu4sYXO5qAnTMgP4UcD3p8NUy720lgu/9 PtZx3+5hMsAtzdcq/CbflumlAJ4wrwY2sBenc8ofjwdO+QXwGhtQm3No4WiBZsRyhUmS txeaq8D07gvUNQrgbVbc6ke+lTVRmu/v9ohJIMS8PqWNTlyyi2/Q7eBcepmJ+viiV5FU 1b1rzGjYZ4vtKs2RsggW9fgzcn3eDQ49wa6jZTjkw5mFf4wT7miSe6qKHjCDHOQCLkL0 aaoLaIMSmeXbxFYB2c1aAHYManyYlLqIHjyF4ZrVybJUYpRT/pDcf6CQ0b0QUhvFfTJX DxGQ== X-Gm-Message-State: AOAM533MhuoaVXyjAWq5B24NKS7EHz/AWdt0lnmEUhqSarPgqx9PMAoS rw6W2uh2tIBbRyuc5LyiFFzqZ+Yj24RbZw== X-Received: by 2002:a17:90b:33ca:b0:1e8:61e8:7b26 with SMTP id lk10-20020a17090b33ca00b001e861e87b26mr18985167pjb.102.1654634792151; Tue, 07 Jun 2022 13:46:32 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 37/53] semihosting: Split out semihost_sys_system Date: Tue, 7 Jun 2022 13:45:41 -0700 Message-Id: <20220607204557.658541-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Split out the non-ARM specific portions of SYS_SYSTEM to a reusable function. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 3 +++ semihosting/arm-compat-semi.c | 12 +--------- semihosting/syscalls.c | 40 ++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 21430aa0ef..c9f9e66be1 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -56,4 +56,7 @@ void semihost_sys_rename(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong oname, target_ulong oname_len, target_ulong nname, target_ulong nname_len); +void semihost_sys_system(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong cmd, target_ulong cmd_len); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index da5c80b3d5..8a4e22a20a 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -506,17 +506,7 @@ void do_common_semihosting(CPUState *cs) case TARGET_SYS_SYSTEM: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(common_semi_cb, "system,%s", arg0, (int)arg1 + 1); - break; - } - s = lock_user_string(arg0); - if (!s) { - goto do_fault; - } - ret = system(s); - unlock_user(s, arg0, 0); - common_semi_cb(cs, ret, ret == -1 ? errno : 0); + semihost_sys_system(cs, common_semi_cb, arg0, arg1 + 1); break; case TARGET_SYS_ERRNO: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 223916b110..de846ced32 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -165,6 +165,18 @@ static void gdb_rename(CPUState *cs, gdb_syscall_complete_cb complete, gdb_do_syscall(complete, "rename,%s,%s", oname, olen, nname, nlen); } +static void gdb_system(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong cmd, target_ulong cmd_len) +{ + int len = validate_strlen(cs, cmd, cmd_len); + if (len < 0) { + complete(cs, -1, -len); + return; + } + + gdb_do_syscall(complete, "system,%s", cmd, len); +} + /* * Host semihosting syscall implementations. */ @@ -353,6 +365,24 @@ static void host_rename(CPUState *cs, gdb_syscall_complete_cb complete, unlock_user(nstr, nname, 0); } +static void host_system(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong cmd, target_ulong cmd_len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char *p; + int ret; + + ret = validate_lock_user_string(&p, cs, cmd, cmd_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + + ret = system(p); + complete(cs, ret, ret == -1 ? errno : 0); + unlock_user(p, cmd, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -619,3 +649,13 @@ void semihost_sys_rename(CPUState *cs, gdb_syscall_complete_cb complete, host_rename(cs, complete, oname, oname_len, nname, nname_len); } } + +void semihost_sys_system(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong cmd, target_ulong cmd_len) +{ + if (use_gdb_syscalls()) { + gdb_system(cs, complete, cmd, cmd_len); + } else { + host_system(cs, complete, cmd, cmd_len); + } +} From patchwork Tue Jun 7 20:45:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579433 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5577712max; Tue, 7 Jun 2022 15:42:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzopAjFUmgRBAzt3pjrwluIeFXtKHceEAvgb4x4OBvX5tKFewFJd+9bwWdV+Zh2NdtdM6t4 X-Received: by 2002:a37:bc85:0:b0:6a6:9a15:7218 with SMTP id m127-20020a37bc85000000b006a69a157218mr17220081qkf.696.1654641778380; Tue, 07 Jun 2022 15:42:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641778; cv=none; d=google.com; s=arc-20160816; b=HwGoGIuqyc7JuB+fe4hzoBBk0YHTTqqKVUMhYbbfWl1tq6hOnZxeRjWcIyCPemT+TW TpmCgjEePgW4CrURhl0IVdKjK9Ot42KvDQ0bGzIO+kTNoIDej3XmVbVHn72pn+vVILJf 0PBMAbNxc5txm0TsVWOxT3TJMn2oMm85a3SXWv9SlpTukClRwdsJ9fPICTrkLTz8zFcg ECNm+AgefvaCRryknLmyd+YthKcVyRm2jQO6Hed3eQvJ3R3GnQtZwCbje1cCv+JbltKq NanL9NW5CEVw4nr0NJSbK8twjhhiSm6YYX9wp+ftGomryct4sF/RpIfskdgjBSomvWJI Y3gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=C6xp81ranfCqai/DcLj6AIlbJEP0wLff5Junjx60lw0=; b=08rcXrU2P6BDicHuUEWT2mjy98E90vPtpHlNJIfMHLIcM95DUQpu2wEWP5B3FGqrdq sQIQMES1bH2AqTsPtozyWHniskTpG4VUHd8dG6hq1oj/p2LfZn6+Ex3rN2tvRFSKQT7/ nRdIf0uSg3/yTyI80F1oznZvJOXihxhegiQHlu/a1jiSUmnXgopGbbHj/sLdKL9csZtD /v16WpB/8VnXa2UI2TXEX6iWdGGBmxFcwfe66M2EQe/GDKQP5zvzSipsaDSOrBRGNxh5 Hj3K9hVvUafm8wet4OO80jkxVWZg5IZk1e0e8Y+1VTy5sNc1SeweW9QwVGJlYauE/SJ4 ZunQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=YnjHQsUE; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id c8-20020a05622a024800b00304d20da715si9351041qtx.673.2022.06.07.15.42.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:42:58 -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; dkim=pass header.i=@linaro.org header.s=google header.b=YnjHQsUE; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:56010 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhub-00058Z-Qt for patch@linaro.org; Tue, 07 Jun 2022 18:42:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39326) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg60-0007pN-AH for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:36 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:35750) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5y-0001aH-IA for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:36 -0400 Received: by mail-pj1-x1036.google.com with SMTP id o6-20020a17090a0a0600b001e2c6566046so21959886pjo.0 for ; Tue, 07 Jun 2022 13:46:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=C6xp81ranfCqai/DcLj6AIlbJEP0wLff5Junjx60lw0=; b=YnjHQsUEFJSG28y/XlrVAJjlqSey+5/zwHsathfp+D3SEbXZ13RPj/VOri88SqfH8E c0iHIZAb0jdAHLLqpjRZ51z3fAKSu4G/U8aN6+CQYV2Rvp4/Icb5qPZZjXw5079Pl8rQ E30g2H5sSdUBVOMucfixQA6rHzFMPpSzFknPS8H1SWxhPPdY4HRUnirJTlBhHRGx6PXz zzL2HvRSk6GPerStzCYSGLRG4IIVjbH6uhTrcfUSe2XZyHGP8QYKwehHgKLT/MJJAXeR wvpE1JXaEcaTej712Zs1R8GtoBZHN3seEw/gGuj7CbIRPIAzltx95mgsEJXTZXA5XNj2 UaHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C6xp81ranfCqai/DcLj6AIlbJEP0wLff5Junjx60lw0=; b=Sqh8EtGaQGR71djP8XhRx8Qv/MEMWM/wR81OqdBVDHUyQlU+FMPNyUxMpYxwhnI4eY u3rTxFvozo5lFN32fDgCHR+x9STiSV1WZ+7wkP8JV+z1aXBzj5ki3mDjv6+oi5D2sWHZ UiGV73ZfZBIQN/tJqngZfonrE3qGh0BU7DPqac3v9oJI/7zGAY3i2AXzYtsm8skRUn/A 9q4SqnrmaBw/byKp9ZR3ToNm6HGK4n7jWdHwqKsstGFkr2MPsB8s529WxeMf5dpM/web TGTFp+2Bdv/Wf8GIiZL9TIrT3zKfPgy2KiJ9z0pZOsIpHvs9ceu9xaZes7jrJPEq/21V mSNQ== X-Gm-Message-State: AOAM532RO8abF+LaJIFe2yBlerwwwZPz6c3zPiCc0OusfEem/b6FMsd8 Tz4KHF/jdShzeajqC66NabVmSjNEnZvkmw== X-Received: by 2002:a17:90b:3b4c:b0:1e8:5e53:2796 with SMTP id ot12-20020a17090b3b4c00b001e85e532796mr19247401pjb.184.1654634793143; Tue, 07 Jun 2022 13:46:33 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 38/53] semihosting: Create semihost_sys_{stat,fstat} Date: Tue, 7 Jun 2022 13:45:42 -0700 Message-Id: <20220607204557.658541-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" These syscalls will be used by m68k and nios2 semihosting. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 7 ++ semihosting/syscalls.c | 137 +++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index c9f9e66be1..ecc97751a9 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -49,6 +49,13 @@ void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, gdb_syscall_complete_cb flen_cb, int fd, target_ulong fstat_addr); +void semihost_sys_fstat(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, target_ulong addr); + +void semihost_sys_stat(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + target_ulong addr); + void semihost_sys_remove(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong fname, target_ulong fname_len); diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index de846ced32..d21064716d 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -63,6 +63,52 @@ static int validate_lock_user_string(char **pstr, CPUState *cs, return ret; } +/* + * TODO: Note that gdb always stores the stat structure big-endian. + * So far, that's ok, as the only two targets using this are also + * big-endian. Until we do something with gdb, also produce the + * same big-endian result from the host. + */ +static int copy_stat_to_user(CPUState *cs, target_ulong addr, + const struct stat *s) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + struct gdb_stat *p; + + if (s->st_dev != (uint32_t)s->st_dev || + s->st_ino != (uint32_t)s->st_ino) { + return -EOVERFLOW; + } + + p = lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); + if (!p) { + return -EFAULT; + } + + p->gdb_st_dev = cpu_to_be32(s->st_dev); + p->gdb_st_ino = cpu_to_be32(s->st_ino); + p->gdb_st_mode = cpu_to_be32(s->st_mode); + p->gdb_st_nlink = cpu_to_be32(s->st_nlink); + p->gdb_st_uid = cpu_to_be32(s->st_uid); + p->gdb_st_gid = cpu_to_be32(s->st_gid); + p->gdb_st_rdev = cpu_to_be32(s->st_rdev); + p->gdb_st_size = cpu_to_be64(s->st_size); +#ifdef _WIN32 + /* Windows stat is missing some fields. */ + p->gdb_st_blksize = 0; + p->gdb_st_blocks = 0; +#else + p->gdb_st_blksize = cpu_to_be64(s->st_blksize); + p->gdb_st_blocks = cpu_to_be64(s->st_blocks); +#endif + p->gdb_st_atime = cpu_to_be32(s->st_atime); + p->gdb_st_mtime = cpu_to_be32(s->st_mtime); + p->gdb_st_ctime = cpu_to_be32(s->st_ctime); + + unlock_user(p, addr, sizeof(struct gdb_stat)); + return 0; +} + /* * GDB semihosting syscall implementations. */ @@ -133,6 +179,19 @@ static void gdb_fstat(CPUState *cs, gdb_syscall_complete_cb complete, gdb_do_syscall(complete, "fstat,%x,%x", (target_ulong)gf->hostfd, addr); } +static void gdb_stat(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + target_ulong addr) +{ + int len = validate_strlen(cs, fname, fname_len); + if (len < 0) { + complete(cs, -1, -len); + return; + } + + gdb_do_syscall(complete, "stat,%s,%x", fname, len, addr); +} + static void gdb_remove(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong fname, target_ulong fname_len) { @@ -321,6 +380,51 @@ static void host_flen(CPUState *cs, gdb_syscall_complete_cb complete, } } +static void host_fstat(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong addr) +{ + struct stat buf; + int ret; + + ret = fstat(gf->hostfd, &buf); + if (ret) { + complete(cs, -1, errno); + return; + } + ret = copy_stat_to_user(cs, addr, &buf); + complete(cs, ret ? -1 : 0, ret ? -ret : 0); +} + +static void host_stat(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + target_ulong addr) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + struct stat buf; + char *name; + int ret, err; + + ret = validate_lock_user_string(&name, cs, fname, fname_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + + ret = stat(name, &buf); + if (ret) { + err = errno; + } else { + ret = copy_stat_to_user(cs, addr, &buf); + err = 0; + if (ret < 0) { + err = -ret; + ret = -1; + } + } + complete(cs, ret, err); + unlock_user(name, fname, 0); +} + static void host_remove(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong fname, target_ulong fname_len) { @@ -629,6 +733,39 @@ void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, } } +void semihost_sys_fstat(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, target_ulong addr) +{ + GuestFD *gf = get_guestfd(fd); + + if (!gf) { + complete(cs, -1, EBADF); + return; + } + switch (gf->type) { + case GuestFDGDB: + gdb_fstat(cs, complete, gf, addr); + break; + case GuestFDHost: + host_fstat(cs, complete, gf, addr); + break; + case GuestFDStatic: + default: + g_assert_not_reached(); + } +} + +void semihost_sys_stat(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + target_ulong addr) +{ + if (use_gdb_syscalls()) { + gdb_stat(cs, complete, fname, fname_len, addr); + } else { + host_stat(cs, complete, fname, fname_len, addr); + } +} + void semihost_sys_remove(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong fname, target_ulong fname_len) { From patchwork Tue Jun 7 20:45:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579435 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5579762max; Tue, 7 Jun 2022 15:46:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw3eLopjq3yDAa6uRBC92oz9qlogysRs62LGOIeo1sYR4jNgeHHh2QHDDklmJVfTRKFn37a X-Received: by 2002:a05:620a:4142:b0:6a6:4960:720c with SMTP id k2-20020a05620a414200b006a64960720cmr21267807qko.580.1654642001350; Tue, 07 Jun 2022 15:46:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642001; cv=none; d=google.com; s=arc-20160816; b=CVEaweo2ATlEYDT81cZvn0i9sz4NerX7XCedJzcbBBw256PydYQImxpltL4bTS4JaZ BCVjmcFA0+PZVDyOsc70VRkiJNAC2t9/4kAZdGI4/u2NpbLAUeJyBOuvMW8R2qZiCniC bqLApfBAr9StSAX+z4lqJQ380DsTsnbfHXW9nALNePiURIr1ZJFFbBz6LHR91mp77YGC Sfssdc0EyT49HXp68oUmNDrLfGAUvYl7eQ1gjGJLQU3VNg/QLdVL66UomhUPNpvtHyhT 3XtlJMh3OpnVrZXxabHLMyxYOpPPmcQYAciOAED66A/jk5ahl8w4KE7vxvItLITmpnqt +AZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=FnzvM/sQxHwEqBkmHkvKY5R9IWVzHt0oowSE7ql1V5E=; b=jjwUHXHjI6TKTyM+xXl5H1kIJ8fLv3Nnnf010t5e6anvc5Qa4KuzdDzMqTX1mtKK3S 4qTlqBH4FbuOn2YuJDncJkMYMy0RS+pAldZSPTRmwqZxvMzMp9nw+ntGP/cGPtRpkev+ sfCRHMRVaxEGN/SfX/zCHp0U6D/lWWVw7/V94V8XQDgLOcGRbGR9YEHtKucPxpU+xgv2 iJEhIQidf+Cse08QvVyrvBM36q9wUjevOyxoM3qFP80ZnkQ5wBsrlszjb2FP/WxTb9d0 gR+fBOgVRyr1hwD9cprDgFBbXv+aLAmzPeSJZ6xJtfA/CMiKiXKlyar2Iy8aulqd1nzp cExw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hJ+UBtgM; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id gc2-20020a056214230200b0046444186457si9492128qvb.162.2022.06.07.15.46.41 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:46:41 -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; dkim=pass header.i=@linaro.org header.s=google header.b=hJ+UBtgM; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36478 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhyC-0002Zb-TP for patch@linaro.org; Tue, 07 Jun 2022 18:46:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39340) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg61-0007tD-6T for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:37 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:41925) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg5z-0001ad-Ev for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:46:36 -0400 Received: by mail-pj1-x102c.google.com with SMTP id l20-20020a17090a409400b001dd2a9d555bso16489286pjg.0 for ; Tue, 07 Jun 2022 13:46:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=FnzvM/sQxHwEqBkmHkvKY5R9IWVzHt0oowSE7ql1V5E=; b=hJ+UBtgMIUeJC+fy/Q9v8W3bsW4grgL3DRpSiA8VPy/yJnHJYk9WPSUZU6058HzC0F 2c6/iYnaOtEtES5zd3UOJ04Nojpvh/dJLFmqAPxKX4fV7CaH98rNyL7zBOwWelEWM/sT TRE3X4nBKCFN6TIY2AzFmsI0dU+9EDbyKVsPGzqJv/33wn3JQxD3UtFowjGrd8ajDz8b s42JCm5al7yvPSkXFh70mLACw/DQfhVxU63uUodifJwT7IuYmWwySb0D6TOAGJquwdA/ ydHyUbH7drWMBNqA3G/jUzNK2z+j2sJ5oTm9ys9Cpj98twK9AjhG9hOVBuc6Az8Pxe2Z d0rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FnzvM/sQxHwEqBkmHkvKY5R9IWVzHt0oowSE7ql1V5E=; b=6KGQeMriI4QHQmMEXjXyHjlqFnvs/0vuM1dEmtUrQFhVoJAiHI5oPCQhqiPtlzrSDB yzcCRH6pijiMwoDUbFHFABIJKXSuhLbVVr4Zww1XC5R5Pexb5Xy0ajl5fS40m/7L65TH B/qICFAddHUVk5Xqxlc9FYWg86reDrO9OtwIoG9akskitaCOwT1paWEwPerq5yi40EZj 3/dkDmv0Bn898vi7MhD0wmAGrtvITUpI5zGeGFNnuWik3pZELacEkNejFzTAvBSa+ZT4 WEymdnbkDNyLzoqc5iZbZFLRXC32gQdIIXeGOldnxjyaV52VZeB+7n1VErNgHCSQ2/yD vENQ== X-Gm-Message-State: AOAM532OqVpo3pxaUeWh30SZO5kHUnMyhyhsBOqZKKnXOgzxOH43ALWa /6u9IzMlV0G6Y9vjzytgzUaG6vj0po0uRA== X-Received: by 2002:a17:90b:4a4c:b0:1e4:dcfc:e688 with SMTP id lb12-20020a17090b4a4c00b001e4dcfce688mr38600499pjb.38.1654634794186; Tue, 07 Jun 2022 13:46:34 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id r6-20020a170902be0600b00162037fbacdsm12971279pls.187.2022.06.07.13.46.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:46:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 39/53] semihosting: Create semihost_sys_gettimeofday Date: Tue, 7 Jun 2022 13:45:43 -0700 Message-Id: <20220607204557.658541-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This syscall will be used by m68k and nios2 semihosting. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/syscalls.h | 3 +++ semihosting/syscalls.c | 42 ++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index ecc97751a9..347200cb9f 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -66,4 +66,7 @@ void semihost_sys_rename(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_system(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong cmd, target_ulong cmd_len); +void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong tv_addr, target_ulong tz_addr); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index d21064716d..db1e9f6cc9 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -236,6 +236,12 @@ static void gdb_system(CPUState *cs, gdb_syscall_complete_cb complete, gdb_do_syscall(complete, "system,%s", cmd, len); } +static void gdb_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong tv_addr, target_ulong tz_addr) +{ + gdb_do_syscall(complete, "gettimeofday,%x,%x", tv_addr, tz_addr); +} + /* * Host semihosting syscall implementations. */ @@ -487,6 +493,32 @@ static void host_system(CPUState *cs, gdb_syscall_complete_cb complete, unlock_user(p, cmd, 0); } +static void host_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong tv_addr, target_ulong tz_addr) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + struct gdb_timeval *p; + int64_t rt; + + /* GDB fails on non-null TZ, so be consistent. */ + if (tz_addr != 0) { + complete(cs, -1, EINVAL); + return; + } + + p = lock_user(VERIFY_WRITE, tv_addr, sizeof(struct gdb_timeval), 0); + if (!p) { + complete(cs, -1, EFAULT); + return; + } + + /* TODO: Like stat, gdb always produces big-endian results; match it. */ + rt = g_get_real_time(); + p->tv_sec = cpu_to_be32(rt / G_USEC_PER_SEC); + p->tv_usec = cpu_to_be64(rt % G_USEC_PER_SEC); + unlock_user(p, tv_addr, sizeof(struct gdb_timeval)); +} + /* * Static file semihosting syscall implementations. */ @@ -796,3 +828,13 @@ void semihost_sys_system(CPUState *cs, gdb_syscall_complete_cb complete, host_system(cs, complete, cmd, cmd_len); } } + +void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong tv_addr, target_ulong tz_addr) +{ + if (use_gdb_syscalls()) { + gdb_gettimeofday(cs, complete, tv_addr, tz_addr); + } else { + host_gettimeofday(cs, complete, tv_addr, tz_addr); + } +} From patchwork Tue Jun 7 20:45:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579418 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5569783max; Tue, 7 Jun 2022 15:31:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyda3PGN46qVa0EPNPuZZaVMdlAaVlJQn9BBC0tsYSLQBpgnpfTWpZZprpKs9ktuSCsSHYJ X-Received: by 2002:a05:620a:448b:b0:6a0:3266:f6ef with SMTP id x11-20020a05620a448b00b006a03266f6efmr21752405qkp.427.1654641090873; Tue, 07 Jun 2022 15:31:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641090; cv=none; d=google.com; s=arc-20160816; b=tiYiz09Dw2oncotv6O/W48CQUnM1lQjO462PrDWEmT8knmzYtAXdLzLZtt6hkBOrPv k8MQa9tfikUa4eCALS5W2stO6HBoxaYdpPOMsdRx9jpOxGY5zToIl3jIAUKuWvYd4vgL IRv8DStshv943zIQga/wZA87NHzEXFP7kkERLhN8kQeytOfloUvsAPgUXB4bK9rJCWjb /KVWUnkJsg+hrVtz7skyErOAjiHpmg2JCFAIyh/f62icFuhUX9cs4empc9T2OtQpuoKn ycE+ZmNLNUw/fUn5Dz9QJQnwDmN2NT1tyRGTaQGMPCEF3mp3pocBrFY+3O1UT4HKnmd3 1GuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=2QV6Z5mGxNEu7A6+PkUh39CG6ZEMqsAUtAKGx6Ugq74=; b=Oopq6Sg+Zqdsxh35C/k6ozTegPPpFIiWJkzkVc5SKynneLUJuBxISC9crCciVf4Rpn PVGbMZtsu/4K6mLyfBfpnxtXtoJeQn0/BKKEsT9n5nBwIABSrzsN5Txuf8j9GvDLfuz7 Ki7p9u8GdLOrPHYv2q2zd/V8GsXcopi7FDohqbMu9sSMtRDxMW4aK1ujWbKHBR3QrmbO KRTHjk2LNeOxdcm7lxSqvSbbfW4TUXn8cSVfA+DH/XiaQUXWedTM6qqr7mqQGtiWQKtg yMPQm1UlFU0RRDOYANvpqO1K6HI8ZuH06+EYRWbEji1a2XbCOA9uqjbh+7rf00f8dNiR 4hCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=bRgDh6PD; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id n19-20020a05620a295300b006a6c362b0c3si4024180qkp.2.2022.06.07.15.31.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:31: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; dkim=pass header.i=@linaro.org header.s=google header.b=bRgDh6PD; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:53198 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhjW-0000fp-Ak for patch@linaro.org; Tue, 07 Jun 2022 18:31:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40022) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg92-0005ef-HW for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:46 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:40856) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg8w-0001oc-7k for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:42 -0400 Received: by mail-pj1-x1035.google.com with SMTP id w13-20020a17090a780d00b001e8961b355dso4740640pjk.5 for ; Tue, 07 Jun 2022 13:49:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=2QV6Z5mGxNEu7A6+PkUh39CG6ZEMqsAUtAKGx6Ugq74=; b=bRgDh6PDc9K2cHxxUNMY/rPH6bJfjrzhz63nnma/RG6pfiNvmcjOJiQbhKsv0z9H0I s0ZYsB68IZkahIf4Fy+vwsQHwD+Qc+D8Q87iFFfvDIo0dHKAdRW/w2FKnr5YKvdruFEY C/ZID0nj7ONzstwePqy0mZ3X5UfsWvvNud+HdTz8G53j2NOXPdt5J8ydSjPLEooSucpc pUS7oWDEGYbzyv1Xues/fGXmvi+2F/1DjO565B1lB2zMkGys9SAdm7OWLJgG+ygorPj9 EIhEWZrhjeMGU8nQL6b4K6Cf9UqSxs1wAaWbxK7Oj8Elvb6+N09qlk70prMg9xPQc0nM ta3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2QV6Z5mGxNEu7A6+PkUh39CG6ZEMqsAUtAKGx6Ugq74=; b=BcGkt1htM/oUjm1eImYFi5XXOhaEOd0pIPcVIq6RVYrKAc+OR0vbkiaDWY1fYkNbo2 9r6vznJOiBQ/a1jbu/03DYa4UrL33Vg7URfKW33UQ8DV4YnTKslPc4/Be/3Wa19VhLM5 fnmgLArp64vONCThKVoCR1cLMh8Jdnw617iWwA0664XLcHSekLCcSabA0eRoJyUFHI7h BOfZb1ux8uSOtvyDgeS8DPNRjNDahDlBpI9iwfuA6ypBzGycLXl4b+xG0r1e60wEo9YP mCnwA5naWWhzjaHaTKInqRpca/KN8UGg7UXfm4YTy23PyODb8d5tLLjGqyR4txkUJgPT Vv1g== X-Gm-Message-State: AOAM53116yt6fgJtd6459OxTch3ucRorveLANBpJ0In4UXDcrFhNLjrZ 6H4YzX/+zimTWkjg4taBEHfM39194/qaRA== X-Received: by 2002:a17:90b:23d8:b0:1e2:e3cb:ac08 with SMTP id md24-20020a17090b23d800b001e2e3cbac08mr34227206pjb.35.1654634975449; Tue, 07 Jun 2022 13:49:35 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 40/53] gdbstub: Adjust gdb_syscall_complete_cb declaration Date: Tue, 7 Jun 2022 13:45:44 -0700 Message-Id: <20220607204557.658541-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Change 'ret' to uint64_t. This resolves a FIXME in the m68k and nios2 semihosting that we've lost data. Change 'err' to int. There is nothing target-specific about the width of the errno value. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/exec/gdbstub.h | 3 +-- gdbstub.c | 7 ++++--- semihosting/arm-compat-semi.c | 12 +++++------- semihosting/console.c | 7 +++---- semihosting/syscalls.c | 2 +- target/m68k/m68k-semi.c | 10 +++------- target/nios2/nios2-semi.c | 8 +++----- 7 files changed, 20 insertions(+), 29 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index b588c306cc..f667014888 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -74,8 +74,7 @@ struct gdb_timeval { #ifdef NEED_CPU_H #include "cpu.h" -typedef void (*gdb_syscall_complete_cb)(CPUState *cpu, - target_ulong ret, target_ulong err); +typedef void (*gdb_syscall_complete_cb)(CPUState *cpu, uint64_t ret, int err); /** * gdb_do_syscall: diff --git a/gdbstub.c b/gdbstub.c index ecc9d9cd6f..f7cf33a327 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1870,11 +1870,12 @@ static void handle_read_all_regs(GArray *params, void *user_ctx) static void handle_file_io(GArray *params, void *user_ctx) { if (params->len >= 1 && gdbserver_state.current_syscall_cb) { - target_ulong ret, err; + uint64_t ret; + int err; - ret = (target_ulong)get_param(params, 0)->val_ull; + ret = get_param(params, 0)->val_ull; if (params->len >= 2) { - err = (target_ulong)get_param(params, 1)->val_ull; + err = get_param(params, 1)->val_ull; } else { err = 0; } diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 8a4e22a20a..f992b60b6b 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -215,7 +215,7 @@ static inline uint32_t get_swi_errno(CPUState *cs) #endif } -static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) +static void common_semi_cb(CPUState *cs, uint64_t ret, int err) { if (err) { #ifdef CONFIG_USER_ONLY @@ -232,7 +232,7 @@ static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) * SYS_READ and SYS_WRITE always return the number of bytes not read/written. * There is no error condition, other than returning the original length. */ -static void common_semi_rw_cb(CPUState *cs, target_ulong ret, target_ulong err) +static void common_semi_rw_cb(CPUState *cs, uint64_t ret, int err) { /* Recover the original length from the third argument. */ CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; @@ -251,8 +251,7 @@ static void common_semi_rw_cb(CPUState *cs, target_ulong ret, target_ulong err) * Convert from Posix ret+errno to Arm SYS_ISTTY return values. * With gdbstub, err is only ever set for protocol errors to EIO. */ -static void common_semi_istty_cb(CPUState *cs, target_ulong ret, - target_ulong err) +static void common_semi_istty_cb(CPUState *cs, uint64_t ret, int err) { if (err) { ret = (err == ENOTTY ? 0 : -1); @@ -263,8 +262,7 @@ static void common_semi_istty_cb(CPUState *cs, target_ulong ret, /* * SYS_SEEK returns 0 on success, not the resulting offset. */ -static void common_semi_seek_cb(CPUState *cs, target_ulong ret, - target_ulong err) +static void common_semi_seek_cb(CPUState *cs, uint64_t ret, int err) { if (!err) { ret = 0; @@ -285,7 +283,7 @@ static target_ulong common_semi_flen_buf(CPUState *cs) } static void -common_semi_flen_fstat_cb(CPUState *cs, target_ulong ret, target_ulong err) +common_semi_flen_fstat_cb(CPUState *cs, uint64_t ret, int err) { if (!err) { /* The size is always stored in big-endian order, extract the value. */ diff --git a/semihosting/console.c b/semihosting/console.c index ef6958d844..3dd0ac60e2 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -64,11 +64,10 @@ static GString *copy_user_string(CPUArchState *env, target_ulong addr) return s; } -static void semihosting_cb(CPUState *cs, target_ulong ret, target_ulong err) +static void semihosting_cb(CPUState *cs, uint64_t ret, int err) { - if (ret == (target_ulong) -1) { - qemu_log("%s: gdb console output failed ("TARGET_FMT_ld")", - __func__, err); + if (err) { + qemu_log("%s: gdb console output failed (%d)", __func__, err); } } diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index db1e9f6cc9..13a9bdeda6 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -115,7 +115,7 @@ static int copy_stat_to_user(CPUState *cs, target_ulong addr, static gdb_syscall_complete_cb gdb_open_complete; -static void gdb_open_cb(CPUState *cs, target_ulong ret, target_ulong err) +static void gdb_open_cb(CPUState *cs, uint64_t ret, int err) { if (!err) { int guestfd = alloc_guestfd(); diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index b886ebf714..8c186c0e9f 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -95,7 +95,7 @@ static void translate_stat(CPUM68KState *env, target_ulong addr, struct stat *s) unlock_user(p, addr, sizeof(struct gdb_stat)); } -static void m68k_semi_return_u32(CPUM68KState *env, uint32_t ret, uint32_t err) +static void m68k_semi_return_u32(CPUM68KState *env, uint32_t ret, int err) { target_ulong args = env->dregs[1]; if (put_user_u32(ret, args) || @@ -110,7 +110,7 @@ static void m68k_semi_return_u32(CPUM68KState *env, uint32_t ret, uint32_t err) } } -static void m68k_semi_return_u64(CPUM68KState *env, uint64_t ret, uint32_t err) +static void m68k_semi_return_u64(CPUM68KState *env, uint64_t ret, int err) { target_ulong args = env->dregs[1]; if (put_user_u32(ret >> 32, args) || @@ -124,16 +124,12 @@ static void m68k_semi_return_u64(CPUM68KState *env, uint64_t ret, uint32_t err) static int m68k_semi_is_fseek; -static void m68k_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) +static void m68k_semi_cb(CPUState *cs, uint64_t ret, int err) { M68kCPU *cpu = M68K_CPU(cs); CPUM68KState *env = &cpu->env; if (m68k_semi_is_fseek) { - /* - * FIXME: We've already lost the high bits of the fseek - * return value. - */ m68k_semi_return_u64(env, ret, err); m68k_semi_is_fseek = 0; } else { diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index 3e504a6c5f..4d02789d26 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -108,8 +108,7 @@ static bool translate_stat(CPUNios2State *env, target_ulong addr, return true; } -static void nios2_semi_return_u32(CPUNios2State *env, uint32_t ret, - uint32_t err) +static void nios2_semi_return_u32(CPUNios2State *env, uint32_t ret, int err) { target_ulong args = env->regs[R_ARG1]; if (put_user_u32(ret, args) || @@ -124,8 +123,7 @@ static void nios2_semi_return_u32(CPUNios2State *env, uint32_t ret, } } -static void nios2_semi_return_u64(CPUNios2State *env, uint64_t ret, - uint32_t err) +static void nios2_semi_return_u64(CPUNios2State *env, uint64_t ret, int err) { target_ulong args = env->regs[R_ARG1]; if (put_user_u32(ret >> 32, args) || @@ -139,7 +137,7 @@ static void nios2_semi_return_u64(CPUNios2State *env, uint64_t ret, static int nios2_semi_is_lseek; -static void nios2_semi_cb(CPUState *cs, target_ulong ret, target_ulong err) +static void nios2_semi_cb(CPUState *cs, uint64_t ret, int err) { Nios2CPU *cpu = NIOS2_CPU(cs); CPUNios2State *env = &cpu->env; From patchwork Tue Jun 7 20:45:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579430 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5576802max; Tue, 7 Jun 2022 15:41:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyOsrLahble4GroL5d2EwQlT5QGGjdSUDdBJD9aRpuzrr2ZcV1r1C2lTVmuulyGkEMc3xc2 X-Received: by 2002:a0c:fbc4:0:b0:467:d5e3:af2d with SMTP id n4-20020a0cfbc4000000b00467d5e3af2dmr21013626qvp.115.1654641681769; Tue, 07 Jun 2022 15:41:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641681; cv=none; d=google.com; s=arc-20160816; b=g29lT0ze5off4KEdFAoon8U9xwP2MYX76mV2P21E9jC5/I0pj+6IW2O2cTYhg2yN1K P7PrhOscuIgnuFVg6IK8U/2lR7BDjIDgQmQNRMjl7D820Panhd73Y6fBDQ5TXjHwjR4x Jfai0G2hs21/JU28az0QZNlb04fQmy5GBVTqPNDk167gNpXdbbK0Xhenf0uhWxlXWjXi wDbrdx87PSpAUelxcfw0h8pXu17VQeAaWNDTe0TT/95iGQJEBXNMHDr2tj3lfXhJrmLH YVJDHY+THmYkCn71MyY1GJGmrxYVhZDSCkEKxf6JfTwF1d4g2btjJgbkzl6cjW5AomSA JIPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=xEiQkbmkP3Pvevruu+pGV3TN8GeAApZMdugII/EnImY=; b=PMzdfGrT1RC7/17bXGYlSEO7rIbVuVIX9RudmZjaSyWB3G4hSLfSIqNdX0J0Ralskj peGTmUQ4J9xboF0EITT3epZMUpqGQPzxAyEpk35N5nubvRZVWDRzs1Ng1S58pSzGkD+I FdL1/vDQWNEADFGowuIv+RTORSTCPggbp3KGnivVNDkUi1nnjcF4PSyO/hx2hmY7HHoc Ej64mfdZStfdPhzHqbWelLalMN1rqxRUgJfPZfeuK6dyBpLJuEGVol0FtcO/eQy5uv4r mSYtahpyVau//NURMvRof9i2OnIcE9yNYtKRLWFIGNPwSh4D3O7AXW5d7W3NpQgRXKgI 6wyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=zTHPLVFN; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id u18-20020a05622a199200b00304fdb758e0si1271127qtc.538.2022.06.07.15.41.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:41:21 -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; dkim=pass header.i=@linaro.org header.s=google header.b=zTHPLVFN; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:52078 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyht3-0002PT-C8 for patch@linaro.org; Tue, 07 Jun 2022 18:41:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40020) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg92-0005ee-HF for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:46 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]:42512) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg8w-0001oh-LY for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:42 -0400 Received: by mail-pf1-x429.google.com with SMTP id 187so16522727pfu.9 for ; Tue, 07 Jun 2022 13:49:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=xEiQkbmkP3Pvevruu+pGV3TN8GeAApZMdugII/EnImY=; b=zTHPLVFNO80YZLjzIjA6pJKGZLWgsnvEeD7YAj3TLmjA28mxM+GUlwlQRAsNkr77k+ jjErKX128EPVNqoywdnHCrVV70PQVB2VUWWrX+ndsw/EH9BkDWSfrd/HzMF6eIZPFdFI jBhlVF4+rL81dMdri8jiuZ6uFuMercwxI63WAye0lABTQ/oCbXmk9l5/yb4mJ5z5zOfv c6mnoLQyPdrKoDx045DVdTHh6xrrE00F7G6Jez5tvZvgfjq3DKCtcygTHgB3SOnLExfN wE0Q6EsN5hpLM+fnjOxNN097Puv26gW8+BBm7JNlVPHEp+m/oOtqKmwcOq+awE9ZZMfR jiKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xEiQkbmkP3Pvevruu+pGV3TN8GeAApZMdugII/EnImY=; b=lgBbsUBmHIPOE3+4ibfTRXxBklUbAM/08roUj4PbmEk6zMZwTgNqKXpezCaw/So6wR BKMG2YTEthhZ3yHgQCR83UF0SsrJNrpWMjuwyhY1bKVzuJ9rOZz2DVyXLSeQj4gt5uwT kEXCVpjR6pK10o327lJf5lkQGEb4IVysl24yh4nX0m36/T3ycyIqDmATlIqo0yNhVQEI svTAea7Hj8UGAlv4j5RQhOvGXTQdHqsDzvIFB/DkYJsTPwPnXDCbY+44R3RzBoZfh7g6 8U0wHUhdVYZUqM1E7rmT8qMOYVH0tDlozS2vC7hWU1L9J567KUa8hvNvRv4kIW6DXZzR 4eow== X-Gm-Message-State: AOAM532nVwRHlL/D010ryfoeU0j/owe1ZFXeAPGhbbvi+Q44p+F6BcC8 8rByX1n1PAJX3TnNzLk7n6giIEKh01Bskw== X-Received: by 2002:a62:544:0:b0:51b:a90d:64d3 with SMTP id 65-20020a620544000000b0051ba90d64d3mr31372248pff.40.1654634976435; Tue, 07 Jun 2022 13:49:36 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 41/53] semihosting: Fix docs comment for qemu_semihosting_console_inc Date: Tue, 7 Jun 2022 13:45:45 -0700 Message-Id: <20220607204557.658541-42-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The implementation of qemu_semihosting_console_inc does not defer to gdbstub, but only reads from the fifo in console.c. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/console.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index 0238f540f4..4f6217bf10 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -41,11 +41,10 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); * qemu_semihosting_console_inc: * @env: CPUArchState * - * Receive single character from debug console. This may be the remote - * gdb session if a softmmu guest is currently being debugged. As this - * call may block if no data is available we suspend the CPU and will - * re-execute the instruction when data is there. Therefore two - * conditions must be met: + * Receive single character from debug console. As this call may block + * if no data is available we suspend the CPU and will re-execute the + * instruction when data is there. Therefore two conditions must be met: + * * - CPUState is synchronized before calling this function * - pc is only updated once the character is successfully returned * From patchwork Tue Jun 7 20:45:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579439 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5582729max; Tue, 7 Jun 2022 15:51:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzpKzmdW+deSkNQ/OGhIIT11rR1MDVMhQgW/q/MWkFdxOgFJEWr7L2hgqMcSELlmz4bYqbS X-Received: by 2002:a05:622a:1a82:b0:304:da37:85bb with SMTP id s2-20020a05622a1a8200b00304da3785bbmr22133563qtc.347.1654642284349; Tue, 07 Jun 2022 15:51:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642284; cv=none; d=google.com; s=arc-20160816; b=oW98Q2gMXHycgq5JvnPqq9lsC2POHhb1z3VHhZGu0h0aSazVYzTA4jspcjoBIRvOVv /9GjFpjkq32Z1OUYXWpZAxF9MRH0kClgkBTW/7KaaeKQ9gC0lRDBvE7YbqZq4/cJLtDF M3ixtwsPkMJYpTCoZ1MCVaPEekUVOznSol3A0QlOxerpf/PA13Mo07saDjW32F3PpR+a Jkv7qwVEj5bMZen8bkW8vyRNQf4J72no/jIO1dXBKCdIN6S828dNcVwLNtfCBUGh8yfn ZtuynvPcR2R57dvRdyQOZl1qe5w3GzNycO1e7oOXvJcIUkf02Ek67ijqsRO/kanm7CuI lZnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=kcKcbuHpae2wG44hmgdN3EhtSwRafPOrATlYMDNb6tY=; b=ZYkvz1OZWSHYxB8AfeapjjYqYCVLHfy+CqdaepjqfhNv95f8/aHg3EuB8aJaUI+ZJF AfZNDDwet00fpJ6UddhTK/U4K57o2HrQsRhH0dLGfPUpd13a7g+au76WQ/YAumzhtp3S tCV4ZVvsJ6shP+bS1SwuXfXP/FTLtthT61nEEQZ8ytWL/bRY6saA5jGBNCv/Fz84MpXQ VLj6iYx3K7tqkRK4Tbdc72jPJ7Xe7eVIWipm6vYA6NNJGrILB9aRLAmDnF0U2Tzo816p +xmhIerfFzBqLw78VRuEsBkwDXGvzPhFzJdaC8wI2fpmyDvtIMwd0EVjDzlJDEmElwBU KL8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=yA3NsPgg; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id m9-20020ad45dc9000000b0046b966e12c3si4022359qvh.543.2022.06.07.15.51.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:51:24 -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; dkim=pass header.i=@linaro.org header.s=google header.b=yA3NsPgg; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:47556 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi2l-0001vf-UZ for patch@linaro.org; Tue, 07 Jun 2022 18:51:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40024) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg92-0005eg-J3 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:46 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:38711) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg8x-0001om-IR for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:43 -0400 Received: by mail-pg1-x532.google.com with SMTP id 123so6623232pgb.5 for ; Tue, 07 Jun 2022 13:49:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kcKcbuHpae2wG44hmgdN3EhtSwRafPOrATlYMDNb6tY=; b=yA3NsPggRY6PlKoxCtskat9jAtjNtJFt2H/gxHCx2O8dD2Ghl894VQoI+OmNoO/PH4 JQKJp+XqdFzDHGbx7qefXcPC4VhMcNumesNVnI5d4/KucFbH/V++9RWYTIoGDlBkxk+G fQIud1qgpbJQXW5DytUg92g+yRka/RS8eWZT3fSZJmyegKxNwXvueXKmhsatn73W+nt5 ikxlSK+SanwQ7haE8I+DZmtQwUpI9FwmqIJMAnZo3acAexrYBCIYtBuQ7aZfmkAJxFNc RtuyNoWiYBF5wiXrYJs1Gjd60BpWQ8BL6GYxpuK8keZKNkoSWi9iuVdqxLHoJjw8UhF5 5kYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kcKcbuHpae2wG44hmgdN3EhtSwRafPOrATlYMDNb6tY=; b=ubRFjLs1Ie6CCTW2M+o+Gq4FcEZsQteH+mdSU/hEr+SoayxnIwVoFqGJW9O2RnVSwH nWZOB1lB9tMJSVmBXkv83BxltBBUZUQgoqe3ocQNzE+N9j5gZmzXgsCDU+2s25CLIkgN 7pQ/BSoJLvjS3MZtChhn/H0TVUcfYv9UYZMr1VofEyKHnCHTSp4w0IyIFhJa4QMxptDd 9lJSJsQIgeHHvhaOREtfa1rXMDHEHOUdtQaTMcKhSnqDjuJTlfktwvm+HBlviR3Nykky H+b1Gie1zkTJt+wUMB/bD8zNPR3PeB638d3dXwQ5yTFiowo2kfYbUF6waXHe6coUSJps Ie7g== X-Gm-Message-State: AOAM5333ySMHoVWGinJhM+OZRvwoM8kBRJw1ewwGgFlua0/KhhXfm3QC k6qXdSfn0bHjt4T8IKWH/2pZU0fbV6mrQA== X-Received: by 2002:a63:b1e:0:b0:3fd:43d9:5354 with SMTP id 30-20020a630b1e000000b003fd43d95354mr18769073pgl.294.1654634977428; Tue, 07 Jun 2022 13:49:37 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PATCH v4 42/53] semihosting: Pass CPUState to qemu_semihosting_console_inc Date: Tue, 7 Jun 2022 13:45:46 -0700 Message-Id: <20220607204557.658541-43-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::532; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x532.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We don't need CPUArchState, and we do want the CPUState of the thread performing the operation -- use this instead of current_cpu. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/console.h | 4 ++-- linux-user/semihost.c | 2 +- semihosting/arm-compat-semi.c | 2 +- semihosting/console.c | 12 ++++++------ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index 4f6217bf10..27f8e9ae2e 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -39,7 +39,7 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); /** * qemu_semihosting_console_inc: - * @env: CPUArchState + * @cs: CPUState * * Receive single character from debug console. As this call may block * if no data is available we suspend the CPU and will re-execute the @@ -50,7 +50,7 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); * * Returns: character read OR cpu_loop_exit! */ -target_ulong qemu_semihosting_console_inc(CPUArchState *env); +target_ulong qemu_semihosting_console_inc(CPUState *cs); /** * qemu_semihosting_log_out: diff --git a/linux-user/semihost.c b/linux-user/semihost.c index 17f074ac56..f14c6ae21d 100644 --- a/linux-user/semihost.c +++ b/linux-user/semihost.c @@ -56,7 +56,7 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong addr) * program is expecting more normal behaviour. This is slow but * nothing using semihosting console reading is expecting to be fast. */ -target_ulong qemu_semihosting_console_inc(CPUArchState *env) +target_ulong qemu_semihosting_console_inc(CPUState *cs) { uint8_t c; struct termios old_tio, new_tio; diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index f992b60b6b..e7de52d042 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -427,7 +427,7 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_READC: - ret = qemu_semihosting_console_inc(env); + ret = qemu_semihosting_console_inc(cs); common_semi_set_ret(cs, ret); break; diff --git a/semihosting/console.c b/semihosting/console.c index 3dd0ac60e2..7b896fe43b 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -144,17 +144,17 @@ static void console_read(void *opaque, const uint8_t *buf, int size) c->sleeping_cpus = NULL; } -target_ulong qemu_semihosting_console_inc(CPUArchState *env) +target_ulong qemu_semihosting_console_inc(CPUState *cs) { uint8_t ch; SemihostingConsole *c = &console; + g_assert(qemu_mutex_iothread_locked()); - g_assert(current_cpu); if (fifo8_is_empty(&c->fifo)) { - c->sleeping_cpus = g_slist_prepend(c->sleeping_cpus, current_cpu); - current_cpu->halted = 1; - current_cpu->exception_index = EXCP_HALTED; - cpu_loop_exit(current_cpu); + c->sleeping_cpus = g_slist_prepend(c->sleeping_cpus, cs); + cs->halted = 1; + cs->exception_index = EXCP_HALTED; + cpu_loop_exit(cs); /* never returns */ } ch = fifo8_pop(&c->fifo); From patchwork Tue Jun 7 20:45:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579437 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5580517max; Tue, 7 Jun 2022 15:48:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJysQTuFH2SC1rzYzB/FTB7HTHGwo4oqKQthKPV5CH5l8DDrG5lkqJm72RLuD0FQF8cvzoml X-Received: by 2002:ac8:7f10:0:b0:304:e88d:b6c1 with SMTP id f16-20020ac87f10000000b00304e88db6c1mr13664170qtk.364.1654642093400; Tue, 07 Jun 2022 15:48:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642093; cv=none; d=google.com; s=arc-20160816; b=bzU0peYYZf6O+Gfopt43FUN+wY5RM+g0YbaynSHzu0JIM/jVeJbtwxeWruylph0QSA HQZgqU/NSK9HIVLD/4lD/R/EVwpEIuSNIQyVgewE84AxZSe93Ax70o4c5ndffidMQuUK VQCY9tRqCDNkybEZMc+KIsw0ic9JgagOJjIYismM60mr5DHOks03JO1Ltjy2JAZOpSYA zQnIDslmfprIOaHEWqq79xDD9WMIviwSZNR2jAmulWctZuuV7P0/WyTAM3vR2bjcUNw4 bVeN2YsBBOUx29h1QCwM3ICq7OEaS1MC+FFCggDr+iHO/+zLoTAvaLer6xgXS0Rg22U5 /Sag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=HU5FIL8krVKmFqQext3ojwIXl0oRCXQ5TpFvX+W81lE=; b=z0kGtneS/q2ZdAEruRKi9w7CvCvY0W5gpJa5yvwQC71AFGv2UhgdGDeTglser2EDcG 7B2BLFJX+55wQNUnz9Y8fc9wjixJrRp0Rx2/EiSCNHsG8Ha2bN4PVACLu4CvSWwRRbFo J8wwrV1O9M8nmtOSjg9TFkr7t2H+VG2KjcWSLifrkR7gdLH8D8AGWqzmUZhh8M4bWlTO 0YAwAQPMgRdUmigJKcvnFEGsc4RLRNV9CxYu7yOA7P+RlGUIuDxQt9v+f3a/x0wVS0YK 979U3nKV17ZgdlV+WaVNYfi+SSf/gu6ZdKsIhx7+mDEYun7BHAmy6jl9K5P4tQ/OpPIJ 8QhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LRrjgaAc; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 2-20020ac85942000000b002f911a19e4fsi10086205qtz.35.2022.06.07.15.48.13 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:48:13 -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; dkim=pass header.i=@linaro.org header.s=google header.b=LRrjgaAc; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:41040 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhzg-0005jj-Uc for patch@linaro.org; Tue, 07 Jun 2022 18:48:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40110) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg95-0005hG-UT for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:46796) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg8z-0001oq-7a for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:45 -0400 Received: by mail-pl1-x630.google.com with SMTP id d13so167711plh.13 for ; Tue, 07 Jun 2022 13:49:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=HU5FIL8krVKmFqQext3ojwIXl0oRCXQ5TpFvX+W81lE=; b=LRrjgaAcsdNIRTmBwO4RtkSOy/RZWYBltUq3bHMUT6RE2py6CB0Ya9BFR+Wd0Lw2h/ hoxUjL2nWMGRX2369rNzDihgwDuSR1xNxRLu9NHnOUQgeh+PdYrME/lPeQhv/iQnj7Y/ CYIJeHLFyuYtyg59GG5e/11na38Hvy5pAQ65Uo97SdeO05yoql6EmuK2wmma3CrcthMz kGGqKV3oWzFUsB97JxY29pN0ZpZ01yWyz8DFn9GlpaN5dZxoceiu2KO0HbGxJ4gp6Q3q OoeEIoimZGa7bpjpIJS5WeBkNe5cj00EjxhzWYapAianK3dIowH1l4S+roI7Q+D9AjOC piLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HU5FIL8krVKmFqQext3ojwIXl0oRCXQ5TpFvX+W81lE=; b=nYnhYU8lvT08M0moqKFos5/5yX+N3pJv1Gx06C8Fx1aTr8lP1Ih4ltptLs523HSqRj 0jup383wBuwQEe+KHThg3sh7xK+J87+Yrw2HqEqjHciCMsL15Lvwecdqbvvpv5kLxB2k AG3NziARGKxXBXqfa2XZ2INQE0rk+gx3mzW3Pv6WmLsrbvVf7zOTMtkURSzsrU+TBye1 jVEfVD+/7aC/jGnsEEoBb6j2WAhRysUMWg9bcG9dBq8u7B3PYl2eoY/sapSW6Wos1rHw lAShvA1Gxcjy0RIsEqz/BoJTV3mIVTCY5o91Y+PeG934BScdH+sq7I+Khs4yHFdvJSJr Fn2g== X-Gm-Message-State: AOAM531ppROqXDdTOoODZ11W+M8N2CNpgZClkCvwqfP8HxtGMVncbQlT j+qYBhKxCQWPwxoJ5LHURmnyT+MI5qZ2aA== X-Received: by 2002:a17:90a:930b:b0:1bf:ac1f:6585 with SMTP id p11-20020a17090a930b00b001bfac1f6585mr33687030pjo.88.1654634978154; Tue, 07 Jun 2022 13:49:38 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 43/53] semihosting: Expand qemu_semihosting_console_inc to read Date: Tue, 7 Jun 2022 13:45:47 -0700 Message-Id: <20220607204557.658541-44-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Allow more than one character to be read at one time. Will be used by m68k and nios2 semihosting for stdio. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/console.h | 12 +++++++----- linux-user/semihost.c | 10 ++++++---- semihosting/arm-compat-semi.c | 11 +++++++++-- semihosting/console.c | 16 ++++++++++++---- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index 27f8e9ae2e..39dbf1b062 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -38,19 +38,21 @@ int qemu_semihosting_console_outs(CPUArchState *env, target_ulong s); void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); /** - * qemu_semihosting_console_inc: + * qemu_semihosting_console_read: * @cs: CPUState + * @buf: host buffer + * @len: buffer size * - * Receive single character from debug console. As this call may block - * if no data is available we suspend the CPU and will re-execute the + * Receive at least one character from debug console. As this call may + * block if no data is available we suspend the CPU and will re-execute the * instruction when data is there. Therefore two conditions must be met: * * - CPUState is synchronized before calling this function * - pc is only updated once the character is successfully returned * - * Returns: character read OR cpu_loop_exit! + * Returns: number of characters read, OR cpu_loop_exit! */ -target_ulong qemu_semihosting_console_inc(CPUState *cs); +int qemu_semihosting_console_read(CPUState *cs, void *buf, int len); /** * qemu_semihosting_log_out: diff --git a/linux-user/semihost.c b/linux-user/semihost.c index f14c6ae21d..2029fb674c 100644 --- a/linux-user/semihost.c +++ b/linux-user/semihost.c @@ -56,21 +56,23 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong addr) * program is expecting more normal behaviour. This is slow but * nothing using semihosting console reading is expecting to be fast. */ -target_ulong qemu_semihosting_console_inc(CPUState *cs) +int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) { - uint8_t c; + int ret; struct termios old_tio, new_tio; /* Disable line-buffering and echo */ tcgetattr(STDIN_FILENO, &old_tio); new_tio = old_tio; new_tio.c_lflag &= (~ICANON & ~ECHO); + new_tio.c_cc[VMIN] = 1; + new_tio.c_cc[VTIME] = 0; tcsetattr(STDIN_FILENO, TCSANOW, &new_tio); - c = getchar(); + ret = fread(buf, 1, len, stdin); /* restore config */ tcsetattr(STDIN_FILENO, TCSANOW, &old_tio); - return (target_ulong) c; + return ret; } diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index e7de52d042..20e99cdcc0 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -427,8 +427,15 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_READC: - ret = qemu_semihosting_console_inc(cs); - common_semi_set_ret(cs, ret); + { + uint8_t ch; + int ret = qemu_semihosting_console_read(cs, &ch, 1); + if (ret == 1) { + common_semi_cb(cs, ch, 0); + } else { + common_semi_cb(cs, -1, EIO); + } + } break; case TARGET_SYS_ISERROR: diff --git a/semihosting/console.c b/semihosting/console.c index 7b896fe43b..df618a28a4 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -144,12 +144,14 @@ static void console_read(void *opaque, const uint8_t *buf, int size) c->sleeping_cpus = NULL; } -target_ulong qemu_semihosting_console_inc(CPUState *cs) +int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) { - uint8_t ch; SemihostingConsole *c = &console; + int ret = 0; g_assert(qemu_mutex_iothread_locked()); + + /* Block if the fifo is completely empty. */ if (fifo8_is_empty(&c->fifo)) { c->sleeping_cpus = g_slist_prepend(c->sleeping_cpus, cs); cs->halted = 1; @@ -157,8 +159,14 @@ target_ulong qemu_semihosting_console_inc(CPUState *cs) cpu_loop_exit(cs); /* never returns */ } - ch = fifo8_pop(&c->fifo); - return (target_ulong) ch; + + /* Read until buffer full or fifo exhausted. */ + do { + *(char *)(buf + ret) = fifo8_pop(&c->fifo); + ret++; + } while (ret < len && !fifo8_is_empty(&c->fifo)); + + return ret; } void qemu_semihosting_console_init(void) From patchwork Tue Jun 7 20:45:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579431 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5576914max; Tue, 7 Jun 2022 15:41:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxcC8g7lAsp5FAGnSNKMXYPPXYT7NXbzR7xO443VjBTA94/gdkrs/7t5J9Uh3ktP0JBUh4e X-Received: by 2002:a05:620a:2950:b0:6a3:a838:ad70 with SMTP id n16-20020a05620a295000b006a3a838ad70mr21941714qkp.14.1654641692126; Tue, 07 Jun 2022 15:41:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641692; cv=none; d=google.com; s=arc-20160816; b=jq/DxFuDl4dh9+rL4UeYKt/1nCUy4LkmMutCo13coyW4dRznBeu7j2uWj94AmYXQ4Y J0sep947oMyW4tdb0FbdoYzC+yXoNDUsbx8NGqD9Bhs6Dm88o0Ubq+VesBDaLzN2FI4Y PVbMV0t9LLLR/QoKkrT9o9cip8r4iCT+yYxg3zAk3WydrFp6kgs1AL2yjhyrOp+gTrvD MA6bAfUz5MCM+VPXCH8DsGX2NUhsFcvica5Jq8c0RQ/BMdI1A2Z9I3RBptGb4t9XjBTW +3pJZpJpUrhW8PLNyfWbDd89lZP+duOiVmL41MBcNj8KxK0fcWDB+iwpgHvQQ8kyBzgJ xkCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=j01lT8Q4E68jFuT4Pz7GQEcDH7i1+c/TQbDUhFVhsPY=; b=OIunvX5X8LJkshR7MLyYmcFn8KxP2biCRACTRmKPzVl7wNEEVXgjJA2aQIhC+MR4D+ 1x5DTHd4Gi04fkr0puyg7U40WJuNfhYbsVX0ntkZXnvcjgK7GacwoPoln2F77xCpxFT0 +xUF/wUJDuNoCOyxhXIs2iQHEN8ZqVt+r8w8INtIiQJ5d9rQ55u4ftA6kVO6T/LPtjs0 YonN1+kpnYQO/f61Tq+odsWWCwt9pMZW+lBAh4JhCKkSqy+PHKMttDg7k9UHXILLfORa +7lc2Ttn4DeiDEapqqvsWtemnt8ZP54mmursZLflhEFcBA3N+wcJTXeS6cTGx2/tP8Aa xQiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=bVnBSiYK; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id x8-20020a05620a01e800b006a69637f15esi652763qkn.433.2022.06.07.15.41.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:41:32 -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; dkim=pass header.i=@linaro.org header.s=google header.b=bVnBSiYK; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:52830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhtD-0002u3-Mb for patch@linaro.org; Tue, 07 Jun 2022 18:41:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40188) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg9A-0005wq-5r for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:52 -0400 Received: from mail-vk1-xa2b.google.com ([2607:f8b0:4864:20::a2b]:41520) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg98-0001rE-8Q for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:51 -0400 Received: by mail-vk1-xa2b.google.com with SMTP id q186so8116786vkh.8 for ; Tue, 07 Jun 2022 13:49:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=j01lT8Q4E68jFuT4Pz7GQEcDH7i1+c/TQbDUhFVhsPY=; b=bVnBSiYKKn0qVclhEAwUrTuszyxAR3S1oqdm027yjHJW7eqRcCguQNYeScigg8Q8i9 jLJR8opD43WeyLVnHiRsYRXLxVpJqaIiZ7knRv5Vsea+m82HenGKXUKHpZuCoU1KYWRH 0u2CbDPGFQi9beOhFNdNCzNLMk5qD8qmpje1XUhMvnH+gKuvUYYr+LehQNsr+1PVGbWJ Tlrs5cUSuSWqPMGoJXD5M8taObWWXEJOp/XWX5oh+DDfOOI55ZaXV5CHfQzNm8t0cfNU higFcECfZiqD3PxKk0aegoKN2rlml6exIgjEG5tuWJhWwDRfuk0Y+85S+qJca1e13heo ZILw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=j01lT8Q4E68jFuT4Pz7GQEcDH7i1+c/TQbDUhFVhsPY=; b=Fpu0fsQGKv45UybFLSZuWPJXMZuxk7W+Emd+wgv/4he3Zw26xGXeXzR5QQPEZLBiX/ QDgfeNPRBTVuOhcDbPmDvE2MwYquqpsh5pquE0regDFajZhuHi9qjk/8fSDk3P8dGRmY oorSDWgJxWq7DX1O9AOSs6EsTK9k7Q6tRfBDboII/U7cT7wPS9gL+zZfscmcdn/5Q5pZ 8GRd13MD6NhJVOswT2Px/ZcDBcGDVMUvSRAGcfct1wvAyqfk1Ytzz46j+dVw4N2vp8j7 Y+URnB61KiMJRqpqBk1G1EB+zhhrN03YVfjOkVNYHJkqg9lkDTG5SWlbyFAu7GkrSPEN j8RA== X-Gm-Message-State: AOAM532NMR7gUphZk5u/lERusAfqmon1YJwlq8gqxEmiK2/VObI2YG8m pFpNG1SSyEZwXoYfLDwTrJ+YhFMM6T5pug== X-Received: by 2002:a17:902:c941:b0:164:14cb:ce5f with SMTP id i1-20020a170902c94100b0016414cbce5fmr30097651pla.127.1654634978870; Tue, 07 Jun 2022 13:49:38 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 44/53] semihosting: Cleanup chardev init Date: Tue, 7 Jun 2022 13:45:48 -0700 Message-Id: <20220607204557.658541-45-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::a2b; envelope-from=richard.henderson@linaro.org; helo=mail-vk1-xa2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Rename qemu_semihosting_connect_chardevs to qemu_semihosting_chardev_init; pass the result directly to qemu_semihosting_console_init. Store the chardev in SemihostingConsole instead of SemihostingConfig, which lets us drop semihosting_get_chardev. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/semihost.h | 13 ++----------- semihosting/config.c | 17 +++++++---------- semihosting/console.c | 31 +++++++++++++++---------------- softmmu/vl.c | 3 +-- stubs/semihost.c | 6 +----- 5 files changed, 26 insertions(+), 44 deletions(-) diff --git a/include/semihosting/semihost.h b/include/semihosting/semihost.h index 0c55ade3ac..5b36a76f08 100644 --- a/include/semihosting/semihost.h +++ b/include/semihosting/semihost.h @@ -51,14 +51,6 @@ static inline const char *semihosting_get_cmdline(void) { return NULL; } - -static inline Chardev *semihosting_get_chardev(void) -{ - return NULL; -} -static inline void qemu_semihosting_console_init(void) -{ -} #else /* !CONFIG_USER_ONLY */ bool semihosting_enabled(void); SemihostingTarget semihosting_get_target(void); @@ -66,12 +58,11 @@ const char *semihosting_get_arg(int i); int semihosting_get_argc(void); const char *semihosting_get_cmdline(void); void semihosting_arg_fallback(const char *file, const char *cmd); -Chardev *semihosting_get_chardev(void); /* for vl.c hooks */ void qemu_semihosting_enable(void); int qemu_semihosting_config_options(const char *opt); -void qemu_semihosting_connect_chardevs(void); -void qemu_semihosting_console_init(void); +void qemu_semihosting_chardev_init(void); +void qemu_semihosting_console_init(Chardev *); #endif /* CONFIG_USER_ONLY */ #endif /* SEMIHOST_H */ diff --git a/semihosting/config.c b/semihosting/config.c index 50d82108e6..4bca769fad 100644 --- a/semihosting/config.c +++ b/semihosting/config.c @@ -50,7 +50,6 @@ QemuOptsList qemu_semihosting_config_opts = { typedef struct SemihostingConfig { bool enabled; SemihostingTarget target; - Chardev *chardev; char **argv; int argc; const char *cmdline; /* concatenated argv */ @@ -121,11 +120,6 @@ void semihosting_arg_fallback(const char *file, const char *cmd) } } -Chardev *semihosting_get_chardev(void) -{ - return semihosting.chardev; -} - void qemu_semihosting_enable(void) { semihosting.enabled = true; @@ -171,16 +165,19 @@ int qemu_semihosting_config_options(const char *optarg) return 0; } -void qemu_semihosting_connect_chardevs(void) +/* We had to defer this until chardevs were created */ +void qemu_semihosting_chardev_init(void) { - /* We had to defer this until chardevs were created */ + Chardev *chr = NULL; + if (semihost_chardev) { - Chardev *chr = qemu_chr_find(semihost_chardev); + chr = qemu_chr_find(semihost_chardev); if (chr == NULL) { error_report("semihosting chardev '%s' not found", semihost_chardev); exit(1); } - semihosting.chardev = chr; } + + qemu_semihosting_console_init(chr); } diff --git a/semihosting/console.c b/semihosting/console.c index df618a28a4..4088192842 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -27,11 +27,21 @@ #include "qapi/error.h" #include "qemu/fifo8.h" +/* Access to this structure is protected by the BQL */ +typedef struct SemihostingConsole { + CharBackend backend; + Chardev *chr; + GSList *sleeping_cpus; + bool got; + Fifo8 fifo; +} SemihostingConsole; + +static SemihostingConsole console; + int qemu_semihosting_log_out(const char *s, int len) { - Chardev *chardev = semihosting_get_chardev(); - if (chardev) { - return qemu_chr_write_all(chardev, (uint8_t *) s, len); + if (console.chr) { + return qemu_chr_write_all(console.chr, (uint8_t *) s, len); } else { return write(STDERR_FILENO, s, len); } @@ -106,16 +116,6 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong addr) #define FIFO_SIZE 1024 -/* Access to this structure is protected by the BQL */ -typedef struct SemihostingConsole { - CharBackend backend; - GSList *sleeping_cpus; - bool got; - Fifo8 fifo; -} SemihostingConsole; - -static SemihostingConsole console; - static int console_can_read(void *opaque) { SemihostingConsole *c = opaque; @@ -169,10 +169,9 @@ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) return ret; } -void qemu_semihosting_console_init(void) +void qemu_semihosting_console_init(Chardev *chr) { - Chardev *chr = semihosting_get_chardev(); - + console.chr = chr; if (chr) { fifo8_create(&console.fifo, FIFO_SIZE); qemu_chr_fe_init(&console.backend, chr, &error_abort); diff --git a/softmmu/vl.c b/softmmu/vl.c index 4c1e94b00e..83e2af4eab 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -1944,8 +1944,7 @@ static void qemu_create_late_backends(void) exit(1); /* now chardevs have been created we may have semihosting to connect */ - qemu_semihosting_connect_chardevs(); - qemu_semihosting_console_init(); + qemu_semihosting_chardev_init(); } static void cxl_set_opts(void) diff --git a/stubs/semihost.c b/stubs/semihost.c index 4bf2cf71b9..f486651afb 100644 --- a/stubs/semihost.c +++ b/stubs/semihost.c @@ -65,10 +65,6 @@ void semihosting_arg_fallback(const char *file, const char *cmd) { } -void qemu_semihosting_connect_chardevs(void) -{ -} - -void qemu_semihosting_console_init(void) +void qemu_semihosting_chardev_init(void) { } From patchwork Tue Jun 7 20:45:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579434 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5578522max; Tue, 7 Jun 2022 15:44:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzsduej6JtOHS2Qu77x9drvsenI5RSZlAj9in1MkzJo0au72ejdxI4gMADVAS8AGeKjDwSq X-Received: by 2002:a05:6214:2aa4:b0:46b:9672:e4cc with SMTP id js4-20020a0562142aa400b0046b9672e4ccmr10422436qvb.20.1654641877399; Tue, 07 Jun 2022 15:44:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641877; cv=none; d=google.com; s=arc-20160816; b=LSSThkud8EbQh5KhfVC9OKwd0S0sv2LthYj8SYVee8Z0+P3vqflEVmIUyFRzKS2qD3 BugAvJBEoh6C1c3AGEaogPWd+b/JLVe1QYvywF+BynTxo0oS0p7c9ghBO51AtNMAgfM+ S0sg9NdM+1kMThAlw8NGUD1RtCEOFS3Pud2JAyFYt0A9lT91JmG2PlSTkjWcC2jGBdei NRq3ObbKS1uaYA2xWB/8rPgtOUR0am343R+K8ygRcy5fEf7+cdtn4t18TbLkviuACtdP Wbh0ViVwmV46Ct8Upltg78pK3qIsF5Yj8w28E8XEFXbiOgwJtydbM2omQ04Rfw7K+rWT Ltlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=U2oK2ipOEqoaAfOulrRTtOQB2zK3TVTPXCClS/WGFgs=; b=x4Qp4Lo/1laMNpKcwGcdNAoyuVzR42FRQoFp1H74H1gYs81qHiqSFUYmAdL1Ka2DZg tsMtQQK5DLeJub1/Z45qG+DOarrOeXdoZZkSzF0G4AETPnv4igQKocbHepjg/Qk7ciGX Z4yv4SEZyVVXWSr50pM9u06Nw6TNHSTdvLABmTi1rrIapkGYSvGdLVH5btmaLulIYKym 5lbJPYJ8mgMF8A0wlTfXNTkUhlET8G4l1hyGzZDW8KrdiqC/+892dwX4aqVhP/yupcV+ 2rN10j8PS7zNOlcf4HEXKFRKtxZPvDJ912C1RPq1y0Qm2UEUrKM8MlRZ2W3W7JAlNHlh JW5g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=F0BOKFec; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id o17-20020a05622a139100b00304eacb2c87si4748559qtk.769.2022.06.07.15.44.37 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:44:37 -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; dkim=pass header.i=@linaro.org header.s=google header.b=F0BOKFec; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:60486 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhwC-0008BC-VR for patch@linaro.org; Tue, 07 Jun 2022 18:44:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg95-0005hI-U5 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:38714) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg90-0001ou-5o for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:45 -0400 Received: by mail-pg1-x535.google.com with SMTP id 123so6623311pgb.5 for ; Tue, 07 Jun 2022 13:49:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=U2oK2ipOEqoaAfOulrRTtOQB2zK3TVTPXCClS/WGFgs=; b=F0BOKFecdt+2QKnW2z307Udrhov0h9WFL3JJonmPhgnMa4lhU8tFTKBmUr2t2b0UIp ePi4F2pFvomjCLLkYd91SS9zaQUI3+GgLIUqYuNbofcmkldbKKhcvQ22fPRChOGtiMWd usZM+OKDhLMQ2S3d3wEu7B/6Rp7mvsW8sTSd/TY8JtkOp8tjZWrvgvsXC10jPS4hFlj9 Y+xxoaa53bHEGaFqFXUDx4RJNt8qO98N4Alpy9dXllHb341f4Z2zKQHd/EsCQ62D2gK2 Ysui85VtVnMi0oE8E/nTJe52NZUOQ3OqW3lsqhoseGwlVTmsUq8+2YZkB8p2kRYEqgzP Pw7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=U2oK2ipOEqoaAfOulrRTtOQB2zK3TVTPXCClS/WGFgs=; b=UTCYwMpCLuGxRqE0XslEcWXj6bIKLx3rGpu47O1IUFgTpvgm4MSQDHjyK5M94g5mSd ZYyEvnfN7FJXY+1JyNmOQZTAk3vG+zxYkkeMr394qpR2J2+RCbtnkfWk2AnYLi/lpPSQ BDKxqdBCYot5BXD7vqFeRhHXILt0f0XB98VD23XNpMoijvoIcTSVZRwoCMPqmsdCW73t jJeGeSovGbpU8kstrqDTvKN23rIxMwxVWVcA6ra/OFNgv9d8VqLRsrua4jpnvMnu/yFC /5K8VGIhFw+d5tYNVHqBbyrsbSrMCjKbie2bTdqEz9twvFUbBRTvTs1hy/w7pQqeF8he EUBg== X-Gm-Message-State: AOAM532RnEF7NV/w5uv/6fjVtn6lKURRwnHxxwltT1/Y3FGRzl/peTdP ECZ4YGqrsA0cICGr6q5jtEJWR8tooHKTlg== X-Received: by 2002:a62:e116:0:b0:51b:c452:47e6 with SMTP id q22-20020a62e116000000b0051bc45247e6mr30680011pfh.25.1654634979605; Tue, 07 Jun 2022 13:49:39 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 45/53] semihosting: Create qemu_semihosting_console_write Date: Tue, 7 Jun 2022 13:45:49 -0700 Message-Id: <20220607204557.658541-46-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Will replace qemu_semihosting_console_{outs,outc}, but we need more plumbing first. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/console.h | 12 ++++++++++++ linux-user/semihost.c | 5 +++++ semihosting/console.c | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index 39dbf1b062..6994f23c82 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -54,6 +54,18 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); */ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len); +/** + * qemu_semihosting_console_write: + * @buf: host buffer + * @len: buffer size + * + * Write len bytes from buf to the debug console. + * + * Returns: number of bytes written -- this should only ever be short + * on some sort of i/o error. + */ +int qemu_semihosting_console_write(void *buf, int len); + /** * qemu_semihosting_log_out: * @s: pointer to string diff --git a/linux-user/semihost.c b/linux-user/semihost.c index 2029fb674c..871edf993a 100644 --- a/linux-user/semihost.c +++ b/linux-user/semihost.c @@ -76,3 +76,8 @@ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) return ret; } + +int qemu_semihosting_console_write(void *buf, int len) +{ + return fwrite(buf, 1, len, stderr); +} diff --git a/semihosting/console.c b/semihosting/console.c index 4088192842..b6a342744d 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -169,6 +169,15 @@ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) return ret; } +int qemu_semihosting_console_write(void *buf, int len) +{ + if (console.chr) { + return qemu_chr_write_all(console.chr, (uint8_t *)buf, len); + } else { + return fwrite(buf, 1, len, stderr); + } +} + void qemu_semihosting_console_init(Chardev *chr) { console.chr = chr; From patchwork Tue Jun 7 20:45:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579438 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5582165max; Tue, 7 Jun 2022 15:50:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxbFRu9hTuTMwuI+afDEfOyyaQ24GaFZiieChoXHc6QYbb9UWlQpZn7lFazi3EoYF3rWCG+ X-Received: by 2002:a05:622a:164a:b0:2fb:870e:f931 with SMTP id y10-20020a05622a164a00b002fb870ef931mr25205268qtj.17.1654642234751; Tue, 07 Jun 2022 15:50:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642234; cv=none; d=google.com; s=arc-20160816; b=FSws9TKZ7G3r/0TICXZjAjZIA5ULnD7En4/4z64RRl3cW3JXCOiTOM+JZm5pLeOsl8 aCZrxlXl0P2ARggrIH2CTRyBJ/YbwZxlq3hDFDQhJDxy1vQAXSNvuUtyVtA8rfjwEvx7 p6FdCrydrZdw5opRASo7FdjLVC3midbexRTpKD4vJiqOxJsVGQ5wAPNLMz26KaIXsym4 ZFBDzBnF3/ygc3poc+TftFo1JVlHrH5mK81ppZBuDkchRIKf1uGFyRyKddt+Gm40zP7Y TeuGxj9LacFkD19cQ3lEmM9L6xQQ2XJdP6Kui60X0NrWwnBLsQ/fqEIF4vT7bPW33jUe 5jwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=qTti2vBBVQlW3s6Vv39qkRBctywHeP3Orf0ls4LRzrE=; b=R0cE6BMlIZbf7Nj8KNN0p9B1znLMawyFAIaoagpj65QITAa6n4ab2BAHxMxe+6YuKz Jk9Ps+NPZH8yrAyYWJ5wn5ABO5NqVuN7/YAPigCD+TUlAbkK1jC5j3PDA4e6QjHW72Pf V934f+SlbAN+6JWixkzZccK9Kdb+9OlA9QLSA+qWrtiXdC6Gb7kZv0hwxW7kRtQF+pFd TuL3GyHUmBKuQGZFS6va1bdSH9YmigUPmXZ/LOKAFrBJSKi7G4tbyqFbDDj3h0PgMxqM ZcSYPz92XVp1I3MnHYSyLFcem0ASdb5BGhDYK7Ymqs+3e6plh3E4pl5/bjOVZcYoxOXB Gv/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SIwtjF7p; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id i142-20020a379f94000000b006a6a24b3398si6966116qke.157.2022.06.07.15.50.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:50:34 -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; dkim=pass header.i=@linaro.org header.s=google header.b=SIwtjF7p; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:45152 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi1y-0008Vr-AK for patch@linaro.org; Tue, 07 Jun 2022 18:50:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40106) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg95-0005h8-U1 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:40933) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg92-0001p8-8U for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:46 -0400 Received: by mail-pl1-x629.google.com with SMTP id i1so15824990plg.7 for ; Tue, 07 Jun 2022 13:49:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=qTti2vBBVQlW3s6Vv39qkRBctywHeP3Orf0ls4LRzrE=; b=SIwtjF7py6wC5mJhrkBKhBPo4L+Ei6kw0Mc1JQeIpEoUgZzWXR4ThGv31KQCKu8Q6N CUf8SuWFDifBVE2h7232Rt3ZiUwk+DNTKeoPPAw9FmbNQlP2UVY1UbKQxA/3gRtsEMtQ nntge6Yf6EqCdR9zn4xRtYr/gPJ+Njd+BaEZVyPleys4JgXKmLICmzlq/el6Cnrnn8Wv QcOYEPb+8eaWF3d2k/ah9lup/px3U21hCfzm6Q33p1ZubRHj1os+i2NJUMMv2U4lx/I6 yghZyv7HFTmW7/YDJOCgo+n/g9gMHQHoRu4ZZ5ZIjVZWiIiQKCiVNkGL8rFmgSUAtOo8 5XYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qTti2vBBVQlW3s6Vv39qkRBctywHeP3Orf0ls4LRzrE=; b=OE45AgMfDRtle3SQFu6zaEuUuY7eNd+mQZlQCdIeDSYq6BZcDEJya7p3n/Ie+Jj6JI ViV7hsGuOEEUYQ9/ewMqDR1cNc7WV2FlDxURavcpC9EFZ/6jd4SI/t5v4NvCuf+0wzvv kH+7a37zKejvjO8RJqGiGPwgOEKnvMULoECbo347e4c0ly7SGmwAXWVk3qh8eGs4BvhF uEQEy/tvY6JE+5g1MupZcvN/7sQR3ycL4LMEtq92Vh61kJUjL2nOVkw2gsXPJ/FqeGXe OZJgTeHNAOCg3hSjabNs90CQOQeG4XKvXmoj9/cqoV3ObVo1UFWSNosY3F96uEKmzt5r m+VA== X-Gm-Message-State: AOAM530v5UpDXY6QCZAWPYLgXSUKFtpm8NK5BtF2wXBqWG3bJrYA8JEx uepHLtFN4G4jWbj3k8ptsD6C9CEPQcwtpw== X-Received: by 2002:a17:902:f690:b0:163:f8eb:3741 with SMTP id l16-20020a170902f69000b00163f8eb3741mr30512588plg.112.1654634980345; Tue, 07 Jun 2022 13:49:40 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 46/53] semihosting: Add GuestFDConsole Date: Tue, 7 Jun 2022 13:45:50 -0700 Message-Id: <20220607204557.658541-47-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Add a GuestFDType for connecting to the semihosting console. Hook up to read, write, isatty, and fstat syscalls. Note that the arm-specific syscall flen cannot be applied to the console, because the console is not a descriptor exposed to the guest. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel Reviewed-by: Alex Bennée --- include/semihosting/guestfd.h | 7 ++-- semihosting/syscalls.c | 68 +++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/include/semihosting/guestfd.h b/include/semihosting/guestfd.h index ef268abe85..a7ea1041ea 100644 --- a/include/semihosting/guestfd.h +++ b/include/semihosting/guestfd.h @@ -13,9 +13,10 @@ typedef enum GuestFDType { GuestFDUnused = 0, - GuestFDHost = 1, - GuestFDGDB = 2, - GuestFDStatic = 3, + GuestFDHost, + GuestFDGDB, + GuestFDStatic, + GuestFDConsole, } GuestFDType; /* diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 13a9bdeda6..9e499b1751 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -10,6 +10,7 @@ #include "exec/gdbstub.h" #include "semihosting/guestfd.h" #include "semihosting/syscalls.h" +#include "semihosting/console.h" #ifdef CONFIG_USER_ONLY #include "qemu.h" #else @@ -577,6 +578,56 @@ static void staticfile_flen(CPUState *cs, gdb_syscall_complete_cb complete, complete(cs, gf->staticfile.len, 0); } +/* + * Console semihosting syscall implementations. + */ + +static void console_read(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char *ptr; + int ret; + + ptr = lock_user(VERIFY_WRITE, buf, len, 0); + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + ret = qemu_semihosting_console_read(cs, ptr, len); + complete(cs, ret, 0); + unlock_user(ptr, buf, ret); +} + +static void console_write(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + char *ptr = lock_user(VERIFY_READ, buf, len, 1); + int ret; + + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + ret = qemu_semihosting_console_write(ptr, len); + complete(cs, ret ? ret : -1, ret ? 0 : EIO); + unlock_user(ptr, buf, ret); +} + +static void console_fstat(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong addr) +{ + static const struct stat tty_buf = { + .st_mode = 020666, /* S_IFCHR, ugo+rw */ + .st_rdev = 5, /* makedev(5, 0) -- linux /dev/tty */ + }; + int ret; + + ret = copy_stat_to_user(cs, addr, &tty_buf); + complete(cs, ret ? -1 : 0, ret ? -ret : 0); +} + /* * Syscall entry points. */ @@ -608,6 +659,7 @@ void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, int fd) host_close(cs, complete, gf); break; case GuestFDStatic: + case GuestFDConsole: complete(cs, 0, 0); break; default: @@ -637,6 +689,9 @@ void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete, case GuestFDStatic: staticfile_read(cs, complete, gf, buf, len); break; + case GuestFDConsole: + console_read(cs, complete, gf, buf, len); + break; default: g_assert_not_reached(); } @@ -672,6 +727,9 @@ void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete, case GuestFDHost: host_write(cs, complete, gf, buf, len); break; + case GuestFDConsole: + console_write(cs, complete, gf, buf, len); + break; case GuestFDStatic: /* Static files are never open for writing: EBADF. */ complete(cs, -1, EBADF); @@ -712,6 +770,9 @@ void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete, case GuestFDStatic: staticfile_lseek(cs, complete, gf, off, gdb_whence); break; + case GuestFDConsole: + complete(cs, -1, ESPIPE); + break; default: g_assert_not_reached(); } @@ -735,6 +796,9 @@ void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete, int fd) case GuestFDStatic: complete(cs, 0, ENOTTY); break; + case GuestFDConsole: + complete(cs, 1, 0); + break; default: g_assert_not_reached(); } @@ -760,6 +824,7 @@ void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb, case GuestFDStatic: staticfile_flen(cs, flen_cb, gf); break; + case GuestFDConsole: default: g_assert_not_reached(); } @@ -781,6 +846,9 @@ void semihost_sys_fstat(CPUState *cs, gdb_syscall_complete_cb complete, case GuestFDHost: host_fstat(cs, complete, gf, addr); break; + case GuestFDConsole: + console_fstat(cs, complete, gf, addr); + break; case GuestFDStatic: default: g_assert_not_reached(); From patchwork Tue Jun 7 20:45:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579442 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5586144max; Tue, 7 Jun 2022 15:56:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx0zS4/KYEmGSdL9E7AmzUuIA0Z4mnQU6/upyKMyNEpH0NrXX3d7/kJDdNgf27HcaUm1Sej X-Received: by 2002:a05:620a:808d:b0:6a6:d43f:afd7 with SMTP id ef13-20020a05620a808d00b006a6d43fafd7mr4817206qkb.524.1654642602343; Tue, 07 Jun 2022 15:56:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642602; cv=none; d=google.com; s=arc-20160816; b=rbZWhZKfBu1O693RyYVFzbtgZj6h8vOPWhwCcepsXvmE+cQDs/TYm+SGvAGcZBRSou jdVYk0K4tarm3xxUoAJDs0TIoPvxgVyUpn1RS+YgzWIgh3cwj5tEpf+ELeuhzRaB4cCz tfM9Agu+ynYFrHh20lglOng+zmgXJENgmTEDIWlGf8rUVUhBU2918mnOoUmNQIMdvHAz MtYMZwjmNQHU0qj4/XdbyOy9hE2vnLvs1T12AmKk3FagwQexxhzNBZ/tjpSpwWsu3GAz Gh/d34OHRBa9exNd/jHIR1B4TUrBn4PbGyjolkxZ/PxFUlQI94t4ZY1UAFhTw2V0iF/E aW0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=CcrGTfizkRrLSa06ezhMVx2XMPHTyyvaW4JTUUZulkg=; b=vsS4UmfT1bEl7UWYXk+S9CHFzHXSbYGYf2tCxo/vmlYHZhDNrx/kU6MIELrIoBKSmy fTsq5armxfxsPGKIILF+TQt8Rbr6kgaEjqdBqjdJcPxxZJVJedO0/w3B6E6mvc7lpavX K8ilsTWw/4td6c0bSVyuNfYXOMZ7MPu0SCAzPSjpvaLKlKNUA3RhqbVFbDb0RoM8oeDm TsTsuFu/bdlfRWPKL/LYsgWU6JpXxM06ssHIaPX7jUWeP65fhxfycwsTDAMEROsCejXG Vvjs5KJD+Ihj3J5FQ5OgBOXJ5A4/eRw9lMQIveCnt/xjoTeSDxaSlorwuLaJXTGIgz4I 34+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=P3EYHtNG; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id m3-20020a05620a24c300b006a6aec3beffsi6592428qkn.689.2022.06.07.15.56.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:56:42 -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; dkim=pass header.i=@linaro.org header.s=google header.b=P3EYHtNG; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:57620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi7p-0001Pg-N1 for patch@linaro.org; Tue, 07 Jun 2022 18:56:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg95-0005hN-VP for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:42733) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg92-0001pK-9o for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: by mail-pg1-x533.google.com with SMTP id d129so16973718pgc.9 for ; Tue, 07 Jun 2022 13:49:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=CcrGTfizkRrLSa06ezhMVx2XMPHTyyvaW4JTUUZulkg=; b=P3EYHtNGaNg4JRWut1ZcSK8ivjCJpAUzGuXjTN5nO/IwMJy4u582etxurm3kPjT2nt hIG9ZSVt5F0YUMIfvv97jLHQJ9Qs7apc0ttMpxa3PItnHMVBditTyAziCHwdCdI9Wy3j jAtMRx6mTa7ksOAA1QyWawLLnsm0uLzTWkB0xGmYcnfC3WYiNH6Ver4TPaSPTB2sTdO4 aHMrGkSssPdjtjCEhkbYtgAoLZ8GVDtki2pnx6T7S6qIBES88jRp4Cogph3blKXbpCwU hR5V/+WKvzVlih0uerXmuwm9tHcxDmHad+pN+iRdFDC7pFnsTWa4KaVA9lRay4tlOOzY eLqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CcrGTfizkRrLSa06ezhMVx2XMPHTyyvaW4JTUUZulkg=; b=kgnatKjnMTSWnN4VoHEilbe1Pzjw+9umLw1uhKCKvzjjS+vuX8TsWEDvapk0MwMXfa lDsk4Z5/oSgz0dm9D/s8WRPl7FUIxHK3fNk6WIszt9Uv0/+B0yr/DXRo3RQsLsYsJUz0 zLa4jdAIQ9a/oSUzTtMiIwO59AbFmVGzmTbbp30CNC0GXANvcWx6MRqki6Hl78DtJsa0 3NxULEge3X2xILsWQCups9VpjQPFl1JdBKbgPVf6UI94IG1NuQPV2vsNurrHoqyVEh6o IppaS85vQR7MS2N7KxD2MeUsyGLfuMF2NZppI/2U396R7Hso6lL2KN9xcBpCXtKAGXd6 SYfA== X-Gm-Message-State: AOAM530XzM5YP1arWZcWVKy8CoA/cNXVZUQpz3Xf5psy+pKL2w/fNxAa MQzSiDPMgoh4bP/b0NUmb8HBtrx2EH+88Q== X-Received: by 2002:a05:6a00:2244:b0:51b:b974:4294 with SMTP id i4-20020a056a00224400b0051bb9744294mr31323876pfu.67.1654634981291; Tue, 07 Jun 2022 13:49:41 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 47/53] semihosting: Create qemu_semihosting_guestfd_init Date: Tue, 7 Jun 2022 13:45:51 -0700 Message-Id: <20220607204557.658541-48-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" For arm-compat, initialize console_{in,out}_gf; otherwise, initialize stdio file descriptors. This will go some way to cleaning up arm-compat, and will allow other semihosting to use normal stdio. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel Reviewed-by: Alex Bennée --- include/semihosting/guestfd.h | 7 +++++ include/semihosting/semihost.h | 1 + linux-user/main.c | 9 ++++++ semihosting/console.c | 2 ++ semihosting/guestfd.c | 52 +++++++++++++++++++++++++++------- 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/include/semihosting/guestfd.h b/include/semihosting/guestfd.h index a7ea1041ea..3d426fedab 100644 --- a/include/semihosting/guestfd.h +++ b/include/semihosting/guestfd.h @@ -35,6 +35,13 @@ typedef struct GuestFD { }; } GuestFD; +/* + * For ARM semihosting, we have a separate structure for routing + * data for the console which is outside the guest fd address space. + */ +extern GuestFD console_in_gf; +extern GuestFD console_out_gf; + /** * alloc_guestfd: * diff --git a/include/semihosting/semihost.h b/include/semihosting/semihost.h index 5b36a76f08..93a3c21b44 100644 --- a/include/semihosting/semihost.h +++ b/include/semihosting/semihost.h @@ -64,5 +64,6 @@ int qemu_semihosting_config_options(const char *opt); void qemu_semihosting_chardev_init(void); void qemu_semihosting_console_init(Chardev *); #endif /* CONFIG_USER_ONLY */ +void qemu_semihosting_guestfd_init(void); #endif /* SEMIHOST_H */ diff --git a/linux-user/main.c b/linux-user/main.c index 651e32f5f2..e44bdb17b8 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -54,6 +54,10 @@ #include "loader.h" #include "user-mmap.h" +#ifdef CONFIG_SEMIHOSTING +#include "semihosting/semihost.h" +#endif + #ifndef AT_FLAGS_PRESERVE_ARGV0 #define AT_FLAGS_PRESERVE_ARGV0_BIT 0 #define AT_FLAGS_PRESERVE_ARGV0 (1 << AT_FLAGS_PRESERVE_ARGV0_BIT) @@ -906,6 +910,11 @@ int main(int argc, char **argv, char **envp) } gdb_handlesig(cpu, 0); } + +#ifdef CONFIG_SEMIHOSTING + qemu_semihosting_guestfd_init(); +#endif + cpu_loop(env); /* never exits */ return 0; diff --git a/semihosting/console.c b/semihosting/console.c index b6a342744d..677ec2b176 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -190,4 +190,6 @@ void qemu_semihosting_console_init(Chardev *chr) NULL, NULL, &console, NULL, true); } + + qemu_semihosting_guestfd_init(); } diff --git a/semihosting/guestfd.c b/semihosting/guestfd.c index e3122ebba9..b05c52f26f 100644 --- a/semihosting/guestfd.c +++ b/semihosting/guestfd.c @@ -10,15 +10,56 @@ #include "qemu/osdep.h" #include "exec/gdbstub.h" +#include "semihosting/semihost.h" #include "semihosting/guestfd.h" #ifdef CONFIG_USER_ONLY #include "qemu.h" #else #include "semihosting/softmmu-uaccess.h" +#include CONFIG_DEVICES #endif static GArray *guestfd_array; +#ifdef CONFIG_ARM_COMPATIBLE_SEMIHOSTING +GuestFD console_in_gf; +GuestFD console_out_gf; +#endif + +void qemu_semihosting_guestfd_init(void) +{ + /* New entries zero-initialized, i.e. type GuestFDUnused */ + guestfd_array = g_array_new(FALSE, TRUE, sizeof(GuestFD)); + +#ifdef CONFIG_ARM_COMPATIBLE_SEMIHOSTING + /* For ARM-compat, the console is in a separate namespace. */ + if (use_gdb_syscalls()) { + console_in_gf.type = GuestFDGDB; + console_in_gf.hostfd = 0; + console_out_gf.type = GuestFDGDB; + console_out_gf.hostfd = 2; + } else { + console_in_gf.type = GuestFDConsole; + console_out_gf.type = GuestFDConsole; + } +#else + /* Otherwise, the stdio file descriptors apply. */ + guestfd_array = g_array_set_size(guestfd_array, 3); +#ifndef CONFIG_USER_ONLY + if (!use_gdb_syscalls()) { + GuestFD *gf = &g_array_index(guestfd_array, GuestFD, 0); + gf[0].type = GuestFDConsole; + gf[1].type = GuestFDConsole; + gf[2].type = GuestFDConsole; + return; + } +#endif + associate_guestfd(0, 0); + associate_guestfd(1, 1); + associate_guestfd(2, 2); +#endif +} + /* * Allocate a new guest file descriptor and return it; if we * couldn't allocate a new fd then return -1. @@ -30,11 +71,6 @@ int alloc_guestfd(void) { guint i; - if (!guestfd_array) { - /* New entries zero-initialized, i.e. type GuestFDUnused */ - guestfd_array = g_array_new(FALSE, TRUE, sizeof(GuestFD)); - } - /* SYS_OPEN should return nonzero handle on success. Start guestfd from 1 */ for (i = 1; i < guestfd_array->len; i++) { GuestFD *gf = &g_array_index(guestfd_array, GuestFD, i); @@ -61,11 +97,7 @@ static void do_dealloc_guestfd(GuestFD *gf) */ static GuestFD *do_get_guestfd(int guestfd) { - if (!guestfd_array) { - return NULL; - } - - if (guestfd <= 0 || guestfd >= guestfd_array->len) { + if (guestfd < 0 || guestfd >= guestfd_array->len) { return NULL; } From patchwork Tue Jun 7 20:45:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579440 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5583505max; Tue, 7 Jun 2022 15:52:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwkZ/6mmKm6sioQYH/PM6V++xpM8xjt9b0ARB4f8BIPXBVOiYXk5Rggz1xveoAHE/H8U25P X-Received: by 2002:a05:620a:45ab:b0:6a6:ec33:47c2 with SMTP id bp43-20020a05620a45ab00b006a6ec3347c2mr3085436qkb.766.1654642358919; Tue, 07 Jun 2022 15:52:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642358; cv=none; d=google.com; s=arc-20160816; b=IYtFzG79rn2VrX8QZpSCaX9yq7GGVYaQmm63jw9xg5Z0Z3Kfyyg4LlJz4gdTY2Ys/T qZRItfQVY64QIO8rW9eTNQc+KcVi1RWugj/+pSJtNeZzOykxResAbgxitCI2VKHFfWqk ORaO1RPQzW08k/9xvXTi/ZnUmxMyjHi8EkBF8G3QHWoXIiFaj+3raAUQnKdaHHgjAfML JtmQ5g/9t5o9z5g4kH5KMUw/TvbEgjcfiLl/2ojgNdkfnbDrOHiDN3x5xbWFNoGaMWpL gbmXd/eBVLddQeXla/zszhpVPOM2+igXU4G25KAgVgvIADzpFIiwoYockTsUMsg7NYP8 PBMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=XuRf9bJf1hNLRNL4iGsT+A0xXkRPFyPz8HZJ2puRP7Q=; b=RzJ1nHPjpEg41YmRUDsbDFdCIA1sgUCsBs5EPccheoDjG+QFAyelnnUrR6d9RAnsbu xKinhnTc/RtMQaq90mAB70XzX5VesEMy75WT+sf8BRwZMAEkAmWGcFbBBCIP89TXfRMv l/EJSVZXHTfL4L6gAhwSzmuDYzc3EUUfrUxvTh/CF8Qfx1diOBlv6mcqvZJx67kIzTns EsXXON/E++FlxXPulUZVERD21yX/cNGHOmeYGOBnpI7q2CDOAagcoXhePV7z8xIQnDgf r12bfXxOiTrmhwpxTbayiqtyHvjRpx+8RYqSL8UJ+m19SZhLvRt3Ol5lz8+SCijkCZVK hFFg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=qekqq+Pq; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id e3-20020ac84e43000000b002fea6554f28si10512337qtw.653.2022.06.07.15.52.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:52:38 -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; dkim=pass header.i=@linaro.org header.s=google header.b=qekqq+Pq; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:49490 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi3y-0003R2-HL for patch@linaro.org; Tue, 07 Jun 2022 18:52:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40116) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg95-0005hO-Vs for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:48 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:42522) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg92-0001pQ-A8 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: by mail-pf1-x433.google.com with SMTP id 187so16522924pfu.9 for ; Tue, 07 Jun 2022 13:49:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=XuRf9bJf1hNLRNL4iGsT+A0xXkRPFyPz8HZJ2puRP7Q=; b=qekqq+PqXFkc5xBfMWWLfcwmRU6DjJUw9x9T12bxrBM8Bd7s+5Fvr5lewr8DNONU3J y+RuFJDt1fyMRPf7+qlUv1ETqBT4qU9FJDBZy9mp9bOLnFjkP1gjVqD2XaiD2Fn4D+DE 5EvbukDxu4WaKjGSV1+z2RMQ971F9xxiXTpLkNefEYvUdgSVt/bMHwhF9cOWM87Pguzr A/lyuO4yXl+fqmT7O7UKXUgkZ8Y7kNDxqzPCjMRnL+JdQDp/OOAD0zZczOXkYgbLoK2t MGr0Rsa98V5DcmZvdmx5Z9JlxmXk/ZrnSkNTdgZeggkskAWuvRHIgh8HjcfTHrd7NmQE g1tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XuRf9bJf1hNLRNL4iGsT+A0xXkRPFyPz8HZJ2puRP7Q=; b=nQY4SuK2zk8NBAQSgXvSm5CEFSQbtcMyyTuhO5DgQdHquAcha1G1U33fmRV2lRjcYG Ntj/V9OGhWAZOscMXDM5RxgEco1HXTYfWkY1GtfgizD9zgd4vi8RepRoBFhSwWzNjTTj w7l/l3ABRdQJubEahj3KzmvE+DtmkRIVyJaemVEFMSy2e7K3JfkAmGCUTbs9983qOZLS Z7urGchmRifjHV4dIUZHOehNonLOr70H0Elr9jGWnUTtKYwFh0n7BIou5lm8AuvjP3VC OkXtT3JVN2GoF1BGaCXBBHEN2rMRE0iNcJ6M7Ef+iA5S8NXIRXiNotTvYYKnyDSgwzsj Br/w== X-Gm-Message-State: AOAM5300yKrG5IJglDVDCtU8CE3vficNrV9wN72WGYCBkjcSEHiWB7jI 6xe+YNhRKsBGXCe9WWmPj7aNIAqBClLEMQ== X-Received: by 2002:a65:5188:0:b0:3fa:6081:7393 with SMTP id h8-20020a655188000000b003fa60817393mr26561690pgq.72.1654634982108; Tue, 07 Jun 2022 13:49:42 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 48/53] semihosting: Use console_in_gf for SYS_READC Date: Tue, 7 Jun 2022 13:45:52 -0700 Message-Id: <20220607204557.658541-49-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- semihosting/arm-compat-semi.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 20e99cdcc0..4c8932ad54 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -302,6 +302,22 @@ common_semi_flen_fstat_cb(CPUState *cs, uint64_t ret, int err) common_semi_cb(cs, ret, err); } +static void +common_semi_readc_cb(CPUState *cs, uint64_t ret, int err) +{ + if (!err) { + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + uint8_t ch; + + if (get_user_u8(ch, common_semi_stack_bottom(cs) - 1)) { + ret = -1, err = EFAULT; + } else { + ret = ch; + } + } + common_semi_cb(cs, ret, err); +} + #define SHFB_MAGIC_0 0x53 #define SHFB_MAGIC_1 0x48 #define SHFB_MAGIC_2 0x46 @@ -427,15 +443,8 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_READC: - { - uint8_t ch; - int ret = qemu_semihosting_console_read(cs, &ch, 1); - if (ret == 1) { - common_semi_cb(cs, ch, 0); - } else { - common_semi_cb(cs, -1, EIO); - } - } + semihost_sys_read_gf(cs, common_semi_readc_cb, &console_in_gf, + common_semi_stack_bottom(cs) - 1, 1); break; case TARGET_SYS_ISERROR: From patchwork Tue Jun 7 20:45:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579423 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5572353max; Tue, 7 Jun 2022 15:34:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4vv7BC1iLLrXKiy1nBBoooZ7Di0/lUoQ6GWkoVIdryBxjl2YqYeE2p+gSs4iduJIrJcea X-Received: by 2002:ac8:5805:0:b0:305:0:7b3d with SMTP id g5-20020ac85805000000b0030500007b3dmr1425824qtg.46.1654641297878; Tue, 07 Jun 2022 15:34:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641297; cv=none; d=google.com; s=arc-20160816; b=W4VgQbUwCcZuI8uPa5+rLCgdV/d0iiuVECSaenKy6GUJoHkNjXBzFqgZj9jjeWerdI 2w+xm/Ko6l9uSgP/UwSu2EWhyf1HBNAnS+hVxcvj1LTICdTDyodOIqJxAl6QhOcf1xjD DZTDOf56Ouc2MdmzGJx/v2uY3moUSpHIKs4Dp51eDAQt7gS2L9U81YNi4t1L1XtUmfnU lA0pnaA0RLAj78CuNj74cerBp9TLgtUctO6Su5gJuv4QdVij5KF6YuVSxtCmoVxyiJRW RcC1vv4TFhZLDFM9dpyE+2+QtIJ7vo+R02AZX28cuL8nDZ8oQqL8DoHHx6yPbif17ZcB Mz7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=ppeRKC6qAerZueLBefgCmuJe5thbQMtdR2XWJoewkwU=; b=d3jF1SpfgB42kwP34+xVLzTT5xt/Rxp9d0LFzMc8omxNPOtzcBlorq0VZ6o5sKKRP3 Keey6XyPivOtOFZYN8fxkidudaGEaTdIoMoIks1jxgsRqghLXlTeR7mizuSEJNxBTDW1 2Pdt3HF3Up5Kj7taxKkCVEjjIkQ1d7TPec2x1+Mq/Li3T9bdk+xJ/edK/Updmao8ue2e 3KDhP/VDMl1ZdY7NZfNG+5Cpga/e/OItxt/JAw9EdJopDev93VApgAJhi8hcAH2ChXCY 2a7NyJJ15NSGn9PZefS5ejI6Qpq5V20YGnpreI6vme8sT3NG2iVXqkZcvKZzIRaBzbjZ lu0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=l1eiWw9v; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id fq8-20020a056214258800b0046bafaee245si2710521qvb.259.2022.06.07.15.34.57 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:34:57 -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; dkim=pass header.i=@linaro.org header.s=google header.b=l1eiWw9v; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:35908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhmr-0008Fu-Fh for patch@linaro.org; Tue, 07 Jun 2022 18:34:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40108) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg95-0005h9-U1 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:47036) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg92-0001pV-A0 for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:47 -0400 Received: by mail-pj1-x102c.google.com with SMTP id k5-20020a17090a404500b001e8875e6242so5710596pjg.5 for ; Tue, 07 Jun 2022 13:49:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ppeRKC6qAerZueLBefgCmuJe5thbQMtdR2XWJoewkwU=; b=l1eiWw9vLIWgWaKfbqmmmmUYAOhIdZOUGLDrls2J/zgJiA5KDhhf6TB4Uj0+bVVqAx zKrl58iU2z5gUKEpCZyaov0bu6C5QWVZCvycg9P1Bg/QqUcEQb7StZOTD+TFPovSg86R hM/3g9ZiwR1CQvTilSnt2xAeM6OiEJXHQw/px0J7Ew5GFHhf97pi2M/db8SQ8tdM+oqp t5HzzfySvLXkxb3L6WU955S9srXWffhlJ5Rqzlk7UJ4QHzZPrxBBXkOVWefWvaPekJGv Yt+uOPniKmViO6M+JDC2708QBJqvm+4XohugOJInwzrnaKuMRIwVuuktHMmuRwg+0GE4 i/sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ppeRKC6qAerZueLBefgCmuJe5thbQMtdR2XWJoewkwU=; b=BFZ5qZVCxQJILTMBaZacYH99od29z6Hbd8JkVkvoEp/cT+CT8Ir0cIMkpp8pAeo7Ux nNwfDS7B184umiU5dCeorm9p9BuvXwRdf4NVUXqN8FXV+9vP/nf5LrqNz/5RIgue1r4p p0IUnghf+f6c0Qur+WTn9lKo5Jw+/CRDCrR2U4eJzOwrA6qt80ay0fvvjVKTkWOCQLzT s2/DiBA4XaERY4gYLiX8QgiATyxuVcbjdYEEM03vM9BUufc+8YycI9BekKVpB/RRLYUf B985wrZWHuCFq5+H5gc0JsT/vxuTsQ6ldBS14iQjsCY3HQG44n6ZHR8ahK2Q1xFm2X8N 7yTw== X-Gm-Message-State: AOAM530svM1VEEN/rAoacVzvI6Tf/E9HMxal/wkEPCIdTRTb5Sf43CY8 OOaghGg/FtfUv8/kFEh0sx0Jk8rlSwn0cA== X-Received: by 2002:a17:902:e804:b0:164:466:e488 with SMTP id u4-20020a170902e80400b001640466e488mr30933793plg.161.1654634982958; Tue, 07 Jun 2022 13:49:42 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 49/53] semihosting: Use console_out_gf for SYS_WRITEC Date: Tue, 7 Jun 2022 13:45:53 -0700 Message-Id: <20220607204557.658541-50-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- semihosting/arm-compat-semi.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 4c8932ad54..dea5b2de8d 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -228,6 +228,15 @@ static void common_semi_cb(CPUState *cs, uint64_t ret, int err) common_semi_set_ret(cs, ret); } +/* + * Use 0xdeadbeef as the return value when there isn't a defined + * return value for the call. + */ +static void common_semi_dead_cb(CPUState *cs, uint64_t ret, int err) +{ + common_semi_set_ret(cs, 0xdeadbeef); +} + /* * SYS_READ and SYS_WRITE always return the number of bytes not read/written. * There is no error condition, other than returning the original length. @@ -341,8 +350,7 @@ static const uint8_t featurefile_data[] = { * The specification always says that the "return register" either * returns a specific value or is corrupted, so we don't need to * report to our caller whether we are returning a value or trying to - * leave the register unchanged. We use 0xdeadbeef as the return value - * when there isn't a defined return value for the call. + * leave the register unchanged. */ void do_common_semihosting(CPUState *cs) { @@ -419,8 +427,12 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_WRITEC: - qemu_semihosting_console_outc(env, args); - common_semi_set_ret(cs, 0xdeadbeef); + /* + * FIXME: the byte to be written is in a target_ulong slot, + * which means this is wrong for a big-endian guest. + */ + semihost_sys_write_gf(cs, common_semi_dead_cb, + &console_out_gf, args, 1); break; case TARGET_SYS_WRITE0: From patchwork Tue Jun 7 20:45:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579443 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5587403max; Tue, 7 Jun 2022 15:59:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx+0M2+BjJu06GDL+qzVf35x2hqouv0yHmKt2SUfLYPCnlSFL58jXDDfvLnxkun5cEh0oon X-Received: by 2002:a05:620a:15c4:b0:6a6:af9e:e752 with SMTP id o4-20020a05620a15c400b006a6af9ee752mr11859959qkm.714.1654642743537; Tue, 07 Jun 2022 15:59:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642743; cv=none; d=google.com; s=arc-20160816; b=XnJskLS8Qf0bOJoDDp5u9tkPphwY04ius66ND+k5gioZXwRK9yOKHuGv304ppGPOyI QV7zH3Ybi7QLqJ6SbDXs0WzxLk6wY86riEaYfAHMsWC4+91EfHFgp/CJGE/hTISRjMon MrGQs1ibvMFC0aCveP9ohJGYxsmZESahsE0vMz9CjyuHGtVIcI9AhAcaMMb17Rr1+wUh nxEeGR6jP/o6+cGN8DF7lPiJMmuF89Z/QacLI3921tqekY1uMMcrEbXK6NMnw2kO2SOI XtM/rSI55RUIQ6anplm1BZ0F6SBKOVd8/Tdwq74sYGzngLXCMwnAP86ZilsyMOD7RCbW jysg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=3j65Vrb+cTtoRUM0a2SN2E+0qaLnPvILTBqh1dXrOWQ=; b=cIMdOeTfbquGt9rHJSmh0DcOyX02Dfh/sp4o/8GJkwF6GX7aASEs0i0sqH8I8B90Mx gqcz2aLzDlzDseD4c2641yWjvC4Hfm+v9zOZKVEroidjhDDjGU+dpZtzdt4bVb/aBkhS jK1/GEwHUN1CDQ0JK2pEBNbHeHSs/THCEogbBCOo1i5QGzKXwHB+4OsY8/bC/amo9RY9 MUBUGx1fB4jbaEp40kypD2uM6FvnqJpBHOAP/aekH7cH2iGYVMoroBKeMr6j/CCKWy2q xfSQhCfmUK+/NhfxYbiWqmhKIzViAw4q2mDSDjeVMSjjfghVIuO2i5sIfZlFzjZ0LHMu /k5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CTbUxD06; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id h11-20020ac85e0b000000b002f3f7f19090si10615943qtx.275.2022.06.07.15.59.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:59: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; dkim=pass header.i=@linaro.org header.s=google header.b=CTbUxD06; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33550 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyiAB-0004wI-44 for patch@linaro.org; Tue, 07 Jun 2022 18:59:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40174) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg98-0005qH-Ig for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:50 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:43936) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg95-0001pb-JV for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:50 -0400 Received: by mail-pj1-x102e.google.com with SMTP id l7-20020a17090aaa8700b001dd1a5b9965so16464567pjq.2 for ; Tue, 07 Jun 2022 13:49:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=3j65Vrb+cTtoRUM0a2SN2E+0qaLnPvILTBqh1dXrOWQ=; b=CTbUxD06GTwnD2/vMtdaBUnq3oF4Tpapf/hYoet9kddAAHDaqxVjtR1G0i50HLgwUj iFYUnYQUtPjGsw35QwhtdQx7hi2a4Rr8ZQPOJyymMpxHpdlEiyuAGAming3azGmjfJi1 X+PDmc+WAovohrUwJLIEMf+dKrsgJxLv9qicAoIe4doz4H1gSeuh7U4JDL6o4hWM4SRk jm3dqGLGmVIuPD+NI0njpglxHeniJVdzVIxRLIPDGr1N4/6YB3EUF8Z5PhJtU8+fEZ+m xWzJ9TDGOlYGPHi+Ah1nepDymh67bOcIvkLWFYLJhzzyJshWsznLh5hZwC0zAVWbSnEq Fldw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3j65Vrb+cTtoRUM0a2SN2E+0qaLnPvILTBqh1dXrOWQ=; b=qZNchTIFdcFdIhSv/vYC2mg2/v9RiEevXDiRe282L5E+0Aqtkkg3CNK1prwR98/G4P 3kW4hTRoBIj/v5792CsnBGvSgwfAJyt/AQeKi8UlolYocAKlf6a61nbInt05zhcOc6qQ rbPYfr8Tl7VnGl7MNZ4fR7dvCBwfFfWaSvj70qV+XmSMzSh2/SIC83eViPAUDLteG+sF 2z5QmhNNMVMMlcn4buDSsu14gGf/5Sa9MUVShsdMGG5/iPyKtYStOCopJ1SZ7g2DvlJ0 YLdVN4t+gJ4kTYcPLTfJ44r8FsXHD+sClsBT3+VTSeQlPdp74cKrfla0AYQCb7py64fB 39eg== X-Gm-Message-State: AOAM531Jv4kzrDwjzI7SFcISJrZ9heQR6ooZ9+SqzOFC3IZTuzE6ogIX GhgXMWrTiE+xRPYNjUglQCX6l0Y/xVpkEg== X-Received: by 2002:a17:90a:ce18:b0:1e7:71de:7721 with SMTP id f24-20020a17090ace1800b001e771de7721mr28024103pju.244.1654634983767; Tue, 07 Jun 2022 13:49:43 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 50/53] semihosting: Remove qemu_semihosting_console_outc Date: Tue, 7 Jun 2022 13:45:54 -0700 Message-Id: <20220607204557.658541-51-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This function has been replaced by *_write. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/console.h | 13 ------------- linux-user/semihost.c | 16 ---------------- semihosting/console.c | 18 ------------------ 3 files changed, 47 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index 6994f23c82..d6c1cc58ab 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -24,19 +24,6 @@ */ int qemu_semihosting_console_outs(CPUArchState *env, target_ulong s); -/** - * qemu_semihosting_console_outc: - * @env: CPUArchState - * @s: host address of null terminated guest string - * - * Send single character from guest memory to the debug console. This - * may be the remote gdb session if a softmmu guest is currently being - * debugged. - * - * Returns: nothing - */ -void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); - /** * qemu_semihosting_console_read: * @cs: CPUState diff --git a/linux-user/semihost.c b/linux-user/semihost.c index 871edf993a..f8bc8889f3 100644 --- a/linux-user/semihost.c +++ b/linux-user/semihost.c @@ -33,22 +33,6 @@ int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr) return len; } -void qemu_semihosting_console_outc(CPUArchState *env, target_ulong addr) -{ - char c; - - if (get_user_u8(c, addr)) { - qemu_log_mask(LOG_GUEST_ERROR, - "%s: passed inaccessible address " TARGET_FMT_lx, - __func__, addr); - } else { - if (write(STDERR_FILENO, &c, 1) != 1) { - qemu_log_mask(LOG_UNIMP, "%s: unexpected write to stdout failure", - __func__); - } - } -} - /* * For linux-user we can safely block. However as we want to return as * soon as a character is read we need to tweak the termio to disable diff --git a/semihosting/console.c b/semihosting/console.c index 677ec2b176..f6fab5933a 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -96,24 +96,6 @@ int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr) return out; } -void qemu_semihosting_console_outc(CPUArchState *env, target_ulong addr) -{ - CPUState *cpu = env_cpu(env); - uint8_t c; - - if (cpu_memory_rw_debug(cpu, addr, &c, 1, 0) == 0) { - if (use_gdb_syscalls()) { - gdb_do_syscall(semihosting_cb, "write,2,%x,%x", addr, 1); - } else { - qemu_semihosting_log_out((const char *) &c, 1); - } - } else { - qemu_log_mask(LOG_GUEST_ERROR, - "%s: passed inaccessible address " TARGET_FMT_lx, - __func__, addr); - } -} - #define FIFO_SIZE 1024 static int console_can_read(void *opaque) From patchwork Tue Jun 7 20:45:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579441 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5584987max; Tue, 7 Jun 2022 15:54:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz3KozMa6dfL1MZVwfh1diw4h//hjNugSacBwDgvOggOZBwPZGz44kfX2Sug0ADC3/+QXam X-Received: by 2002:a05:622a:1101:b0:304:e4ad:f492 with SMTP id e1-20020a05622a110100b00304e4adf492mr16164744qty.452.1654642495535; Tue, 07 Jun 2022 15:54:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642495; cv=none; d=google.com; s=arc-20160816; b=DurcDLocTw4h5BNYsQoLKw94fKJlobyqMVh+QAu0IM7B4XyCYqSPLDHv+XculyMtZ2 HwlX69nSj9AwXOsTz7Mv7Rqm7n+nQu7IzFAAyWHA237VYGunzuFl4/P8qdbicaepee/P wvJ15wYTPq2Xbc8rp4nKfu3h3jfpV9EocUJ+/O3l2ZqLtDbKRRNcUmZXrIwvy9VUPS0c uE5vgPDoO+fti0g5lbNipRxy0Ep5/62S9z4bZGNCAGsV+FJddTPjQIzLi7r3CnGQY+5v Yx6Z9UHu/PTLIJdjDaYeH475HUg++Q7G7kNvQdXMd7JOoA2LwXtytiuuqlrgDjZB6qlw aVQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=ZnhIt8ADFMZnFjwBm8rc3u5aYULCDVuExy2ptaewy0A=; b=MjLSvC+y4UYJK0MSkja0aPlcBJmC8kACzA2+e8d6uJGYdi430puN8eYvRmwiknF85L pmriMuc1W0SxLAYQBR+R1/GBnSO9C1hiG5zsH6hfMQTI0eUghty/QIAEK22YKCtXos57 Nre1f5zzL3c4HtnFkiV34OiK9hPB+zzSyIFjAM7/BInKRliL/mJ+u2MF+Cnp+yrFmn6u 3swiRu4EGw6y4esccFcWMaUFXE/MKMsh0MlkpPVO6UcsDGPZa9+PosyBldlolOGatlwK 6hP0v6P0fQuH+DJIdr/PjquqQ7YDlUURcvalYpAQ3+JJR1ZKebdMR4RCuQlFQqFzTA7H rTDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VrzAXEL6; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 2-20020a0562140d6200b00462262d330fsi11845564qvs.206.2022.06.07.15.54.55 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:54:55 -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; dkim=pass header.i=@linaro.org header.s=google header.b=VrzAXEL6; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:53640 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi6B-00074b-3i for patch@linaro.org; Tue, 07 Jun 2022 18:54:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40140) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg97-0005mF-7W for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:49 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:40938) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg95-0001pv-Jj for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:48 -0400 Received: by mail-pl1-x62e.google.com with SMTP id i1so15825162plg.7 for ; Tue, 07 Jun 2022 13:49:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ZnhIt8ADFMZnFjwBm8rc3u5aYULCDVuExy2ptaewy0A=; b=VrzAXEL6JOj9NnR+wf+RbiyFES8FJb9eWDQP2beFmC61Tlf1Ps2OQ8PooZTS2hQb90 qiu7S+/w0eRoqOEZAlSjPcTDE30MNk2TyBa9lhUxjSdSiuzeQCwTkabEyOSEoJRJQ0ci ZgnMvDbsAP/c01m7yBfxGTtu6rWYuqM5GEFvSsRuJu9TiwrP11VciNCedwNzGF0HLF8W OpU0VBfIJ4ORb8G11BFoLO+Xr8Q+VySyFBvGBuVtM/Qx0mLpmkneyi9GkpJmvNM3AwGZ C/smE6f8fdcCuLU6o+URzZKdTpm1FJYpSB3KqO3D3m9pB7JW1IpFSo8LYHwK9Wo5vUW8 7riw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZnhIt8ADFMZnFjwBm8rc3u5aYULCDVuExy2ptaewy0A=; b=5Mfjds0IVlDPyeXkRQJEtg8kHYEoAwBl9ZgHujaI3Ra2caCwqbhrQ0TtBiN9XLQNNi vNdnNyWXEABOJ2MDb4u1qJIBkx/tgejBUHnQ50FCVQ6Rdv2XFFHplQboUXNCPn24qXfM g0TM1bTYUI906U2RMyUo0BQSEsbcG0wByWSkExm4v3P67E7wVe0Dxd20Gs8va3keOryq j4YWfF2UbwmIS5xYJdHWb/iOknCNaQk9jQRPI3f7zxC0peY28snJ5ptOk/cCOOIZE4fn s7EZdkMz1Irp8eAO5hN76+/9GEx+8VtrLpxHVvcq4aRal3JW8unfAJBLKVrkio/rGkhk rpdA== X-Gm-Message-State: AOAM531hFx1AjQ0bPgn6bET59OrgVPoklwJSfh00hZgdTc0wGj+STh19 2nFwog/mg4VXXjYd/sGo/0Q7SP8UtKs+vA== X-Received: by 2002:a17:902:c403:b0:167:4a9f:2785 with SMTP id k3-20020a170902c40300b001674a9f2785mr23687085plk.67.1654634984720; Tue, 07 Jun 2022 13:49:44 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 51/53] semihosting: Use console_out_gf for SYS_WRITE0 Date: Tue, 7 Jun 2022 13:45:55 -0700 Message-Id: <20220607204557.658541-52-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- semihosting/arm-compat-semi.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index dea5b2de8d..21b6bc3a0f 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -436,8 +436,15 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_WRITE0: - ret = qemu_semihosting_console_outs(env, args); - common_semi_set_ret(cs, ret); + { + ssize_t len = target_strlen(args); + if (len < 0) { + common_semi_dead_cb(cs, -1, EFAULT); + } else { + semihost_sys_write_gf(cs, common_semi_dead_cb, + &console_out_gf, args, len); + } + } break; case TARGET_SYS_WRITE: From patchwork Tue Jun 7 20:45:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579444 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5589829max; Tue, 7 Jun 2022 16:02:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwXvc7sqyD9Vq/M0HZho9hgn+1P8mTZP6smDRI/8xUpnvAqLYgUXL/xmTn14xL1wly8KM3w X-Received: by 2002:a05:622a:15ca:b0:305:1f:8638 with SMTP id d10-20020a05622a15ca00b00305001f8638mr1230741qty.85.1654642958588; Tue, 07 Jun 2022 16:02:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654642958; cv=none; d=google.com; s=arc-20160816; b=CyO9MWbXVlwRqNrk06cgFxNqkiy4I/xLsRMlIHILcd2LopJbz8FP/sZr6AHV8eV7pT l3yS7KWA+56tbiJEYsh76NYh9cbOuXmMb+UIjeUqzAMXHB1ZZfNqsJginLRpUotsv6cV rn5PyNSz2nTEpnCtXVw8WEWQOBiHJ9k6g9286NPtpiw6Pf6u0GDWWAgtqrfaBcZFC0fx v/NVJI6Viv/WvJMxkbWG4BcbL/x6CYwKmecra0cuXLR3TJU40ry3ALrcuGMltPJJTLjq 6OLSxz2MA9Q2k9UubqjTuP8VJJUXx1uC9Tn9g63OFFg/rJCx+GeePoIlA1KY4+Rghwuc w0pQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=G8jUXILSyQ3ZGWS4huZP/MGa3C/uuyreOxdJ2Jh/tu0=; b=kGP38QlNwxkTkZUggaAOFRwlt0sPC6tXdl0aGuWoH/V0H2uj4il8QmNzWufeUgPv9m 5+LwOadScXSppR/Pk4GtnXWUxfL4NKcDkqZjzXlnvz3+/dgO9nRMI135Aaa6fNVYn3Sk Cf1165AmJ6hqUp2DtcdG6eGSG9MkxQJCYVm17+Z9sJ4xS+tPFcNbrSN79M3z7ZzioTC7 LiJ1SYrGFji/oTnymThbA+t7Sg7rSc4+AIwiYd4onj3BSRXi6VObkiqbx0U7dt8vNpeE txZ/HR5y671i5+Ve82v1SogqjXulaj5coqJYY3DyFxf1A7skR4NONFdBDgY0Di8AAuBk At6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Gsxj8Rc8; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d17-20020a05622a05d100b00304e119d071si7871744qtb.520.2022.06.07.16.02.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 16:02:38 -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; dkim=pass header.i=@linaro.org header.s=google header.b=Gsxj8Rc8; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:37802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyiDe-0007zV-0T for patch@linaro.org; Tue, 07 Jun 2022 19:02:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40176) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg98-0005rM-Qz for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:50 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:42598) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg95-0001q4-LF for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:50 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d22so15813711plr.9 for ; Tue, 07 Jun 2022 13:49:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=G8jUXILSyQ3ZGWS4huZP/MGa3C/uuyreOxdJ2Jh/tu0=; b=Gsxj8Rc8XH2LUjoZJISL67JgE28hoQQeP+oxnX1ZC29CKdGiDkB3eaN/v82bLR/A9y 95HQPEL78pxRJfL773hBJmGwaeIGmBXlLPR2ZcjTb1vwi251UbuFIHbffIJKpzBMijfU ADvmNPNsmPTSyhTw/Ym9a62swSddnY3bvUkyrHno1SNlfl2DXMgDLOEgdutzzWnVOkzA RwH9esR342PNX8H/hr0IGSLJTTHGwTGaC4ntfxi7W+R/XX6ObJ/5vdYglkn7nSy29sX7 Pnf1b0eS64FudNUh+26j3X6HFwxB4SkTvTe8v/Ns5RDVvWHtpVAYpUY2k41yKUO9kom9 u0MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=G8jUXILSyQ3ZGWS4huZP/MGa3C/uuyreOxdJ2Jh/tu0=; b=4oj2KKyQXiNUcZU8SEI++IPQxgZbom9ZfZ5LgGTuuInbpibXLCpnIY4DOS3j6GTqCb IA6knhfrUt4vYCI0QqV7sz/1uc0wPv1G+JFDf3gdV0JqzCR1tMTtq8JPyHTfVVm8GX1C XFLbCkVqaiQq+xT6/1DPR9buN9i8fJzjhhawI2tdqC3maBAAdvFfOlTkLwZfFEp8ZLhF W0Ade0BGkv03NiOBO+gr0asjUcWltSqNkzBETjal/DgcQBIg74kFJYh2mGKyYbfGlXz5 ZtLpwIye30Tj2dPzL6gn5blQo1DImKhOM8TI6wHOYhfEsnnH+WZqZ/U4fIQqUHnoJIWP 5aZQ== X-Gm-Message-State: AOAM530JKp4UB9VAtabUjmkBEJ/MPQHj8GUJ42vFkxcffou/FOHPptR+ 5bmTcJoH4mMcXMIx1DWTSdYNDPi2X18y/g== X-Received: by 2002:a17:90b:388d:b0:1e6:a0a4:c80f with SMTP id mu13-20020a17090b388d00b001e6a0a4c80fmr29289678pjb.39.1654634985564; Tue, 07 Jun 2022 13:49:45 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 52/53] semihosting: Remove qemu_semihosting_console_outs Date: Tue, 7 Jun 2022 13:45:56 -0700 Message-Id: <20220607204557.658541-53-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This function has been replaced by *_write. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel Reviewed-by: Alex Bennée --- include/semihosting/console.h | 13 ---------- linux-user/semihost.c | 17 ------------ semihosting/console.c | 49 ----------------------------------- 3 files changed, 79 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index d6c1cc58ab..20c31d89d4 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -11,19 +11,6 @@ #include "cpu.h" -/** - * qemu_semihosting_console_outs: - * @env: CPUArchState - * @s: host address of null terminated guest string - * - * Send a null terminated guest string to the debug console. This may - * be the remote gdb session if a softmmu guest is currently being - * debugged. - * - * Returns: number of bytes written. - */ -int qemu_semihosting_console_outs(CPUArchState *env, target_ulong s); - /** * qemu_semihosting_console_read: * @cs: CPUState diff --git a/linux-user/semihost.c b/linux-user/semihost.c index f8bc8889f3..cee62a365c 100644 --- a/linux-user/semihost.c +++ b/linux-user/semihost.c @@ -16,23 +16,6 @@ #include "user-internals.h" #include -int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr) -{ - int len = target_strlen(addr); - void *s; - if (len < 0){ - qemu_log_mask(LOG_GUEST_ERROR, - "%s: passed inaccessible address " TARGET_FMT_lx, - __func__, addr); - return 0; - } - s = lock_user(VERIFY_READ, addr, (long)(len + 1), 1); - g_assert(s); /* target_strlen has already verified this will work */ - len = write(STDERR_FILENO, s, len); - unlock_user(s, addr, 0); - return len; -} - /* * For linux-user we can safely block. However as we want to return as * soon as a character is read we need to tweak the termio to disable diff --git a/semihosting/console.c b/semihosting/console.c index f6fab5933a..c84ab97ab6 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -47,55 +47,6 @@ int qemu_semihosting_log_out(const char *s, int len) } } -/* - * A re-implementation of lock_user_string that we can use locally - * instead of relying on softmmu-semi. Hopefully we can deprecate that - * in time. Copy string until we find a 0 or address error. - */ -static GString *copy_user_string(CPUArchState *env, target_ulong addr) -{ - CPUState *cpu = env_cpu(env); - GString *s = g_string_sized_new(128); - uint8_t c; - - do { - if (cpu_memory_rw_debug(cpu, addr++, &c, 1, 0) == 0) { - if (c) { - s = g_string_append_c(s, c); - } - } else { - qemu_log_mask(LOG_GUEST_ERROR, - "%s: passed inaccessible address " TARGET_FMT_lx, - __func__, addr); - break; - } - } while (c!=0); - - return s; -} - -static void semihosting_cb(CPUState *cs, uint64_t ret, int err) -{ - if (err) { - qemu_log("%s: gdb console output failed (%d)", __func__, err); - } -} - -int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr) -{ - GString *s = copy_user_string(env, addr); - int out = s->len; - - if (use_gdb_syscalls()) { - gdb_do_syscall(semihosting_cb, "write,2,%x,%x", addr, s->len); - } else { - out = qemu_semihosting_log_out(s->str, s->len); - } - - g_string_free(s, true); - return out; -} - #define FIFO_SIZE 1024 static int console_can_read(void *opaque) From patchwork Tue Jun 7 20:45:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 579427 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:5806:0:0:0:0 with SMTP id j6csp5574493max; Tue, 7 Jun 2022 15:37:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxCsSgCk9SZKrbkXMt/54AgDa3/WaXjrazPLsBi95eKbnX1XctmaFh//TYOznkQFvZTP9cT X-Received: by 2002:a05:6214:18c5:b0:464:5715:b879 with SMTP id cy5-20020a05621418c500b004645715b879mr23742336qvb.98.1654641468170; Tue, 07 Jun 2022 15:37:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654641468; cv=none; d=google.com; s=arc-20160816; b=rhVsf1KNJx2VDYIqqzxNHkGlTSDjV6KUelY24qgV6xuNsetxwxS5op6TJ52OI1DvDm aaVGiqvT6O3hzDVvIXU/VKqPXBJpEGuWFhDn5yHFevhLWUil2Slki5Kz5mtQHtA/ZcI3 IeZxMv8mQ5TyCBAvpwtEQGkSkyOCm0wTvsG3PKMcNIpq3/N27JWWkg/d7+03LWYqQr8u Bq/GJEY6n4P93esygrC3u1yHRmle1nFYzqRd0DOzHrseGvUOXXxgluCp4s+ZRfe8/N79 xvmWdGGvbzLglIcqBVNhk9ui1k9F9akMi5wG86MqUv0PCzMRWJQwMTrbn98f3zLyAOAj GvBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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 :dkim-signature; bh=dAgm33M1rvCgEdViKgsHiMOPABrkN7+luzk9Bsvwo1g=; b=t+rEroeGx0T5VU/5rLiyjwFyZJYh1Mu/mhtLaJHZcLZf2EUNFZ+zj4ek4HNl3Ygnt/ CbJuPxdfG5PEEZHIVA+20HlRB5kI9EwbM4iTf+RI2OgnJNXHjhsLxz0CvG7JAd08w6cK eC8AJoow5wKP0xJJ41Bl0mNJRNrMmTFJftb2KZ2e7/LUchVdDR8YX+ul0RY08ZGk9Yt9 Yb8rc4HmFCwJnI8431mgqBb5803oHanpKAREDj+gC7MLeN94W0SK5yEp5oFRFSLLOwZt 9G8m9hpQ4XkiBPI1fxU9RwKUYkQBcMRy9e9RwJjVOxvGhIW1uLB0+bCeeYgog6KoZtFe Jhmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Uwl9gW2B; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id cd7-20020a05622a418700b002f7a43bf153si9074875qtb.556.2022.06.07.15.37.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jun 2022 15:37:48 -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; dkim=pass header.i=@linaro.org header.s=google header.b=Uwl9gW2B; 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"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:44276 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhpb-0005ZC-Mx for patch@linaro.org; Tue, 07 Jun 2022 18:37:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40178) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyg98-0005rg-Ud for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:50 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:38743) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nyg95-0001qE-LX for qemu-devel@nongnu.org; Tue, 07 Jun 2022 16:49:50 -0400 Received: by mail-pj1-x1030.google.com with SMTP id v11-20020a17090a4ecb00b001e2c5b837ccso21915809pjl.3 for ; Tue, 07 Jun 2022 13:49:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=dAgm33M1rvCgEdViKgsHiMOPABrkN7+luzk9Bsvwo1g=; b=Uwl9gW2B5d/3kVphSlz6bQe5EBpPmNQU/H5iQUWaDzNG0CjfzhAt5H8TeBmNhKLLl0 3VRV9WBdSYRNgqs/uhNLJVd/mNEoMsrqqGqiNT5WyuEuET0/ZOd6RtLZAXGpAuPp2U2f mxUj3FcTMDYrfeUREZZnwIneo7AZ+oOzkXbttn5dHSUr0aZCJCq/r+wNcY65oxvpnXJM 8Zd8nID68n8lE/3k7Z0ahFZ+dQeJjy0w/k9BvavwPMSfMp9omt8Q2dUDyUiOY0jYLoE0 hFBlZBR19YDU1w9dq+bxsUi/DrR3eTKBHcF7Prvm69uUBBMAUeE+VVnqVvXXkLkJMXMp agdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dAgm33M1rvCgEdViKgsHiMOPABrkN7+luzk9Bsvwo1g=; b=CRs/BlLOUSk3Qgjrav0hOWeL/M01Yf/GAIZDl0b3Z1x93rYuMQnSUOkbXe6p8Gu3SY CdobXVNXt9zL8Xs1An6rI/0oCaHUJTpHoPtWx97DW9eHM4EjAbywXQMLWwUoA8SMKhYh OVuJjxkf/7AfWe5vWzN+I0eRLmsz0orPKGbZQ+dSzCBQppWMBJtwI+aR+/wgrmBqeoEX FOeeoo6sjw3YXWmywwLoQOS6MSEfFXCdMjhU2p4QwWR4yJML3Di0jcYTehS2zVBRyVY+ PWs1+SnShBxkr1DrtgfEQT4258W5tKypnLyxNJwUS+wXJimMB/p8r+vW7cn4kklxtPTy Ro2A== X-Gm-Message-State: AOAM533M+4QTS+9QtPxA0aAVjmQ4mMvsMZI7bsYfrIiEHabjkQRvAhtH hb5eC1wAwG/ieCW9SWBf658BSb88lXkgbg== X-Received: by 2002:a17:90a:4a90:b0:1e8:ad01:701a with SMTP id f16-20020a17090a4a9000b001e8ad01701amr4038197pjh.27.1654634986262; Tue, 07 Jun 2022 13:49:46 -0700 (PDT) Received: from stoup.. ([2602:ae:1547:e101:3cf2:c634:5b19:25f6]) by smtp.gmail.com with ESMTPSA id 128-20020a620686000000b00518b4cfbbe0sm13152327pfg.203.2022.06.07.13.49.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 13:49:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 53/53] semihosting: Create semihost_sys_poll_one Date: Tue, 7 Jun 2022 13:45:57 -0700 Message-Id: <20220607204557.658541-54-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220607204557.658541-1-richard.henderson@linaro.org> References: <20220607204557.658541-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This will be used for implementing the xtensa select_one system call. Choose "poll" over "select" so that we can reuse Glib's g_poll constants and to avoid struct timeval. Signed-off-by: Richard Henderson Reviewed-by: Luc Michel --- include/semihosting/console.h | 16 ++++++++ include/semihosting/syscalls.h | 3 ++ semihosting/console.c | 19 ++++++++- semihosting/syscalls.c | 70 ++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 2 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index 20c31d89d4..61b0cb3a94 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -53,4 +53,20 @@ int qemu_semihosting_console_write(void *buf, int len); */ int qemu_semihosting_log_out(const char *s, int len); +/* + * qemu_semihosting_console_block_until_ready: + * @cs: CPUState + * + * If no data is available we suspend the CPU and will re-execute the + * instruction when data is available. + */ +void qemu_semihosting_console_block_until_ready(CPUState *cs); + +/** + * qemu_semihosting_console_ready: + * + * Return true if characters are available for read; does not block. + */ +bool qemu_semihosting_console_ready(void); + #endif /* SEMIHOST_CONSOLE_H */ diff --git a/include/semihosting/syscalls.h b/include/semihosting/syscalls.h index 347200cb9f..3a5ec229eb 100644 --- a/include/semihosting/syscalls.h +++ b/include/semihosting/syscalls.h @@ -69,4 +69,7 @@ void semihost_sys_system(CPUState *cs, gdb_syscall_complete_cb complete, void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong tv_addr, target_ulong tz_addr); +void semihost_sys_poll_one(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, GIOCondition cond, int timeout); + #endif /* SEMIHOSTING_SYSCALLS_H */ diff --git a/semihosting/console.c b/semihosting/console.c index c84ab97ab6..cda7cf1905 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -77,10 +77,17 @@ static void console_read(void *opaque, const uint8_t *buf, int size) c->sleeping_cpus = NULL; } -int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) +bool qemu_semihosting_console_ready(void) +{ + SemihostingConsole *c = &console; + + g_assert(qemu_mutex_iothread_locked()); + return !fifo8_is_empty(&c->fifo); +} + +void qemu_semihosting_console_block_until_ready(CPUState *cs) { SemihostingConsole *c = &console; - int ret = 0; g_assert(qemu_mutex_iothread_locked()); @@ -92,6 +99,14 @@ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) cpu_loop_exit(cs); /* never returns */ } +} + +int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) +{ + SemihostingConsole *c = &console; + int ret = 0; + + qemu_semihosting_console_block_until_ready(cs); /* Read until buffer full or fifo exhausted. */ do { diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index 9e499b1751..4847f66c02 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -520,6 +520,21 @@ static void host_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete, unlock_user(p, tv_addr, sizeof(struct gdb_timeval)); } +#ifndef CONFIG_USER_ONLY +static void host_poll_one(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, GIOCondition cond, int timeout) +{ + /* + * Since this is only used by xtensa in system mode, and stdio is + * handled through GuestFDConsole, and there are no semihosting + * system calls for sockets and the like, that means this descriptor + * must be a normal file. Normal files never block and are thus + * always ready. + */ + complete(cs, cond & (G_IO_IN | G_IO_OUT), 0); +} +#endif + /* * Static file semihosting syscall implementations. */ @@ -628,6 +643,34 @@ static void console_fstat(CPUState *cs, gdb_syscall_complete_cb complete, complete(cs, ret ? -1 : 0, ret ? -ret : 0); } +#ifndef CONFIG_USER_ONLY +static void console_poll_one(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, GIOCondition cond, int timeout) +{ + /* The semihosting console does not support urgent data or errors. */ + cond &= G_IO_IN | G_IO_OUT; + + /* + * Since qemu_semihosting_console_write never blocks, we can + * consider output always ready -- leave G_IO_OUT alone. + * All that remains is to conditionally signal input ready. + * Since output ready causes an immediate return, only block + * for G_IO_IN alone. + * + * TODO: Implement proper timeout. For now, only support + * indefinite wait or immediate poll. + */ + if (cond == G_IO_IN && timeout < 0) { + qemu_semihosting_console_block_until_ready(cs); + /* We returned -- input must be ready. */ + } else if ((cond & G_IO_IN) && !qemu_semihosting_console_ready()) { + cond &= ~G_IO_IN; + } + + complete(cs, cond, 0); +} +#endif + /* * Syscall entry points. */ @@ -906,3 +949,30 @@ void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete, host_gettimeofday(cs, complete, tv_addr, tz_addr); } } + +#ifndef CONFIG_USER_ONLY +void semihost_sys_poll_one(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, GIOCondition cond, int timeout) +{ + GuestFD *gf = get_guestfd(fd); + + if (!gf) { + complete(cs, G_IO_NVAL, 1); + return; + } + switch (gf->type) { + case GuestFDGDB: + complete(cs, G_IO_NVAL, 1); + break; + case GuestFDHost: + host_poll_one(cs, complete, gf, cond, timeout); + break; + case GuestFDConsole: + console_poll_one(cs, complete, gf, cond, timeout); + break; + case GuestFDStatic: + default: + g_assert_not_reached(); + } +} +#endif