From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654638992; cv=none; d=zohomail.com; s=zohoarc; b=h15TVLodUY5drL3DoaINiQv6hUgBKXaHlAbd9pfEuJcQuABNchivyFKC5PZjNh2CkTJwbXNMJ+DMvTbhtFA4ueOx71spRgqXQpkJukgeitfeNn2KbpcKftF5BA/91dkb9hNDUy/k5sn27oXwQv6aiNVoX+H0ar7YXMv1XmCRSdc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654638992; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=hL15phHiFTEeYUryTllbE9QTsXahphlhPjpE5IcwyII=; b=n5HWQHIiLQtcNrEM25IsX1qIPs2zGgZnlseMgwImGjlZPnqFN1Ao/lx3YgIb0oymNjOJjK9G0w4dUb/75cTmC8gF6R7dj9fml7Wl3xk5VPWPzaZ7M3Da9+y5kirBAO7Bvk/hh7m3yYD4qKZtqZu1+6Oym3HkRExminKwgwGnOWY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654638992053155.39701638648796; Tue, 7 Jun 2022 14:56:32 -0700 (PDT) Received: from localhost ([::1]:46352 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhBe-0003ph-PW for importer@patchew.org; Tue, 07 Jun 2022 17:56:30 -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) 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) 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-Google-Smtp-Source: ABdhPJyU8HNgHHK9usDHOB0btRdR945VkLK0oZ4ZalABTNbDmzjm7qLOI8hNpVsEEoGqGW5WuhW/Mg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654638993799100001 Content-Type: text/plain; charset="utf-8" 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 =3D> 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 =3D> semihosting/softmmu-uaccess.h} (9= 5%) diff --git a/include/exec/softmmu-semi.h b/include/semihosting/softmmu-uacc= ess.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 */ =20 -#ifndef SOFTMMU_SEMI_H -#define SOFTMMU_SEMI_H +#ifndef SEMIHOSTING_SOFTMMU_UACCESS_H +#define SEMIHOSTING_SOFTMMU_UACCESS_H =20 #include "cpu.h" =20 @@ -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) =20 -#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; =20 -#include "exec/softmmu-semi.h" +#include "semihosting/softmmu-uaccess.h" #endif =20 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/mi= ps-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" =20 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" =20 --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640530; cv=none; d=zohomail.com; s=zohoarc; b=IKS40sAauMgY1heQ7wQGuSVMP6JC5KiDo4fpDdf2AMkafwCfFIA/XIbCqzgQnDZELKnUcVLw7FDnToJ8BqLaRoodj0+BHVeuU0yhxz+3h5S/Log8qlP46FTfiLbXz9UzbirDS1+Ja5O6iBbIrNObTjng+UQBktNzlteRgw44tiI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640530; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XykDNb8AiF5XqooTWDspyQ6eumaI59tyN1vSYpnaRMw=; b=Fi2OrTxDP+Q1GrU6IPntY+b+FFy9otWdD5GEf7iy/f4f1fYog4yJ5LLL6A2nZrknM7quKAcgLIPYES0ShfBrZOwQBSVBEQSLUA++6PCiRSGFAYxa4gZhVdzsmc8TRzuJsvThIX9jsGlKW28YKykRVKMKBR2GVBTeHwytJnWYIZs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640530465343.4068800188919; Tue, 7 Jun 2022 15:22:10 -0700 (PDT) Received: from localhost ([::1]:34766 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhaT-0004t1-8e for importer@patchew.org; Tue, 07 Jun 2022 18:22:09 -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) 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) 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-Google-Smtp-Source: ABdhPJzKk8GZhMDIllFOm657zeg7XlgMzsBfRhnTRqhBGbLMqwYQdfVgCJiXGhZ+A5fvtdh4NBvwfg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640532076100001 Content-Type: text/plain; charset="utf-8" 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/so= ftmmu-uaccess.h index e69e3c8548..5246a91570 100644 --- a/include/semihosting/softmmu-uaccess.h +++ b/include/semihosting/softmmu-uaccess.h @@ -12,82 +12,69 @@ =20 #include "cpu.h" =20 -static inline uint64_t softmmu_tget64(CPUArchState *env, target_ulong addr) -{ - uint64_t val; +#define get_user_u64(val, addr) \ + ({ uint64_t val_ =3D 0; \ + int ret_ =3D cpu_memory_rw_debug(env_cpu(env), (addr), \ + &val_, sizeof(val_), 0); \ + (val) =3D tswap64(val_); ret_; }) =20 - 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_ =3D 0; \ + int ret_ =3D cpu_memory_rw_debug(env_cpu(env), (addr), \ + &val_, sizeof(val_), 0); \ + (val) =3D tswap32(val_); ret_; }) =20 -static inline uint32_t softmmu_tget32(CPUArchState *env, target_ulong addr) -{ - uint32_t val; +#define get_user_u8(val, addr) \ + ({ uint8_t val_ =3D 0; \ + int ret_ =3D cpu_memory_rw_debug(env_cpu(env), (addr), \ + &val_, sizeof(val_), 0); \ + (val) =3D val_; ret_; }) =20 - 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 =3D softmmu_tget64(env, p); 0; }) -#define get_user_u32(arg, p) ({ arg =3D softmmu_tget32(env, p) ; 0; }) -#define get_user_u8(arg, p) ({ arg =3D softmmu_tget8(env, p) ; 0; }) #define get_user_ual(arg, p) get_user_u32(arg, p) =20 -static inline void softmmu_tput64(CPUArchState *env, - target_ulong addr, uint64_t val) -{ - val =3D tswap64(val); - cpu_memory_rw_debug(env_cpu(env), addr, (uint8_t *)&val, 8, 1); -} +#define put_user_u64(val, addr) \ + ({ uint64_t val_ =3D tswap64(val); \ + cpu_memory_rw_debug(env_cpu(env), (addr), &val_, sizeof(val_), 1); = }) + +#define put_user_u32(val, addr) \ + ({ uint32_t val_ =3D tswap32(val); \ + cpu_memory_rw_debug(env_cpu(env), (addr), &val_, sizeof(val_), 1); = }) =20 -static inline void softmmu_tput32(CPUArchState *env, - target_ulong addr, uint32_t val) -{ - val =3D 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) =20 -static void *softmmu_lock_user(CPUArchState *env, - target_ulong addr, target_ulong len, int co= py) +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 =3D malloc(len); + void *p =3D 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 =3D 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 =3D p =3D malloc(1024); + char *s =3D malloc(1024); + size_t len =3D 0; + if (!s) { return NULL; } do { - cpu_memory_rw_debug(env_cpu(env), addr, &c, 1, 0); - addr++; - *(p++) =3D 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 a= ddr, target_ulong len) { --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654639304; cv=none; d=zohomail.com; s=zohoarc; b=DSYsUDpFySMNRcIvscp63QQNa3LPt9RFvdT00nXUIwa0Wx992NvVYSliW59RBhNcoVR8qj94VqbDOtgRJMFiA2XvPV0R+hWELjaX1u7TYpX7HVl9vsJo0GbHKIlVWmFbZZM2fsWucK+BuIq+keRHbuUuRzKp+hXIKIfgFrn3CaA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654639304; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+d9/jr06nswWZQd9Uw/cJzKLCMbhQR5Mz1vx++OuQjc=; b=O6+V9xX5IFi0hOM+iLjw5ZaO3NXUQNneDOcU0B3myxsGYk/R0PWKgVuSslj01JKnAJ/STqrZrhtOfW0De6tbjKZHKpz+KyXnIAMgvqgXq46+FV3iKH//VFpEydSh7SNtSiV5rFJXInBYzZErKQk7o9bXRb9kzr8DJKaxqKYSQXQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654639304669525.8626197053185; Tue, 7 Jun 2022 15:01:44 -0700 (PDT) Received: from localhost ([::1]:55074 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhGg-0001fA-Uj for importer@patchew.org; Tue, 07 Jun 2022 18:01:42 -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) 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) 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-Google-Smtp-Source: ABdhPJx/49U2Xt+Qvfd4kbjJ36thByL1B3w5f7aABd6OkNZjYozUs22AkVcM6UiV03apTjfYq9sNPg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654639305483100001 Content-Type: text/plain; charset="utf-8" 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: f= iles( 'config.c', 'console.c', )) --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640225; cv=none; d=zohomail.com; s=zohoarc; b=BB8m6wxGNz/19taEdSg0nl7Wf8boHLXsr7kULfTh6W9/gA4HfK0NzpX3REwYjsbLfoJXe3iZg9V0DUkKiaREpjAabgGd2Ai3wDI9IzyOY0pvBlM3sune1sLO4TfsB0UUhM7hpX3VHoaStojFa05PiIjNZUL/ZFpY7Xam4q+m0bA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640225; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=UtCh1R/o+jWczZ2gQY+9f4Xav0T6t+bxgoxTR2mENvU=; b=P/aa9eala0G1hhpueZmtau4vgynxXxylJ4i2JjPuMDw/T7cCP+I34ZvBdOfzaKYBegTNKrqiqL8kz/sLBK9iXJVztKQyhrqhMgM7aEZfduGHNcLl467xz+WynG+isqVjD2sULPl7dYwcYUBPOeS+UcDzUkcCzT2VGvy+JtMoros= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640225617105.19873873240874; Tue, 7 Jun 2022 15:17:05 -0700 (PDT) Received: from localhost ([::1]:52912 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhVY-0004vk-Hg for importer@patchew.org; Tue, 07 Jun 2022 18:17:04 -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) 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) 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-Google-Smtp-Source: ABdhPJxTlQHsGaRyTNJMPmw9QVm98RVjApxa9PlYKBm58X9cF1dVehf5dWpwGBIUT6aSaj79c3/b9w== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640227896100001 Content-Type: text/plain; charset="utf-8" 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/so= ftmmu-uaccess.h index 5246a91570..03300376d3 100644 --- a/include/semihosting/softmmu-uaccess.h +++ b/include/semihosting/softmmu-uaccess.h @@ -42,47 +42,15 @@ =20 #define put_user_ual(arg, p) put_user_u32(arg, p) =20 -static void *softmmu_lock_user(CPUArchState *env, target_ulong addr, - target_ulong len, bool copy) -{ - void *p =3D malloc(len); - if (p && copy) { - if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) { - free(p); - p =3D 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) =20 -static char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) -{ - /* TODO: Make this something that isn't fixed size. */ - char *s =3D malloc(1024); - size_t len =3D 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) =20 -static void softmmu_unlock_user(CPUArchState *env, void *p, target_ulong a= ddr, - 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) =20 #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 =3D malloc(len); + if (p && copy) { + if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) { + free(p); + p =3D NULL; + } + } + return p; +} + +char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) +{ + /* TODO: Make this something that isn't fixed size. */ + char *s =3D malloc(1024); + size_t len =3D 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: f= iles( 'config.c', 'console.c', + 'uaccess.c', )) =20 specific_ss.add(when: ['CONFIG_ARM_COMPATIBLE_SEMIHOSTING'], --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654639830; cv=none; d=zohomail.com; s=zohoarc; b=memZbnrabtmJxrOggWdgY362TC3w7D8fNhPfKXoZTI+aedvQERNU9sINyYx5ugVaaXrdiUPSiWdiu8jzAF2H3SqiLIpo6d8cCSXYPfwCrei+I8mX+Gvn4wMYIOZTSIhLGVAzEmYNVjn13TD/+8KoXFMu2meLZAcr9VM0ukSHC6E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654639830; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cs+FpLBc0ayQh/IFdv2ROEUbtJo92UQIPCLnKIxQZ6k=; b=Y386i3T8K/nWbdLnN6sUsYbo0fVbvGsyJtSxFpa2atbneBSn3ppjjb+N4b6auNflyrF8tFL/iwmu7uWIMZ8alqE1uBwfbklszjrSDsbw+bjeaSv1f0IYxRKR2xbu++Sz4XgNclcGfbE23HTWF2BpKRtwPrmBtgaerwwnnAPB5W4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654639830900560.6291293255089; Tue, 7 Jun 2022 15:10:30 -0700 (PDT) Received: from localhost ([::1]:45576 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhPB-0006s3-B0 for importer@patchew.org; Tue, 07 Jun 2022 18:10:29 -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) 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) 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-Google-Smtp-Source: ABdhPJwcpZv7gB089rnQ9dWEbaMNRghlk/YXfoUY7KMQL2dHQ25n1hBaxzF/rcEcf3ZeWNy1vCpvBA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654639831370100001 Content-Type: text/plain; charset="utf-8" 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) { } =20 +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 retad= dr) { --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640354; cv=none; d=zohomail.com; s=zohoarc; b=deSgcfxLS8A2lb++5zzGksjSGKzIJLsui6v8JwKXg0ldI16amQA7m9w2RHaY69jSAdws1ulqJdOyJ3xs9+dz6BIQ829apKEv7EWa8Cf0dRjuJ41aQeHQigDXXapZseJRcOzgRJWkPwuNGsDPOn7WHisgSjC6lYNXbyqwYz6VWFo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640354; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=RK5M0Iz9OI0w9+qLU0kfHIVs85xFEebhwh/ygRwPj/8=; b=U0GCtPcX4L9Uing37YvqCRkahWGGXJxZFy+zD4+sAfYsk6wTEnzpS7GBZEDutyhsqXAE5ggJfprwtj2tWksUsbXAj+befWCqXkqa7yhRDkfx4F6qovvePVhjTNB4I2cjU5yv75aXoO5dXo4RFHhd4vhp5DJjgE5T31XE779uqS4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 165464035420097.13937890484056; Tue, 7 Jun 2022 15:19:14 -0700 (PDT) Received: from localhost ([::1]:57284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhXd-0008Uq-1G for importer@patchew.org; Tue, 07 Jun 2022 18:19:13 -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) 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) 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-Google-Smtp-Source: ABdhPJzh+JKEO1SRYL84yrpASWLGXuGK/p1Q7eXT3GrVN64rjtGMT5mSgBRqVWtHaFH6Z7qae48wXg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640354816100001 Content-Type: text/plain; charset="utf-8" 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/so= ftmmu-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) =20 +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 @@ */ =20 #include "qemu/osdep.h" +#include "exec/exec-all.h" #include "semihosting/softmmu-uaccess.h" =20 void *softmmu_lock_user(CPUArchState *env, target_ulong addr, @@ -23,6 +24,54 @@ void *softmmu_lock_user(CPUArchState *env, target_ulong = addr, return p; } =20 +ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr) +{ + int mmu_idx =3D cpu_mmu_index(env, false); + size_t len =3D 0; + + while (1) { + size_t left_in_page; + int flags; + void *h; + + /* Find the number of bytes remaining in the page. */ + left_in_page =3D TARGET_PAGE_SIZE - (addr & ~TARGET_PAGE_MASK); + + flags =3D 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 =3D=3D 0) { + return len; + } + addr++; + len++; + if (len > INT32_MAX) { + return -1; + } + } while (--left_in_page !=3D 0); + } else { + char *p =3D memchr(h, 0, left_in_page); + if (p) { + len +=3D p - (char *)h; + return len <=3D INT32_MAX ? (ssize_t)len : -1; + } + addr +=3D left_in_page; + len +=3D 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. */ --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640258; cv=none; d=zohomail.com; s=zohoarc; b=ULikvDLq6cNdWjSBZlfJEoPR6KcZzrN7pa0nT/uwasit4Qj8IF1wzwSpmDk/a7bSeMaG6OZ8RJE6CFWPNZSgkEhk+RGwsFinUIFylpknRg9gZa2G8epXBxljyJc/MP2wN7e2y7veGF7+yrXz/jRvnim3hgDKR/JzKFCfjI453Hk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640258; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=/8kHpTuA8EYvqEwEVmTpwAp8qVVL2ZJoscaVrRBS+xo=; b=CT39pvjLJw7WSk9fcBY8N6VnpLZ2cpUVPCJxQb1OnTE1Ntno55sKK8lIXfiMeWJUfRe28oXi0t+KnwQ8LypkwwLdpDHoPI2uKPPVfHnQsl2CrHva1afhC6FrIzVKPNrqQptmk5yeruDLHPUOEmuni4NQZ6cXJPNJrwga7XJ/mbg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640258134602.757709452976; Tue, 7 Jun 2022 15:17:38 -0700 (PDT) Received: from localhost ([::1]:54230 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhW4-0006Fi-SO for importer@patchew.org; Tue, 07 Jun 2022 18:17:36 -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) 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) 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-Google-Smtp-Source: ABdhPJxfabKX1CvHdcidbpt0CuRw+0TATiUWd3+5nYDCUSaZgfTTh0E4gCWmYA5HSVPQxvYruOzdfw== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640260084100001 Content-Type: text/plain; charset="utf-8" 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=C3=A9e --- 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_u= long addr) =20 char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) { - /* TODO: Make this something that isn't fixed size. */ - char *s =3D malloc(1024); - size_t len =3D 0; - - if (!s) { + ssize_t len =3D 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); } =20 void softmmu_unlock_user(CPUArchState *env, void *p, --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654639558; cv=none; d=zohomail.com; s=zohoarc; b=jJAsKGfOe55ETh5tSe5fw8Ia5lKdhkY/uQzPeWkieBHlQJncY+y6PrmxcHk7Q3iZdHgseeiLg3L5+sTip9pznHXVrsD/B7ZbzVWpeUB++CKKyXdjlmtK0WvuJXMnvM/Rs++rJMmCTInD1a61yBbYqH11O4lZVYZcWmLgFg8sjag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654639558; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rkh+LDqP33Cbq4HWpFkXCgNp8t9Pp+94sT7PUU0Lz2Q=; b=exHrz2iPcqj6kIxrqF4yYo0TtO9Y8r42yqM/FYCXO0CgxY8nuS4qqnCNVK8DKtZK9aUv6r443QU2YfUrG8+2zNn+iyBKiTgERJmuQhcDLekvj7BI3nATOyWmqA4DkMxkzTHi94h+9C5WDNfvowfq3mm0ut3GeP67MgqZDQAVaDM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654639558601440.6788792158154; Tue, 7 Jun 2022 15:05:58 -0700 (PDT) Received: from localhost ([::1]:35360 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhKn-0007bK-CQ for importer@patchew.org; Tue, 07 Jun 2022 18:05:57 -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) 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) 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-Google-Smtp-Source: ABdhPJztP9DzfMWYbUaWP6h4tx6Y1I/8zlZVcIHQDyCm18rNssrz91B7rEYiEnX+FymzyPCs+GpkWA== 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) 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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654639560235100001 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=C3=A9e --- 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/aarch= 64-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=3Daarch64 TARGET_BASE_ARCH=3Darm TARGET_XML_FILES=3D gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml TARGET_HAS_BFLT=3Dy +CONFIG_SEMIHOSTING=3Dy CONFIG_ARM_COMPATIBLE_SEMIHOSTING=3Dy diff --git a/configs/targets/aarch64_be-linux-user.mak b/configs/targets/aa= rch64_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=3Darm TARGET_BIG_ENDIAN=3Dy TARGET_XML_FILES=3D gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml TARGET_HAS_BFLT=3Dy +CONFIG_SEMIHOSTING=3Dy CONFIG_ARM_COMPATIBLE_SEMIHOSTING=3Dy 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=3Dcommon,oabi TARGET_SYSTBL=3Dsyscall.tbl TARGET_XML_FILES=3D gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-v= fp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-prof= ile.xml gdb-xml/arm-m-profile-mve.xml TARGET_HAS_BFLT=3Dy +CONFIG_SEMIHOSTING=3Dy CONFIG_ARM_COMPATIBLE_SEMIHOSTING=3Dy diff --git a/configs/targets/armeb-linux-user.mak b/configs/targets/armeb-l= inux-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=3Dsyscall.tbl TARGET_BIG_ENDIAN=3Dy TARGET_XML_FILES=3D gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-v= fp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-prof= ile.xml gdb-xml/arm-m-profile-mve.xml TARGET_HAS_BFLT=3Dy +CONFIG_SEMIHOSTING=3Dy CONFIG_ARM_COMPATIBLE_SEMIHOSTING=3Dy diff --git a/configs/targets/riscv32-linux-user.mak b/configs/targets/riscv= 32-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=3Driscv32 TARGET_BASE_ARCH=3Driscv TARGET_ABI_DIR=3Driscv TARGET_XML_FILES=3D gdb-xml/riscv-32bit-cpu.xml gdb-xml/riscv-32bit-fpu.xm= l gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-32bit-virtual.xml +CONFIG_SEMIHOSTING=3Dy CONFIG_ARM_COMPATIBLE_SEMIHOSTING=3Dy diff --git a/configs/targets/riscv64-linux-user.mak b/configs/targets/riscv= 64-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=3Driscv64 TARGET_BASE_ARCH=3Driscv TARGET_ABI_DIR=3Driscv TARGET_XML_FILES=3D gdb-xml/riscv-64bit-cpu.xml gdb-xml/riscv-32bit-fpu.xm= l gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-64bit-virtual.xml +CONFIG_SEMIHOSTING=3Dy CONFIG_ARM_COMPATIBLE_SEMIHOSTING=3Dy 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 =C2=A9 2020 by Keith Packard + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef SEMIHOSTING_GUESTFD_H +#define SEMIHOSTING_GUESTFD_H + +typedef enum GuestFDType { + GuestFDUnused =3D 0, + GuestFDHost =3D 1, + GuestFDGDB =3D 2, + GuestFDStatic =3D 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 @@ */ =20 #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" =20 @@ -123,27 +124,6 @@ static int open_modeflags[12] =3D { O_RDWR | O_CREAT | O_APPEND | O_BINARY }; =20 -typedef enum GuestFDType { - GuestFDUnused =3D 0, - GuestFDHost =3D 1, - GuestFDGDB =3D 2, - GuestFDFeatureFile =3D 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 =20 /** @@ -268,98 +248,6 @@ common_semi_sys_exit_extended(CPUState *cs, int nr) =20 #endif =20 -/* - * 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 =3D g_array_new(FALSE, TRUE, sizeof(GuestFD)); - } - - /* SYS_OPEN should return nonzero handle on success. Start guestfd fro= m 1 */ - for (i =3D 1; i < guestfd_array->len; i++) { - GuestFD *gf =3D &g_array_index(guestfd_array, GuestFD, i); - - if (gf->type =3D=3D 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 <=3D 0 || guestfd >=3D 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 =3D do_get_guestfd(guestfd); - - assert(gf); - gf->type =3D use_gdb_syscalls() ? GuestFDGDB : GuestFDHost; - gf->hostfd =3D 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 =3D do_get_guestfd(guestfd); - - assert(gf); - gf->type =3D 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 =3D do_get_guestfd(guestfd); - - if (!gf || gf->type =3D=3D 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[] =3D { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; =20 -static void init_featurefile_guestfd(int guestfd) -{ - GuestFD *gf =3D do_get_guestfd(guestfd); - - assert(gf); - gf->type =3D GuestFDFeatureFile; - gf->featurefile_offset =3D 0; -} - -static uint32_t featurefile_closefn(CPUState *cs, GuestFD *gf) +static uint32_t staticfile_closefn(CPUState *cs, GuestFD *gf) { /* Nothing to do */ return 0; } =20 -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, Guest= FD *gf, return set_swi_errno(cs, -1); } =20 -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 =3D cs->env_ptr; @@ -703,11 +582,11 @@ static uint32_t featurefile_readfn(CPUState *cs, Gues= tFD *gf, } =20 for (i =3D 0; i < len; i++) { - if (gf->featurefile_offset >=3D sizeof(featurefile_data)) { + if (gf->staticfile.off >=3D gf->staticfile.len) { break; } - s[i] =3D featurefile_data[gf->featurefile_offset]; - gf->featurefile_offset++; + s[i] =3D gf->staticfile.data[gf->staticfile.off]; + gf->staticfile.off++; } =20 unlock_user(s, buf, len); @@ -716,21 +595,21 @@ static uint32_t featurefile_readfn(CPUState *cs, Gues= tFD *gf, return len - i; } =20 -static uint32_t featurefile_isattyfn(CPUState *cs, GuestFD *gf) +static uint32_t staticfile_isattyfn(CPUState *cs, GuestFD *gf) { return 0; } =20 -static uint32_t featurefile_seekfn(CPUState *cs, GuestFD *gf, +static uint32_t staticfile_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) { - gf->featurefile_offset =3D offset; + gf->staticfile.off =3D offset; return 0; } =20 -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; } =20 typedef struct GuestFDFunctions { @@ -759,13 +638,13 @@ static const GuestFDFunctions guestfd_fns[] =3D { .seekfn =3D gdb_seekfn, .flenfn =3D gdb_flenfn, }, - [GuestFDFeatureFile] =3D { - .closefn =3D featurefile_closefn, - .writefn =3D featurefile_writefn, - .readfn =3D featurefile_readfn, - .isattyfn =3D featurefile_isattyfn, - .seekfn =3D featurefile_seekfn, - .flenfn =3D featurefile_flenfn, + [GuestFDStatic] =3D { + .closefn =3D staticfile_closefn, + .writefn =3D staticfile_writefn, + .readfn =3D staticfile_readfn, + .isattyfn =3D staticfile_isattyfn, + .seekfn =3D staticfile_seekfn, + .flenfn =3D staticfile_flenfn, }, }; =20 @@ -886,7 +765,8 @@ target_ulong do_common_semihosting(CPUState *cs) errno =3D EACCES; return set_swi_errno(cs, -1); } - init_featurefile_guestfd(guestfd); + staticfile_guestfd(guestfd, featurefile_data, + sizeof(featurefile_data)); return guestfd; } =20 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 =C2=A9 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 =3D g_array_new(FALSE, TRUE, sizeof(GuestFD)); + } + + /* SYS_OPEN should return nonzero handle on success. Start guestfd fro= m 1 */ + for (i =3D 1; i < guestfd_array->len; i++) { + GuestFD *gf =3D &g_array_index(guestfd_array, GuestFD, i); + + if (gf->type =3D=3D 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 <=3D 0 || guestfd >=3D 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 =3D do_get_guestfd(guestfd); + + if (!gf || gf->type =3D=3D 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 =3D do_get_guestfd(guestfd); + + assert(gf); + gf->type =3D use_gdb_syscalls() ? GuestFDGDB : GuestFDHost; + gf->hostfd =3D hostfd; +} + +void staticfile_guestfd(int guestfd, const uint8_t *data, size_t len) +{ + GuestFD *gf =3D do_get_guestfd(guestfd); + + assert(gf); + gf->type =3D GuestFDStatic; + gf->staticfile.data =3D data; + gf->staticfile.len =3D len; + gf->staticfile.off =3D 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 =3D do_get_guestfd(guestfd); + + assert(gf); + gf->type =3D 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: f= iles( 'config.c', 'console.c', --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640606; cv=none; d=zohomail.com; s=zohoarc; b=Gmho09hF8zb//zWtgn27B+AaErOpsRpi8g85Gb4teDtGvN1XR5JxLUfTP1hT722yWxCoXynqYECX7Nycumn+SnEO4gzvouBSdoeCQs7Bl2RchdM7xKiawu8xbDoRECZRjPu0R4a3JUYLTGimG9kMtqCnBThAtv7lnkIVi20LMUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640606; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=POGsKDtk5VyDw6taq7a+DFAfnB+E161joQzVuaaJQNU=; b=DB0QG8489OxS7K2/DK+DMcQX8BqpGZRN8KG5lr9GVbsPSDHWY4akoYbt17abWDhnpjyAOXNCqglyo1BDQHBKZh4AX0fuudDTfUG62il9Oilxz6MuqU3ODlLHJ0VUehrwvYpP9Uo51nYJEfPob2wqO4vgHbmT//feKAAnGJYVvmM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640606534658.0171828408764; Tue, 7 Jun 2022 15:23:26 -0700 (PDT) Received: from localhost ([::1]:37400 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhbg-0006nx-P7 for importer@patchew.org; Tue, 07 Jun 2022 18:23:24 -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) 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) 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-Google-Smtp-Source: ABdhPJz44RxGbPIEpoqpQWa3OcIo6xqBJgt1JuTTETHNsRgNhFLx6uIICGklUN47sETF9uN0wFoTVA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640608431100001 Content-Type: text/plain; charset="utf-8" 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; =20 static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong er= r) { - target_ulong reg0 =3D common_semi_arg(cs, 0); - if (ret =3D=3D (target_ulong)-1) { - errno =3D err; - set_swi_errno(cs, -1); - reg0 =3D ret; +#ifdef CONFIG_USER_ONLY + TaskState *ts =3D cs->opaque; + ts->swi_errno =3D err; +#else + syscall_err =3D err; +#endif } else { /* Fixup syscalls that use nonstardard return conventions. */ + target_ulong reg0 =3D common_semi_arg(cs, 0); switch (reg0) { case TARGET_SYS_WRITE: case TARGET_SYS_READ: - reg0 =3D common_semi_syscall_len - ret; + ret =3D common_semi_syscall_len - ret; break; case TARGET_SYS_SEEK: - reg0 =3D 0; + ret =3D 0; break; default: - reg0 =3D ret; break; } } - common_semi_set_ret(cs, reg0); + common_semi_set_ret(cs, ret); } =20 static target_ulong common_semi_flen_buf(CPUState *cs) --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654638972; cv=none; d=zohomail.com; s=zohoarc; b=JzJYPGJM03b4yTtVhUToPIlO+LeUTKG6mwuK3m5naUgryYvTvbzzdMndkNLZf0kPFfxHpSsuLH6PgDAJcrdg9WbzlAeX1JwaqSZIdNZmScpmvo2nYNn1lXdJeDoFgquGIqn6UY3PBUU+a+n94h3A4vad2Td+U59zi6XeycpTZ9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654638972; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=p/ByxHSH2cGT1rev+93zutWkxBbbXGRHAxNMtlkHM9g=; b=jfFAqiaFqDCxOJSLSvJULvcTpTpFRcaSIwT7MZ5fjuyQllVoL/tB16zt+h+WhP+ihMa9y0MtteGwNke0d6Y4f0zSO8KL+S0VjzPOMHEDevSuizKMTFf9ix/FawXqdzPtst2nAAEpKOmTiqwnLoyR5FAm9teV0K3ItgyEfquXGj0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654638972686830.4807208287838; Tue, 7 Jun 2022 14:56:12 -0700 (PDT) Received: from localhost ([::1]:45402 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhBK-0003CG-1X for importer@patchew.org; Tue, 07 Jun 2022 17:56:10 -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) 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) 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-Google-Smtp-Source: ABdhPJzukC1sgK+0nMC7GzYsSYhmXgSgQYYL26Skct1AbWxPX1SzZM1w68KEv5GQ7HBUsvFHOwprig== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654638973628100001 Content-Type: text/plain; charset="utf-8" The err parameter is non-zero if and only if an error occured. Use this instead of ret =3D=3D -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=C3=A9e --- 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; =20 static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong er= r) { - if (ret =3D=3D (target_ulong)-1) { + if (err) { #ifdef CONFIG_USER_ONLY TaskState *ts =3D cs->opaque; ts->swi_errno =3D err; --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654638701; cv=none; d=zohomail.com; s=zohoarc; b=bKX119AcBxpar2qfGAWRzTWH8Bd4yB/9cLTKkeJRmS9Od/3kzEru6Je6jWT/rLuUkjYY9SQCaFfoCR3bJXO5Uvz2Z+pEb3Sj0Beq9eYDUpkP4NgGrYCpZY7Qn2IQLx2mSBzcFg3lI/IRPhFmYklEuannTuri+gEP8yinZISln8Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654638701; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=S8Pjs5cOqk+oGTnK7FdV4C/Z/WLlWltx0dBsRwUkzCw=; b=lF5zxdmbaMAFpszrFrzrlVWh6f9Qvj4nUd6bpleJki/jSLAnZVPJO5iwjcr4vY7gYZCS4nddM7PtAqMePi0XE0H7s2DfficIxO7U2h/inozM2fNlq/dI432cIUUeY3xt6HzNX9DLQMxoHN79XNDT51wCMK7lyKbLCzFitOL5qaw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654638701467878.7351687083963; Tue, 7 Jun 2022 14:51:41 -0700 (PDT) Received: from localhost ([::1]:36524 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyh6y-0005Ki-Dz for importer@patchew.org; Tue, 07 Jun 2022 17:51:40 -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) 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) 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-Google-Smtp-Source: ABdhPJwarJuaUNvcg4xcud4APcFiAAzZTRJiG1mZguhwe0d2pCabDHzVGQ/j5pDzZzT+BLrZE/Mpmg== 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) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654638702252100001 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=C3=A9e 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 =3D be32_to_cpu(size); - common_semi_set_ret(cs, size); - errno =3D 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 =3D be32_to_cpu(size); + } + common_semi_cb(cs, ret, err); } =20 static int common_semi_open_guestfd; --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654639175; cv=none; d=zohomail.com; s=zohoarc; b=LRdZd9fkqMxNJl4C5RLCX0MR8ngARxsNDHjTXGNX6J/0Okj0+Em6S3H8Zr0Th1ApnyQ0w4bBiWk4s97WMpthKFSydGKE+F3/ZEKf0Y/bzACAGF8yMxGMTUCHY/6zNZL4yvAPxveLwcZjvGUkQfNL3+IgL9CaTswl5kKlqTY5V+Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654639175; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=C3K2YfSefvABy7M7hq8Nd6JC/pCWOqgHqbPOWNo+9Kc=; b=KvSrd+TkUofbsjzQrMx5Xc9I9fRhc5IsiZHB8+YrS20rlNJ8UF4IStDaoLlkpwxHdi/+m0hkK0GS9//xB0iaZsKpVIQ40NNUkekOg9z9QVKg/WOmg6ckCVl0UXBNmnOxvyLQT/hnjFxcgAasoUgBbjTyGyBiqN103IOBByv1mxk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654639175464745.9272322876712; Tue, 7 Jun 2022 14:59:35 -0700 (PDT) Received: from localhost ([::1]:53806 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhEb-0000jy-KD for importer@patchew.org; Tue, 07 Jun 2022 17:59:33 -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) 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) 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-Google-Smtp-Source: ABdhPJyFXZ/2LOnq1IBGQOULH4fO7fjB3RJlHYRbTZGlRkrjavlg+/GnwhwShDvMgfYJiUJoDNBGpg== 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) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654639176430100001 Use common_semi_cb to return results instead of calling set_swi_errno and common_semi_set_ret directly. Reviewed-by: Alex Benn=C3=A9e 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 =3D=3D (target_ulong)-1) { - errno =3D err; - set_swi_errno(cs, -1); + if (err) { dealloc_guestfd(common_semi_open_guestfd); } else { associate_guestfd(common_semi_open_guestfd, ret); ret =3D common_semi_open_guestfd; } - common_semi_set_ret(cs, ret); + common_semi_cb(cs, ret, err); } =20 static target_ulong --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654639776; cv=none; d=zohomail.com; s=zohoarc; b=F+QEpAbfhgTgWI/+4pkolKX/vQpd6mT4wEDn0KOd99Glqa4bGBHjFXnS7Iz/eBHuYKzEhLbBDYHiLN+oaYBAUopuqdIhFaNkTjCyCDm2L+7Xb1uBUD5PXH/ByNNOpGyQbYxA0vyNdAnYWsWsWd/XeKdX0UpWETt5wz4DQRJ03fQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654639776; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=flfdYEEk3NMKhEfMPxtBMupTnCfSumkwbaxeL9Y18Qo=; b=dtSehiAkMFFX6WKOb7ZkbNxluFRqQ8g9DmMJ99q0bqQXSlf6IYcaB1jC6rI0TIBGnc76WDzCFngvIhWkc3nyYolXXNktTPAyhRoywTB5kONNtBlWqwNoTmxUchzVlY+DJr8fMRK2+b/CJZJBNVF8TGAdj7re81bAEXSfScBjERQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 165463977641861.03808872165439; Tue, 7 Jun 2022 15:09:36 -0700 (PDT) Received: from localhost ([::1]:44258 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhOJ-0005vd-9e for importer@patchew.org; Tue, 07 Jun 2022 18:09:35 -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) 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) 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-Google-Smtp-Source: ABdhPJzzvM1k7yaw3rGBuzpBnZzSH+p6rAwYGhJEH69LOZebJaD9tEiWhFnS9BNF6v/xYPOYxAKanw== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654639777440100001 Content-Type: text/plain; charset="utf-8" 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=C3=A9e --- 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 =20 -target_ulong do_common_semihosting(CPUState *cs); +void do_common_semihosting(CPUState *cs); =20 #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] =3D do_common_semihosting(cs); + do_common_semihosting(cs); env->pc +=3D 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] =3D do_common_semihosting(cs); + do_common_semihosting(cs); env->regs[15] +=3D 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] =3D do_common_semihosting(cs); + do_common_semihosting(cs); env->pc +=3D 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 =20 -static inline uint32_t set_swi_errno(CPUState *cs, uint32_t code) -{ - if (code =3D=3D (uint32_t)-1) { -#ifdef CONFIG_USER_ONLY - TaskState *ts =3D cs->opaque; - - ts->swi_errno =3D errno; -#else - syscall_err =3D 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, t= arget_ulong err) common_semi_cb(cs, ret, err); } =20 -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); =20 -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 =3D=3D STDIN_FILENO || gf->hostfd =3D=3D STDOUT_FILENO || gf->hostfd =3D=3D STDERR_FILENO) { - return 0; + ret =3D 0; + } else { + ret =3D close(gf->hostfd); } - return set_swi_errno(cs, close(gf->hostfd)); + common_semi_cb(cs, ret, ret ? errno : 0); } =20 -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 =3D cs->env_ptr; - uint32_t ret; + uint32_t ret =3D 0; char *s =3D 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 =3D write(gf->hostfd, s, len); + unlock_user(s, buf, 0); + if (ret =3D=3D (uint32_t)-1) { + ret =3D 0; + } } - ret =3D set_swi_errno(cs, write(gf->hostfd, s, len)); - unlock_user(s, buf, 0); - if (ret =3D=3D (uint32_t)-1) { - ret =3D 0; - } - /* Return bytes not written */ - return len - ret; + /* Return bytes not written, on error as well. */ + common_semi_cb(cs, len - ret, 0); } =20 -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 =3D cs->env_ptr; - uint32_t ret; + uint32_t ret =3D 0; char *s =3D 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 =3D read(gf->hostfd, s, len); + } while (ret =3D=3D -1 && errno =3D=3D EINTR); + unlock_user(s, buf, len); + if (ret =3D=3D (uint32_t)-1) { + ret =3D 0; + } } - do { - ret =3D set_swi_errno(cs, read(gf->hostfd, s, len)); - } while (ret =3D=3D -1 && errno =3D=3D EINTR); - unlock_user(s, buf, len); - if (ret =3D=3D (uint32_t)-1) { - ret =3D 0; - } - /* Return bytes not read */ - return len - ret; + /* Return bytes not read, on error as well. */ + common_semi_cb(cs, len - ret, 0); } =20 -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); } =20 -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 =3D set_swi_errno(cs, lseek(gf->hostfd, offset, SEEK_SET)= ); - if (ret =3D=3D (uint32_t)-1) { - return -1; - } - return 0; + off_t ret =3D lseek(gf->hostfd, offset, SEEK_SET); + common_semi_cb(cs, ret, ret =3D=3D -1 ? errno : 0); } =20 -static uint32_t host_flenfn(CPUState *cs, GuestFD *gf) +static void host_flenfn(CPUState *cs, GuestFD *gf) { struct stat buf; - uint32_t ret =3D set_swi_errno(cs, fstat(gf->hostfd, &buf)); - if (ret =3D=3D (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; } =20 -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->hos= tfd); + gdb_do_syscall(common_semi_cb, "close,%x", gf->hostfd); } =20 -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 =3D 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); } =20 -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 =3D 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); } =20 -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->ho= stfd); + gdb_do_syscall(common_semi_cb, "isatty,%x", gf->hostfd); } =20 -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); } =20 -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)); } =20 #define SHFB_MAGIC_0 0x53 @@ -554,63 +503,57 @@ static const uint8_t featurefile_data[] =3D { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; =20 -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); } =20 -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 =3D EBADF; - return set_swi_errno(cs, -1); + common_semi_cb(cs, -1, EBADF); } =20 -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 =3D cs->env_ptr; - uint32_t i; + uint32_t i =3D 0; char *s; =20 (void) env; /* Used in arm softmmu lock_user implicitly */ s =3D lock_user(VERIFY_WRITE, buf, len, 0); - if (!s) { - return len; - } - - for (i =3D 0; i < len; i++) { - if (gf->staticfile.off >=3D gf->staticfile.len) { - break; + if (s) { + for (i =3D 0; i < len; i++) { + if (gf->staticfile.off >=3D gf->staticfile.len) { + break; + } + s[i] =3D gf->staticfile.data[gf->staticfile.off]; + gf->staticfile.off++; } - s[i] =3D gf->staticfile.data[gf->staticfile.off]; - gf->staticfile.off++; + unlock_user(s, buf, len); } =20 - unlock_user(s, buf, len); - /* Return number of bytes not read */ - return len - i; + common_semi_cb(cs, len - i, 0); } =20 -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); } =20 -static uint32_t staticfile_seekfn(CPUState *cs, GuestFD *gf, - target_ulong offset) +static void staticfile_seekfn(CPUState *cs, GuestFD *gf, target_ulong offs= et) { gf->staticfile.off =3D offset; - return 0; + common_semi_cb(cs, 0, 0); } =20 -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); } =20 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 =3D EFAULT; \ - return set_swi_errno(cs, -1); \ + goto do_fault; \ } \ } else { \ if (get_user_u32(arg ## n, args + (n) * 4)) { \ - errno =3D EFAULT; \ - return set_swi_errno(cs, -1); \ + goto do_fault; \ } \ } \ } while (0) @@ -695,7 +636,7 @@ static inline bool is_64bit_semihosting(CPUArchState *e= nv) * 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 =3D 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 =3D 0; + int hostfd; =20 GET_ARG(0); GET_ARG(1); GET_ARG(2); s =3D lock_user_string(arg0); if (!s) { - errno =3D EFAULT; - return set_swi_errno(cs, -1); + goto do_fault; } if (arg1 >=3D 12) { unlock_user(s, arg0, 0); - errno =3D EINVAL; - return set_swi_errno(cs, -1); - } - - guestfd =3D alloc_guestfd(); - if (guestfd < 0) { - unlock_user(s, arg0, 0); - errno =3D EMFILE; - return set_swi_errno(cs, -1); + common_semi_cb(cs, -1, EINVAL); + break; } =20 if (strcmp(s, ":tt") =3D=3D 0) { - int result_fileno; - /* * We implement SH_EXT_STDOUT_STDERR, so: * open for read =3D=3D stdin @@ -748,63 +680,67 @@ target_ulong do_common_semihosting(CPUState *cs) * open for append =3D=3D stderr */ if (arg1 < 4) { - result_fileno =3D STDIN_FILENO; + hostfd =3D STDIN_FILENO; } else if (arg1 < 8) { - result_fileno =3D STDOUT_FILENO; + hostfd =3D STDOUT_FILENO; } else { - result_fileno =3D STDERR_FILENO; + hostfd =3D STDERR_FILENO; } - associate_guestfd(guestfd, result_fileno); - unlock_user(s, arg0, 0); - return guestfd; - } - if (strcmp(s, ":semihosting-features") =3D=3D 0) { - unlock_user(s, arg0, 0); + ret =3D alloc_guestfd(); + associate_guestfd(ret, hostfd); + } else if (strcmp(s, ":semihosting-features") =3D=3D 0) { /* We must fail opens for modes other than 0 ('r') or 1 ('rb')= */ if (arg1 !=3D 0 && arg1 !=3D 1) { - dealloc_guestfd(guestfd); - errno =3D 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 =3D guestfd; - ret =3D common_semi_gdb_syscall(cs, common_semi_open_cb, - "open,%s,%x,1a4", arg0, (int)arg= 2 + 1, - gdb_open_modeflags[arg1]); - } else { - ret =3D set_swi_errno(cs, open(s, open_modeflags[arg1], 0644)); - if (ret =3D=3D (uint32_t)-1) { - dealloc_guestfd(guestfd); + ret =3D -1; + err =3D EACCES; } else { - associate_guestfd(guestfd, ret); - ret =3D guestfd; + ret =3D alloc_guestfd(); + staticfile_guestfd(ret, featurefile_data, + sizeof(featurefile_data)); + } + } else if (use_gdb_syscalls()) { + unlock_user(s, arg0, 0); + common_semi_open_guestfd =3D alloc_guestfd(); + gdb_do_syscall(common_semi_open_cb, + "open,%s,%x,1a4", arg0, (int)arg2 + 1, + gdb_open_modeflags[arg1]); + break; + } else { + hostfd =3D open(s, open_modeflags[arg1], 0644); + if (hostfd < 0) { + ret =3D -1; + err =3D errno; + } else { + ret =3D 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); =20 gf =3D get_guestfd(arg0); if (!gf) { - errno =3D EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } - - ret =3D 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 =3D 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) =20 gf =3D get_guestfd(arg0); if (!gf) { - errno =3D EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].writefn(cs, gf, arg1, len); + break; =20 - 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) =20 gf =3D get_guestfd(arg0); if (!gf) { - errno =3D EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].readfn(cs, gf, arg1, len); + break; =20 - return guestfd_fns[gf->type].readfn(cs, gf, arg1, len); case TARGET_SYS_READC: - return qemu_semihosting_console_inc(cs->env_ptr); + ret =3D 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); =20 gf =3D get_guestfd(arg0); if (!gf) { - errno =3D EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].isattyfn(cs, gf); + break; =20 - return guestfd_fns[gf->type].isattyfn(cs, gf); case TARGET_SYS_SEEK: GET_ARG(0); GET_ARG(1); =20 gf =3D get_guestfd(arg0); if (!gf) { - errno =3D EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].seekfn(cs, gf, arg1); + break; =20 - return guestfd_fns[gf->type].seekfn(cs, gf, arg1); case TARGET_SYS_FLEN: GET_ARG(0); =20 gf =3D get_guestfd(arg0); if (!gf) { - errno =3D EBADF; - return set_swi_errno(cs, -1); + goto do_badf; } + guestfd_fns[gf->type].flenfn(cs, gf); + break; =20 - 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 =3D (target_ulong) -1; - + len =3D asprintf(&s, "/tmp/qemu-%x%02x", getpid(), (int)arg1 & 0xf= f); /* Make sure there's enough space in the buffer */ - if (strlen(s) < arg2) { - char *output =3D lock_user(VERIFY_WRITE, arg0, arg2, 0); - strcpy(output, s); - unlock_user(output, arg0, arg2); - ul_ret =3D 0; + if (len < 0 || len >=3D arg2) { + common_semi_set_ret(cs, -1); + break; } + p =3D 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 =3D common_semi_gdb_syscall(cs, common_semi_cb, "unlink,%s= ", - arg0, (int)arg1 + 1); - } else { - s =3D lock_user_string(arg0); - if (!s) { - errno =3D EFAULT; - return set_swi_errno(cs, -1); - } - ret =3D 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 =3D lock_user_string(arg0); + if (!s) { + goto do_fault; + } + ret =3D 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 =3D lock_user_string(arg0); - s2 =3D lock_user_string(arg2); - if (!s || !s2) { - errno =3D EFAULT; - ret =3D set_swi_errno(cs, -1); - } else { - ret =3D set_swi_errno(cs, rename(s, s2)); + if (!s) { + goto do_fault; } - if (s2) - unlock_user(s2, arg2, 0); - if (s) + s2 =3D lock_user_string(arg2); + if (!s2) { unlock_user(s, arg0, 0); - return ret; + goto do_fault; + } + ret =3D 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 =3D time(NULL); + common_semi_cb(cs, ul_ret, ul_ret =3D=3D -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 =3D lock_user_string(arg0); - if (!s) { - errno =3D EFAULT; - return set_swi_errno(cs, -1); - } - ret =3D 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 =3D lock_user_string(arg0); + if (!s) { + goto do_fault; + } + ret =3D system(s); + unlock_user(s, arg0, 0); + common_semi_cb(cs, ret, ret =3D=3D -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) =20 if (output_size > input_size) { /* Not enough space to store command-line arguments. */ - errno =3D E2BIG; - return set_swi_errno(cs, -1); + common_semi_cb(cs, -1, E2BIG); + break; } =20 /* Adjust the command-line length. */ if (SET_ARG(1, output_size - 1)) { /* Couldn't write back to argument block */ - errno =3D EFAULT; - return set_swi_errno(cs, -1); + goto do_fault; } =20 /* Lock the buffer on the ARM side. */ output_buffer =3D lock_user(VERIFY_WRITE, arg0, output_size, 0= ); if (!output_buffer) { - errno =3D EFAULT; - return set_swi_errno(cs, -1); + goto do_fault; } =20 /* Copy the command-line arguments. */ @@ -1029,9 +984,8 @@ target_ulong do_common_semihosting(CPUState *cs) =20 if (copy_from_user(output_buffer, ts->info->arg_strings, output_size)) { - errno =3D EFAULT; - status =3D set_swi_errno(cs, -1); - goto out; + unlock_user(output_buffer, arg0, 0); + goto do_fault; } =20 /* 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) =20 if (fail) { /* Couldn't write back to argument block */ - errno =3D 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 =3D get_clock() - clock_start; if (sizeof(target_ulong) =3D=3D 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] =3D do_common_semihosting(cs); + do_common_semihosting(cs); env->pc +=3D 4; } else { qemu_log_mask(CPU_LOG_INT, "...handling as semihosting call 0x%x\n", env->regs[0]); - env->regs[0] =3D do_common_semihosting(cs); + do_common_semihosting(cs); env->regs[15] +=3D 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] =3D 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) =20 if (cause =3D=3D RISCV_EXCP_SEMIHOST) { if (env->priv >=3D PRV_S) { - env->gpr[xA0] =3D do_common_semihosting(cs); + do_common_semihosting(cs); env->pc +=3D 4; return; } --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640693; cv=none; d=zohomail.com; s=zohoarc; b=NWtK+XRBgl8fUUUTbVd/w8Cj3o8UO+5BH1weez4KUTr8DqU9ewbzv9cie7SPxVMtQBOgkEzTCNNYJV2Tp/cEkBrvYShQY0k7VNbYzOeoxyjSJcsh37/y2a3LEDBjEFN7+SVuNx5tlOjSEEklz4+1JvCrmvTG1XQija3Lxb+BtUU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640693; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=uMtpnimZ5QgXW0nogoQSK/48rYQQQjk5GcZeidEuLkk=; b=WNg7v3Lk/OWG9qazG+LiIcqAgTEAegoLK95PfNHcLJr9mffkWoxNl/ymMyLp71TbAxGmDeGwZMikq1GEJC93nCkxf8Ldlz32srWFIZipQLOzDrMHd0DBqFqKt4eaz55B/TomW0qXEiOlRGwxunNzDCKf4Jhel0YsymZNNhivL80= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640693256282.55302374092605; Tue, 7 Jun 2022 15:24:53 -0700 (PDT) Received: from localhost ([::1]:43146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhd6-0002ET-61 for importer@patchew.org; Tue, 07 Jun 2022 18:24:52 -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) 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) 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-Google-Smtp-Source: ABdhPJw4zgi9ObbjcHidDztcVnEnKyRrgXw5AHplUtACFJ0HhtEUG1PgZUpAvrVNUHBYpGKz1+dA7g== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640694891100001 Content-Type: text/plain; charset="utf-8" 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=C3=A9e --- {semihosting =3D> include/semihosting}/common-semi.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {semihosting =3D> 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 --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654639503; cv=none; d=zohomail.com; s=zohoarc; b=f9ohVbk9Q1U7udm8RMkRXy78CduRBgqLg/Ekk/evjL3vq0noNxp47IWYrxnvF93uMS/dtxbZSZwbUr9aSbX/k3B17cQAtw0+lHE7JZeNMwy9tKvH/BDu4zeOp4fTDUVKORaz5KUPsYD/EVa6g6QNRKOmrCFpKBGLHtIZIu3AsWQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654639503; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=iN+ZQSw54uXkjIjlKW1pFe1Mm40xsm8fxs3pFQz2QI0=; b=B0GFVoSCvHFOewULaVpjdluM8ITVtBHyUjZTr36wiNNE1gBpOprUu8jH12kmk8Z9R7u04oNNUtNBuTpv5ejbTz3sIPIEDUJbki7SQja+6m2rQx08uVkXELztS2mfQdfBESq8E5XfcOoZqXP0WjuRM2OVBvEaEwB0skURntLS6xw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16546395037691017.8312999034844; Tue, 7 Jun 2022 15:05:03 -0700 (PDT) Received: from localhost ([::1]:33996 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhJt-0006f4-SU for importer@patchew.org; Tue, 07 Jun 2022 18:05:02 -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) 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) 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-Google-Smtp-Source: ABdhPJxLtucAfG+FxkScfa6moP1LwmHWvEclG3a+1wVfx1QwQ6I77XXdZnR3W9oi6ndKMIYI1e0iyw== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654639505933100001 Content-Type: text/plain; charset="utf-8" The value is zero, and gdb always opens files in binary mode. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- 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 =20 static int gdb_open_modeflags[12] =3D { 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 }; =20 static int open_modeflags[12] =3D { --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640493; cv=none; d=zohomail.com; s=zohoarc; b=j/w6k7C+BLmX+m1CvD8bfM8n4TV/eBtmFmfCFXJRRTrVpRPRZfukDlQOaaC6MC2N7E/SLqjNnX0IGTod0kA5F0ZWMDSFx5co87h0OhOKGxPQSqZA1rdfSz15XTAV3o6JGyODDSfyaQV1VrisxGX4VO9D0Y7uAaumyGdBMAHBoPk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640493; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0Xz6wzUwopMbPAdNCjdjT86fVDAwIGV9xu3XdWWd8EM=; b=OCNawc5n22v4cK6s5JOJwT3UO0shNY3gC6FOC5vM/9ExkXtXCZrJCQYS5bWZp+ZzoZbDjHkoXf6D6bRbjRXQhWDtad0A2DM1xE8bfOxOeAUI76Ss6Ws4/sV5Nb3k9db/sx0DjjVgd2SpfHQtkDdm9A1zTHqN5VWFZLbRlpjDb1I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640493585239.71352395724102; Tue, 7 Jun 2022 15:21:33 -0700 (PDT) Received: from localhost ([::1]:33870 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhZs-0004Hv-05 for importer@patchew.org; Tue, 07 Jun 2022 18:21:32 -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) 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) 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-Google-Smtp-Source: ABdhPJy1Fk7YAm5bVqEgUMJcVAxb/OZ3P6pz582l/rB/c1gnZVMTVocrE8279XIDqe210+VCkOQAEg== 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) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640493756100001 There were 3 copies of these flags. Place them in the file with gdb_do_syscall, with which they belong. Reviewed-by: Alex Benn=C3=A9e 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 =20 +/* 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" =20 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 =20 -#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] =3D { 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; =20 -#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; =20 -#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; --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641087; cv=none; d=zohomail.com; s=zohoarc; b=lMtcf4fD/bcpIlSJfJOR6z2K27XOLym1n8dd+ph9GDqyoUOopqLFvrIh5+IiFV9B4kpxqR0XneGhS/pyZkMM9NTiC1JLJXKC9RnF/eJScPNO/VdUA7kW1fbEzRYCcs99i8rRiKq0KEjF5CFlomsXCXtYaUN/eaRr6KaBEilrrTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641087; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=oxNDqSzg5Hw13giw27gxbf2VZjOoolDUxgjGkiB+OjI=; b=Dw2sMY2O7stkKBz/GEQgVbSsrPF8Er/cJR9S9SE7jLJLWvSMEyO2Qtnti5DpHzTCjyIoNzanArAKtzngwxAhn8mE+w0zt8k53zbZINq9soToaeWH2D/2FI8o9+gfBvfxv1Dhh1U4xsA45NUqAMQmjc3R91t5naCLpGt+4hu1TxI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641087242334.53932788402267; Tue, 7 Jun 2022 15:31:27 -0700 (PDT) Received: from localhost ([::1]:54548 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhjR-0001ai-Nh for importer@patchew.org; Tue, 07 Jun 2022 18:31:26 -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) 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) 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-Google-Smtp-Source: ABdhPJyfChfeDcj2FvrbO0ezblrO3bPxqSQX3rTSR0MH/aAz2Y+tEywy1yT/jMK/RlOyWfaSNhBSqw== 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) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641089561100001 We have two copies of these structures, and require them in semihosting/ going forward. Reviewed-by: Alex Benn=C3=A9e 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 =20 +/* 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" =20 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 =20 -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) =20 static void translate_stat(CPUM68KState *env, target_ulong addr, struct st= at *s) { - struct m68k_gdb_stat *p; + struct gdb_stat *p; =20 - if (!(p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct m68k_gdb_stat)= , 0))) + p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); + if (!p) { /* FIXME - should this return an error code? */ return; + } p->gdb_st_dev =3D cpu_to_be32(s->st_dev); p->gdb_st_ino =3D cpu_to_be32(s->st_ino); p->gdb_st_mode =3D cpu_to_be32(s->st_mode); @@ -114,7 +92,7 @@ static void translate_stat(CPUM68KState *env, target_ulo= ng addr, struct stat *s) p->gdb_st_atime =3D cpu_to_be32(s->st_atime); p->gdb_st_mtime =3D cpu_to_be32(s->st_mtime); p->gdb_st_ctime =3D cpu_to_be32(s->st_ctime); - unlock_user(p, addr, sizeof(struct m68k_gdb_stat)); + unlock_user(p, addr, sizeof(struct gdb_stat)); } =20 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 =20 -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; =20 - p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct nios2_gdb_stat), 0); + p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); =20 if (!p) { return false; @@ -128,7 +104,7 @@ static bool translate_stat(CPUNios2State *env, target_u= long addr, p->gdb_st_atime =3D cpu_to_be32(s->st_atime); p->gdb_st_mtime =3D cpu_to_be32(s->st_mtime); p->gdb_st_ctime =3D 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; } =20 --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641188; cv=none; d=zohomail.com; s=zohoarc; b=kau0EBSFcDEE2f3gK0/23A9/yNJJ9dAka+QAPJtFVnuetxptiKRgTMXBhnXhkE7kznDqZN7uUpKkrVk7TlJyThVnk6+Pka5ZDL98HxctnNfgARW+if+qnMgbyvnbJGUU+/nxqi7jANwLbS7SQvMHet8UPmJuZc3/7e5e+TUXJDo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641188; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Kx+MEVjvVE2Ahq5JmBhmO/kM2x5CWc0DLkolZoxHrtg=; b=Ha9FByO4ZjgUHYDSkeVgJXoXF/Qe+lXbhdzI4oUoH1rdy6qNPRhPn3a1Fc2cIPUkY7zNiM/2RNoOVXJRoMSb8k+GJFVBw4b7ARgYVXATxQp/Cfy/fUCQMGxlIp6YFhwZjnhD6nSlXrAT7lqKPgmaaaN3pyghs7RCrblfLKoSKG8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641188333384.51217929911616; Tue, 7 Jun 2022 15:33:08 -0700 (PDT) Received: from localhost ([::1]:59982 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhl5-0005SA-5Z for importer@patchew.org; Tue, 07 Jun 2022 18:33:07 -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) 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) 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-Google-Smtp-Source: ABdhPJyEAPuQrxqn9mCdD5WCha2R9mt5x0kOglPF8BM1HMCJacdOJyygXKLQzRrpsCK24sHB0IeyZQ== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641189979100001 Content-Type: text/plain; charset="utf-8" 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=C3=A9e --- 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 =20 +/* 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; --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640943; cv=none; d=zohomail.com; s=zohoarc; b=KujZGAa1NT1pzzpBpJJaco8rQVG2OYUeWCcN5AF7m7N2I2nWpm49ksdWbyEpaZoI+x2bkTRUEpcByPAiC/k7GykgL6WocCLY5Qd/RFjb4UyKFGoNdXRveNcVtEUSymvQoALyShBI9c/LRCv9qLhEKXDKb0ej9NzfG0Oa6Jjec0c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640943; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DQgmHJOF15U5zzhYNDvf6Vx+wAM6Z86OsiDfINyn1f0=; b=dBy2xYPcSywayp0PMAQi9b56jGkpN1FFSla+boVn1uyoXn/2V9xCmWSRvL/MP97eBIkdvoPLz+6CQeQeG16LVqai1nZe+161lkrC8R6zXkkes64+/I1ux1RuMDs3SnwDoibM90XfVpD97JufzxZ1VOpqnRJ8jCKHRVRTwNtBVBM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640943892670.854347016761; Tue, 7 Jun 2022 15:29:03 -0700 (PDT) Received: from localhost ([::1]:51778 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhh8-00089G-TE for importer@patchew.org; Tue, 07 Jun 2022 18:29:02 -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) 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) 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-Google-Smtp-Source: ABdhPJzdh1eresUF3oXfwB6MxnLbx1v+Ulvso1HB8/NHnB9DmOMFlEOM4uYXPwJjIoN9919g3CppPQ== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640944519100001 Content-Type: text/plain; charset="utf-8" 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 *use= r_ctx) } else { err =3D 0; } + + /* Convert GDB error numbers back to host error numbers. */ +#define E(X) case GDB_E##X: err =3D 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 =3D EINVAL; + break; + } +#undef E + gdbserver_state.current_syscall_cb(gdbserver_state.c_cpu, ret, err= ); gdbserver_state.current_syscall_cb =3D NULL; } --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640784; cv=none; d=zohomail.com; s=zohoarc; b=RZNsXKojobf6ZZUccEZwVORsEmIq/Gdq0sThvRVY+NllfpqzDZVXeOWHFZwUEglSMfzSHv8P5YEfeX+T9cB1okaCpnGDXdZtu17FbktiURBSsn9WjXEvcRuIBAoXCxW4TPyj9op5WKJwV67aXDh+S2tRBB4CB+AOjcKlzvEOYe0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640784; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+SUmfyQ28nnP+FCpGEWeUk9jn7QL0Ax1+bQ0aHyUN6Q=; b=T3RkuZVUkLm64cp2N0QPvQhYs6PjA9ONGunLo9QapmJuVcm1GAVSFIJCEeL9KKELzTBD8YmE7UDHnwBRc5ZaaoQB0GzkI17miet/94nMF/00/KvSDBHNQesn11xPkjK8Qu6UkViu04naBUtq+9RJE9W/gKdtkcJaC/3nS+nlDzk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640784438919.035272928319; Tue, 7 Jun 2022 15:26:24 -0700 (PDT) Received: from localhost ([::1]:45928 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyheZ-00045D-16 for importer@patchew.org; Tue, 07 Jun 2022 18:26:23 -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) 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) 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-Google-Smtp-Source: ABdhPJxPEHV9SRGmOQ4v3prBz7XXsPX+Y57GqgRZHSyTw+IOj3/eQUwbc5d/AMFQt10iopxqCNMF+Q== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640785486100001 Content-Type: text/plain; charset="utf-8" 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 =3D be32_to_cpu(size); + /* The size is always stored in big-endian order, extract the valu= e. */ + uint64_t size; + cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + + offsetof(struct gdb_stat, gdb_st_size), + &size, 8, 0); + ret =3D be64_to_cpu(size); } common_semi_cb(cs, ret, err); } --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640684; cv=none; d=zohomail.com; s=zohoarc; b=jebEqQpgxQNIgtnBLkJDHVWxKRxwSoAhFdBl73KDCYS4nrvYEoaSg0Jt1wVCKA7nS8THG1rC3R/E1VCGD+6X1Oorm4/VRkBEjtr/fKjlWunfwPHJzNcMRE7e+/7TOxrlyekkUB/0ZHBcr014IGCYFKAlyrWFvoxD9GmhS88BNn4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640684; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=97oCc36lcB1BPvxIKIrtIrCafpxgp+n+HDsHM7STsDo=; b=T48Rcbi7Zrr56SWuZT8nKfHaVk+1R2vUu1T0B3SEtrkZ8sTWT3LjuSr1ROg2xeNhpxrvCHZVvnxGzjs8/YOpaAmCL8e8Y1zWEUUz9zh8r3wdTVL6wGvDplzWu+m9rKfmKrfLSKPE1F7YqhuyGFxR2GVC/wmuE7mkAwzNvdkFG2c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640684204936.6468896953369; Tue, 7 Jun 2022 15:24:44 -0700 (PDT) Received: from localhost ([::1]:42388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhcx-0001hz-78 for importer@patchew.org; Tue, 07 Jun 2022 18:24:43 -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) 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) 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-Google-Smtp-Source: ABdhPJw9IJ/HMXcTwbLNFzPO3V5fhZ7L4bjaHgE1c5fmq9AMIRQkvdtlSgAjp8hJ3n9rns6hPsUixA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640684972100001 Content-Type: text/plain; charset="utf-8" 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 =3D=3D TARGET_SYS_EXIT_EXTENDED || is_a64(cs->env_ptr)); } =20 +static inline bool is_64bit_semihosting(CPUArchState *env) +{ + return is_a64(env); +} #endif /* TARGET_ARM */ =20 #ifdef TARGET_RISCV @@ -238,6 +242,10 @@ common_semi_sys_exit_extended(CPUState *cs, int nr) return (nr =3D=3D TARGET_SYS_EXIT_EXTENDED || sizeof(target_ulong) =3D= =3D 8); } =20 +static inline bool is_64bit_semihosting(CPUArchState *env) +{ + return riscv_cpu_mxl(env) !=3D MXL_RV32; +} #endif =20 /* @@ -587,17 +595,6 @@ static const GuestFDFunctions guestfd_fns[] =3D { * 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) !=3D MXL_RV32; -#else -#error un-handled architecture -#endif -} - =20 #define GET_ARG(n) do { \ if (is_64bit_semihosting(env)) { \ --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640922; cv=none; d=zohomail.com; s=zohoarc; b=JaX4gf13C0bulwVLa+kVhA7wT06nAKXiJwqGLMmg1JaY0OvmZwZ/LtfBdAUMc8TbLEn6aa9+z+BEaATazvoFFlt75wmIxHAXtOsD9oXa42H28rbBFJ8WNW5tPAbRYOMUP4OoCt2VhCILSvoAF9vj6oKxGWoMI/30dirlxph0Da0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640922; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zVpqLWTsPExWd6f8jF1EY/VDSSozWoVLxOFKhLPqh5c=; b=jrqFEy1XSjopo/kJ3A0oipHFDm/20Bvs9w0Be7+d+Ve7ctCpzxHbomIEeGmCjttP6QjY03T7qe2jYkdgkfrZCaVPKwIYpTYexyI2e/deIAplnQPZ4uzFkkKqp+AyiPnz2IfJhF6mlNex8oYYeH8W5533HSm/sno/n8W4DNFzgR4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640922510672.3385783050466; Tue, 7 Jun 2022 15:28:42 -0700 (PDT) Received: from localhost ([::1]:50876 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhgm-0007Vg-Gb for importer@patchew.org; Tue, 07 Jun 2022 18:28:40 -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) 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) 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-Google-Smtp-Source: ABdhPJz2gQf9UDXhWV8N9aDCeSaVYxjWbMM5rZOCyjwVnwfHfobuZNcjL9N0z31Tby4DrgbTMzRsDg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640924642100001 Content-Type: text/plain; charset="utf-8" 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 =3D ARM_CPU(cs); + CPUARMState *env =3D &cpu->env; + return is_a64(env) ? env->xregs[31] : env->regs[13]; +} #endif /* TARGET_ARM */ =20 #ifdef TARGET_RISCV @@ -246,6 +253,13 @@ static inline bool is_64bit_semihosting(CPUArchState *= env) { return riscv_cpu_mxl(env) !=3D MXL_RV32; } + +static inline target_ulong common_semi_stack_bottom(CPUState *cs) +{ + RISCVCPU *cpu =3D RISCV_CPU(cs); + CPURISCVState *env =3D &cpu->env; + return env->gpr[xSP]; +} #endif =20 /* @@ -301,31 +315,15 @@ static void common_semi_cb(CPUState *cs, target_ulong= ret, target_ulong err) common_semi_set_ret(cs, ret); } =20 +/* + * 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 =3D ARM_CPU(cs); - CPUARMState *env =3D &cpu->env; - - if (is_a64(env)) { - sp =3D env->xregs[31]; - } else { - sp =3D env->regs[13]; - } -#endif -#ifdef TARGET_RISCV - RISCVCPU *cpu =3D RISCV_CPU(cs); - CPURISCVState *env =3D &cpu->env; - - sp =3D env->gpr[xSP]; -#endif - + target_ulong sp =3D common_semi_stack_bottom(cs); return sp - 64; } =20 --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654639735; cv=none; d=zohomail.com; s=zohoarc; b=hdrkgDpAh+lF+o7ccaA+Z3jVV22kS5lUruOGwIIm9SlW7VwoZpVsBez8ky27TCY0C9iUtl+wMwHOFrIk53waOZA6YxpBR+2/8SN7KnvsE2veb9iXcXhAeP4E1nK5kk6r/JUXwX1XGCO5zdd1750PjFdf2s44RbMWtqt4e3hCqrI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654639735; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Lkal5KDK4537KjIiM5DwOIkXPoQZ/flNccQ9lkg/eXQ=; b=KunJd3ID8Q8ZMXUEu+rPBJ9kHTQK4/5oRL5BbYuUm9Imojhd1qHvomZ7/Bjn6jX+q9eVGOrV+Q7DRkeCDdpDKH0H5JPQe+DG+KdiWNvhVcOrCK39RO4dfMgwb0jKfNfs5ozsXqNsXHCAegOXBEH4dOFm/bHXDlpFyMNkYGHaBN8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654639735196203.968481643186; Tue, 7 Jun 2022 15:08:55 -0700 (PDT) Received: from localhost ([::1]:42442 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhNd-0004Xf-V9 for importer@patchew.org; Tue, 07 Jun 2022 18:08:54 -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) 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) 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-Google-Smtp-Source: ABdhPJzREz8uQPaYulNHQGczUUTiEl7EhOoDs8JxOiPA2iGEflfIwJ8KvlBrd1hDzLcljzNxITHF0w== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654639737139100001 Content-Type: text/plain; charset="utf-8" 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(CP= UState *cs) CPUARMState *env =3D &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 */ =20 #ifdef TARGET_RISCV @@ -260,6 +266,11 @@ static inline target_ulong common_semi_stack_bottom(CP= UState *cs) CPURISCVState *env =3D &cpu->env; return env->gpr[xSP]; } + +static inline bool common_semi_has_synccache(CPUArchState *env) +{ + return true; +} #endif =20 /* @@ -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); --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641361; cv=none; d=zohomail.com; s=zohoarc; b=Tu7mYJ8iTp/NDF07FN54qNHEnya2X3LFX+1iOZ24orsBlNGnibbuzeRJ2Juckl/e/rzDdpf4k7fa2dwLO1h3hrDo8IQvdRW7F3SN7CbpVIzo04JfPbUXpJr5qinqrq4oA1agBteDC3pzC+4Db9OoII+LTzc14rGb8a4qBvwsaf8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641361; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=G9K32Uykj512TMGRbyCkUtnhTvXkXswNZtlz1FFInW0=; b=fHn30+/wI2m7Xzf5H2wCTBX03Z1pNIEMpcE9VCczARpPJxX1qETHvAXqzxRUzI7owNQe84lkJGmFXKrQDgrla5KMrdyMtq+AYZV6eg9TiXASGo+jreNJRLJei2xOoFs/uqpftoGEe5nR95LCvuv0LgQ2uivZ0jbaLtoKUmLOuao= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641361109501.1010430239844; Tue, 7 Jun 2022 15:36:01 -0700 (PDT) Received: from localhost ([::1]:40076 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhnr-0002dV-KZ for importer@patchew.org; Tue, 07 Jun 2022 18:36:00 -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) 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) 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-Google-Smtp-Source: ABdhPJxhiXapqqkc7YoPyHyPSgzPl7FP7JpWys19HSB1rG8UGC7loedZn6yBJu1uPUJIeWwBt2iWjw== 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) 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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641363069100003 Move the ARM and RISCV specific helpers into their own header file. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e 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-targe= t.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 =3D ARM_CPU(cs); + CPUARMState *env =3D &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 =3D ARM_CPU(cs); + CPUARMState *env =3D &cpu->env; + if (is_a64(env)) { + env->xregs[0] =3D ret; + } else { + env->regs[0] =3D ret; + } +} + +static inline bool common_semi_sys_exit_extended(CPUState *cs, int nr) +{ + return (nr =3D=3D 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 =3D ARM_CPU(cs); + CPUARMState *env =3D &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-t= arget.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 =C2=A9 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 =3D RISCV_CPU(cs); + CPURISCVState *env =3D &cpu->env; + return env->gpr[xA0 + argno]; +} + +static inline void common_semi_set_ret(CPUState *cs, target_ulong ret) +{ + RISCVCPU *cpu =3D RISCV_CPU(cs); + CPURISCVState *env =3D &cpu->env; + env->gpr[xA0] =3D ret; +} + +static inline bool common_semi_sys_exit_extended(CPUState *cs, int nr) +{ + return (nr =3D=3D TARGET_SYS_EXIT_EXTENDED || sizeof(target_ulong) =3D= =3D 8); +} + +static inline bool is_64bit_semihosting(CPUArchState *env) +{ + return riscv_cpu_mxl(env) !=3D MXL_RV32; +} + +static inline target_ulong common_semi_stack_bottom(CPUState *cs) +{ + RISCVCPU *cpu =3D RISCV_CPU(cs); + CPURISCVState *env =3D &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 =20 @@ -182,96 +179,7 @@ static LayoutInfo common_semi_find_bases(CPUState *cs) =20 #endif =20 -#ifdef TARGET_ARM -static inline target_ulong -common_semi_arg(CPUState *cs, int argno) -{ - ARMCPU *cpu =3D ARM_CPU(cs); - CPUARMState *env =3D &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 =3D ARM_CPU(cs); - CPUARMState *env =3D &cpu->env; - if (is_a64(env)) { - env->xregs[0] =3D ret; - } else { - env->regs[0] =3D ret; - } -} - -static inline bool -common_semi_sys_exit_extended(CPUState *cs, int nr) -{ - return (nr =3D=3D 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 =3D ARM_CPU(cs); - CPUARMState *env =3D &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 =3D RISCV_CPU(cs); - CPURISCVState *env =3D &cpu->env; - return env->gpr[xA0 + argno]; -} - -static inline void -common_semi_set_ret(CPUState *cs, target_ulong ret) -{ - RISCVCPU *cpu =3D RISCV_CPU(cs); - CPURISCVState *env =3D &cpu->env; - env->gpr[xA0] =3D ret; -} - -static inline bool -common_semi_sys_exit_extended(CPUState *cs, int nr) -{ - return (nr =3D=3D TARGET_SYS_EXIT_EXTENDED || sizeof(target_ulong) =3D= =3D 8); -} - -static inline bool is_64bit_semihosting(CPUArchState *env) -{ - return riscv_cpu_mxl(env) !=3D MXL_RV32; -} - -static inline target_ulong common_semi_stack_bottom(CPUState *cs) -{ - RISCVCPU *cpu =3D RISCV_CPU(cs); - CPURISCVState *env =3D &cpu->env; - return env->gpr[xSP]; -} - -static inline bool common_semi_has_synccache(CPUArchState *env) -{ - return true; -} -#endif +#include "common-semi-target.h" =20 /* * The semihosting API has no concept of its errno being thread-safe, --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641251; cv=none; d=zohomail.com; s=zohoarc; b=kfvapX9J9TUHm1MBlyasfIJih/BvjCAHhBzGnU2QCr2jBfLTUoiHXpG5mRvu3F1nchiJtBX3u7E3V4wuCxGXPnh+YzRdJYtwb+NYXUB/rOPqBy3Z6xwkkbwkbFYfG4xLB5FAu2ekU2sQYUzUOA8yOfjGD9Myv3aea2mKzX5GX1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641251; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=EuRn4zS6JF83w7ZKExtBXrrlNlKkOsGtWU334MtZYfk=; b=foNpfQtMED4tlVNZOHkiKcuvCMM7nn+Xe6C0+0P2mdOqpHICPXNykrI9IJBSpOESQaoYUyfC5HSqKYy7YfyIKTMklT2QMRYdc4KspFbQzCKDtedg1zbVugZohC7Hz6TO3fBC7KUOwXhlwopgbeXy+IOn9Q2yu/DqVIBdVFPjN38= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641251585723.1547716018806; Tue, 7 Jun 2022 15:34:11 -0700 (PDT) Received: from localhost ([::1]:34564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhm5-0007Mv-Tz for importer@patchew.org; Tue, 07 Jun 2022 18:34:09 -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) 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) 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-Google-Smtp-Source: ABdhPJzLWFJ28C92EclgzSgogRjyvDQ2zl+BclQoR+duZcOSFwzxLGGRjTsv9ZIWtEAdGzDiK2nlPA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641252552100001 Content-Type: text/plain; charset="utf-8" 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; =20 - (void) env; /* Used implicitly by arm lock_user macro */ nr =3D common_semi_arg(cs, 0) & 0xffffffffU; args =3D common_semi_arg(cs, 1); =20 @@ -636,12 +635,12 @@ void do_common_semihosting(CPUState *cs) break; =20 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; =20 case TARGET_SYS_WRITE0: - ret =3D qemu_semihosting_console_outs(cs->env_ptr, args); + ret =3D qemu_semihosting_console_outs(env, args); common_semi_set_ret(cs, ret); break; =20 @@ -672,7 +671,7 @@ void do_common_semihosting(CPUState *cs) break; =20 case TARGET_SYS_READC: - ret =3D qemu_semihosting_console_inc(cs->env_ptr); + ret =3D qemu_semihosting_console_inc(env); common_semi_set_ret(cs, ret); break; =20 --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641505; cv=none; d=zohomail.com; s=zohoarc; b=LiX0C2IAM1M+yiAvC1ABTw+wplPGsxFNyAf01s6DgtQbw7axpC3vAQQtdxf+8eQuIboTLk4VkS6QzXtfkUh7bpscpDBgvAC/RZzgzwVgl7UiGGtJys0NDfycd6rflIhu12kzMSoJACaT+g10l+/4medDAR9SM+G+QrcIgyYvJ3M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641505; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=q02gLvDTypu1IqXBxqUwd894XkIlOvDDNDcpgAlYDsE=; b=O9JEWGSn7XM5ScRGUMpFhN6EIf1On1WGi2dvazJCojkRroRfPFPa0h7nfF8sOZDftbUumopiSuov92TsmV26Chm3Se/cBEd5j6lr/6QHhgBGT9UwX0wlnxULZ8sYHq/S65JZKv+PdnAKvMpLzGYYCerZmbL4Cpn+8dYzGTlTZg4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641505578457.8469054027878; Tue, 7 Jun 2022 15:38:25 -0700 (PDT) Received: from localhost ([::1]:48446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhqC-0008Ly-H8 for importer@patchew.org; Tue, 07 Jun 2022 18:38:24 -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) 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) 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-Google-Smtp-Source: ABdhPJzsBGOVpPMqLMq4WjG5PTujrkYMizQkVPmDyxKKUw24cwlzo9NFbmkUOF9yP8N9bWkSl7Nmvg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641505966100001 Content-Type: text/plain; charset="utf-8" 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=C3=A9e --- 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) =20 #include "common-semi-target.h" =20 +/* + * 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[] =3D { }, }; =20 -/* - * 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. * --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641169; cv=none; d=zohomail.com; s=zohoarc; b=ecSw2k/hbVDhZhWczjNE+HSr5UrgOxC9KiHbxVR/W4VqM5ArgHyoIFcHgtH7dIqR812KlEkCC0cBSo7Y7ZW5ceDx5EeKNOAqMkOy9m3JzSmIPv3EH6uQPsi4ByaWXE1Za1fWJ7ojUHA7aIQ6vwfFiJGa+6+Jeo37zDqVu3kr18Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641169; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=z+JtWho86ij1SieoVrV2spu+O+srn9UNC1GawTS88jY=; b=jVadgVd/42V+WmWu17d0wFCjIFUYrgmnJMHV3ROUQ4LOs4ebPYIO3+oqOUB4rFJqAn/WGGivJ7ereUBW97+3jt21ArBxQQR7bJ5Ffdtq3Zemnqdn0jlsYunA1s/A7DLX1GD49Eg/2eXSTmGsbU7trv/hUShB+dXl4vc/KEa+m1s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641169475559.3373905295026; Tue, 7 Jun 2022 15:32:49 -0700 (PDT) Received: from localhost ([::1]:58922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhkm-0004gn-Cl for importer@patchew.org; Tue, 07 Jun 2022 18:32:48 -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) 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) 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-Google-Smtp-Source: ABdhPJzboWmz9YlRLor4KvkfxY0n0ashrhRx64tWZBiFZ+ifppxequIjvKCoVBINTQBjgYLxSSrGKQ== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641170119100001 Content-Type: text/plain; charset="utf-8" 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 @@ */ =20 #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" =20 #ifdef CONFIG_USER_ONLY #include "qemu.h" @@ -98,21 +99,6 @@ static int gdb_open_modeflags[12] =3D { GDB_O_RDWR | GDB_O_CREAT | GDB_O_APPEND, }; =20 -static int open_modeflags[12] =3D { - 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 =20 /** @@ -284,20 +270,6 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, ta= rget_ulong err) common_semi_cb(cs, ret, err); } =20 -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 =3D 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 =3D alloc_guestfd(); - gdb_do_syscall(common_semi_open_cb, - "open,%s,%x,1a4", arg0, (int)arg2 + 1, - gdb_open_modeflags[arg1]); - break; } else { - hostfd =3D open(s, open_modeflags[arg1], 0644); - if (hostfd < 0) { - ret =3D -1; - err =3D errno; - } else { - ret =3D 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 =20 static GArray *guestfd_array; =20 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 tl= en) +{ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + char c; + + if (tlen =3D=3D 0) { + ssize_t slen =3D target_strlen(str); + + if (slen < 0) { + return -EFAULT; + } + if (slen >=3D 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 !=3D 0) { + return -EINVAL; + } + return tlen; +} + +static int validate_lock_user_string(char **pstr, CPUState *cs, + target_ulong tstr, target_ulong tlen) +{ + int ret =3D validate_strlen(cs, tstr, tlen); + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + char *str =3D NULL; + + if (ret > 0) { + str =3D lock_user(VERIFY_READ, tstr, ret, true); + ret =3D str ? 0 : -EFAULT; + } + *pstr =3D 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 =3D alloc_guestfd(); + associate_guestfd(guestfd, ret); + ret =3D 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 =3D validate_strlen(cs, fname, fname_len); + if (len < 0) { + complete(cs, -1, -len); + return; + } + + gdb_open_complete =3D 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 =3D cs->env_ptr; + char *p; + int ret, host_flags; + + ret =3D 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 =3D O_WRONLY; + } else if (gdb_flags & GDB_O_RDWR) { + host_flags =3D O_RDWR; + } else { + host_flags =3D O_RDONLY; + } + if (gdb_flags & GDB_O_CREAT) { + host_flags |=3D O_CREAT; + } + if (gdb_flags & GDB_O_TRUNC) { + host_flags |=3D O_TRUNC; + } + if (gdb_flags & GDB_O_EXCL) { + host_flags |=3D O_EXCL; + } + + ret =3D open(p, host_flags, mode); + if (ret < 0) { + complete(cs, -1, errno); + } else { + int guestfd =3D 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', )) =20 specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_SOFTMMU'], if_true: f= iles( --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641346; cv=none; d=zohomail.com; s=zohoarc; b=cL3nE2OnPAQC3bKuELTT9aHKno9wVnatJs1a9zpZhEjnjD2RGoi8QygmRHf2ZF/09CzBgJDDNexbkiC/DzUp9qeXcSTSDmBTAJx9agcJwZPIXLJBqsxfdBi0EySiVzwvM/Zg8uEveJpyh+B2HEoaH4itTFnRXwEu8FduLhTjD7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641346; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=b+MA80j3xqUJAkmx63/7RsbQGAdy+LQJceEO3bo0dWc=; b=M6PfuCFGbASeFKTTQgp/QkFfMF1RJLa2Yoj9qdB6a3/mOE6bYj2gmGhW0IdBDo1CRKGwRrRJoRx35wLzGxTE9h9if/EjoOs44zWYRs95z7jC09AacO2gJvhI5ZVJ4XLRznT3Gke4S1x1ne0aYzcP3OCSHHj3URDlBnknbZRgVeo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641346742278.73876864441183; Tue, 7 Jun 2022 15:35:46 -0700 (PDT) Received: from localhost ([::1]:39184 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhnc-000234-Sa for importer@patchew.org; Tue, 07 Jun 2022 18:35:44 -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) 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) 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-Google-Smtp-Source: ABdhPJy0CFc+JxZl0WVbqK1LQSGj7jenbosBiCUJMYHSmZf/loSRk801PsYoPfFtU5iHvqzwEBUu0w== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641347005100001 Content-Type: text/plain; charset="utf-8" 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); =20 +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, tar= get_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); =20 -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 =3D=3D STDIN_FILENO || - gf->hostfd =3D=3D STDOUT_FILENO || - gf->hostfd =3D=3D STDERR_FILENO) { - ret =3D 0; - } else { - ret =3D 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) } } =20 -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[] =3D { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; =20 -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) } =20 typedef struct GuestFDFunctions { - sys_closefn *closefn; sys_writefn *writefn; sys_readfn *readfn; sys_isattyfn *isattyfn; @@ -478,7 +448,6 @@ typedef struct GuestFDFunctions { =20 static const GuestFDFunctions guestfd_fns[] =3D { [GuestFDHost] =3D { - .closefn =3D host_closefn, .writefn =3D host_writefn, .readfn =3D host_readfn, .isattyfn =3D host_isattyfn, @@ -486,7 +455,6 @@ static const GuestFDFunctions guestfd_fns[] =3D { .flenfn =3D host_flenfn, }, [GuestFDGDB] =3D { - .closefn =3D gdb_closefn, .writefn =3D gdb_writefn, .readfn =3D gdb_readfn, .isattyfn =3D gdb_isattyfn, @@ -494,7 +462,6 @@ static const GuestFDFunctions guestfd_fns[] =3D { .flenfn =3D gdb_flenfn, }, [GuestFDStatic] =3D { - .closefn =3D staticfile_closefn, .writefn =3D staticfile_writefn, .readfn =3D staticfile_readfn, .isattyfn =3D staticfile_isattyfn, @@ -585,13 +552,7 @@ void do_common_semihosting(CPUState *cs) =20 case TARGET_SYS_CLOSE: GET_ARG(0); - - gf =3D 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; =20 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; } =20 +static void do_dealloc_guestfd(GuestFD *gf) +{ + gf->type =3D 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 =3D do_get_guestfd(guestfd); =20 assert(gf); - gf->type =3D 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= ); } =20 +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_comple= te_cb complete, unlock_user(p, fname, 0); } =20 +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 !=3D STDIN_FILENO && + gf->hostfd !=3D STDOUT_FILENO && + gf->hostfd !=3D 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_compl= ete_cb complete, host_open(cs, complete, fname, fname_len, gdb_flags, mode); } } + +void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, in= t fd) +{ + GuestFD *gf =3D 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); +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641839; cv=none; d=zohomail.com; s=zohoarc; b=fvJRQoBK2JFhVWyg5NdFx0VSFsbQ/nxHBYxEvZhaUQNjAPT0sn6EBFpecToBbCFemqjiFmlVy3QLDvzlNi1aOZnqI4p9LgRPb60dR9uOM+5spq7SemYAqf8GR7eiUs+In56EZqJW7md56Ma4s2PiWgdktH+Cb2dQ6OPnVRL4lVA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641839; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=yudZM/x/b/b005gZSABZ/vgFwSBuZhYdS78za3bDPvA=; b=AkfdGpDwfgFEbBapwGJchtED/Z+qtUD5k28Fc4GTCjhsb8mcWwaN9WO8pVfeGP/+/VXI8qojSpITiKJlZvdsjHvkAO+3SAbEp/FRGK/zfEEbU3SWxKbmYf/En70hypn+lgcu6JuZRKwR+V0YcdjfmHrWYZ72v9Rt/UEKy7ZMizA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641839748626.6404209385323; Tue, 7 Jun 2022 15:43:59 -0700 (PDT) Received: from localhost ([::1]:59902 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhva-0007md-Jh for importer@patchew.org; Tue, 07 Jun 2022 18:43:58 -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) 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) 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-Google-Smtp-Source: ABdhPJxniVTunhMsBLdlDNGSsczLGZN+LH2cmasQsPtMAKuQ7BLXKjXRHCs7Q+5KbDbkcH/sF+0JWg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641841857100001 Content-Type: text/plain; charset="utf-8" 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). */ =20 +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_complet= e_cb complete, void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete, int fd); =20 +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 r= et, target_ulong err) target_ulong reg0 =3D common_semi_arg(cs, 0); switch (reg0) { case TARGET_SYS_WRITE: - case TARGET_SYS_READ: ret =3D 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); } =20 +/* + * SYS_READ and SYS_WRITE always return the number of bytes not read/writt= en. + * 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 =3D cs->env_ptr; + target_ulong args =3D common_semi_arg(cs, 1); + target_ulong arg2; + GET_ARG(2); + + if (err) { + do_fault: + ret =3D 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, tar= get_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); } =20 -static void host_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - CPUArchState *env =3D cs->env_ptr; - uint32_t ret =3D 0; - char *s =3D lock_user(VERIFY_WRITE, buf, len, 0); - (void) env; /* Used in arm softmmu lock_user implicitly */ - if (s) { - do { - ret =3D read(gf->hostfd, s, len); - } while (ret =3D=3D -1 && errno =3D=3D EINTR); - unlock_user(s, buf, len); - if (ret =3D=3D (uint32_t)-1) { - ret =3D 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); } =20 -static void gdb_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - common_semi_syscall_len =3D 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); } =20 -static void staticfile_readfn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - CPUArchState *env =3D cs->env_ptr; - uint32_t i =3D 0; - char *s; - - (void) env; /* Used in arm softmmu lock_user implicitly */ - s =3D lock_user(VERIFY_WRITE, buf, len, 0); - if (s) { - for (i =3D 0; i < len; i++) { - if (gf->staticfile.off >=3D gf->staticfile.len) { - break; - } - s[i] =3D 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) =20 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[] =3D { [GuestFDHost] =3D { .writefn =3D host_writefn, - .readfn =3D host_readfn, .isattyfn =3D host_isattyfn, .seekfn =3D host_seekfn, .flenfn =3D host_flenfn, }, [GuestFDGDB] =3D { .writefn =3D gdb_writefn, - .readfn =3D gdb_readfn, .isattyfn =3D gdb_isattyfn, .seekfn =3D gdb_seekfn, .flenfn =3D gdb_flenfn, }, [GuestFDStatic] =3D { .writefn =3D staticfile_writefn, - .readfn =3D staticfile_readfn, .isattyfn =3D staticfile_isattyfn, .seekfn =3D staticfile_seekfn, .flenfn =3D staticfile_flenfn, @@ -582,13 +543,7 @@ void do_common_semihosting(CPUState *cs) GET_ARG(0); GET_ARG(1); GET_ARG(2); - len =3D arg2; - - gf =3D 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; =20 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_comple= te_cb complete, gdb_do_syscall(complete, "close,%x", (target_ulong)gf->hostfd); } =20 +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_compl= ete_cb complete, } } =20 +static void host_read(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + void *ptr =3D lock_user(VERIFY_WRITE, buf, len, 0); + ssize_t ret; + + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + do { + ret =3D read(gf->hostfd, ptr, len); + } while (ret =3D=3D -1 && errno =3D=3D EINTR); + if (ret =3D=3D -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 le= n) +{ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + target_ulong rest =3D gf->staticfile.len - gf->staticfile.off; + void *ptr; + + if (len > rest) { + len =3D rest; + } + ptr =3D 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 +=3D 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_comp= lete_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 =3D get_guestfd(fd); + + if (gf) { + semihost_sys_read_gf(cs, complete, gf, buf, len); + } else { + complete(cs, -1, EBADF); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640420; cv=none; d=zohomail.com; s=zohoarc; b=GUiHuESSQ2Whz/0ekZCLe6eGSqqnNTXJivDXqHKcJ0kmZMGQ/OMdZxq1D+cBejOoL68khbnaoKV+RdLz/3gzh4P/NNsIfSzh3cGkk6HSjUGn//7RPs6y0cbv1yKLTTn031ZyEovb/xS8BrNnLVvYi633vki1/93BbK6shTzkufw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640420; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=aIvUmlrlxeBsrl8hvkOSPQp6kZeifrxdpoCRLiGBt5g=; b=SZKTLPs29IvPw4hRI4DJjZKHNHS6N6TMpgS4gRv/kFTtfqZsnIvSaqG5OShPmZ+GMfdwWF5WfNl8mxhwL0WJEbs+N1AbzyzV7K+40HzW1umNJnTj74cK2/XmL8HJVx/CGGGlnWpDjvYvM/P7RT5iEKjckWtd5Wn/p/trw6tQIWU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640420314296.0558119161784; Tue, 7 Jun 2022 15:20:20 -0700 (PDT) Received: from localhost ([::1]:59698 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhYh-0002ZT-63 for importer@patchew.org; Tue, 07 Jun 2022 18:20:19 -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) 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) 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-Google-Smtp-Source: ABdhPJwL5AhkbDJta9S4YFo+c3OJUafD3RjjrOHKIOrO/YZeROtCk3J/CYHedkRyye74ho65v98ejA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640421227100001 Content-Type: text/plain; charset="utf-8" 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_complet= e_cb complete, void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete, GuestFD *gf, target_ulong buf, target_ulong len); =20 +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 } =20 -static target_ulong common_semi_syscall_len; - static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong er= r) { if (err) { @@ -230,9 +228,6 @@ static void common_semi_cb(CPUState *cs, target_ulong r= et, target_ulong err) /* Fixup syscalls that use nonstardard return conventions. */ target_ulong reg0 =3D common_semi_arg(cs, 0); switch (reg0) { - case TARGET_SYS_WRITE: - ret =3D common_semi_syscall_len - ret; - break; case TARGET_SYS_SEEK: ret =3D 0; break; @@ -294,30 +289,10 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, t= arget_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); =20 -static void host_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - CPUArchState *env =3D cs->env_ptr; - uint32_t ret =3D 0; - char *s =3D lock_user(VERIFY_READ, buf, len, 1); - (void) env; /* Used in arm softmmu lock_user implicitly */ - if (s) { - ret =3D write(gf->hostfd, s, len); - unlock_user(s, buf, 0); - if (ret =3D=3D (uint32_t)-1) { - ret =3D 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) } } =20 -static void gdb_writefn(CPUState *cs, GuestFD *gf, - target_ulong buf, uint32_t len) -{ - common_semi_syscall_len =3D 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[] =3D { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; =20 -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) } =20 typedef struct GuestFDFunctions { - sys_writefn *writefn; sys_isattyfn *isattyfn; sys_seekfn *seekfn; sys_flenfn *flenfn; @@ -412,19 +372,16 @@ typedef struct GuestFDFunctions { =20 static const GuestFDFunctions guestfd_fns[] =3D { [GuestFDHost] =3D { - .writefn =3D host_writefn, .isattyfn =3D host_isattyfn, .seekfn =3D host_seekfn, .flenfn =3D host_flenfn, }, [GuestFDGDB] =3D { - .writefn =3D gdb_writefn, .isattyfn =3D gdb_isattyfn, .seekfn =3D gdb_seekfn, .flenfn =3D gdb_flenfn, }, [GuestFDStatic] =3D { - .writefn =3D staticfile_writefn, .isattyfn =3D staticfile_isattyfn, .seekfn =3D staticfile_seekfn, .flenfn =3D 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; =20 @@ -530,13 +486,7 @@ void do_common_semihosting(CPUState *cs) GET_ARG(0); GET_ARG(1); GET_ARG(2); - len =3D arg2; - - gf =3D 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; =20 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_complet= e_cb complete, (target_ulong)gf->hostfd, buf, len); } =20 +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_comple= te_cb complete, } } =20 +static void host_write(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong buf, target_ulong len) +{ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + void *ptr =3D lock_user(VERIFY_READ, buf, len, 1); + ssize_t ret; + + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + ret =3D write(gf->hostfd, ptr, len); + complete(cs, ret, ret =3D=3D -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_compl= ete_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 =3D get_guestfd(fd); + + if (gf) { + semihost_sys_write_gf(cs, complete, gf, buf, len); + } else { + complete(cs, -1, EBADF); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654639983080704.7290510588994; Tue, 7 Jun 2022 15:13:03 -0700 (PDT) Received: from localhost ([::1]:50966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhRc-00031c-5A for importer@patchew.org; Tue, 07 Jun 2022 18:13:00 -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) 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) 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-Google-Smtp-Source: ABdhPJwIc0APEIeoXaKrE0f/Xd2Bk+w8HctzT77hqekaLWTRfxtwjT/odlUH9UOgsfqqd6UJTd2w+Q== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1654639984467100001 Content-Type: text/plain; charset="utf-8" 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_comp= lete_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 ssiz= e_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 =3D 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_compl= ete_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 ssiz= e_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 =3D INT32_MAX; + } switch (gf->type) { case GuestFDGDB: gdb_write(cs, complete, gf, buf, len); --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641492; cv=none; d=zohomail.com; s=zohoarc; b=n4Z6ZwuZ+ILTM0v5m5gTG9iV6qO0lwitW5jRgjqwjKBhmAllil4uW66CmXhhVftJfEMhmK3cxD9IqilDyLBsPN6dg6aHuWBXO0UaXivnz04qKqCGY7FoQMc5bpMK09uOPkjczUwK6dvTcA+Vif9K0ComTI4IWbUIyLc2IUQdqwA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641492; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ncxNUdZR+IqcBU6qK03iSEs/qihonQF0cMe72FdHDTw=; b=HC9MhZymIXZxe3sSK3rPkKSNct6MnFLsBS7lE5RYCtvG967ha+cIpuoSqS3OaveEaG14GYf0WxS71P/d5bWA4RzV5TtYTCtVdjuTpb/WmIW6vwDrcWyFHT4cb3ZkwkEbVuzSKr51EmlmN5TB3Wa94BjqRLIqReXYh+HCTurT2Zs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16546414923261003.737513680889; Tue, 7 Jun 2022 15:38:12 -0700 (PDT) Received: from localhost ([::1]:47656 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhpy-0007q5-T9 for importer@patchew.org; Tue, 07 Jun 2022 18:38:10 -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) 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) 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-Google-Smtp-Source: ABdhPJwoE13vG6wOMj8atkFOtyfB0AA1loFPz6VgJqCySMQRyw1S21qTuVqC2BNE4BGm8NzziBruIg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641493940100001 Content-Type: text/plain; charset="utf-8" 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 =20 +/* 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_complet= e_cb complete, void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete, GuestFD *gf, target_ulong buf, target_ulong len= ); =20 +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 =3D err; #endif - } else { - /* Fixup syscalls that use nonstardard return conventions. */ - target_ulong reg0 =3D common_semi_arg(cs, 0); - switch (reg0) { - case TARGET_SYS_SEEK: - ret =3D 0; - break; - default: - break; - } } common_semi_set_ret(cs, ret); } @@ -257,6 +247,18 @@ static void common_semi_rw_cb(CPUState *cs, target_ulo= ng ret, target_ulong err) common_semi_set_ret(cs, arg2 - ret); } =20 +/* + * 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 =3D 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, tar= get_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); =20 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); } =20 -static void host_seekfn(CPUState *cs, GuestFD *gf, target_ulong offset) -{ - off_t ret =3D lseek(gf->hostfd, offset, SEEK_SET); - common_semi_cb(cs, ret, ret =3D=3D -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); } =20 -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); } =20 -static void staticfile_seekfn(CPUState *cs, GuestFD *gf, target_ulong offs= et) -{ - gf->staticfile.off =3D 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) =20 typedef struct GuestFDFunctions { sys_isattyfn *isattyfn; - sys_seekfn *seekfn; sys_flenfn *flenfn; } GuestFDFunctions; =20 static const GuestFDFunctions guestfd_fns[] =3D { [GuestFDHost] =3D { .isattyfn =3D host_isattyfn, - .seekfn =3D host_seekfn, .flenfn =3D host_flenfn, }, [GuestFDGDB] =3D { .isattyfn =3D gdb_isattyfn, - .seekfn =3D gdb_seekfn, .flenfn =3D gdb_flenfn, }, [GuestFDStatic] =3D { .isattyfn =3D staticfile_isattyfn, - .seekfn =3D staticfile_seekfn, .flenfn =3D staticfile_flenfn, }, }; @@ -519,12 +499,7 @@ void do_common_semihosting(CPUState *cs) case TARGET_SYS_SEEK: GET_ARG(0); GET_ARG(1); - - gf =3D 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_S= ET); break; =20 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_comple= te_cb complete, (target_ulong)gf->hostfd, buf, len); } =20 +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_compl= ete_cb complete, unlock_user(ptr, buf, 0); } =20 +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 !=3D SEEK_SET); + QEMU_BUILD_BUG_ON(GDB_SEEK_CUR !=3D SEEK_CUR); + QEMU_BUILD_BUG_ON(GDB_SEEK_END !=3D SEEK_END); + + off_t ret =3D off; + int err =3D 0; + + if (ret =3D=3D off) { + ret =3D lseek(gf->hostfd, ret, whence); + if (ret =3D=3D -1) { + err =3D errno; + } + } else { + ret =3D -1; + err =3D 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); } =20 +static void staticfile_lseek(CPUState *cs, gdb_syscall_complete_cb complet= e, + GuestFD *gf, int64_t off, int gdb_whence) +{ + int64_t ret; + + switch (gdb_whence) { + case GDB_SEEK_SET: + ret =3D off; + break; + case GDB_SEEK_CUR: + ret =3D gf->staticfile.off + off; + break; + case GDB_SEEK_END: + ret =3D gf->staticfile.len + off; + break; + default: + ret =3D -1; + break; + } + if (ret >=3D 0 && ret <=3D gf->staticfile.len) { + gf->staticfile.off =3D 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_comp= lete_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 =3D 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(); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641418; cv=none; d=zohomail.com; s=zohoarc; b=aJcohYAZnZKd/mRv0I8fDCgrMkV/raj/sNs+LKAEdKdMyG5R6p4me0FdNXRGDb4k3VSMfHEyMTlX1c2WfQP4tcLeSWyyz89A6A7ewF9zzBgT8q2+cFgWMBIP1UdI4SHKzsCBUmzULWmSIwMHWPW1W2AeJJdpBi8ZFrLWvTbWAmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641418; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=m29THT8oiVBS6TamWun4OZTko5yiLk5msUbdr5P5elM=; b=VH68RNj8NsnYZNOBrRC0qKLAZTanJooDLlcL9yMzghxZPWF9ziCkQb5w0PTdMpj5sHc+UfL9PDAagCP1EGY3PCbEO4Z52+azeZIVowJDI10PgJDi8tTufuq3pc66yS1Qw0hplYnqgxp5fbf0HLa9yl/SB22V7P7UexC5H7kqDPU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641418038154.76736599994672; Tue, 7 Jun 2022 15:36:58 -0700 (PDT) Received: from localhost ([::1]:43020 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhom-0004jl-TL for importer@patchew.org; Tue, 07 Jun 2022 18:36:56 -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) 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) 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-Google-Smtp-Source: ABdhPJwWUAZZEx9sh8UHbVEsQajbL51BSC+FSKMotVAiAWIhTLE2iLH7WuzzNIKY1kFl5e1hW1LeXA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641419481100001 Content-Type: text/plain; charset="utf-8" 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_comp= lete_cb complete, void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete, int fd, int64_t off, int gdb_whence); =20 +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_ulo= ng ret, target_ulong err) common_semi_set_ret(cs, arg2 - ret); } =20 +/* + * 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 =3D (err =3D=3D 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, ta= rget_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); =20 -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) } } =20 -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[] =3D { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; =20 -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); } =20 typedef struct GuestFDFunctions { - sys_isattyfn *isattyfn; sys_flenfn *flenfn; } GuestFDFunctions; =20 static const GuestFDFunctions guestfd_fns[] =3D { [GuestFDHost] =3D { - .isattyfn =3D host_isattyfn, .flenfn =3D host_flenfn, }, [GuestFDGDB] =3D { - .isattyfn =3D gdb_isattyfn, .flenfn =3D gdb_flenfn, }, [GuestFDStatic] =3D { - .isattyfn =3D staticfile_isattyfn, .flenfn =3D staticfile_flenfn, }, }; @@ -488,12 +481,7 @@ void do_common_semihosting(CPUState *cs) =20 case TARGET_SYS_ISTTY: GET_ARG(0); - - gf =3D 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; =20 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_comple= te_cb complete, (target_ulong)gf->hostfd, off, (target_ulong)gdb_whence= ); } =20 +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_compl= ete_cb complete, complete(cs, ret, err); } =20 +static void host_isatty(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf) +{ + int ret =3D 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_comp= lete_cb complete, g_assert_not_reached(); } } + +void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete, i= nt fd) +{ + GuestFD *gf =3D 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(); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641633; cv=none; d=zohomail.com; s=zohoarc; b=XdiNk2roNyr4+EDO0w8Y/LFaZrEeoR6/nfukEtnXx+d2gUa+L2UuQtunS/3fB8Y+VccxO8g681JlWr/Js1OHH5CrOK0s5UsBJhDo4yujyGF2ybECPTOA9b/y5GsXi8xQ7OgIi7mQYxfvWBdQi3maVWX5cHIhewgE/QSzB9PsSCw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641633; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=b9Wo1kud3FfZ/iyFDZ+Amrek5//uugm/ypgN75Evzkg=; b=UOHrJwHNAY2Bae1RInWX9HriMYmWpPa9ygzVLkWACeWENe2KFIJk5NpCRH8oKPnkpmus3yuTGW4Q5jmI2W/ncZxTw2/WT04dMELQB4AIFtEJ5rCItIqr4tDcjqhmBMs9FjL70ejE+4Ti2BtTBQg7DNQm3eCxxGG2ETW7jbIPzZI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641633100138.6896742854525; Tue, 7 Jun 2022 15:40:33 -0700 (PDT) Received: from localhost ([::1]:51452 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhsF-0001zS-LX for importer@patchew.org; Tue, 07 Jun 2022 18:40:31 -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) 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) 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-Google-Smtp-Source: ABdhPJwunotpeWPNygFNVLocQhtwUT5abv7UROYG02DF4vQDoAauCkW26OogKI7YxhoBiNi2y3epCg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641634671100001 Content-Type: text/plain; charset="utf-8" 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_complet= e_cb complete, void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete, int fd); =20 +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) } =20 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 valu= e. */ uint64_t size; - cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + - offsetof(struct gdb_stat, gdb_st_size), - &size, 8, 0); - ret =3D 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 =3D -1, err =3D EFAULT; + } else { + size =3D be64_to_cpu(size); + if (ret !=3D size) { + ret =3D -1, err =3D EOVERFLOW; + } + } } common_semi_cb(cs, ret, err); } =20 -/* - * 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[] =3D { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; =20 -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[] =3D { - [GuestFDHost] =3D { - .flenfn =3D host_flenfn, - }, - [GuestFDGDB] =3D { - .flenfn =3D gdb_flenfn, - }, - [GuestFDStatic] =3D { - .flenfn =3D 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; =20 nr =3D common_semi_arg(cs, 0) & 0xffffffffU; @@ -492,12 +451,8 @@ void do_common_semihosting(CPUState *cs) =20 case TARGET_SYS_FLEN: GET_ARG(0); - - gf =3D 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; =20 case TARGET_SYS_TMPNAM: @@ -819,9 +774,6 @@ void do_common_semihosting(CPUState *cs) cpu_dump_state(cs, stderr, 0); abort(); =20 - 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_compl= ete_cb complete, gdb_do_syscall(complete, "isatty,%x", (target_ulong)gf->hostfd); } =20 +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_comp= lete_cb complete, complete(cs, ret, ret ? 0 : errno); } =20 +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, } } =20 +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_com= plete_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 =3D 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(); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640637; cv=none; d=zohomail.com; s=zohoarc; b=CeV6iX7mQPlO/BIoNMvqAStqAeF+1X5ItWZsAQ8ZMsuL55Zcdu17glAhjRhCNq+Isqtm0/0HCVR4MjARgVbhYVGhap+y5DvZyo7liafaUgLRDkT4rw1C7Pq0tek/nGr8Zg99tEji3LsN47jA0wR6heUqhk7zbWfU01SSYo3T0DU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640637; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4sagk9WK8UfUwwphTVx4M3L/8wzZLywpfR5arWi4wQI=; b=axDHYPOS5HY2Gz2D88PlGgGMLnuRhd5dFYe/2msgOfpiZ/G4xIfsvy0Ho2paNfEPzvuGj14lbEM/jhBxGeQigH3xUiWQHIAY+MIXQw/FNdwb6PfoVzwj4izh6UwCV11n6rdgbFs3KSq4PzE/P13V0E+wXudY8NcMcFIBnXekkW8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640637225969.8364237867813; Tue, 7 Jun 2022 15:23:57 -0700 (PDT) Received: from localhost ([::1]:39960 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhcC-00004v-7L for importer@patchew.org; Tue, 07 Jun 2022 18:23:56 -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) 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) 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-Google-Smtp-Source: ABdhPJw/pgDmQi1Bx8rSHlYhiyA8u/2DcyIHime8BtgGbG7leVd5GMZSXgIFLO+jwtwax7KfNCONUw== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640638629100001 Content-Type: text/plain; charset="utf-8" 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); =20 +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 =3D lock_user_string(arg0); - if (!s) { - goto do_fault; - } - ret =3D 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; =20 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_comple= te_cb complete, gdb_do_syscall(complete, "fstat,%x,%x", (target_ulong)gf->hostfd, addr= ); } =20 +static void gdb_remove(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len) +{ + int len =3D 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_comple= te_cb complete, } } =20 +static void host_remove(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len) +{ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + char *p; + int ret; + + ret =3D validate_lock_user_string(&p, cs, fname, fname_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + + ret =3D 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_compl= ete_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); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654640846; cv=none; d=zohomail.com; s=zohoarc; b=az12PpwOIaGZpoV4djzY9l/hdlrA5H86TA0FHdmbfkmy8aAOzDhI4x/Z+GMFj3UJINc53CJdYzc3pBwyV6sdF+sXlGajIEnHdr07kfS0krkbBFfR65qOtQPC8/J56hdwY7UmXL7I4WIKTA07SC/3lC4k4qvfx2Q9I+/SF6/9tGM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654640846; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=EyKpAGdKnRqUyWCkixrBsiIlLJNPzOZLPQD/wXw+KgI=; b=XOsrg6wTH1ehqfWekjlGyijMH4UrCrKt9Hp99i8LSk9LBSNfErOGexj8+StGRFfYol4Yd8kScnK4w1BBXi9eJzihSIGxMKr4tdAlGEoxdTZq6+6XrXHKZAWN1UVywTPq6GsN9jtCE7PlQZWGBhmlqeaRgGsbesp4fCmm1KvRa2E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654640846249816.6574322498219; Tue, 7 Jun 2022 15:27:26 -0700 (PDT) Received: from localhost ([::1]:48498 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhfZ-0005v5-16 for importer@patchew.org; Tue, 07 Jun 2022 18:27:25 -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) 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) 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-Google-Smtp-Source: ABdhPJwWYj3DtON4rlc626vqBy/6vvalYrfZEsQ3/pGABmhyukbjXSPsTO2cXfnM4am1yfV33LXoRA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654640847953100001 Content-Type: text/plain; charset="utf-8" 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); =20 +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 =3D lock_user_string(arg0); - if (!s) { - goto do_fault; - } - s2 =3D lock_user_string(arg2); - if (!s2) { - unlock_user(s, arg0, 0); - goto do_fault; - } - ret =3D 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; =20 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_compl= ete_cb complete, gdb_do_syscall(complete, "unlink,%s", fname, len); } =20 +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 =3D validate_strlen(cs, oname, oname_len); + if (olen < 0) { + complete(cs, -1, -olen); + return; + } + nlen =3D 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_comp= lete_cb complete, unlock_user(p, fname, 0); } =20 +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 =3D cs->env_ptr; + char *ostr, *nstr; + int ret; + + ret =3D validate_lock_user_string(&ostr, cs, oname, oname_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + ret =3D validate_lock_user_string(&nstr, cs, nname, nname_len); + if (ret < 0) { + unlock_user(ostr, oname, 0); + complete(cs, -1, -ret); + return; + } + + ret =3D 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_com= plete_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); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642096; cv=none; d=zohomail.com; s=zohoarc; b=YO5Hqtd9Y+wvRELBZLkXGs9RLMEKhpJ6ekF5GbbPK9iotmglvmS5QBVPluU1L3EBzBMFyir+lM2UmfFDAu0r1PZ41OvtTQdStvvx1aPC437iOFSTXC7Jf7rKq/uhqmfBKHbRYimsDQ4PB50tN1LHjwvSeijLlALU+EOoGlEopnA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642096; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZXHdblC6SrA06FFaTRv5QA7GGElan0kMMWhWUA3e/yM=; b=LoltJmwOCVWQwk7SnRHaVwJ2/sc92WqxAQeKd6rJTWKlvZHOZ9atY5Z/gkljRPo50YxEBv8WmpfSSI1CqwBSm2yc96Kb2ilW9sPkjGnyqrgnV2PF0ct+UlxFVbX05ovnb7d6m/I4LOkKvSJtNzWZ6cBaOx/soKyPNbqHL/wI+wA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642096404713.7066029851709; Tue, 7 Jun 2022 15:48:16 -0700 (PDT) Received: from localhost ([::1]:43060 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhzi-00076o-Bs for importer@patchew.org; Tue, 07 Jun 2022 18:48:14 -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) 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) 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-Google-Smtp-Source: ABdhPJxBsXD7tdCWTZswqmRMGvMgx5U/wJJSE31DPIs3nhKgb1nibBRD9NQBbHiXEEyhs2Kxp8qwqw== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642097531100001 Content-Type: text/plain; charset="utf-8" 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_comple= te_cb complete, target_ulong oname, target_ulong oname_len, target_ulong nname, target_ulong nname_len); =20 +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 =3D lock_user_string(arg0); - if (!s) { - goto do_fault; - } - ret =3D system(s); - unlock_user(s, arg0, 0); - common_semi_cb(cs, ret, ret =3D=3D -1 ? errno : 0); + semihost_sys_system(cs, common_semi_cb, arg0, arg1 + 1); break; =20 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_compl= ete_cb complete, gdb_do_syscall(complete, "rename,%s,%s", oname, olen, nname, nlen); } =20 +static void gdb_system(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong cmd, target_ulong cmd_len) +{ + int len =3D 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_comp= lete_cb complete, unlock_user(nstr, nname, 0); } =20 +static void host_system(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong cmd, target_ulong cmd_len) +{ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + char *p; + int ret; + + ret =3D validate_lock_user_string(&p, cs, cmd, cmd_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + + ret =3D system(p); + complete(cs, ret, ret =3D=3D -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_com= plete_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); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641840; cv=none; d=zohomail.com; s=zohoarc; b=ecoH1ORvRSA42D38xofeL30uKoPInBYWf7IzZQl0SQ1veCRBGKeCyny33+tnWQC+hsZmC0VRdEsCDEP8RI3TXH9Hct0kzggf/DPZuz8LEOn+BM6F5cAxADJ//c+HjEkuxGty0eVmQKns29IsCMvSCroWQo75JIO1e1bse4S+7fE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641840; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=C6xp81ranfCqai/DcLj6AIlbJEP0wLff5Junjx60lw0=; b=Qdn9P3Js5J3/g0IA4OIGlPEEIIQprMwusbcs8KSeSwUsZV/QdokNZgJfuPaLomJRZ46fq6ZPMSGz7U0xxd5Jv4wJRyg/4C6KSrZJnrWaseYI1EiibP6y6Tce2wMqLoRdid63IKdB5YCrAtUA8I+dBGhmmFu0aSJ/yUcmZsURzz8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641840797995.2070387504141; Tue, 7 Jun 2022 15:44:00 -0700 (PDT) Received: from localhost ([::1]:60110 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhvb-0007ub-II for importer@patchew.org; Tue, 07 Jun 2022 18:43:59 -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) 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) 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-Google-Smtp-Source: ABdhPJx+UY8RGCKOU5ylUPGUoYtNOyfjzrqo7foQ0v7CQmycdqoc4hE1XvXoZnFejbOFH2dzv3E9Ng== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641841862100002 Content-Type: text/plain; charset="utf-8" These syscalls will be used by m68k and nios2 semihosting. Signed-off-by: Richard Henderson 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_complet= e_cb fstat_cb, gdb_syscall_complete_cb flen_cb, int fd, target_ulong fstat_addr); =20 +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); =20 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, CPUSta= te *cs, return ret; } =20 +/* + * 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 =3D cs->env_ptr; + struct gdb_stat *p; + + if (s->st_dev !=3D (uint32_t)s->st_dev || + s->st_ino !=3D (uint32_t)s->st_ino) { + return -EOVERFLOW; + } + + p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); + if (!p) { + return -EFAULT; + } + + p->gdb_st_dev =3D cpu_to_be32(s->st_dev); + p->gdb_st_ino =3D cpu_to_be32(s->st_ino); + p->gdb_st_mode =3D cpu_to_be32(s->st_mode); + p->gdb_st_nlink =3D cpu_to_be32(s->st_nlink); + p->gdb_st_uid =3D cpu_to_be32(s->st_uid); + p->gdb_st_gid =3D cpu_to_be32(s->st_gid); + p->gdb_st_rdev =3D cpu_to_be32(s->st_rdev); + p->gdb_st_size =3D cpu_to_be64(s->st_size); +#ifdef _WIN32 + /* Windows stat is missing some fields. */ + p->gdb_st_blksize =3D 0; + p->gdb_st_blocks =3D 0; +#else + p->gdb_st_blksize =3D cpu_to_be64(s->st_blksize); + p->gdb_st_blocks =3D cpu_to_be64(s->st_blocks); +#endif + p->gdb_st_atime =3D cpu_to_be32(s->st_atime); + p->gdb_st_mtime =3D cpu_to_be32(s->st_mtime); + p->gdb_st_ctime =3D 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_comple= te_cb complete, gdb_do_syscall(complete, "fstat,%x,%x", (target_ulong)gf->hostfd, addr= ); } =20 +static void gdb_stat(CPUState *cs, gdb_syscall_complete_cb complete, + target_ulong fname, target_ulong fname_len, + target_ulong addr) +{ + int len =3D 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_comple= te_cb complete, } } =20 +static void host_fstat(CPUState *cs, gdb_syscall_complete_cb complete, + GuestFD *gf, target_ulong addr) +{ + struct stat buf; + int ret; + + ret =3D fstat(gf->hostfd, &buf); + if (ret) { + complete(cs, -1, errno); + return; + } + ret =3D 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 =3D cs->env_ptr; + struct stat buf; + char *name; + int ret, err; + + ret =3D validate_lock_user_string(&name, cs, fname, fname_len); + if (ret < 0) { + complete(cs, -1, -ret); + return; + } + + ret =3D stat(name, &buf); + if (ret) { + err =3D errno; + } else { + ret =3D copy_stat_to_user(cs, addr, &buf); + err =3D 0; + if (ret < 0) { + err =3D -ret; + ret =3D -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_compl= ete_cb fstat_cb, } } =20 +void semihost_sys_fstat(CPUState *cs, gdb_syscall_complete_cb complete, + int fd, target_ulong addr) +{ + GuestFD *gf =3D 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) { --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642034; cv=none; d=zohomail.com; s=zohoarc; b=NSIfalr9AwzdNisgJGjESsIR3bPg/jENHUnqygqT8TERs/tZYJnFWdwpBmebB6LToQnAhZPPU/1XtITT0W7p9ySDLQuuVvRwSu865vx6MeMGnZ9zZGZw6QLMiQuiZ9ZpzRnaF8YYI5qY3DzDx0IxWEh/H1c9dLahBriFEW3YIHk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642034; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FnzvM/sQxHwEqBkmHkvKY5R9IWVzHt0oowSE7ql1V5E=; b=lHdkhuLjxCXdRngobCjIfntz+sdKqtJCQTRT1ZbKxfUztMglnpS/XLgEvW5PWnL/KPwkUeStQ+5VaJqnc8b2K1MxJju2gOTGkNXwh5xdI/37nQLpf7drVtAi+wtWaknDGdduvjnu2h9+1JPdZz+lyUdDhVgXvDRSMKzb7b1TFUk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642034783239.92462459093474; Tue, 7 Jun 2022 15:47:14 -0700 (PDT) Received: from localhost ([::1]:40560 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhyj-0005QS-Pb for importer@patchew.org; Tue, 07 Jun 2022 18:47:13 -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) 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) 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-Google-Smtp-Source: ABdhPJytVuaZWIXl6HU7iqI3VU5zz7mVg/GwVs88zzfFwozF/XOWnZVpRcZBIoP+wVhTgbBIy44G4w== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642035221100001 Content-Type: text/plain; charset="utf-8" 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_comple= te_cb complete, void semihost_sys_system(CPUState *cs, gdb_syscall_complete_cb complete, target_ulong cmd, target_ulong cmd_len); =20 +void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb compl= ete, + 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_compl= ete_cb complete, gdb_do_syscall(complete, "system,%s", cmd, len); } =20 +static void gdb_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complet= e, + 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_comp= lete_cb complete, unlock_user(p, cmd, 0); } =20 +static void host_gettimeofday(CPUState *cs, gdb_syscall_complete_cb comple= te, + target_ulong tv_addr, target_ulong tz_addr) +{ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + struct gdb_timeval *p; + int64_t rt; + + /* GDB fails on non-null TZ, so be consistent. */ + if (tz_addr !=3D 0) { + complete(cs, -1, EINVAL); + return; + } + + p =3D 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 =3D g_get_real_time(); + p->tv_sec =3D cpu_to_be32(rt / G_USEC_PER_SEC); + p->tv_usec =3D 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_com= plete_cb complete, host_system(cs, complete, cmd, cmd_len); } } + +void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb compl= ete, + 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); + } +} --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641121; cv=none; d=zohomail.com; s=zohoarc; b=UNlkOgeVmT1Z6qPfNdcoivrixPP6f3o3TGLe6H6zrJq2Gcc/kVDxGO/IZH5lOYya1eA5vIkKabZ4jee8vCkivmPNbDOUBaxEb3uOcuuA+WVQCUXbbMa+g1Q/4jFZcOpBMRhlQ8q5ZcSD6x6PCbQYYo/Vt8/TE4M0YtWtfr1KRk8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641121; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=2QV6Z5mGxNEu7A6+PkUh39CG6ZEMqsAUtAKGx6Ugq74=; b=ClbpU2KODd2hHBbkiPi37QsmfHyXuWZ7pkkLeu8JIqyk0Au9qRoZGcRVHGXgrtiiRqHXSgZamBCXRB0SNVDhn2lvA0xmuSPqu4R7tUqKNiW7Yo+ygIchYqWUmIJdbFi++7eJn3Tsmqmc5nYNuD3PpQHl53r/tSPrwaUQS3JP5vw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641121409690.7577257832494; Tue, 7 Jun 2022 15:32:01 -0700 (PDT) Received: from localhost ([::1]:57152 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhk0-0003UW-7h for importer@patchew.org; Tue, 07 Jun 2022 18:32:00 -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) 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) 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-Google-Smtp-Source: ABdhPJwhcsQnZpmABNltI5AJO9PXsZ0j3RG5YrLFCEG7qU3lzoRXB3j048minXU6izc14bXaJbSplg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641123628100001 Content-Type: text/plain; charset="utf-8" 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" =20 -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 e= rr); =20 /** * 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, vo= id *user_ctx) static void handle_file_io(GArray *params, void *user_ctx) { if (params->len >=3D 1 && gdbserver_state.current_syscall_cb) { - target_ulong ret, err; + uint64_t ret; + int err; =20 - ret =3D (target_ulong)get_param(params, 0)->val_ull; + ret =3D get_param(params, 0)->val_ull; if (params->len >=3D 2) { - err =3D (target_ulong)get_param(params, 1)->val_ull; + err =3D get_param(params, 1)->val_ull; } else { err =3D 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 } =20 -static void common_semi_cb(CPUState *cs, target_ulong ret, target_ulong er= r) +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 r= et, target_ulong err) * SYS_READ and SYS_WRITE always return the number of bytes not read/writt= en. * 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 =3D cs->env_ptr; @@ -251,8 +251,7 @@ static void common_semi_rw_cb(CPUState *cs, target_ulon= g 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 =3D (err =3D=3D ENOTTY ? 0 : -1); @@ -263,8 +262,7 @@ static void common_semi_istty_cb(CPUState *cs, target_u= long 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 =3D 0; @@ -285,7 +283,7 @@ static target_ulong common_semi_flen_buf(CPUState *cs) } =20 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 valu= e. */ 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, tar= get_ulong addr) return s; } =20 -static void semihosting_cb(CPUState *cs, target_ulong ret, target_ulong er= r) +static void semihosting_cb(CPUState *cs, uint64_t ret, int err) { - if (ret =3D=3D (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); } } =20 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, =20 static gdb_syscall_complete_cb gdb_open_complete; =20 -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 =3D 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_ulon= g addr, struct stat *s) unlock_user(p, addr, sizeof(struct gdb_stat)); } =20 -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 =3D env->dregs[1]; if (put_user_u32(ret, args) || @@ -110,7 +110,7 @@ static void m68k_semi_return_u32(CPUM68KState *env, uin= t32_t ret, uint32_t err) } } =20 -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 =3D env->dregs[1]; if (put_user_u32(ret >> 32, args) || @@ -124,16 +124,12 @@ static void m68k_semi_return_u64(CPUM68KState *env, u= int64_t ret, uint32_t err) =20 static int m68k_semi_is_fseek; =20 -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 =3D M68K_CPU(cs); CPUM68KState *env =3D &cpu->env; =20 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 =3D 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_u= long addr, return true; } =20 -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 er= r) { target_ulong args =3D env->regs[R_ARG1]; if (put_user_u32(ret, args) || @@ -124,8 +123,7 @@ static void nios2_semi_return_u32(CPUNios2State *env, u= int32_t ret, } } =20 -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 er= r) { target_ulong args =3D env->regs[R_ARG1]; if (put_user_u32(ret >> 32, args) || @@ -139,7 +137,7 @@ static void nios2_semi_return_u64(CPUNios2State *env, u= int64_t ret, =20 static int nios2_semi_is_lseek; =20 -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 =3D NIOS2_CPU(cs); CPUNios2State *env =3D &cpu->env; --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641710; cv=none; d=zohomail.com; s=zohoarc; b=PmLZ6ugJyHZgIxmxdt0r8z0BSvA9N25EVsK97cChiyvLI6k+ZJLtZ5GyZ27ymOoaDQGWO9DOUVKvu9Fipcfli9LWeud9rtlEssLrzbhv4YHbCXC+vqb1IEPzAyJzMgzeyAyoDK3RY9teXCNrBtHrMiWYUlfiKieaZwakAUtKgZA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641710; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=xEiQkbmkP3Pvevruu+pGV3TN8GeAApZMdugII/EnImY=; b=S1TGSm8ch1abjYxb2zoHOenneYqXztqburfpfAh+UjOMsfWYeyQ/eey1LpC2SjVS0yEL67L/DA7KZQH/1RzFN6WHoSjk6zuJOPvt6x1xQerFkYYtNPx4RGB44Fy8leRJ2u/Npv6mSrAh5XGMyD/wtk44sLxVntfyf4jhdd/0HBU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641710921528.9197708644757; Tue, 7 Jun 2022 15:41:50 -0700 (PDT) Received: from localhost ([::1]:56052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhtV-00059z-S5 for importer@patchew.org; Tue, 07 Jun 2022 18:41:49 -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) 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) 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-Google-Smtp-Source: ABdhPJyWngeVdpwYYeGjNQhD1q2lP6y0GqTuDiDpqbkXl04VNvUVIVMwKMbvz3hn4IaVu5lXwqUAAw== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641713110100001 Content-Type: text/plain; charset="utf-8" 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, t= arget_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 * --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642364; cv=none; d=zohomail.com; s=zohoarc; b=fSMUsaJtvou08SRQKawpTUn4Lk9YAxGkAm1QjrtZ2oPgbOBbfJJynafb8GueYyNMKnGHElTrQ9318DYYMDCaYqTPFLuHR0ROTGZwmwXMlT98mVo4MCtm8OoPd6YprxjQmHXJzApNHG4iq+JahUpdzctMRuQdphdRJt+LPAgiVJY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642364; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=kcKcbuHpae2wG44hmgdN3EhtSwRafPOrATlYMDNb6tY=; b=l8KdBfGAXkQD5cM8VqKHxJqanAen42710jK4HaJXSqOue1Q/Y+EBKvJMzi1mvvw6AE+jPrInVhHwNPiNqVeXRTUjffen8aAdHWfC4r0d+8ijiDH0g+reOgYiH2bLT8KTuE6Ece0rK59q8r1LqAmo/8y1opNgJVLzUjjCqkvDiEM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642364207667.1462244655479; Tue, 7 Jun 2022 15:52:44 -0700 (PDT) Received: from localhost ([::1]:51452 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi43-00056S-6Y for importer@patchew.org; Tue, 07 Jun 2022 18:52:43 -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) 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) 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-Google-Smtp-Source: ABdhPJznXf3fzEkEn8Bi1NJH4zvumqdtcaMrpgErDk7JodIG4NmBIP8nfzjs32v9xIp0EBvo+fMQ0w== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642365240100001 Content-Type: text/plain; charset="utf-8" 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, tar= get_ulong c); =20 /** * 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, tar= get_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); =20 /** * 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, tar= get_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; =20 case TARGET_SYS_READC: - ret =3D qemu_semihosting_console_inc(env); + ret =3D qemu_semihosting_console_inc(cs); common_semi_set_ret(cs, ret); break; =20 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 =3D NULL; } =20 -target_ulong qemu_semihosting_console_inc(CPUArchState *env) +target_ulong qemu_semihosting_console_inc(CPUState *cs) { uint8_t ch; SemihostingConsole *c =3D &console; + g_assert(qemu_mutex_iothread_locked()); - g_assert(current_cpu); if (fifo8_is_empty(&c->fifo)) { - c->sleeping_cpus =3D g_slist_prepend(c->sleeping_cpus, current_cpu= ); - current_cpu->halted =3D 1; - current_cpu->exception_index =3D EXCP_HALTED; - cpu_loop_exit(current_cpu); + c->sleeping_cpus =3D g_slist_prepend(c->sleeping_cpus, cs); + cs->halted =3D 1; + cs->exception_index =3D EXCP_HALTED; + cpu_loop_exit(cs); /* never returns */ } ch =3D fifo8_pop(&c->fifo); --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642165; cv=none; d=zohomail.com; s=zohoarc; b=LSyqPNYpsITmxF19egK1qShvV7N2Xf7TsgQl5jo6+tbzLydVOAtqKxb+hOW31vr1DxS+SIBiVMxzl+VNYJDNWN+GAiO9yp9WAihsR7YxBhdZPlQL0q3VkChxm7+5qiKbC6+ArIi9+vin5oyIRpPHdtEGs4VFbwm0Pk/J80JAFV4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642165; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HU5FIL8krVKmFqQext3ojwIXl0oRCXQ5TpFvX+W81lE=; b=QHwIdVpTj+N5DEhZMOKEgxn8MV1vVzJGv9lUnztjq+pM36y0GclOpn319vK7oeMYisL1XY0VeUQkfyzE6Igtm9krVlAXppeTQ6L6SgN8xQwF0dyfO5H8e5A9eGJT4zu77ZKvEMAkrzib1y/hF/D80cJ3KthmlwaxOnubDbRU4Dk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642165535276.85094215881793; Tue, 7 Jun 2022 15:49:25 -0700 (PDT) Received: from localhost ([::1]:45122 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi0q-0008UZ-6p for importer@patchew.org; Tue, 07 Jun 2022 18:49:24 -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) 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) 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-Google-Smtp-Source: ABdhPJzGTXBYQUwcvsRiRc3ojXgjO42IKCZPCONIhHsDQsedyLg2uIx0aSOw3iwfp8RfTBI88THzAQ== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642165959100001 Content-Type: text/plain; charset="utf-8" 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, ta= rget_ulong s); void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); =20 /** - * 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); =20 /** * 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, t= arget_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; =20 /* Disable line-buffering and echo */ tcgetattr(STDIN_FILENO, &old_tio); new_tio =3D old_tio; new_tio.c_lflag &=3D (~ICANON & ~ECHO); + new_tio.c_cc[VMIN] =3D 1; + new_tio.c_cc[VTIME] =3D 0; tcsetattr(STDIN_FILENO, TCSANOW, &new_tio); =20 - c =3D getchar(); + ret =3D fread(buf, 1, len, stdin); =20 /* restore config */ tcsetattr(STDIN_FILENO, TCSANOW, &old_tio); =20 - 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; =20 case TARGET_SYS_READC: - ret =3D qemu_semihosting_console_inc(cs); - common_semi_set_ret(cs, ret); + { + uint8_t ch; + int ret =3D qemu_semihosting_console_read(cs, &ch, 1); + if (ret =3D=3D 1) { + common_semi_cb(cs, ch, 0); + } else { + common_semi_cb(cs, -1, EIO); + } + } break; =20 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 =3D NULL; } =20 -target_ulong qemu_semihosting_console_inc(CPUState *cs) +int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) { - uint8_t ch; SemihostingConsole *c =3D &console; + int ret =3D 0; =20 g_assert(qemu_mutex_iothread_locked()); + + /* Block if the fifo is completely empty. */ if (fifo8_is_empty(&c->fifo)) { c->sleeping_cpus =3D g_slist_prepend(c->sleeping_cpus, cs); cs->halted =3D 1; @@ -157,8 +159,14 @@ target_ulong qemu_semihosting_console_inc(CPUState *cs) cpu_loop_exit(cs); /* never returns */ } - ch =3D fifo8_pop(&c->fifo); - return (target_ulong) ch; + + /* Read until buffer full or fifo exhausted. */ + do { + *(char *)(buf + ret) =3D fifo8_pop(&c->fifo); + ret++; + } while (ret < len && !fifo8_is_empty(&c->fifo)); + + return ret; } =20 void qemu_semihosting_console_init(void) --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641754; cv=none; d=zohomail.com; s=zohoarc; b=QDOSQgVNCy+wzpECOIsATE3QRGAclzOFunFP3ocytNJJWgqZ30WW/rq4Nt9BWc09PDPNt+faU6xMSfz7wpbDuxxcueJ2fBT0biDmk1YVwj+rWfNOljX+8CxOOqWiUitlaV708//wmC9acOaHrBai/MP8rAajpTQkxT1qVyJIvGI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641754; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=j01lT8Q4E68jFuT4Pz7GQEcDH7i1+c/TQbDUhFVhsPY=; b=AuGyE4gZc23TT7+6I7l2gEz6C92yetJgDHrriCclsUmRtTu6qw12To6CvR+Od5OS6bsLF+enQ6cYjoKP+IOe3t2C6jrfmstopMqTzts+m4j/6p5EH3KDk7R6SSXf9Cje2ILhiKabNGYjrl5d8Me0jW3Zpz7M4eSWnUbQT6sYMHY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641754541181.44841671203233; Tue, 7 Jun 2022 15:42:34 -0700 (PDT) Received: from localhost ([::1]:56900 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhuC-0005jL-By for importer@patchew.org; Tue, 07 Jun 2022 18:42:33 -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) 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) 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-Google-Smtp-Source: ABdhPJz0pudj5pGTlSJJB4+3rDC45hxVncXiTYZ10ucgrXw7Yfq89yN5Oq98zw/SV8KW3bQgItQoPg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641755431100001 Content-Type: text/plain; charset="utf-8" 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 */ =20 #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 =3D { 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) } } =20 -Chardev *semihosting_get_chardev(void) -{ - return semihosting.chardev; -} - void qemu_semihosting_enable(void) { semihosting.enabled =3D true; @@ -171,16 +165,19 @@ int qemu_semihosting_config_options(const char *optar= g) return 0; } =20 -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 =3D NULL; + if (semihost_chardev) { - Chardev *chr =3D qemu_chr_find(semihost_chardev); + chr =3D qemu_chr_find(semihost_chardev); if (chr =3D=3D NULL) { error_report("semihosting chardev '%s' not found", semihost_chardev); exit(1); } - semihosting.chardev =3D 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" =20 +/* 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 =3D 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) =20 #define FIFO_SIZE 1024 =20 -/* 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 =3D opaque; @@ -169,10 +169,9 @@ int qemu_semihosting_console_read(CPUState *cs, void *= buf, int len) return ret; } =20 -void qemu_semihosting_console_init(void) +void qemu_semihosting_console_init(Chardev *chr) { - Chardev *chr =3D semihosting_get_chardev(); - + console.chr =3D 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); =20 /* now chardevs have been created we may have semihosting to connect */ - qemu_semihosting_connect_chardevs(); - qemu_semihosting_console_init(); + qemu_semihosting_chardev_init(); } =20 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 ch= ar *cmd) { } =20 -void qemu_semihosting_connect_chardevs(void) -{ -} - -void qemu_semihosting_console_init(void) +void qemu_semihosting_chardev_init(void) { } --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641909; cv=none; d=zohomail.com; s=zohoarc; b=eiHaxpxP3XZeZzvkLwoa8pKuUAXWbeqRc8+vBu5DCerRyTunZP5f5TmoxUthkfy+yNzh86GuGKsWQsgPvZ5F3YlU7s2PDpwXa20WHQWXHAvZnUJDKrLDJjQtK+YERfP1JmCV0HV712/bBO9WMuVImAAtSM/hk0Ojc6ID11NRsRs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641909; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=U2oK2ipOEqoaAfOulrRTtOQB2zK3TVTPXCClS/WGFgs=; b=T5K6ekJK6GM8RYdemwtcEDSzCEdI77HguhgbLLcFItuK8Oj9gBQlgeidcn4im/hHyUODaiHE6dDt3SpeI7XOwXwmGPJ7R3GPOUAQItrlQUxjArUGL+e6GGwYrzN9XVko9p2TL/ky0MpUS4mGm2hiyJCQQsmeqz5/2Ja6ik7lBJA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641909169918.1293166412729; Tue, 7 Jun 2022 15:45:09 -0700 (PDT) Received: from localhost ([::1]:36392 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhwh-0002WW-Jq for importer@patchew.org; Tue, 07 Jun 2022 18:45:07 -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) 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) 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-Google-Smtp-Source: ABdhPJx1N1ZeCf2pSpG9hDVm83wCJH1zcyXyzHiJ0vymAEYum/DhS2anQNbuMPhWQ06i/3FIJsI+/g== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641910287100001 Content-Type: text/plain; charset="utf-8" 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, ta= rget_ulong c); */ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len); =20 +/** + * 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) =20 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; } =20 +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 =3D chr; --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642274; cv=none; d=zohomail.com; s=zohoarc; b=JrTVbuYd9VxRcA5dFxns0eRjHZU8GyfklcD/YYikEsXXpaeNIOOA3q+28VmYdGeaXo2nrDmbdFyTLJKmAHZQf10Ptnn0afp/dBWkg8U6obdN2EmtnvyU7oiJmn1U1NVaI1CTi5EqR/XTfvEx7HbRtnVgmZYzc4tmdIIWsltlv7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642274; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qTti2vBBVQlW3s6Vv39qkRBctywHeP3Orf0ls4LRzrE=; b=OfTjzLU/Jsd9WWXNS12ftOWzDdunFBchhmW9/9wqF73m4QzkXBYeK1xFdUhPVvRq7qiV3DNQKIw/kG+kUtTYSOHvBJsZgLCwDOlv+AlfqCwqM7zJSXAH0ner7JWJp1KnZKq2/sn6rnoKErlCHvVNaV4ZOrC/6PcTc4LJUbUemqA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642274798162.6324902676903; Tue, 7 Jun 2022 15:51:14 -0700 (PDT) Received: from localhost ([::1]:49128 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi2b-00038j-Hx for importer@patchew.org; Tue, 07 Jun 2022 18:51:13 -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) 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) 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-Google-Smtp-Source: ABdhPJxqVBHNmrNwpOFbFc5/ptI6uNQd2YVX2H5B8lj4PJ5BnrfqXVdep1+iSIU2VQAdLHzJRmpizQ== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642276823100001 Content-Type: text/plain; charset="utf-8" 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: Alex Benn=C3=A9e Reviewed-by: Luc Michel --- 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 @@ =20 typedef enum GuestFDType { GuestFDUnused =3D 0, - GuestFDHost =3D 1, - GuestFDGDB =3D 2, - GuestFDStatic =3D 3, + GuestFDHost, + GuestFDGDB, + GuestFDStatic, + GuestFDConsole, } GuestFDType; =20 /* 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); } =20 +/* + * 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 =3D cs->env_ptr; + char *ptr; + int ret; + + ptr =3D lock_user(VERIFY_WRITE, buf, len, 0); + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + ret =3D 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 =3D cs->env_ptr; + char *ptr =3D lock_user(VERIFY_READ, buf, len, 1); + int ret; + + if (!ptr) { + complete(cs, -1, EFAULT); + return; + } + ret =3D 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 =3D { + .st_mode =3D 020666, /* S_IFCHR, ugo+rw */ + .st_rdev =3D 5, /* makedev(5, 0) -- linux /dev/tty */ + }; + int ret; + + ret =3D 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_compl= ete_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_com= plete_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_co= mplete_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_compl= ete_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_comp= lete_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_comple= te_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_compl= ete_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(); --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642704; cv=none; d=zohomail.com; s=zohoarc; b=iolQBWGl60zqbaxMOmlQGzV0n1sfKcSPjgB2A+GGx+IwmyTdwti7uSpe+mHJOizySqz1H50RjJiLKtphSk59qsqPT4uyJsVCVp66J2yGs/yoA4Sl27dtmkvy2K6RbLoFephrt9bI9c30+uXd0nLxFKFax9ILJWht3LSVPB+2m+Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642704; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CcrGTfizkRrLSa06ezhMVx2XMPHTyyvaW4JTUUZulkg=; b=aqzHIcDTJBEK310uiMR5Gd8jOrV7fDS2G23t5AM+VstMweqJUc1R8b8SmTn42pCOFQGZytfk7NIgRVf9RITTE/oPXR3XcbG7DG/YnZO07sqb3ps0ihMGzU5PaVnQ0MBK4qGd1MxC+xKDp72rREO18+WISoJWB5rfenstlJLNt0k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642704663611.0035181931925; Tue, 7 Jun 2022 15:58:24 -0700 (PDT) Received: from localhost ([::1]:33416 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi9X-0004oQ-I8 for importer@patchew.org; Tue, 07 Jun 2022 18:58:23 -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) 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) 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-Google-Smtp-Source: ABdhPJywIQgrDg3zuh9NMh9KQTQOOJzsSAeazsNi7MT2cHnbMQYor0CTt8xE93jzv6TxyMU+8BhU1w== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642707055100001 Content-Type: text/plain; charset="utf-8" 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: Alex Benn=C3=A9e Reviewed-by: Luc Michel --- 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; =20 +/* + * 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); =20 #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" =20 +#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 @@ =20 #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 =20 static GArray *guestfd_array; =20 +#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 =3D 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 =3D GuestFDGDB; + console_in_gf.hostfd =3D 0; + console_out_gf.type =3D GuestFDGDB; + console_out_gf.hostfd =3D 2; + } else { + console_in_gf.type =3D GuestFDConsole; + console_out_gf.type =3D GuestFDConsole; + } +#else + /* Otherwise, the stdio file descriptors apply. */ + guestfd_array =3D g_array_set_size(guestfd_array, 3); +#ifndef CONFIG_USER_ONLY + if (!use_gdb_syscalls()) { + GuestFD *gf =3D &g_array_index(guestfd_array, GuestFD, 0); + gf[0].type =3D GuestFDConsole; + gf[1].type =3D GuestFDConsole; + gf[2].type =3D 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; =20 - if (!guestfd_array) { - /* New entries zero-initialized, i.e. type GuestFDUnused */ - guestfd_array =3D g_array_new(FALSE, TRUE, sizeof(GuestFD)); - } - /* SYS_OPEN should return nonzero handle on success. Start guestfd fro= m 1 */ for (i =3D 1; i < guestfd_array->len; i++) { GuestFD *gf =3D &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 <=3D 0 || guestfd >=3D guestfd_array->len) { + if (guestfd < 0 || guestfd >=3D guestfd_array->len) { return NULL; } =20 --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642410; cv=none; d=zohomail.com; s=zohoarc; b=UG5rX1q+kY7+gWJglkQfzSpVJH3Sk+HEUlogMSssDQ4bpv38rOoBX2+hpnYmTeExOYTV/4a1k0AQ3GBPWjVyVo4cqBw6UbY8U6GiTvjO/dWdJXgUHAHHjyxZYoL4DyE0ubHucP1u1Iy9KQN8tRogPatQmkv2UEWtj1N5U2+xpcQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642410; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XuRf9bJf1hNLRNL4iGsT+A0xXkRPFyPz8HZJ2puRP7Q=; b=QaaeaWC7CyKPYziJ/Kqb7H6rXKSJXFydCC3qhAiQg/fE/qTac5TM+hrL/nzTJg+2YWQFzGVGAHFY8s1XBcKlYTMJ2nlUWUKBoTPWA/daL3Fmu69sJmjAcnEKnlZ2idAUgGbRFXWSWS3FOcmSTIeJs38KNcl9/JPMP97QuYECB+I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642410850657.5503661350848; Tue, 7 Jun 2022 15:53:30 -0700 (PDT) Received: from localhost ([::1]:53354 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi4m-0006pm-A3 for importer@patchew.org; Tue, 07 Jun 2022 18:53:29 -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) 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) 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-Google-Smtp-Source: ABdhPJwU05xV6Njm/oIx+kLgDoWH/dY28zq/u1cGkR2rZdL4ZfJ62fOHhAFvQmFbkumxT1kYTvB92Q== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642411431100001 Content-Type: text/plain; charset="utf-8" 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); } =20 +static void +common_semi_readc_cb(CPUState *cs, uint64_t ret, int err) +{ + if (!err) { + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + uint8_t ch; + + if (get_user_u8(ch, common_semi_stack_bottom(cs) - 1)) { + ret =3D -1, err =3D EFAULT; + } else { + ret =3D 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; =20 case TARGET_SYS_READC: - { - uint8_t ch; - int ret =3D qemu_semihosting_console_read(cs, &ch, 1); - if (ret =3D=3D 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; =20 case TARGET_SYS_ISERROR: --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641356; cv=none; d=zohomail.com; s=zohoarc; b=b/q8OKeDr09oi+ZSUrcLNN3/2XWXkh06HKgusSNun9B99gWB1VaNwrlI4TdhF6i7WMlpqcLB//G84hCCYVi8ljrl57OcrRyQNE6jyawf7wqdMFeTzXnNc+caCEkiDDc+jUB1BCtt8SUhUZH2XqwbHlZhf3POPQ68pk7txOHDt+Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641356; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ppeRKC6qAerZueLBefgCmuJe5thbQMtdR2XWJoewkwU=; b=Noa172Xg+Sa6EcnveRNHPwksxKgY2veW3u9DL/wI/wKe2SAnLfJUloJOpkhNICUWa2jimjb8afwjDr4VK/yTeqMttjUqVMp7gxv3H2WIQi3JTwcK/gcCvkcp4iFy55jp2sua8/p00D15HlYpiFxUX2wB+47uSj65I3XFY8wgz8o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641356147170.9184573921217; Tue, 7 Jun 2022 15:35:56 -0700 (PDT) Received: from localhost ([::1]:39850 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhnm-0002UV-T8 for importer@patchew.org; Tue, 07 Jun 2022 18:35:54 -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) 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) 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-Google-Smtp-Source: ABdhPJwfhlAv6U2Nn4zZQi7kKIpjbLNp8cw6Wh8MI/TOdhpHt6jnHgGKkq/kiOJxN6FGyf+6GskUvA== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641357103100001 Content-Type: text/plain; charset="utf-8" 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); } =20 +/* + * 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/writt= en. * There is no error condition, other than returning the original length. @@ -341,8 +350,7 @@ static const uint8_t featurefile_data[] =3D { * 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; =20 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; =20 case TARGET_SYS_WRITE0: --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642853; cv=none; d=zohomail.com; s=zohoarc; b=GbBSAIbRSyihUbUZRg4vQ10uzGxdaTMp19jAON20XTmvk42YavFqVo1e4SX5GHhVk6Jka/CGAUsjFYqoXt1bgo3SJwBFbfTV2cSTjPtlaArxl0rBDbTyUd9U2MZjhJXuwZ7QGshRYVqidbOUNaBWDuXMFWq0lG8g+8oAYfYcKFs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642853; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3j65Vrb+cTtoRUM0a2SN2E+0qaLnPvILTBqh1dXrOWQ=; b=IXNM9RLa3MvuZa5WOzCGZcHKy4c3Ud8ooCNfhv+Dt9uJRmYG66QJCzC0eMDyMJ736OCVLaABOg9y+usLbxYz3c+EK7gXDKRK9OJyIelEmEadgJmo+/z3pFrzw3cVb5BF99qOsh1SmtmS54cJM/WiUNHVNjwTwetPU2Odku7cNxY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642853856316.2360309033886; Tue, 7 Jun 2022 16:00:53 -0700 (PDT) Received: from localhost ([::1]:37424 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyiBw-0007iL-Mw for importer@patchew.org; Tue, 07 Jun 2022 19:00:52 -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) 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) 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-Google-Smtp-Source: ABdhPJxUGBHJPLdI1lhDgPPthAjaylFlL9Ujo3R8+nGfgS0K+3PsGL8dMt+n2ALPmxNpG5nH3MCkSg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642855684100001 Content-Type: text/plain; charset="utf-8" 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); =20 -/** - * 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, tar= get_ulong addr) return len; } =20 -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) !=3D 1) { - qemu_log_mask(LOG_UNIMP, "%s: unexpected write to stdout failu= re", - __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, tar= get_ulong addr) return out; } =20 -void qemu_semihosting_console_outc(CPUArchState *env, target_ulong addr) -{ - CPUState *cpu =3D env_cpu(env); - uint8_t c; - - if (cpu_memory_rw_debug(cpu, addr, &c, 1, 0) =3D=3D 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 =20 static int console_can_read(void *opaque) --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654642554; cv=none; d=zohomail.com; s=zohoarc; b=WrZ3Jmp2LPTnEwrKr7dlbx1wZ9S9NdjdrCgDLGiTP1eG0w0k1GFVBV/ZlJiDrG08E5CgbfheSeRr4kV10uNxAsHAzzQiWGUY3ScOLn1pXTgat9QpW5IsRJ7m+8XUeeerql0NxQlql5OCwqzRL8A+yWhindD+o9+Di5CW2gghv88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654642554; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZnhIt8ADFMZnFjwBm8rc3u5aYULCDVuExy2ptaewy0A=; b=NtstD7HPMmfqk6dEbMz6gLFp282xo7fRtz1Ba39omtZqsV/WbUWYBMR90KcP/qxfnYEzQLHDQXMm3wRogoxZ4SGmQV6fQZ+ucFxFtR8FWTtXj0khQnAuQmQKrnFuw1QQhXadEbpJh9UQX6Vo8UZLMsQE75Ukmuxe1IOEUPzVAMQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654642554667894.8564964025209; Tue, 7 Jun 2022 15:55:54 -0700 (PDT) Received: from localhost ([::1]:57474 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyi77-0001J3-6Z for importer@patchew.org; Tue, 07 Jun 2022 18:55:53 -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) 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) 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-Google-Smtp-Source: ABdhPJzGUaAVikU5bCgRSUfHpkWJwkrZEL+Txd0PD7gxe/qche9QjZLPzbcpJOJE19Rdms+pjh4e+w== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654642556087100001 Content-Type: text/plain; charset="utf-8" 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; =20 case TARGET_SYS_WRITE0: - ret =3D qemu_semihosting_console_outs(env, args); - common_semi_set_ret(cs, ret); + { + ssize_t len =3D 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; =20 case TARGET_SYS_WRITE: --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654643029; cv=none; d=zohomail.com; s=zohoarc; b=efzAuoNYew+cNUVI1iicV7sbsoxt0MYIdLYSnf+ImdYoXD3GTw90McRCVVvdl9RFK00i1lI7XGjUg71yfokA2q2qKvP6X9mNnnFI/33EFI/XfSxtt8qY0FM4OVmJVhhxEAQVmqREhQYlERGYHvhBxAzQPULDHFqQ0/b2+Dy4M0g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654643029; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=G8jUXILSyQ3ZGWS4huZP/MGa3C/uuyreOxdJ2Jh/tu0=; b=d9v27fyyD5YH90M4GcFSccUpn9xWo8K5r3pM5OHk7A7voi0mbMAvprlhJhAClEI+Rk0BBNy/JPMBkxYVIWIfmXFuXKolQttLOSHWvxW+SqoDIKgV1+nQL0AqjGRh5Yeo2gKjZBudMu+34AWzrg66a3W3bXJj5WiMJ6TotEoyKho= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654643029220277.67350278254503; Tue, 7 Jun 2022 16:03:49 -0700 (PDT) Received: from localhost ([::1]:41634 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyiEl-0002HV-0H for importer@patchew.org; Tue, 07 Jun 2022 19:03:47 -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) 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) 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-Google-Smtp-Source: ABdhPJx5+hcLRfgee2wm4VjhDARN3xjmCdFn742OiLeQF7eL6E7SAHfF57XmVEJcf7uRA++oTmKtFg== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654643030979100001 Content-Type: text/plain; charset="utf-8" This function has been replaced by *_write. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luc Michel --- 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 @@ =20 #include "cpu.h" =20 -/** - * 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 =20 -int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr) -{ - int len =3D 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 =3D lock_user(VERIFY_READ, addr, (long)(len + 1), 1); - g_assert(s); /* target_strlen has already verified this will work */ - len =3D 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) } } =20 -/* - * 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 =3D env_cpu(env); - GString *s =3D g_string_sized_new(128); - uint8_t c; - - do { - if (cpu_memory_rw_debug(cpu, addr++, &c, 1, 0) =3D=3D 0) { - if (c) { - s =3D 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!=3D0); - - 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 =3D copy_user_string(env, addr); - int out =3D s->len; - - if (use_gdb_syscalls()) { - gdb_do_syscall(semihosting_cb, "write,2,%x,%x", addr, s->len); - } else { - out =3D qemu_semihosting_log_out(s->str, s->len); - } - - g_string_free(s, true); - return out; -} - #define FIFO_SIZE 1024 =20 static int console_can_read(void *opaque) --=20 2.34.1 From nobody Fri May 10 17:07:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1654641505; cv=none; d=zohomail.com; s=zohoarc; b=dS2XsZxvEU0Qp+d0ILS42nEgSqJPZdksDODJQzdR+OXS+YhoRXVp0rPqzSvy/QVsL9Z60LA67BtpCBdgr0DxuzX0wLn+XUNuljlC9EF9Awj6YvqVemxvrsjYwzx5/12fDYAJZEBSl+bnxvarQR+G4VDQXVbq1ODzRy3ZuaLpmPY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654641505; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=dAgm33M1rvCgEdViKgsHiMOPABrkN7+luzk9Bsvwo1g=; b=OiONVj+2X+5XLb64a1lRhOS3L5BiPt2z0QqRmcWiylbiVJng36w9ZoliYmZKOq/zAKwuawPX/HO7/foN0gB3uvbxARWahABE9fMlGhQloPkC+vT9/J2QGuL/VK3Hqg2ak23j4s5SQB/726YjfdUX50NNFHByafmRUtNkrfPYdwE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1654641505303685.423757918417; Tue, 7 Jun 2022 15:38:25 -0700 (PDT) Received: from localhost ([::1]:48290 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyhqB-0008Ft-6s for importer@patchew.org; Tue, 07 Jun 2022 18:38:23 -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) 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) 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-Google-Smtp-Source: ABdhPJxn5+JWguBI8ediR06iWBggpO13WXGDIpg0ZqwZFk90KfQ2x9G+Hxtfepq1Qbh/3z8wtK4lxQ== 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) 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 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1654641505987100002 Content-Type: text/plain; charset="utf-8" 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); =20 +/* + * 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_comple= te_cb complete, void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb compl= ete, target_ulong tv_addr, target_ulong tz_addr); =20 +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 *b= uf, int size) c->sleeping_cpus =3D NULL; } =20 -int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) +bool qemu_semihosting_console_ready(void) +{ + SemihostingConsole *c =3D &console; + + g_assert(qemu_mutex_iothread_locked()); + return !fifo8_is_empty(&c->fifo); +} + +void qemu_semihosting_console_block_until_ready(CPUState *cs) { SemihostingConsole *c =3D &console; - int ret =3D 0; =20 g_assert(qemu_mutex_iothread_locked()); =20 @@ -92,6 +99,14 @@ int qemu_semihosting_console_read(CPUState *cs, void *bu= f, int len) cpu_loop_exit(cs); /* never returns */ } +} + +int qemu_semihosting_console_read(CPUState *cs, void *buf, int len) +{ + SemihostingConsole *c =3D &console; + int ret =3D 0; + + qemu_semihosting_console_block_until_ready(cs); =20 /* 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_syscal= l_complete_cb complete, unlock_user(p, tv_addr, sizeof(struct gdb_timeval)); } =20 +#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_co= mplete_cb complete, complete(cs, ret ? -1 : 0, ret ? -ret : 0); } =20 +#ifndef CONFIG_USER_ONLY +static void console_poll_one(CPUState *cs, gdb_syscall_complete_cb complet= e, + GuestFD *gf, GIOCondition cond, int timeout) +{ + /* The semihosting console does not support urgent data or errors. */ + cond &=3D 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 =3D=3D 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 &=3D ~G_IO_IN; + } + + complete(cs, cond, 0); +} +#endif + /* * Syscall entry points. */ @@ -906,3 +949,30 @@ void semihost_sys_gettimeofday(CPUState *cs, gdb_sysca= ll_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 =3D 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 --=20 2.34.1