From nobody Mon May 13 15:04:02 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=1651607535; cv=none; d=zohomail.com; s=zohoarc; b=U+kFdVqL1LuOAShMzZFtnt0OmXqFuyH2VKuKBCjPPJSPUByTvXH9hXQmmXNV1WKogp/y3INl5vCewf7kaXQPfUv2SsGFhDKmv7194rm9a98ND5m4JCdNUUdQMWjxdsajAPN4/tSnnzqFXSdcT2Upcc5xMaS9jKRfNeRwhkTlAv0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607535; 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=96XCoIxFXWNe7OzxTXGAkWBiSUjrkUaQNrXa5Y9vDmM=; b=Mdpv5ghbN8p+TO2n/h6mx3IQ0ERNiu4CkSyuxlQNzdVMz/VtXOlzEBuhl90MhogDjw5W+QdnOuj5VlRz9b9MW2Oa3+meZfLGl654gHKczJ02p8cbSpOvYePTtY5q/cFoKo/semtQWX+Yk22eM/+0YEKdXIdXX5JikhVqS2Ybvxc= 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 1651607535863474.56722931033494; Tue, 3 May 2022 12:52:15 -0700 (PDT) Received: from localhost ([::1]:52904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyZC-0005L6-Gd for importer@patchew.org; Tue, 03 May 2022 15:52:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyVu-0000sc-2Q for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:50 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:35711) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVs-0003Vd-Ad for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:49 -0400 Received: by mail-pj1-x102b.google.com with SMTP id w5-20020a17090aaf8500b001d74c754128so3245656pjq.0 for ; Tue, 03 May 2022 12:48:47 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48: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=96XCoIxFXWNe7OzxTXGAkWBiSUjrkUaQNrXa5Y9vDmM=; b=FxosJmDeLkZQSNaEv1jIraPAwjHrnUm3Lm9a+ZR5TTHrAOfHMe6LbKQU2AyCxlGHiW gNxuZVqONK0TCZIzeNP6jOyiOhkeUggVPU7HCV/rBbLl/pNybzEZvg3Tgltjqvf8r7/X EB0LTob5lcR3ndVV190FNwSC7kZ/qrszqlk9Y8LNzFAXyuXFpXLtMMK+/K3c0CmYq07A yxcLiAw56sAvm8nHL8BtmBJX9l3qW/VP4r0yxFxzEoCoSCDtnPRcLpH9hdH6zKpM2JqY oY5SW9OCD02SPPL5/0sNyqFZG56YvEbyhhh6AA+lffO43c3mHShFp7oSy3S/wp1MQmnt MtcA== 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=96XCoIxFXWNe7OzxTXGAkWBiSUjrkUaQNrXa5Y9vDmM=; b=1UWryq+gYrVRg7tWwbumzILiElLf1s2iM+kulHDd2u3JZVM+lEriaUimqDi7c06RLi 2gxpbzy5jxbB7nfjULuywleUQnNLwiF3c9Nm6tvynuBlvLzW2QhH+dTgBEyE6VwGa6q2 wtPIdFRnK9n2Npy1XcVnJAkqu27Zbj9+B5T9C1JsoJsO7ZQDz1yCQmOpxrPdw4WDnwoq bYOl3Bqxfkb3cuwYZk/XFiHHNCEhwadn3TSXMDHi55BAw9cYS82Vc5ht5Ymxk87hcIBY hspdLjr+YExFS9K4AJn/Latlcxn5ke5MmUtvF96yt5jaHLIMYiK4P3svZJ95lmWa427V O+rg== X-Gm-Message-State: AOAM530E2z0IUdWxdAyDYbQ4XVrWHCn/eFZsa9zJ5PrC3Et9V6M0O4sm bL5fczsBT8k9hJLV5yYYiKpZsK2qwfH8kA== X-Google-Smtp-Source: ABdhPJwbT4Hv5DhMikuZGwICOPdTYGKVgSjMjUHSbb8O8pu0xZCOeh0BW1IsnUo2SLAbvmYXrc5vJA== X-Received: by 2002:a17:902:7e0d:b0:156:47a4:a7c4 with SMTP id b13-20020a1709027e0d00b0015647a4a7c4mr18662653plm.141.1651607326238; Tue, 03 May 2022 12:48:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 01/74] semihosting: Move exec/softmmu-semi.h to semihosting/softmmu-uaccess.h Date: Tue, 3 May 2022 12:47:30 -0700 Message-Id: <20220503194843.1379101-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::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: 1651607538184100001 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. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- .../{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 7a51fd0737..dbef280b87 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 Mon May 13 15:04:02 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=1651607548; cv=none; d=zohomail.com; s=zohoarc; b=MfU2kf5LdZ/uZDYdeNnh/jYTckoWvMMqk+P/GEmxeDdQPwkhUPn8fRC2yErk2YY+jeubZwz3C8k8iQy3a2E0zMmNSaX1lulX7azf8iKYE/IyTNd0VoM7prSbDwj8c5n/CwYNs4eHwqIEyjVa4kRiP/3A1IDtG3JuXQPRbEJxrIk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607548; 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=3JX05tYCGijKFYZwundP0SWA2fF8+V1jI3B1WPSLqJI=; b=aXzqeYPiz7X+QRirfq3IIsNLxHPVvCje+lnBYEwzbFJjHgyKn0lzkaWviE5V3Bz5lVnuyzKqohXHruL/XvjfnWP50APE22xO8cn7LNlil6TknTgO0WBVbNBvH44LyGrk9ferEfOo3cqeLBh8ddsrgGLwSzkjN2aPUAq5cw9LZYc= 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 1651607548174174.6922787537403; Tue, 3 May 2022 12:52:28 -0700 (PDT) Received: from localhost ([::1]:53094 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyZO-0005YH-Ro for importer@patchew.org; Tue, 03 May 2022 15:52:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyVv-0000v3-MM for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:51 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:36721) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVs-0003Vk-Pi for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:51 -0400 Received: by mail-pj1-x102c.google.com with SMTP id gj17-20020a17090b109100b001d8b390f77bso3228084pjb.1 for ; Tue, 03 May 2022 12:48:48 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=3JX05tYCGijKFYZwundP0SWA2fF8+V1jI3B1WPSLqJI=; b=sX78squjtmzGOpUIRbp50M4d2uh99P40qHeG2CdHVN4D2rk6435KnvgQ4l45KzyF7M uD/gM+P55XCSCd4DPQEpGLzJp5EKGeQPOxXKmd9i1MDnveSUvZW0VsW1V9tdV8EqEgU1 mlXEw8+YJ6f6e7wajO/V8CfH82Or1ornKYWFB+vZysiGyDcWb67egen/JJfr7u2dVhX/ xwKB7m0RhF7dniC6qu86kKnrQZJ7Zb0V5XaVIuIj8Nn10976qRAkQLmKk5y5aw2S43u1 S9AO7jMJP2ZjGhsCHiumbtQQoIGw1Ay7fSeVD5eCXHW04u/KiU9SFOqs96PslxOUlZ3m c0xA== 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=3JX05tYCGijKFYZwundP0SWA2fF8+V1jI3B1WPSLqJI=; b=wIDRNjCKdaWRUVz0CRfEWmeoEH8ZODZpD4JIZLZcWbSDcoXBn2gEmiSKBuBCggnNe0 6hXR0y9Osbf348FL7Sqh8vBY+xSdDX3wFpeyUtYG5uEfMAq5IiMmEOTdXyFXbNRQGOAC znPkxEKsI0pOBufrbz/IeEBLvfszB2+vc3+laKcZbuIJvCJ3Wqg1VVLnWGtTh7I7Avlg ogW6kV9jce+rTRM2amit90s6zbwnKelS8vVij+byWaBqHW+dwPkF+PDMqCdroqtB+IWA 1vuXlEr/no/tV8cBWaJyDXflzW+r3GLsbsICCVV5ZSIgW/XElAhpgkD+C4rjn9CQbv/k KHeQ== X-Gm-Message-State: AOAM532JYpQVyowSwjH0nQTGaoPHwfMxDqz18ePWygdHJ8RDdgJRpTQF 0NZkEXx+gqEbpCtiZ4s3q7fpTyCHv4HIig== X-Google-Smtp-Source: ABdhPJzMN2ivCvoD8m0d858RI++oyqemXeDcknbOLvfKWMfEwjwu6ri4zZsuhWqoUG51bPni80jxtg== X-Received: by 2002:a17:902:6b87:b0:158:a0d9:9bd with SMTP id p7-20020a1709026b8700b00158a0d909bdmr18081458plk.156.1651607327363; Tue, 03 May 2022 12:48:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 02/74] semihosting: Return failure from softmmu-uaccess.h functions Date: Tue, 3 May 2022 12:47:31 -0700 Message-Id: <20220503194843.1379101-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651607550064100001 Content-Type: text/plain; charset="utf-8" We were reporting unconditional success for these functions; pass on any failure from cpu_memory_rw_debug. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- 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 Mon May 13 15:04:02 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=1651607780; cv=none; d=zohomail.com; s=zohoarc; b=aIjiBuEy9bIzFad0ul6OlpbYcXTW7p09NVjgB/Px/v6eYZg9VFWSmSQ46wulQzKK2CiMOgvXcasqUPdy7Ti1PNBe13eIdJ3t0lOyeFospwRmQgEL7lyl80mtZvhdQX+5aaTykuA0qeyWiftrAov3AhFyar1BtUm5A6Ki8lCnBJg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607780; 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=Tl4F0M/gOxqcmd1Ho0EBp9s9GppksaThNyFvq/k0E0E=; b=YVxj2jZ7gMZwbnwtMpdRujGdJcRcL3v3nPtczqhq9JMIH2llB5bPTaGbba1vcO6rDixjat4YjdpLU7LmTrGEJHajUDf09g/Jf7isMlIa9vYZ3Cy84Gun8gCGl9zSqQsYQRy8zypnz7TFZhYbck9BOaN7CZxJrO1WJXhR1oG/OJs= 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 1651607780940356.2866563756669; Tue, 3 May 2022 12:56:20 -0700 (PDT) Received: from localhost ([::1]:60556 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyd9-00064W-Tr for importer@patchew.org; Tue, 03 May 2022 15:56:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyVv-0000uk-Cx for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:51 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:33898) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVt-0003Vy-H5 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:51 -0400 Received: by mail-pj1-x102e.google.com with SMTP id qe3-20020a17090b4f8300b001dc24e4da73so2280378pjb.1 for ; Tue, 03 May 2022 12:48:49 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Tl4F0M/gOxqcmd1Ho0EBp9s9GppksaThNyFvq/k0E0E=; b=nOGB2d2ykFcR7cORq1EVOOEjV3dgItwgPDgfetyovX8KuiIbkwXQpw4RzxPEvxa6OT ktOPzuz3Y5oqOMmFzzr4YXM2GB9PJ6LpAbNLNWgzxIexDKprzXPndboV4ryEdSQoGZgx 9Mc9yxRuhpU4lP9nTDzWW8jBuMC1jo8bzscMZMheStuIHySnX3uJQJCnVpmGlQD2SnXk WJop/Y6U7m/110xv561q8gamtcvum4h/mGfBY+HqCgFQfWhVwLhZRbCuyqXYZa058Pb+ eOMgjUDvKqMB2VC6DuDj0DTJ2zGyFqi3ZEjugSNV3rBu9SsHT279MU7Vwanj4zUoSwDy d+nQ== 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=Tl4F0M/gOxqcmd1Ho0EBp9s9GppksaThNyFvq/k0E0E=; b=hT1pMnU7QXJ9MVFLrNtlE6Ob+4j434xqlVgz08j6KtQi0m60kzEAFdajmGw0earCXi 4eY5h0yt0+bZ33ipxw5OfVKGwb6GPAt4Lkfm2ALV1wWFPqJuFys5RKZTmYmC+7js3Oic qljWfGIwBcwAKC+xd+ME7CGCKzFZ+87WUWw3mO3MtvgMIN+A6Q1V9aZe8IZhvqmOAjrg kCTvr/TM3dh/Mojn+Ff0FZbuWeEVm2hIX2imtjLvxVNGyEv6HPh0aVBc6Znc993IotlD XzXAuNguWzKCiisdiFjl9FBhi+jXzArCZiTtggttrCqV9LlTDt/XJx75LWQTohXtD7IB RyzQ== X-Gm-Message-State: AOAM531du4O1yjT3Rf1xKR+c6cjeGeb8tr1cAZbFu1ZssI6z0PLGIz1o NbPNsiAr+GTMr9gwpvquarz74hFz9UG1Xw== X-Google-Smtp-Source: ABdhPJy25FgeJvVaQkAc9wPgrohNGmQzEFcMyPxtYMSX1CZWciI4jPQSZBKH/DS3WqxbwQMa4Q/c1g== X-Received: by 2002:a17:902:e5c1:b0:15e:b847:2958 with SMTP id u1-20020a170902e5c100b0015eb8472958mr3876172plf.101.1651607328239; Tue, 03 May 2022 12:48:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 03/74] semihosting: Improve condition for config.c and console.c Date: Tue, 3 May 2022 12:47:32 -0700 Message-Id: <20220503194843.1379101-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651607781329100001 Content-Type: text/plain; charset="utf-8" While CONFIG_SEMIHOSTING is currently only set for softmmu, this will not continue to be true. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- 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 Mon May 13 15:04:02 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=1651607957; cv=none; d=zohomail.com; s=zohoarc; b=UEfdqZ2+pHByeY1zCpLwGiHReTYaixIBFi3Z/arj//YHiQQH1rSfjU6DeT6k+0RaEskzSbWs6guPZ7OXtD3Z/fqK6GVW6z3vn2jmqd2l5EO6Ns3C1mYNJXCdLZXd3G028XNilg/SSxThR7FX/WapmpHGDJAvW43OazVbEmGcp9g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607957; 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=x8BxBi+dxwcNinwm6heDyciERoofO1ytsNZ6JDtu0RE=; b=dXvbEFwdaJPYIZ8ne9Dl9DPZJKqiKdfoR8bQ9qsuPfh4/4EaWjnofCVlaPfufBH+8Mt4M3+7Y3Z8ztkTrefB4HRalA4P9Zx0pxd2aKQn9z3avjdhkF/pxqQgvtG/E0A5AafnCWDXlsG3EFDZ5kKEsEZ475ex0pKpy7PydYYTLWM= 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 1651607957407834.2229001711172; Tue, 3 May 2022 12:59:17 -0700 (PDT) Received: from localhost ([::1]:39730 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyg0-0007Qi-2z for importer@patchew.org; Tue, 03 May 2022 15:59:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38854) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyVw-0000wK-4A for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:52 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]:44583) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVu-0003WE-D1 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:51 -0400 Received: by mail-pl1-x62a.google.com with SMTP id j8so15854448pll.11 for ; Tue, 03 May 2022 12:48:50 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:48 -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=x8BxBi+dxwcNinwm6heDyciERoofO1ytsNZ6JDtu0RE=; b=Ap8tlY1/zvmj1NdsBqP7L3lr7TWoj7dETfMi8P6lmSeifw+nXAEx7F18kBuibwXh4A /YFgtTuvk1q792G/pTJQyvlDj/HdUEyeGVIXR5Oaua10WZHmEvCtrCBeQuJSS0ASZfQQ PLkw+hzRvDqEcAt+tw7dSgfRpZCDZY15nndRk+ZFoW8KOYP8Jr6I3aRkyM6op698SWvT w+kWhwKfy950+ULD3aAT11RCpI2jJluDX9e0ezUHD+rg/kPEzJFylDKquYsFDdxZzWbG 1rLRiortOzOWkCDFj5E4lmpeF35g9sUvplOcsi8ap1Z5zJnJjoA8+TQE+tuJ3wqTARsa zWAQ== 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=x8BxBi+dxwcNinwm6heDyciERoofO1ytsNZ6JDtu0RE=; b=4AMQsKaROxFo6hDGu9nu4o6oWsvOYpA7RZebOZOOdHFnMZBxZDlzu32jxjuPSeKD2U XCUNwnh12b9JHJ+FRXaabqfMnzBbbTZr2NgBo60LgqHvZPrn564y/O6rkSWjGqWMm6S5 DACwyqUck2tgiQZtFY6ElIyof6WWNMhUHDCjeDijlUhgcVRMbreR5ojbD24xQ0tbfVsA hB1w5430Q4CtxpDtWjF58/bwOrJHjZjWQSTeXHl74bOllltsWAtwbfKIgmvc4LTKqLoZ HJM2PuHhTkHZxkasa6n0E+ZNMduOOvYuT/oWxEh2zS2ETi9iw+/wCnHYdqF5CgKrZPwD qq+g== X-Gm-Message-State: AOAM531f+Xux1ikuGRFpNCptx24RkSzVTPaHtIafrc0UWPKh3q8Qh1Nq IYXwdbNWR1iVYCo/gv+pEeOQaeuvIMb7ew== X-Google-Smtp-Source: ABdhPJxhX+ufgrvsUd0LaaXuvS+6DbvXAFQU43erNFaisJ9Wbrmgl/CHvOOT/DQki9Ba9Toq8dG9ug== X-Received: by 2002:a17:902:9b92:b0:158:9b65:a78 with SMTP id y18-20020a1709029b9200b001589b650a78mr18564198plp.53.1651607329039; Tue, 03 May 2022 12:48:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 04/74] semihosting: Move softmmu-uaccess.h functions out of line Date: Tue, 3 May 2022 12:47:33 -0700 Message-Id: <20220503194843.1379101-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::62a; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62a.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: 1651607959624100001 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. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- 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 Mon May 13 15:04:02 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=1651607787; cv=none; d=zohomail.com; s=zohoarc; b=X68HhIAKs5JJDvI89onbjZm5OUiW7mTKObRxtq87HFci+wq9x4zP352u3vDy6KSDpgHjXjk/xOjEWEyTrxqoH0FjqQelbft3+SJh6Q3bSEjH51sImw/5577UbD/T9cXZ9QfJQU9ODhQkneVx4+zikpy7FKASoqp3ZuYwGBRSCEw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607787; 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=B0IjewfhPoB21mUL+ukAhhgR2+vOUEMvAP9pcUk/okk=; b=ZIfdBMqRqCYdTVkF0di+M/9fucINTmuPWEhaJvMeKQbtManIL6hrbGGRN5VvGFZhiausuecCE/gSD9y3aKb2WxYbPtMOEXEAZh0YK6M4MRRyZ1uVksljP7gsnF1CiV/+pQuMUaTyAjZ+szTu60yRk2ToZw4ym3AoWY/kbIBWlG4= 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 1651607787732422.0316434426675; Tue, 3 May 2022 12:56:27 -0700 (PDT) Received: from localhost ([::1]:60776 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlydG-0006KE-Cd for importer@patchew.org; Tue, 03 May 2022 15:56:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38876) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyVx-0000zk-DN for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:53 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:42873) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVv-0003WZ-Op for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:53 -0400 Received: by mail-pg1-x536.google.com with SMTP id 202so4542546pgc.9 for ; Tue, 03 May 2022 12:48:51 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=B0IjewfhPoB21mUL+ukAhhgR2+vOUEMvAP9pcUk/okk=; b=DQQOZkS4g5w1HAIASzVcGpUOvgy81o897RsNehNQ8S2/PsQMU7DRIfglJ/vPwK9SAe tDQM0CPLyfXBXnaRdPcAuQri3hZ+e/kiPhYsE/hdhz1NnYMv+K8M6JSGJkPdGPF9oHVR /OWs7YhNSyUFTm5neasruoE9RJDlN3Gan6ROcZQMwiHMKw/99ixxxWF/xWDLf/+Expj+ 0GdFSX6N6VahEF1h3NyyLYfpNJdcCeqK2Yndytr7Z8nmtwY4NX1D5cZlX5ybyMzuA3J4 x3Q8hGgZEi1hNHjOKqKmetkmeMYzYgNWKAi0A3F1RvDCP/8zhqR3SuZf2iRvolWUi16s ANLw== 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=B0IjewfhPoB21mUL+ukAhhgR2+vOUEMvAP9pcUk/okk=; b=6d7LutO5nNzoniDSmUlIiILi9p+xIQ0USDMXBwOFwV3PMJROFyGRGuqPulZMkzEtzS pHAlsGi9w5p0Y4RNU74WoE1nEwOCzGsTIg7uaxd//Rkn1moGcZwNp04IzCa+KF6cLo3E qSijyJyF4xJ2zpf6ejNH7lhKO+m7wGXquk3EqbEpu1xGTfFD3dk6MSNiRYId++f5a6aK LWuJZd0TvXV7XhrHLnwEp1xHKEZV4NnZ100LDsC5UkxCtzc0MyriffDNiE/c84FpsCY4 Zcx0cGa9NZq6Qin3D0tmR/HTxSs2hPmCLHAIsQG7Riv+muwTfBq8FSXQeT8eGzv4DZSo u1+w== X-Gm-Message-State: AOAM531tf0RmvnwdVVsvqlpqPp0+yA4wj8XQsl66KWy5sSDSaTaWHuF3 QpZdYOK6QhqAZs9ugbFH4htp1suVEutzkA== X-Google-Smtp-Source: ABdhPJwmGxO5koaYBbNOBLIZU32B/GH3PgkaKPq6eriwLqEjIlUeKlk2PWVU0crcTN6zO0ntHr/OSQ== X-Received: by 2002:a05:6a00:1824:b0:50c:e939:118a with SMTP id y36-20020a056a00182400b0050ce939118amr17776383pfa.15.1651607330440; Tue, 03 May 2022 12:48:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 05/74] semihosting: Add target_strlen for softmmu-uaccess.h Date: Tue, 3 May 2022 12:47:34 -0700 Message-Id: <20220503194843.1379101-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651607789218100001 Content-Type: text/plain; charset="utf-8" Mirror the user-only function of the same name. Signed-off-by: Richard Henderson --- include/semihosting/softmmu-uaccess.h | 3 +++ semihosting/uaccess.c | 29 +++++++++++++++++++++++++++ 2 files changed, 32 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..3cd809122c 100644 --- a/semihosting/uaccess.c +++ b/semihosting/uaccess.c @@ -23,6 +23,35 @@ void *softmmu_lock_user(CPUArchState *env, target_ulong = addr, return p; } =20 +ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr) +{ + char buf[256]; + size_t len =3D 0; + + while (1) { + size_t chunk; + char *p; + + chunk =3D -(addr | TARGET_PAGE_MASK); + chunk =3D MIN(chunk, sizeof(buf)); + + if (cpu_memory_rw_debug(env_cpu(env), addr, buf, chunk, 0)) { + return -1; + } + p =3D memchr(buf, 0, chunk); + if (p) { + len +=3D p - buf; + return len <=3D INT32_MAX ? (ssize_t)len : -1; + } + + len +=3D chunk; + addr +=3D chunk; + 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 Mon May 13 15:04:02 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=1651608236; cv=none; d=zohomail.com; s=zohoarc; b=XnUWhzTvzSh02DGundPBfq5xxFbykGSy9IieTkPGY3sD9LqrszrB7xDhLMCVY/ZronGSNCvBOrXfxLTfY8anahzAs7X6SsWgw30sRhDnM/h5zSYOa1tSeRbgycDpVZyNCPyPHCDe9t3pfxGX8WJjYo0uuzDOemBghOXM1yxss6I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608236; 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=yYl4ubh19IwlWlMYqHs938Y3A5pmp6ChkIekWgSMVhY=; b=hLKunTLVLIhsDNtRLKenMSiR95lq/DBCks7GuqTPYVyqgD9dZ03kwicmGMKHT+CIRshVWgfjxjwiDrQcq3YoZzEwFcwDNzg81NrZHtb6Yzsa8N5BOzpoTjsCXJBcw6RxdgMSXhEMoUI/nTNjihtCQdwx4sfNkj7yB5AxiQtFNPc= 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 1651608236006495.46258411476924; Tue, 3 May 2022 13:03:56 -0700 (PDT) Received: from localhost ([::1]:47918 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlykT-0004yI-BC for importer@patchew.org; Tue, 03 May 2022 16:03:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38882) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyVy-00012N-Az for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:54 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:39542) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVw-0003Wq-Ow for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:54 -0400 Received: by mail-pj1-x102a.google.com with SMTP id a15-20020a17090ad80f00b001dc2e23ad84so3204444pjv.4 for ; Tue, 03 May 2022 12:48:52 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:50 -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=yYl4ubh19IwlWlMYqHs938Y3A5pmp6ChkIekWgSMVhY=; b=CQu8NFjI5KIdFmNP/grBRFku9EHiYne5J99g7KsDQ51F7cdNQy1FgMjKXaO4s6Ibmj iJtzQHeUaYCH6SaKP4Jc+oenaMHto58Oo++eZiOanUDowgZTS9CdHu2AZPX4VqznmVZC OLcUc2ig+xGJ1jZ2fA/jsgcTrxDZylPtYHOJnSswOH5J9TLLLHJhclF7is7rSj6gLl4v QEXoKE2RBKTdIPRmNmJRILOVH64j0m1itiDt+MUDtPk5y/f5/ruNavNmLW01KTqWImHO OIWgc0v8eez6DyP8pi1fCxRxgDBI4l/NV2GDudSWznhAfL0Y+yqQ0r/0eZTdpckSkugg EEnw== 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=yYl4ubh19IwlWlMYqHs938Y3A5pmp6ChkIekWgSMVhY=; b=onmYkiPfuVmpjVgYs2AZDSvzbgGHSrTRyAfI3rXTusvxwwpxKWBE+ALQhWRNS8ctS9 lMIBmviRCFcCdJYVyLMM/gyg3raGvePR704ifgcCfiCErGOYK0M2Td/hcQ7s52P5XS6D o4Ewi+AUzMRnYcgnpdCjignAOzoWqYU5JzlYRDYeetr/+J/ErtLaA60quasWbUdH1g6P v2sqE2xuqfx0FoGPT9xm6BaAZG5xFAo93iTiKIOyDqSSNDR4/3Sals5Vkkf7CU1Z4eAf mta9tthoY8Kj5SDvJNFvezlCKxZACV/goQ8c8abhpUEQYG59zWUZLV4UOi3wkwcD3v28 tU0g== X-Gm-Message-State: AOAM530qVPxMyKUAvq5Aj3vqOABKh4N7XKYQWkld9+BoQvcdGogX2Riu RXj3PcW6z4YvRJaE1JMYYZtOEo8eOUM9XA== X-Google-Smtp-Source: ABdhPJxudx7FFpHu8ylMbNS36088GAYHlonuWxlsDqc46Q2dOiHnkbo7BJAuSSadXqU8+lWW6fE7GA== X-Received: by 2002:a17:902:ecc8:b0:15e:9e46:cb7e with SMTP id a8-20020a170902ecc800b0015e9e46cb7emr13056067plh.111.1651607331472; Tue, 03 May 2022 12:48:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 06/74] semihosting: Simplify softmmu_lock_user_string Date: Tue, 3 May 2022 12:47:35 -0700 Message-Id: <20220503194843.1379101-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1651608237243100001 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. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- semihosting/uaccess.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/semihosting/uaccess.c b/semihosting/uaccess.c index 3cd809122c..f5fc94c401 100644 --- a/semihosting/uaccess.c +++ b/semihosting/uaccess.c @@ -54,20 +54,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 Mon May 13 15:04:02 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=1651608112; cv=none; d=zohomail.com; s=zohoarc; b=Dac4HVXL99M22PgTAMs5Rn531WH7DYWxspfy8bUNWqh02jzQ4WS0x5tzaBYI6G85wUNLVzHaManiYMvY8g6+/G6qSUvfQmNmrgLAEsWAILWsGVIJaAjshaYg5j9YUyBeJCOa1otiooPOV5U4YcKFjkxASnoN8S7C/qhyoo4DAIs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608112; 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=Rdp8FUFv0ef0StprWjSCHgZq98w5M9LAMIgcdDdNZUM=; b=Nklu7Bn2bVulEejbFT9PLKK8AYTDK+LQc90uPAPMP6FC6zDpJz38vZtgXzngH2nHbXW+8nqVfjh/90rg4db+gj1zQSOJKyDemEyTYpHNolpMCvuDLDWx+l/T6t+XsrKdikFi30vai7kWWozVgM1Cuyy04zqXfhfx51y4kZjnAQ4= 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 1651608112285309.0729375535328; Tue, 3 May 2022 13:01:52 -0700 (PDT) Received: from localhost ([::1]:43610 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyiU-0001qK-Mz for importer@patchew.org; Tue, 03 May 2022 16:01:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38956) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0001AG-MX for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:00 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:34410) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVy-0003XF-9b for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:56 -0400 Received: by mail-pg1-x535.google.com with SMTP id j70so3886172pge.1 for ; Tue, 03 May 2022 12:48:53 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:51 -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=Rdp8FUFv0ef0StprWjSCHgZq98w5M9LAMIgcdDdNZUM=; b=M2iTS49jC5fPxkJzVEGryyLmyh9nIOlKpXwWFAdAkuWlBDFzAEkBzv2gDbTi7KArbX ZKB1PP41NHkGFJP3EwIL0eR3YjHongXSrJkNtyhI83oEM4Hitmg7HJX+dYD5zUbs2hTM rQ54fYpVbaaplmzwbizEAUKBBUpTE6HpFG/qf4ZBRRmZdFL/AzG7FX7Y9fFnYPsnC3s9 h/nRDM+1KOveTN9zbmctMXG/S6jjZuCPD4OZNNXPrCoTGF0atC/I4amjS0nFnPbdsXje nGJRgEEUlqnfJ5nxynID5KhjrsvdoRGkA4WxecfzwH4vjORr6zQhvCZjb8D06BmDnONL lRjQ== 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=Rdp8FUFv0ef0StprWjSCHgZq98w5M9LAMIgcdDdNZUM=; b=1liSjbNRty7H0lA3EX9GHXB9wdL5xR5h2xSDGBclQixCHIAa/1Eq+S77+HLOBFGMcU +cDmlVeG+Kth87Ub0puEYlwGPCQwvVdrxDEbZs3czTwu+3U91GKVoGPDvZyk1KJPUZyx 6FVDjkrcpcaQDQ5lU43UFYaJxJX2k4Niwo/F80k2w0nChbS8/3xe/Pzc9Mx4bj9cUY68 3/u+N5Ugeqc4nH8EWCfUMQpSwsi7Ox9r+JIYNPBAQ+pKVITHJmzdlMM8hmM5bBJuwvO8 OYiXq418iSe6mCwEEmK6BnYfwiOMfyOBDSuu2XMZygUJGkyZ3Vtk4C5tW+qfjawCQAyo CtGw== X-Gm-Message-State: AOAM530iwXQ5vrDn2fVrEb/E3CCOq0YVax/JOKCry4OdACfRMxGZqsAw 4yLGUNbxWLOmWaRm2rCVGJTbdtugc7EZvA== X-Google-Smtp-Source: ABdhPJydlWNLe4IKOP3f2ZoUlAO9aHykmhCqQkT/MMHSGIcZeue7cyHgRQeKBBdLWcQfNjkvijvW4Q== X-Received: by 2002:aa7:88d3:0:b0:50d:a2d7:7f12 with SMTP id k19-20020aa788d3000000b0050da2d77f12mr12322991pff.27.1651607332880; Tue, 03 May 2022 12:48:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 07/74] semihosting: Split out guestfd.c Date: Tue, 3 May 2022 12:47:36 -0700 Message-Id: <20220503194843.1379101-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::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: 1651608114290100001 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. Signed-off-by: Richard Henderson --- 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 | 40 +++++++ semihosting/arm-compat-semi.c | 125 +--------------------- semihosting/guestfd.c | 116 ++++++++++++++++++++ semihosting/meson.build | 4 + 10 files changed, 168 insertions(+), 123 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..5d6e744305 --- /dev/null +++ b/include/semihosting/guestfd.h @@ -0,0 +1,40 @@ +/* + * 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, + 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; + unsigned featurefile_offset; + }; +} GuestFD; + +int alloc_guestfd(void); +void dealloc_guestfd(int guestfd); +GuestFD *get_guestfd(int guestfd); + +void associate_guestfd(int guestfd, int hostfd); +void init_featurefile_guestfd(int guestfd); + +#endif /* SEMIHOSTING_GUESTFD_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index dbef280b87..c092138031 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,15 +553,6 @@ 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) { /* Nothing to do */ diff --git a/semihosting/guestfd.c b/semihosting/guestfd.c new file mode 100644 index 0000000000..e77265db0f --- /dev/null +++ b/semihosting/guestfd.c @@ -0,0 +1,116 @@ +/* + * 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 init_featurefile_guestfd(int guestfd) +{ + GuestFD *gf =3D do_get_guestfd(guestfd); + + assert(gf); + gf->type =3D GuestFDFeatureFile; + gf->featurefile_offset =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 Mon May 13 15:04:02 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=1651608489; cv=none; d=zohomail.com; s=zohoarc; b=UmkAuKYoCTOCDw3TqEeW+/oVpJfnHUQhUkhflYRzktHms4Q1uNjvw07yOwnyqiP6iz8Vb6lgQ9cOMGsOIW/36RBpH5tRlrGY+nf3UocJLapq81+vcK+zG0oOiXmBRQpzkc9Wiw6m1cUMVvsnKj4Lf4OxVlZp+fg3ieqYAbcOYeI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608489; 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=ePCmgB81KOph48TAJ6SLINByRDQqJIYEYHjh8/K/gAE=; b=kjzgopkSeAv8+oawwCzDHDAd2D1+K9oxfIkeJfptCV/q7JoY5Z7rxaIGIZ7L6nKfUkvTVuWkt1Ix5GY1ZgF0IDszbNDd4BwNBtoyfMMw6renMWmhSKYSa2C70Z0OwXG2zqZ18ikzuuw8rz6NoP5a29oOK3DUTBwqB2NimIkqLSs= 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 1651608489742712.4287283800556; Tue, 3 May 2022 13:08:09 -0700 (PDT) Received: from localhost ([::1]:55724 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyoa-0004cg-Md for importer@patchew.org; Tue, 03 May 2022 16:08:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38958) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0001AY-NN for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:00 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:56238) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyVz-0003XQ-8y for qemu-devel@nongnu.org; Tue, 03 May 2022 15:48:56 -0400 Received: by mail-pj1-x102b.google.com with SMTP id r9so16218584pjo.5 for ; Tue, 03 May 2022 12:48:54 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:53 -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=ePCmgB81KOph48TAJ6SLINByRDQqJIYEYHjh8/K/gAE=; b=S3QQ8TbTC+eFCTQcugP9X3NsliEZmOYxOwCxD5YBKQgjo2tKfr3o4Txt8Cs4zgTNoy qfKQqmoAhT8TYaQSC6xVYxEHb3RbK2q+rc83OObLnERLXLDD6wyQFmcPMVZ90Smvd43E AFTGhJIcn75i5U+PoLeVYB2Y+CFgXQ6CnA2HNIeBW3rjWoFOQpBtOntECfhJyfwbsT7w M7vjIY7Gag7KaLYYy55MNl3c9ltySc+ohzzMGjM9CGulT9OtLy0TWZfwZzVjEgHEIZdl QifNFUTUfHE5k1T+2EHdBofBpoLzL8Lu27IK7lyDafFRi/iIqDiWVq5l9/qRAYLvC7ZQ Qixw== 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=ePCmgB81KOph48TAJ6SLINByRDQqJIYEYHjh8/K/gAE=; b=LetmW0ciKF/ARjbMKJaDYjxr0FMSshUl4EatgPPOR0C+Qmwxcn9vHhlOxrE5pnF289 REn3IN3v+cLY85SkyUGYSdKwGNyaZdpxsVdh6WXjqpRPQZpowQWhwFXysttMSEgS7SzT feVoyAKLAShm2Z1nnhK770XF99HQZX/jIzfW+QfjccaNh6dU7/O+LrC57knhCkNjLkmF 4f51IiHVmsLR3j1T8iGJXLzYJ7a0R43+ZKuPo2wRZOZC8tinNwsMCVhgOr5WNHmRjBYV c2G3uW9sm+BbuPxFhIHorw0zDLjYKzRzRasJLUkjFZDaSmyHWkmWu6ezQGbE6X7M0oCb 6Z2Q== X-Gm-Message-State: AOAM533OEm/5l88mAV9LZB/7J+/KX93Li0tWdXo7Odt/a6a4tU5Aauyy ffQoLNZqEfKZ3u1QNnonV53U/j6O3DMx4A== X-Google-Smtp-Source: ABdhPJxFCEUhUjNDiXi9xiV9savM93zlwI1Bg4VomajbTyVNJCHBK9j5GfOpg9fIIZ2iKG17yGEOFQ== X-Received: by 2002:a17:902:b106:b0:159:5c6:cb53 with SMTP id q6-20020a170902b10600b0015905c6cb53mr18373702plr.99.1651607333962; Tue, 03 May 2022 12:48:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 08/74] semihosting: Generalize GuestFDFeatureFile Date: Tue, 3 May 2022 12:47:37 -0700 Message-Id: <20220503194843.1379101-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::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: 1651608491700100001 Content-Type: text/plain; charset="utf-8" Rather than hard-coding the buffer from which we deliver data, pass it in on initialization. This decouples the feature from ARM semihosting. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- include/semihosting/guestfd.h | 10 ++++++--- semihosting/arm-compat-semi.c | 39 ++++++++++++++++++----------------- semihosting/guestfd.c | 8 ++++--- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/include/semihosting/guestfd.h b/include/semihosting/guestfd.h index 5d6e744305..5aa2722cb2 100644 --- a/include/semihosting/guestfd.h +++ b/include/semihosting/guestfd.h @@ -15,7 +15,7 @@ typedef enum GuestFDType { GuestFDUnused =3D 0, GuestFDHost =3D 1, GuestFDGDB =3D 2, - GuestFDFeatureFile =3D 3, + GuestFDStatic =3D 3, } GuestFDType; =20 /* @@ -26,7 +26,11 @@ typedef struct GuestFD { GuestFDType type; union { int hostfd; - unsigned featurefile_offset; + struct { + const uint8_t *data; + size_t len; + size_t off; + } staticfile; }; } GuestFD; =20 @@ -35,6 +39,6 @@ void dealloc_guestfd(int guestfd); GuestFD *get_guestfd(int guestfd); =20 void associate_guestfd(int guestfd, int hostfd); -void init_featurefile_guestfd(int guestfd); +void staticfile_guestfd(int guestfd, const uint8_t *data, size_t len); =20 #endif /* SEMIHOSTING_GUESTFD_H */ diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index c092138031..c6bfd4d1ba 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -553,13 +553,13 @@ static const uint8_t featurefile_data[] =3D { SH_EXT_EXIT_EXTENDED | SH_EXT_STDOUT_STDERR, /* Feature byte 0 */ }; =20 -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 */ @@ -568,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; @@ -582,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); @@ -595,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 { @@ -638,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 @@ -765,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 index e77265db0f..b6405f5663 100644 --- a/semihosting/guestfd.c +++ b/semihosting/guestfd.c @@ -94,13 +94,15 @@ void associate_guestfd(int guestfd, int hostfd) gf->hostfd =3D hostfd; } =20 -void init_featurefile_guestfd(int guestfd) +void staticfile_guestfd(int guestfd, const uint8_t *data, size_t len) { GuestFD *gf =3D do_get_guestfd(guestfd); =20 assert(gf); - gf->type =3D GuestFDFeatureFile; - gf->featurefile_offset =3D 0; + gf->type =3D GuestFDStatic; + gf->staticfile.data =3D data; + gf->staticfile.len =3D len; + gf->staticfile.off =3D 0; } =20 /* --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651607849; cv=none; d=zohomail.com; s=zohoarc; b=FjElQ45h5OWrbGHLsRQlK9xLJJHVmB7y0B9/jbVh6frPa9xgUCYUwzCU3q9/wXpD7iuaY9+xxK5hhcZaYEtO/cXFG18a7mTg9xN6x9rl3UAkT/Aylpc5AoEwE4zBZ39Vvk3MuG+na9NtVP4VxiBGBcT1fr0BJosTrOXnljIqTBY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607849; 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=RfNrr2MMNRj+8Yx94MQAihFWVTbLoFVuTh/kk6HikyE=; b=GuYasja22uF8u8/FSGVlj3/p7uzMaq6NCmq6oCd/c3p6pPu5nIpCqAZ+f/6FNnYSucVSSyO2QN5qHmgIkunfMk0NjGuqMmO82kPexqTxLMjGCa+bdP0G3dvCpPYrNyL4Iu4jKRwvlpbUeUBGqIb8Rr/2GOBqdBNDJwkdX5UqBYM= 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 1651607849298676.522172579786; Tue, 3 May 2022 12:57:29 -0700 (PDT) Received: from localhost ([::1]:35436 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyeF-0001tV-Ot for importer@patchew.org; Tue, 03 May 2022 15:57:27 -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 1nlyW9-0001WZ-6M for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:05 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]:35763) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0003XX-Cp for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:04 -0400 Received: by mail-pf1-x42d.google.com with SMTP id c14so6715689pfn.2 for ; Tue, 03 May 2022 12:48:56 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:54 -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=RfNrr2MMNRj+8Yx94MQAihFWVTbLoFVuTh/kk6HikyE=; b=PQKUmgPt8zOo2pAcL7bd7ErREtht+3gCXdwp13vCpg2huLEsunAFVBrpbSiXbsvih/ 3+uUXIjpSayAZCE4HeYl3FjOmEyQiJNm2G+/TU6d1KHDeKsbDyDFkSkyJBXWtRyezyJq oK4tJMDMDLDAeP4N0cEbY0ltLcaV+yAatH0oXkxY+ffzu1XnGlWLqSzOePrrjygiwL+I Rr0ptWMq2oCqBlcYvueshrPL1FrxkP3vJjjB+1Zvw+99+f3hr5LPzPSlXRRlNZo5Z8ww 3p7IakFCqgJRktyW1bYwXXFUBNirZJ8HFaovZMwOxokB4lXWV+eb73kEMMQhrzhqeN7E IIaw== 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=RfNrr2MMNRj+8Yx94MQAihFWVTbLoFVuTh/kk6HikyE=; b=DWNJQLn9fBwDLV6pwn6tGsfPNsm4z2fl+hgden3T9pG8pugCmkpSPVnE3uj3VPcjLZ H2N6b0wPWnVxefoVFRh6ZyP+31S8e/PrTFY2Qc5Gto2YfDrW8wX8Spq8wqiieA5M9nDN /U5T/Sdqeicl+ac5o8lW3EQmrQBQkflzo2ZEuBYV6bli1Js4S0PcMWofB5EI+mdXWbn5 qQywGNnqpt1kgKVmh8lQOXU/XbXnrpw2flsX6CdHaOvUo3gfX9yW3vchpInZhFvFLerL Y/tNVY/E9OaWn17recXmSG1U/4EBDur8g00YwGhr0xOntkNc09ATfJuoSouBnhvFrW5q JkLw== X-Gm-Message-State: AOAM531/69TU4yZxaPl5LC5MMWsWiWBZ9DZols1IAaz8dx2xIpog0SGC cjhU4ze20vMecvKhpT0MoTeotLzuSQKdSg== X-Google-Smtp-Source: ABdhPJzj7VcxJDJvIT+vtk3inuv71URHI4nH5O2gKeEttGDG8vY3HIgCPGkftpuoxmoJI0cc0Z0Nfg== X-Received: by 2002:a05:6a00:2484:b0:50e:68e:d5a5 with SMTP id c4-20020a056a00248400b0050e068ed5a5mr6432354pfv.47.1651607334974; Tue, 03 May 2022 12:48:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 09/74] semihosting: Return void from do_common_semihosting Date: Tue, 3 May 2022 12:47:38 -0700 Message-Id: <20220503194843.1379101-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1651607849753100001 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 --- 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 | 571 ++++++++++++++++------------------ target/arm/helper.c | 4 +- target/arm/m_helper.c | 2 +- target/riscv/cpu_helper.c | 2 +- 8 files changed, 278 insertions(+), 309 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 c6bfd4d1ba..7030dfd587 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 @@ -290,28 +276,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) @@ -351,9 +338,8 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, tar= get_ulong err) cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + 32, (uint8_t *)&size, 4, 0); size =3D be32_to_cpu(size); + common_semi_cb(cs, -1, err); common_semi_set_ret(cs, size); - errno =3D err; - set_swi_errno(cs, -1); } =20 static int common_semi_open_guestfd; @@ -362,64 +348,32 @@ 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); 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); -} - -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); + 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 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. @@ -427,113 +381,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 @@ -553,63 +500,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 { @@ -668,13 +609,13 @@ 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); \ + common_semi_cb(cs, -1, EFAULT); \ + return; \ } \ } else { \ if (get_user_u32(arg ## n, args + (n) * 4)) { \ - errno =3D EFAULT; \ - return set_swi_errno(cs, -1); \ + common_semi_cb(cs, -1, EFAULT); \ + return; \ } \ } \ } while (0) @@ -694,7 +635,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; @@ -714,32 +655,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 @@ -747,63 +679,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); @@ -812,11 +748,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); @@ -825,129 +761,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. @@ -998,22 +955,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. */ @@ -1028,9 +983,8 @@ target_ulong do_common_semihosting(CPUState *cs) =20 if (copy_from_user(output_buffer, ts->info->arg_start, 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. */ @@ -1043,9 +997,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]; @@ -1102,12 +1057,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)) { @@ -1137,6 +1093,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) { @@ -1145,10 +1102,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 @@ -1157,16 +1118,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 5a244c3ed9..4981a22821 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -10195,13 +10195,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 e1aa4f2097..55105cb0cc 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 Mon May 13 15:04:02 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=1651608385; cv=none; d=zohomail.com; s=zohoarc; b=l29dTXpXu0EZDpyOq25GDdgZ7ASOEyWtC5egk6MeaXwv+lwLrVwglVdrmQAP416BXGKhSNur3asJA3tw8NPIAL3b3fKBNxz9Z4x+SMuHZHT8h/jkpQr0EuybNJHXuqiSGovZQIu6xzT5ezsaoV6uH1rmLByNZJ0qamOet3rczPQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608385; 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=D4UV//9Dx1fKTWaO/CeFVHK/oLn3ZgWAg/jUv9V5umM=; b=ixW7dK4XZpjNfxH2ptH7BBh/NKz/Ev1hEC25NYSeT9z5ctqdYB+SEVElFoDF7sALGPQ8D3rCfmK+gaXpb0LUr+PhZ689Zg5NWfyLULjoZIQgmAJYdboig3/K7T2wcincGUfE1OZSsCif3aJ+qGNEYuSNAuHkjaMV+IX8O43PiFI= 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 1651608385738418.96351247478435; Tue, 3 May 2022 13:06:25 -0700 (PDT) Received: from localhost ([::1]:51680 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlymu-0008Sx-KU for importer@patchew.org; Tue, 03 May 2022 16:06:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39040) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyW7-0001Nl-G3 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:03 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:39542) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0003Wq-7p for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:03 -0400 Received: by mail-pj1-x102a.google.com with SMTP id a15-20020a17090ad80f00b001dc2e23ad84so3204444pjv.4 for ; Tue, 03 May 2022 12:48:56 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:55 -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=D4UV//9Dx1fKTWaO/CeFVHK/oLn3ZgWAg/jUv9V5umM=; b=W+M7sOnWKH4+sz4oIHDL1NUrIdYlxisX00NL5wkyu1dO0mGxe2R3gBQRXA7T/n4yEl mtdZ9gvLlurO0axgbzgE8MayT6SITdDzKoa7XoZfDJBw4qQBTUrEoC/XpBZ7HKUeW7kN C7/k1tOzJDDE/nXo2aL+hOzfxc0YggsvQscNaYlpifl9C9+8dnrCOM7dw/UO3XZtU+i5 OJZF2rvyA9wHNccWgVOazhau1i1OmZsw4xlMkpHJEuRGj0vKLhtON4tF7o4zR5YBgEpv hxJTEvi8JQdZmAzmvkDqX9RMKwHC1mp02hp1cTylinevt3GpeM0kVY/fQriZqM7YvcOF OASw== 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=D4UV//9Dx1fKTWaO/CeFVHK/oLn3ZgWAg/jUv9V5umM=; b=CPiGVyYAMnfxYqoV2GQ84sTWZmBmtFBl+HFOW4yxQmoLqTFxseEo7p1UNSravDAnZD hE4r1R9Z8KEw9se3E3PpHYybzSVqtB++gum4AwC9/WkmHOX/XljBby54JTLu1pLm9SpX Jh9sUlW+jMDJMRp6lPE6+Lx9I4a0FuTs8NU1qFegj3aEYFMgfYNq1NFU7e6KOkQgtB9H PS4BE4x4KaLbZ7/mObVyiZCHYFxJTnL8Te4rqZL27enI4Db/8NJOoogESmjRsmx3ngw9 X5cPuv7xCNmUbOEO03pLBjW9vzLtkOTA4SO1jBhIQlp8jmjwiC5J4V4/izB2jaNrehsT 0l9w== X-Gm-Message-State: AOAM530/HQ5EECmukAWem8i6N2ebdnXkBfFzJaJZtYFXDJAGrbvROJkg l7awsyyrR/AoetR8TYGcfFpqJ99kZGl71g== X-Google-Smtp-Source: ABdhPJyoieOGJZ6YhbDJuwG61sBisWYt6bkCHvlmbYsiJM0t6wmx1w0xzzfOUS98QwXTDAsDLm5dVQ== X-Received: by 2002:a17:902:eb85:b0:15e:bf29:bd9f with SMTP id q5-20020a170902eb8500b0015ebf29bd9fmr2104357plg.135.1651607335759; Tue, 03 May 2022 12:48:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 10/74] semihosting: Adjust error checking in common_semi_cb Date: Tue, 3 May 2022 12:47:39 -0700 Message-Id: <20220503194843.1379101-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1651608387870100001 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 --- 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 7030dfd587..18664b1c47 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -276,7 +276,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 Mon May 13 15:04:02 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=1651608920; cv=none; d=zohomail.com; s=zohoarc; b=julfSfHTm5QVIiYp0mlSp6T+h9mvHZxWBK5rx93I2gb6FnNrxHwRyc1aj66iDb0k5RNXPERM/i5MIK7434uaItYWN37nIii3MZEWzpMeX8VoVCYTKCYfPODOHERbsJ+QOz8b9cOq1e9VRmjDcDwc4QfYooJPpgO+oFetx55KkVI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608920; 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=uw4gme9KuFW+TrMXShBM/0VdYE8dR14VXRbCtedKveY=; b=W9mD4P9elFJMNDL9JHY+BuHzE8I0QqIcI4nl0pGMAJqSvEMV6dFKzTyY3arewHNkNbGPRnXi/BZTTi7fUT0IQs+/iqeN0NB1DaMEfidkdDCv3qVkiX6SkJvJ4l0BPjah3PZe0h99AJsHJq7oxuzdQL7N1bPMF1SMWdF/lvHjR4k= 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 1651608920760534.0479781864543; Tue, 3 May 2022 13:15:20 -0700 (PDT) Received: from localhost ([::1]:43028 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyvX-0000Sp-Bd for importer@patchew.org; Tue, 03 May 2022 16:15:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39158) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWB-0001da-0n for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:07 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:44589) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0003Xn-FD for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:06 -0400 Received: by mail-pl1-x630.google.com with SMTP id j8so15854661pll.11 for ; Tue, 03 May 2022 12:48:57 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:56 -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=uw4gme9KuFW+TrMXShBM/0VdYE8dR14VXRbCtedKveY=; b=v5oHlKFln1ctjaDmtcYOPVFlnNJ2AY1VCefdxEpPrhr6iqI8GV32zMwL1mi3eY1m9o Fp09PfeZKeO4jqjKl+L/l3lDw6lakjLyaiPitjEOaF9EvpICuSQLuhY2daLoUAf2Lu2j w0P2z6ENYQ6RJTNnS4+Xzp7hqUk2Hzs6ZCdrlC9T/uOR+TuABNkYlyIsnxerbkZRXvlK dZL1xWV0mGa/A8/04rQopr1QvtTAoFKiAJiPpC+TdpLltmShzXSsf8YH38Xwd1RJJPvV ErbN7ntxy2kU1qAjhULMRAEdRbCWd1+SZHhozL6tW61bp6i25rLkuVrATeGoYdbzWv85 QWGg== 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=uw4gme9KuFW+TrMXShBM/0VdYE8dR14VXRbCtedKveY=; b=6IRP+ptwWf8TA4c5csna1Uc30Ym9bAysGM5TPqKbMf4T9jsan+ssV2IPMkKStC3I7W 6jmHzxhwU/Cqnoz6RqXe4b8V+6wIQAnkeQRwrwhLv6dRwOwJDBqxI3lLo3+AtLE5IIFa rj74hOibwHd01N4xOU8ph1rVENs+Q2Le7qhK/dLXVcGlt4frRTi5tT+n3wDnd0nMzuQY OhdUq+MgNPP0iTWT2gZcp5/GnzfBO44o0/rpKH4Gj15CMnn6Hl6ckTMxnVXIaGYWJTUr DQtSlTH/OmCHafyMFkwa2GOHqDgV1k/L3mRS0Pxa+6dTGL1nGb6EtEIloa7XzMwHU8PD BPSA== X-Gm-Message-State: AOAM533RqnwHtjDZF5KD043SVZqDYrCwM7O1/3nG/1mQsaSsVPv7j6T8 jdGnUowukD12xzeUqM0R0zV+/c4oRTj9Jw== X-Google-Smtp-Source: ABdhPJypB6v4ICeNbQT9zaPcGWC/K3B9x+9F3CsSnJjRRkvfqarQkrkuTVCryLfNAIjWK3sDkgfXzA== X-Received: by 2002:a17:902:e393:b0:15c:f1c1:c527 with SMTP id g19-20020a170902e39300b0015cf1c1c527mr18214358ple.22.1651607336683; Tue, 03 May 2022 12:48:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 11/74] semihosting: Move common-semi.h to include/semihosting/ Date: Tue, 3 May 2022 12:47:40 -0700 Message-Id: <20220503194843.1379101-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608922816100001 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. Signed-off-by: Richard Henderson --- {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 Mon May 13 15:04:02 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=1651608569; cv=none; d=zohomail.com; s=zohoarc; b=ElsPQvIVq7riF3k+tC7d5DQCUT4KoPycFlxSEtA+1O6Z0VHnIL/NRZPrtuGtGPzSFohYMu+JXTJOkdD5i+n8L8HUwgD9PlcFyeaAcq2ZasNUn87yiY8Xb55+r0Okw4ZJCiRcT/0LgB06CUmYFw3kyAn7tU8sdeHI7VCQsu7m74Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608569; 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=sRa3I/Ez0AmhRV5BtAXtTCzSb0MQ7Gt+C1fZfKVXMvs=; b=Gmwivf83GdRwMMQwSz051oVa7zlGHVYrmCtFn51+f1vxX5TB6LtOrPYU73q3WlDLNevyupOmYj5Kq0RZ+0vYhAxSL9ywGPqWo7DoUVsHAUXoePachoFudcZk1xSjd+kKLoNaInBlANSuf6C/VJALgB9sk+hEGyB68QDG3mY/jlg= 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 1651608569128285.0635034377125; Tue, 3 May 2022 13:09:29 -0700 (PDT) Received: from localhost ([::1]:59394 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlypr-0007wG-5r for importer@patchew.org; Tue, 03 May 2022 16:09:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39068) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyW7-0001QW-Vk for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:04 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:55185) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0003Xw-G8 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:03 -0400 Received: by mail-pj1-x102a.google.com with SMTP id fv2so16237021pjb.4 for ; Tue, 03 May 2022 12:48:58 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:57 -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=sRa3I/Ez0AmhRV5BtAXtTCzSb0MQ7Gt+C1fZfKVXMvs=; b=fECEga2VAgTlWdGXRWCSw7ZJomvFAD+c/TlMFmWimvRjhPGcxFomTF5Zz+iTSRrhNC Ug/Lo5d2Uqx1na8FQjvQjWOgfZFuH6adBfWP196GukXo1p2hHLpQHVd8p7wy+PPzIcWt zBqq/fMXbgifKBHQGIAEHHnM+2S6DQiP7xpcGcgqRjo1Qp3X0u9A+JuNjCDv4L3UZ39a 7bh9m2rri9IzS5c3JGE2/W4E/kGxB7FQ16xE4MgWFM8Ie+zwatrqlb0dOK8CLcMSrwl7 nI/8tbyAG3kHXwoeq1dO9DTzEI0RVwXm601IIFEutdlI7LMWJOg4eOoDptr7gjeH3i6Q 5xlw== 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=sRa3I/Ez0AmhRV5BtAXtTCzSb0MQ7Gt+C1fZfKVXMvs=; b=qy7M9t7fqkmakEkPWveHJ2dViVnntBsiYhbxeiK6AryOlN2W9L9PaXJLZ2uM6BbjCT bMPqVf7CxGup+6UDpHaJwKScnCYagE+2Mwz585PXhow1OI+8gMZJe3/aIj7CPZWqtrml TB/XcekF3U/fTvwHo3lyCwAx2OG6GWTjahUfRSPtYwqgQWzl0AwyCwlC3AXaMcth1m31 hWw/hNQiAFG9YBwkQ7Z/0N42R3rMzYNHlSAO8nB8wKznGx04BjafxFM93owet+bqrwC8 HJ6X/26CEqGq/UokzYktjP6qayUGbn64fyYPlM8CniUDkvu/Cv6wFnomAI1Oa1YoJefy V2gQ== X-Gm-Message-State: AOAM531t3bwchK6p/eJ5+/TUoaGX77Z/yFp7Xq1I4Yv/pQ/hELuGhtt/ SNOJcaDJvV5aKlOatyBqw7J7dCVFHYnSDg== X-Google-Smtp-Source: ABdhPJw3GoIPycILuOOfjEs3DglVzz0RoX6JZDCIhWl71LVbw0CtTUXZ0jLoslieC//vUj38CqnRCg== X-Received: by 2002:a17:902:b416:b0:15d:7f2:b19b with SMTP id x22-20020a170902b41600b0015d07f2b19bmr17988514plr.93.1651607337758; Tue, 03 May 2022 12:48:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 12/74] include/exec: Move gdb open flags to gdbstub.h Date: Tue, 3 May 2022 12:47:41 -0700 Message-Id: <20220503194843.1379101-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1651608570874100001 Content-Type: text/plain; charset="utf-8" There were 3 copies of these flags. Place them in the file with gdb_do_syscall, with which they belong. Signed-off-by: Richard Henderson --- include/exec/gdbstub.h | 10 ++++++++++ semihosting/arm-compat-semi.c | 8 -------- target/m68k/m68k-semi.c | 8 -------- target/nios2/nios2-semi.c | 8 -------- 4 files changed, 10 insertions(+), 24 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index c35d7334b4..2aaba9c723 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -10,6 +10,16 @@ #define GDB_WATCHPOINT_READ 3 #define GDB_WATCHPOINT_ACCESS 4 =20 +/* For gdb file i/o remote protocol open flags. */ +#define GDB_O_BINARY 0 +#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 18664b1c47..a1fc4ea039 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -86,14 +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 -#define GDB_O_BINARY 0 - static int gdb_open_modeflags[12] =3D { GDB_O_RDONLY, GDB_O_RDONLY | GDB_O_BINARY, 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 Mon May 13 15:04:02 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=1651607643; cv=none; d=zohomail.com; s=zohoarc; b=hM8/9bFd/f1H2X7yur0fGF4SkSPdsER41NurqAC9VvLYuF3rUni78AnvSxoK6g8IP30z73XEkRmbEUt+WW7w/3/XE7aW+plr6tSTpiSB3QzNmkmgFSoUtzQwU3vfV/YaXCQdEg5yhD670+uwRSxU9hD+0QpdZzd8RN4rBKafCSM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607643; 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=o7WLR0F1itSeL1D48lB12rI6iLH/uoOr7m0MR0rWKoM=; b=Gy0udAtnrd7zNTh+y4IRNnt4OdF0nFeq/XfrMf/sUuGb5DvBP+zGYL9XSgKf9MNrd55H76tWiuWqZeZ7kdl7s1iobonEjzS4EgFEliiW8n905MYs6qlKYN51jlSxYtA8Kqhb08GV75CU9DHBCec+nKj9HJhpEXOUodZRaZGHKq0= 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 16516076430871015.0352057187076; Tue, 3 May 2022 12:54:03 -0700 (PDT) Received: from localhost ([::1]:55906 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyav-0000h5-VM for importer@patchew.org; Tue, 03 May 2022 15:54:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyW7-0001Ob-LA for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:03 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:38499) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0003Y2-Ew for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:03 -0400 Received: by mail-pj1-x1036.google.com with SMTP id cx11-20020a17090afd8b00b001d9fe5965b3so3213750pjb.3 for ; Tue, 03 May 2022 12:48:59 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:58 -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=o7WLR0F1itSeL1D48lB12rI6iLH/uoOr7m0MR0rWKoM=; b=n1p+YBgD6XI2JwnHgOijz7KfPR9n1UnNU4QtocC+XqF46pcmizC9w/iNgEmjKw4HBg esfQwnRa55pdJMQIQpLufB8B6PydWJAiaU8GfUM6Wn6RAWrhEE580ZinfF4lOUXm13ZA HEm/oWIiofnCqIIyJ7nX7cgthsIFAIAOW7cC/YtvzYrsPs2CpmNPpQaRYJEw5LqyfqeU NG3uC98XZt7oXxSBqOwog5PBETFsr9lcjIC9ep6HjunTPTxh9zS96GEfXKTbtypDdViF 9TG31i94jkGGP9FyCL0EG1lApL3bFvbO/uAlsmJC4Z5euxd8hPhinj73GENV1+BuSyhh vyEw== 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=o7WLR0F1itSeL1D48lB12rI6iLH/uoOr7m0MR0rWKoM=; b=0XSSAInd9yPkfEk8eHqPmfF9aQIhQwz/Ldso+/objxtpMTDSj4wLaztA/Sn5myWxho 1Igbrm6HvrQlRiZvl2ER8npBJ9PYD7C5XLtvoc94MZCkctV+WOUfBNC+swpPz8EsihN8 bR0pUZ/PPeRYMW904+7LEmEsPTUoVJMbCr5m47hgWLUqshLokE5WJj9wGE4Vi5ttcdaY j95obn6id5LkVmc3i3CIIXbHU1p+Klmomq9A/7NYFBuTRsZ/rEIOqp4TcAPh1g5gcIqF fhJV5kNWKCQTVRy3t+IfF1iXGo4/ASnly3L3lWe8cTd005khh240ZOBvNV40mQYXImNj +X6A== X-Gm-Message-State: AOAM531FjjSo4wIOAXisFZKY/t0gRy6LbPxWd3Ws4oi/e/CP8IVAesIQ oq9CEdvJB7gChoX/59GtlcAX9mdHuXtfUg== X-Google-Smtp-Source: ABdhPJwK2AQTUGZ/GraA8X6EL0XEbtl00AY09X+ufAK/xqmyFBr8ehh6ARRd3PVGx7uobbdFQClhIw== X-Received: by 2002:a17:903:2344:b0:15e:bc62:bda7 with SMTP id c4-20020a170903234400b0015ebc62bda7mr3159739plh.120.1651607338655; Tue, 03 May 2022 12:48:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 13/74] include/exec: Move gdb_stat and gdb_timeval to gdbstub.h Date: Tue, 3 May 2022 12:47:42 -0700 Message-Id: <20220503194843.1379101-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651607644465100001 Content-Type: text/plain; charset="utf-8" We have two copies of these structures, and require them in semihosting/ going forward. Signed-off-by: Richard Henderson --- include/exec/gdbstub.h | 25 +++++++++++++++++++++++++ target/m68k/m68k-semi.c | 30 +++--------------------------- target/nios2/nios2-semi.c | 30 +++--------------------------- 3 files changed, 31 insertions(+), 54 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 2aaba9c723..33a262a5a3 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -20,6 +20,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..da0186f3ef 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,9 +66,9 @@ 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))) + if (!(p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0))) /* FIXME - should this return an error code? */ return; p->gdb_st_dev =3D cpu_to_be32(s->st_dev); @@ -114,7 +90,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 Mon May 13 15:04:02 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=1651607961; cv=none; d=zohomail.com; s=zohoarc; b=lhNFm62CGJ+3QhJB0aSwKd2LC1H9faJqifvIbMHcWet87PAOLbDqQ2cDtyLhU8KajPfyN4g1tc6n0f/OakV7xO4A1Lmba3Ci4hPL+CTd8SE2mPdXTSqPTHP4jnR42TM00qnxmIQAd029bOdfi7D5VuqjtYyAdZNrX7tlms3TIK0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651607961; 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=WN+exJ1hbQPzvMVT+L6AO18pYzO8jIYQwhbqxtMuNbU=; b=XY4KdenXzMMX/AhgFXlYzcnj3zJCVUloIHocPK9ThqMTzuuQtTwITVmPoUSITQbpYY2e77FEFuGJe33yidbdzDxqtgYTlIHPXSL3RmFZc6DwXp6oNFfNDQH+pR2liBa3iEMBn3h9cOi4yur301bvM1r7s80Aw1T9b1koFZLwY8E= 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 1651607961781396.4984293698934; Tue, 3 May 2022 12:59:21 -0700 (PDT) Received: from localhost ([::1]:40092 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyg4-0007kJ-Ls for importer@patchew.org; Tue, 03 May 2022 15:59:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39100) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyW9-0001Vd-02 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:05 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:39608) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW4-0003YB-Tk for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:04 -0400 Received: by mail-pf1-x42c.google.com with SMTP id v11so6093062pff.6 for ; Tue, 03 May 2022 12:49:00 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:48:59 -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=WN+exJ1hbQPzvMVT+L6AO18pYzO8jIYQwhbqxtMuNbU=; b=z5qul+tKrMWBjIMyxDqBAHSxaIjC8t0vuywF+XiC0leeeoVVy1yxxMD229Xbdu9Eh8 2O7IP+5ewmqq5TqYog3fxI1h74kJuShtqVRh+kxYF/0/iSvuDGkO2rgkO60hcwR6NDYu Bhv4/MuByOjl5x+2TLj/Q2x+M7wpDmzeLvQ3+J8CjlJ4EoNHFH1v1RaOtFtJ48eHKvNa erTwncCB6hgL09RlH8IFBUWe4oF7lFRm8ixKMBh/jCmj/G2LQSkm5ZAo+MbzwuEwi9j9 ed/7l5+B/TvVDIOfaBmI9ovExrgRxIkWihyiwPWmRPmc2SOIVWv7juVXZEbHgmUaZ9Ni xnhA== 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=WN+exJ1hbQPzvMVT+L6AO18pYzO8jIYQwhbqxtMuNbU=; b=smItWueoY9MIO6pHUJynHJnKa/YjG8A5S2J/3Fve9jezIB/RhRwRRXAKREEqe9XA09 oOh/5h08ZMxmEKiCtkIb0whSTWv/jrqTDsAf41X8DkZgGBuf8Dh4MtVZOX9PyUaRXboR 94sLGWpeSHQ4O3qFr46uLEhOJ55bbzBNi1n+MqVzg6EfszhRSAuEsMCKYO25e9d0/hQJ Zx4/yFsnia58DZXq6BKebDrIhgsyGrgJM0em8VXgYQ1l6MwK2qVuTRm+IFD5NmUFb1pO Ty6O328S6VmcD1vNiczIInEmbm6LVJPjiLOdwCe66Iru4NwwoxhHJEy6F3+LqQExZP65 YmpA== X-Gm-Message-State: AOAM533orzOLbMmdN/nVlXEH1dAiPWx6vU3ORcXiDy9xUXJhiQ8wABHC zskEWoBBOLGPWcG7EYwQFDoL3WtUHkBbbA== X-Google-Smtp-Source: ABdhPJyPLOVP+bS/cbwmYFZjDdvw042ulXxiydDD8CnVeOjnNtB1dCX14laosi7PtE3omyCg4TeA2g== X-Received: by 2002:a62:15d1:0:b0:50d:3db1:babd with SMTP id 200-20020a6215d1000000b0050d3db1babdmr17760279pfv.19.1651607339604; Tue, 03 May 2022 12:48:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 14/74] include/exec: Define errno values in gdbstub.h Date: Tue, 3 May 2022 12:47:43 -0700 Message-Id: <20220503194843.1379101-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651607963456100001 Content-Type: text/plain; charset="utf-8" Define constants for the errno values defined by the gdb remote fileio protocol. Signed-off-by: Richard Henderson --- include/exec/gdbstub.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 33a262a5a3..0a6e0d6eeb 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -20,6 +20,28 @@ #define GDB_O_TRUNC 0x400 #define GDB_O_EXCL 0x800 =20 +/* For gdb file i/o remove 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 Mon May 13 15:04:02 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=1651608691; cv=none; d=zohomail.com; s=zohoarc; b=nsaCKKsYcMmAmE2yylhrRSKBw6viiZ2MjFKXZULIKf4S0C1R7cDpBuRWLhDqjvTWqPdOLtZiApMSfBODaIo6sqluV+eBO273Ppo0MBAW1+IOmaVEBRpBcpxN1mdjBtog0XRji2jqQo7MUATBce3ECO1m7EYKD4V9T14WTqvh+SU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608691; 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=mB9/XCqnXEyOKhpBk6W2/uLe4X0aD05IrrxcgIYWBfg=; b=g637oekxJp+X2urhiXySJC/9QR5vAaIgEYSWs2+bU4Zbdpq9gFg3CjuJ5/h0xMItJE1EC2RYZKR5f0wMr0oAsn6toyaakOgxgHosajuSOsZU/Zq23QV+tqXOc/CeqfzzlAcuGCkl8lM/cnHRuz9chGqGDNxmjyjKWpq/K2wHG+M= 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 1651608691395916.2988578178424; Tue, 3 May 2022 13:11:31 -0700 (PDT) Received: from localhost ([::1]:35244 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyrq-0003Bi-93 for importer@patchew.org; Tue, 03 May 2022 16:11:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyW9-0001XX-CQ for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:05 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:33898) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW6-0003Vy-0i for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:05 -0400 Received: by mail-pj1-x102e.google.com with SMTP id qe3-20020a17090b4f8300b001dc24e4da73so2280378pjb.1 for ; Tue, 03 May 2022 12:49:01 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.48.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:00 -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=mB9/XCqnXEyOKhpBk6W2/uLe4X0aD05IrrxcgIYWBfg=; b=noZ8esmczgDpg05wd663WFFXffzdEMFM03mebaYYoO2B8ohfDLWdle9XrHCNzxNF60 ZZtbyP/3hJ9BeskBpt5SvfmuguviJyXbwJOUfDftSNbKoA3Ewt/EL2RBoAjire9N9Zvq BbtCnBLeHIPOwYz4LvCF4nNlvV/cazD4xSb0WbSCldZn8k4iHkz9i4TktRnl+iG/+7Dc N6AwKogbVNIcbj5fO/oZCbe1PDcneRLliwyPjncE+vsNx0TDxFyvAqVcEfzVDhH5oWtc aFOH+SG82ArnghrIoF6Nqcsh7XB/rCgG4m2oJGEZZIKFJ7Gup00P/9dmODP27cnUKciK 61kQ== 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=mB9/XCqnXEyOKhpBk6W2/uLe4X0aD05IrrxcgIYWBfg=; b=SMawwPQFgGtYA6EYEeGBmc+4F8MTVnNcB6T+FV36Swv5NrzNVl8iQvqVqjPZ5IyhOG WNkyoQc3Bu3Ez9qNjA2zDagQpXS+RPwgXOnXaLFeCW+FHMTv8W2BoMcZIREYgHrNGQAe giqiouSb5yFjXtLzlwRuvqn5xhTJtAAV8HHgA1XP7Cwyf8IafsGgZnT6EdNjLf6eLqCl PAUSBtsoBx4i0TmZQDoxrClkri/yQ2dQ4wslA1f+nhqz0YYhBpjikvaP/3VSZr/lPQ9a +nbbMoGRMmgLOOwSy/LJt+m0ZP+I9nQtxlQlTIW+OYRrxQdXyuQ0H+d7QEDQ+y4kSY9y drbA== X-Gm-Message-State: AOAM530T9tx6yNid3YHzFbLp+Y3YXh/rA5aO6D2rmd4PriU7oDNxVC8n a9OL8teIBnexiMC14X0uOPoSspERVsc6PQ== X-Google-Smtp-Source: ABdhPJzu+aKeW8SYgCnoXotnYMq53toy2jxlxVI8LHCXiG1VLw652GFsDwu5iPavubvMG1L+nuQe2Q== X-Received: by 2002:a17:902:f24c:b0:15c:b564:e4cc with SMTP id j12-20020a170902f24c00b0015cb564e4ccmr17935919plc.137.1651607341128; Tue, 03 May 2022 12:49:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 15/74] semihosting: Use struct gdb_stat in common_semi_flen_cb Date: Tue, 3 May 2022 12:47:44 -0700 Message-Id: <20220503194843.1379101-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608692095100001 Content-Type: text/plain; charset="utf-8" Use offsetof instead of an integer constant. Load the entire 64-bit size while we're at it. Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index a1fc4ea039..a6c6e5baf6 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -324,12 +324,12 @@ 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); + /* The size is always stored in big-endian order, extract the value. */ + uint64_t size; + cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + + offsetof(struct gdb_stat, gdb_st_size), + &size, 8, 0); + size =3D be64_to_cpu(size); common_semi_cb(cs, -1, err); common_semi_set_ret(cs, size); } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651608764; cv=none; d=zohomail.com; s=zohoarc; b=dJU5hKGbbUInNREg0sWDI0RxYU6MNPq2ZWTDISvIQqHfc2PF5m0GPHMpBMtyPcDG6Yi2fE3519vZ+zMaGr8zYLV4lCc9vjVUNCttHKLEKq1slYe55607jc/LeKMP8yxdqOtf1/nLv/4p2EefuKSAYe0I39Rn7UnIUcCjE79mQXk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608764; 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=coOzTtMwr9rrGl+3cyhDbkXBtamsk22lDxbutCmvHoo=; b=ZN65wSHFgNkvfBm9ZaGp00qfNFutWCKJyfHgAieSSvT3y7a+XVSdrTFIW52uQrj6eA3t4Oemy61lZsEe/DKE48C9bn4uY9/sI+a2ZJ/VSpSQ5ozIZkvQ23+kV3fvIckoq0ZGyS92Wh1FJ3QLAKecAVSCGDM6E5ybV+GdvMm+kvk= 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 1651608764834833.2225216799042; Tue, 3 May 2022 13:12:44 -0700 (PDT) Received: from localhost ([::1]:38848 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyt1-0005u3-Bv for importer@patchew.org; Tue, 03 May 2022 16:12:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39138) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWA-0001ad-9V for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:06 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:42985) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW7-0003Yr-98 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:05 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d22so5697110plr.9 for ; Tue, 03 May 2022 12:49:02 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:01 -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=coOzTtMwr9rrGl+3cyhDbkXBtamsk22lDxbutCmvHoo=; b=ABLpqbmLIoquJFUWi+oSPoFUFfiF7nk7imQAanAZPuu1+Vxsy7Hf4rSQSeayvWro0U HShbzROH+ZuHaxWTV+FVC287e81nDwtXaPjcnXsMph7pvWwZCRSz88QAlr7MAv9Dvx/z AHAIXnvlRsdErNhdHCOJanZZVIs6OfLoXPZORGUnyDwbH93FaKiYnzG5NHYQPHodSBS5 Gs2GoANWopj/KAOCXAZg1q5OpM12/+hVsEuQHCPpl2/52eN8vm12toIjXwsEh/jTCKfW toTjpNQy6WhkbDCnFWrV7mARI8Uh/oXwP6ZZCPetvb5GS2In8ATFRhcP8KZ7Un0dRfJ5 tBzw== 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=coOzTtMwr9rrGl+3cyhDbkXBtamsk22lDxbutCmvHoo=; b=P+TFdeK6QdBNSpihgsaeh/27bqEsrXKFOUqaHNqQeSdW6vVvvPciewTpTMviCzqn+o JT08A9W/8OpQBHeHsljfLXX/t98rhgoOUueLxY2Sjkh6bH9W9/kjDsGbTlANPcgM9xZH vW+2Na7nssHUBJgHh0S69Vm9sb+w4wU9cYYqcmsc7WKh3ZXaWiyzvoIB+ljBLpKuijsA bQX2pwWtC3s6V+rBMON8VQA9vsAlZsMsKusbn3+JqO0BnJktv6zkl9EFzLmWB9gp1cfV 1tnB5ka4LSfIV88pwARNVM166AUdFVpMJtNmCkx+d/U912A2IVZJrxdbjoCFT1/vjTJ9 feRw== X-Gm-Message-State: AOAM531u0Uhq7qVQBr1SCEH0Rp8nQSDuU2qlCe0t7ZS/vvcoDfg1K8BX uPmi+g00jf9L7SgW/qaefZFutJdXwQASQg== X-Google-Smtp-Source: ABdhPJxWUcHmfP09cGHep/9BRXGaksl+nEf3IfVFoOQjsZXKxeWXhsAi0JHnlAW5Xj7BgqKdHO7OZQ== X-Received: by 2002:a17:903:32c9:b0:15e:a1b8:c1ef with SMTP id i9-20020a17090332c900b0015ea1b8c1efmr12299316plr.173.1651607341940; Tue, 03 May 2022 12:49:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 16/74] semihosting: Split is_64bit_semihosting per target Date: Tue, 3 May 2022 12:47:45 -0700 Message-Id: <20220503194843.1379101-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608766758100001 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. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis --- 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 a6c6e5baf6..7fc60e223a 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 /* @@ -586,17 +594,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 Mon May 13 15:04:02 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=1651608109; cv=none; d=zohomail.com; s=zohoarc; b=OiePk4Ne6sXwSB4QHePxXGfNUt+SLOmOI9G4drRdmqjZkqsCNIx20TSwRpFreKUPUGCYQOz0mPcxq8ysPN+SMn491M90MKRM9PuSaM9iw6YTVcvzDrrkeeRcLMSfEvUBSxUihYxpT/b0PMoUhv/Ewig1XskzG81fTzJN2z1JUe4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608109; 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=IzZtboHFK51ahqSRhw7zz5hbdZTb6VGng4tHM8rPvXQ=; b=md7bwcbpvoc4wdzTg4St8gJuK/9aMNQvJBa3D/A90TmyFZVCDCmI7pd6c+QieL4z6ktsjB+Z5SDSZbrkGDJ9ypxXg43Tj9Zkv6/v60VmweXexkdv3dx6Cy8VGwL4WSwpiRVK9vlNphx93BDTFJCNm3XmJfdIJr73WJDFrPorDbQ= 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 1651608109192356.27664513230116; Tue, 3 May 2022 13:01:49 -0700 (PDT) Received: from localhost ([::1]:43494 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyiS-0001jp-50 for importer@patchew.org; Tue, 03 May 2022 16:01:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39136) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWA-0001aR-8g for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:06 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:38894) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW8-0003ZC-5f for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:05 -0400 Received: by mail-pg1-x533.google.com with SMTP id e5so3713381pgc.5 for ; Tue, 03 May 2022 12:49:03 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:02 -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=IzZtboHFK51ahqSRhw7zz5hbdZTb6VGng4tHM8rPvXQ=; b=gPs9i22cIau2c/IJ+nxe8oLHO+RT1WPWq2zugch/0nTQTEQaCTpFkbg0OpCxMAK13P 4YGqVESrxpuD1xyAdeupLRePpOolFZKxQ95EN2ZvSkV96THNb0zNKIE8WhSBbR3cla9X 7nI/HFzO+eMqJWSdeZmvW1J03s0Gxe1bOgRZrSmLrbStNxu9acc70KT6x8wd1Vmdmc+j 6DdPyEDgxCeJ/RmGQPRvdtNv0USLXVEkQU6QflTpLwFwOWlecXKsoOaEVKSz3bBwS14l EP4QOdwWZvppCzPlsPeNz9rKqpJhAZxi/Aw3n250zWCbJgdRAvf74Jh0+KS4FJu4OjCy 6DcQ== 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=IzZtboHFK51ahqSRhw7zz5hbdZTb6VGng4tHM8rPvXQ=; b=4r5DBnsGp6keCUiup+BJjBZFTRXlSbRX32NZrxlmgll8cLti4GN5n7l3KwEJUPCqey T63GOR09qnBgJPvh4q6QaapBrp6GmpcbvLJnuOjDMt1EyiCCTT9eODH4M+8/lFp/kWrO CZ3HH19bAFArKt8MclL77M0FPk1+PgfQuGYIXi82m0QeUDtuQgffizBZAd0doxfeDywK iwEOaJM85gIE1f7x78Mgp8rXgJW2s9+jbt/h0aitOST8LWQ0rOFYSLTzC7uE/8APmEZn HRyvSjyyMN8yXSZY686kV4A1aU/ndhGlrm2N+toxO7y9+LLmo26OpkIHRBt6WjiMXEE2 G/qg== X-Gm-Message-State: AOAM531eUM0mot8Jxq3X7X/OgBZ4gIlCQblEc9NXJI+3KFcYEvpea+Yd C44ZKOjK4XE0Yu3djlGOyJJg3UvfwKlRUg== X-Google-Smtp-Source: ABdhPJzCiR0DFrtSiYTJg0IBj0T23Y8oO+YVQ3ItQNBHBInEs/DH+8NXwSh24R1sYdulKvU7uKQfXw== X-Received: by 2002:a63:610a:0:b0:3c5:a1f9:c556 with SMTP id v10-20020a63610a000000b003c5a1f9c556mr446863pgb.366.1651607342856; Tue, 03 May 2022 12:49:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 17/74] semihosting: Split common_semi_flen_buf per target Date: Tue, 3 May 2022 12:47:46 -0700 Message-Id: <20220503194843.1379101-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608110245100001 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. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis --- 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 7fc60e223a..b2816e9f66 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 Mon May 13 15:04:02 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=1651608363; cv=none; d=zohomail.com; s=zohoarc; b=AyFs+6bVtJDc/1xGQ/sjmRJMJ6PKWSqlyTed04gB65b7EtN++4iDNJwzhQGCmoFQ+NandSCG0PhneztEKwQJnTN73KGqbtCfldI+xtasF3rM6mklm1vLHQSJdAIickng0hi+6sRZDnDq7KN1Q7rfF5NQ/3GgfyBXvOAKKMDIitI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608363; 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=bMzSVxcdvq+IuYW0Vc/jOyPOv06xtgKXvctJnUGtedE=; b=ZNPsLeILFUhl5bBrOfdt9vV+wdt8uYrn9QyL5iGg74paFPT0pVwvcC/ucd6EY0Tqe5LjNDlun7b6L8TR8QB0zylXL8V0T7/dA4JYMHzepFFTR4W2a7Ehi0Cw3OWV1r1+Arz0RywpUr2BZgB2Rav972wnAt0Vu+xxNYtZQ1L7Cms= 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 1651608363565706.7580015162482; Tue, 3 May 2022 13:06:03 -0700 (PDT) Received: from localhost ([::1]:50960 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlymX-0007ia-Pj for importer@patchew.org; Tue, 03 May 2022 16:06:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39156) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWA-0001dV-Vy for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:07 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:37572) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyW9-0003Zj-Bu for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:06 -0400 Received: by mail-pf1-x434.google.com with SMTP id bo5so15577626pfb.4 for ; Tue, 03 May 2022 12:49:04 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=bMzSVxcdvq+IuYW0Vc/jOyPOv06xtgKXvctJnUGtedE=; b=j+An7W31FxhL8mLTNcnB4u/q60PmhwVB8D9LrThK+Bf+ZIcpe6tCSB5JgIhtbsTr8a mNXm2OzzNZU+FFAwTHcLD8RbBVxhuXuIKupap8f6PqfDGe2eE4T7/4rr3wbuF+fXlnqd EU2nzl1DWGY9Z7jPn/h+hqw0n4hmkNDDasYjvp9kmb0Qjdgy23TqOQJ1VU29qScE4rAJ VBNJ0QpaL8ifwo85+hEBZMhLYiYVSnwm2eCeaAKSoggH1V1bXMb8lHgi2AIN4XfWnqdO QuipIkFwAIftnGt0aanVuqgg9ZD8u2uwFvrG17zebqhe8Nn7JK+CNOTDzN1ZXavqVfI3 CPkg== 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=bMzSVxcdvq+IuYW0Vc/jOyPOv06xtgKXvctJnUGtedE=; b=zJ6EnuLwh7z3qfD532/Si/pbhBLgUestHQrL52N73ggHyiL0Go+tJmhgGlotsJGzrP r1XZgHlVlVp/uDiFKw/jZFBKnhAZabONnF//itduA6i17biZn0isoi4y0aP7R4+wtbrQ MLEsrD+KWLDmYg5r8dkyHl8je09A57ED/QMiM06cR7L1RfZ40c5ikip2ysowzxXIgMv6 aZQPW0vRIAEC5b8NFd4JeIIOepiENauFcNGxZRErxHZVMAEGtvLBjU/Picc7wbPD2zgS 1p2CNhnKKYZKQmCu1FSFCqJ6JWhrlmJf6hCX5XFaA78x11APx6ZO1Hbhz1v3/IlF/jHS NgZA== X-Gm-Message-State: AOAM530WG6bLUFpDLk0XIPJVjfrNZVFNnPYqtgShwhrf/vfmNiwIgnVU jtx+cfjOnkUo+u74EglzU99OJurr08zg+g== X-Google-Smtp-Source: ABdhPJyp6mVdrGmxH4KUgIMMcGFkn9flH9HnjM9jIUFzEoLkENoxn13gzyB0wt00hm1yab9dQHAffw== X-Received: by 2002:a63:8548:0:b0:3aa:fc6b:a36c with SMTP id u69-20020a638548000000b003aafc6ba36cmr14974925pgd.267.1651607343868; Tue, 03 May 2022 12:49:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 18/74] semihosting: Split out common_semi_has_synccache Date: Tue, 3 May 2022 12:47:47 -0700 Message-Id: <20220503194843.1379101-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.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: 1651608365770100001 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. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis --- 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 b2816e9f66..6149be404f 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) +{ + /* 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 /* @@ -1103,16 +1114,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 Mon May 13 15:04:02 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=1651609018; cv=none; d=zohomail.com; s=zohoarc; b=JgSwm+9VrAmYgM9FeIwB80p5Oonnseivh/gK3RbIWeGnpwQcUSboi1uDZacRkCC/ex8gpXM1O3OtcEx/L2fGb+lE02+uJELQX+05z6i7LQmZa8R5QkJW+vVl08HUgOMfnK8TvXWZ47NoeQuVNzDvhi8QAbaK1b378v8FnVDLzz8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609018; 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=wXLSxy1WX79eMXmNdpTVz+8RqAC6B/BBjkCPMRdeubQ=; b=XHKhj1MH7YfqPYk/ZqAzePqJn4D9VH99u/9BMZJCFAAX4GUWmWIA09Uk91VohOpvOnDP84h6eNlKA5TaWaNgJB3QiBpOTIcZeD2gbpNxj3qd5w8n7xCz5Tx0scAMY4DLZgy0w1ppGV7jTc69RxRuG1aIMdzNB3VDXmvFIx1lpWg= 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 1651609018826177.97395030131338; Tue, 3 May 2022 13:16:58 -0700 (PDT) Received: from localhost ([::1]:47296 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyx7-0003U8-9a for importer@patchew.org; Tue, 03 May 2022 16:16:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39184) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWC-0001hK-81 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:08 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:37741) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWA-0003a7-6S for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:07 -0400 Received: by mail-pj1-x1036.google.com with SMTP id t11-20020a17090ad50b00b001d95bf21996so3227295pju.2 for ; Tue, 03 May 2022 12:49:05 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=wXLSxy1WX79eMXmNdpTVz+8RqAC6B/BBjkCPMRdeubQ=; b=EbDksDGUqveYixSOgkkhKb/ClBKSD//cJlxStKWxIIxQamq5MocJObRKZNLrFgMUEC vjO9n8d54Ac3S06mrYq1EgquxWdGeJIhWg9hAnXJM1ArPRxJv14ASsmIBcws03oKdKMM aPg6SJ1k3PVi6/L1bEbjY1iBTQcZFO7L3JoIymswCW3XE1QVPHc90bqX7mS1b5oMSnrm kAopSHHzHIEsl6ugbpXx/bFR6Twh9DhNBI67Zc/tI1l3LerbZmn+2HAMUGu7Bw5Q6GoG H2Bms4Du4DnDtk9BYtfBa8L+jPlbR02LTk7Oz2hBOdkG19nqSmNWpyO+QCj/lon7vK6N MzUg== 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=wXLSxy1WX79eMXmNdpTVz+8RqAC6B/BBjkCPMRdeubQ=; b=NP/as7MhfCQBx/Y6m7LCZGhaWnxzCsjOVLwU2ZW49s8Me7D+anW90fZlS3yXgiHmU5 vvWqzNd7zCQNNlxThtaafg41/HiCIjdyHhHGxKEFYKnjPC4j7f/TjxXtx39BEPjgHxcf a99TwzP54UbYq5wg592BcnqwFHPqxLqBpcmYdhcGiiivYkN2OUoxbGmz5/Igwkg2BVZi xprV7yohvHY8cxgjLGxKHxTcprYsbbR/PTrQrzb8lpTCCPaSJS3pUc6CUaYVe5vp8TuS P0l0q5taXn/8HgzIWlKCLRM8AfL3hGObFlX8mpYIc6Zl/8RrZyQz/C67pNiF5naGpq/k jueQ== X-Gm-Message-State: AOAM533xS7Zi/540MTpJ1UKP6qoAtKYu6sKsF0FKJnhOW5ohdZS77Oav odnNRiYV6rLinktzsqCASn0ELRdXk1VcQA== X-Google-Smtp-Source: ABdhPJzdPNs/E0KrBXFmRlZTtwSa+pIj0ALmsIJJ0/NnaFV8YFgbPtknBrU3Y3WJONQK5Y9eh56YGQ== X-Received: by 2002:a17:90a:de87:b0:1d9:8264:baef with SMTP id n7-20020a17090ade8700b001d98264baefmr6492685pjv.227.1651607344875; Tue, 03 May 2022 12:49:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 19/74] semihosting: Use env more often in do_common_semihosting Date: Tue, 3 May 2022 12:47:48 -0700 Message-Id: <20220503194843.1379101-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::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: 1651609019227100001 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 --- target/arm/common-semi-target.h | 62 ++++++++++++++++++ target/riscv/common-semi-target.h | 50 +++++++++++++++ semihosting/arm-compat-semi.c | 101 ++---------------------------- 3 files changed, 116 insertions(+), 97 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..c20e1cca76 --- /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) +{ + /* 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 6149be404f..3a740482f9 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) -{ - /* 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, @@ -646,7 +554,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 @@ -729,12 +636,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 @@ -765,7 +672,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 Mon May 13 15:04:02 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=1651608381; cv=none; d=zohomail.com; s=zohoarc; b=WEUkHgO8H8TK6pc7bgGCet2qUxS21680t6b6mB8XlaVhxy7d0iG8tbQ+FmouWRvK9dZVs5Fec4p2Xqhn21eHiB1OdVZpLIAIkbzwYCI5DEblXzO6nsPA4GDmIRMdEYWhQ7oVJonU3rfky2vuyzFbclnDEoTKi/OCWdz/ZKbxytw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608381; 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=KTqJr1ojr+Avm6OwJN9PAVJEmcUCfXozWTlyiMGyM9k=; b=G7F3bM1uRtCo3d9s7snNRypGv6p+OMORHOLvbIrsUTQGEnTUSV0Y0iinwdKLE3L2ctPwKShrtctqlif2G6rBanKu83TXESRZpUOHZqdxKLoPVBJQlT3L16X7m5KEac66hq1nz3rYokazPmcjqrmn9VVjucUHBeOfLBXxf8vmphA= 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 1651608381446383.6007753753329; Tue, 3 May 2022 13:06:21 -0700 (PDT) Received: from localhost ([::1]:51574 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlymo-0008MD-L7 for importer@patchew.org; Tue, 03 May 2022 16:06:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39192) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWC-0001jR-Um for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:09 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:46894) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWB-0003aL-4r for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:08 -0400 Received: by mail-pl1-x62f.google.com with SMTP id c11so5631053plg.13 for ; Tue, 03 May 2022 12:49:06 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:05 -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=KTqJr1ojr+Avm6OwJN9PAVJEmcUCfXozWTlyiMGyM9k=; b=odW9mdNF/Ot9avhe8ntqbHxp+eu0osB+bvU1Co8fY6ibEH5dDUmkmzIXdRqLylxpGG EWSRmZWY3VdsN/CZ39jX66HOlVKzDdHQV9I52BsfjBJ5nnAHEfDtUBiX1aIyx4lfLowz CUMxT3WmF/Qn0LPDc87Q6HMcgekLsnL7eQnI22VnrG5kUBmAd4NNVLvejdH6tyKOJEBV l/FCRU9hr1sqF14k4YG8hV1wRyIcAD6KtYm7RvqkeDR681CwmBpMTqAVJaqAe9nA22u7 BPNSOe/mij4Y6hr7KitrgezFXFJY4cd+eFdGOesJ7/4hXDjG/mylzsy6sdysHcZbHZIG ze5g== 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=KTqJr1ojr+Avm6OwJN9PAVJEmcUCfXozWTlyiMGyM9k=; b=NDUAoF8XlNTq3BGoTIBEuPeXgNe7WUQ3C8wVNvR2U2LomWUIAWov3FlUjsJuVaDVjV VZGHYNFVQgVin8fdjfcz5yTl9g82Hq1Ws/7ny4fb05MjrVpk8IxC8LWpy5o0Yi18MmMF duzUr9ZkrusKAxXudMOYzvlx5uogRZ93av8NGEOb/RH+9cWVJmbGXpqv5pxRIKlilefU 0L4D/S+L8Xm3OQjFvhwywJint2ooUSRLKupc/tta/yFUcsq+9mUe5fuTRce0ySCbiOqT CZpq5FEEZf+QzATBaZ1wNkxPncPGr/q4XuOJI4ZCSSRLmJ7ZD2VYCJKBRS8V2t8kvQX9 DT0Q== X-Gm-Message-State: AOAM5325j9RK6HGrg0g1uU5tITfo273lYZQU+nvuZaFwTMvUNPAYnYJh YxGU0bve2V81tMFRSx70LLcWdK+dIBJ0tQ== X-Google-Smtp-Source: ABdhPJwJPxKYZAKDo+7Bovvb5DhkMBl2T2+J2sbqjZGli2zzmitn1/oHyvlsThYh9jqI0Mohinpciw== X-Received: by 2002:a17:902:8c8f:b0:15e:ab1c:591b with SMTP id t15-20020a1709028c8f00b0015eab1c591bmr9453232plo.171.1651607345699; Tue, 03 May 2022 12:49:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 20/74] semihosting: Move GET_ARG/SET_ARG earlier in the file Date: Tue, 3 May 2022 12:47:49 -0700 Message-Id: <20220503194843.1379101-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608381844100001 Content-Type: text/plain; charset="utf-8" Moving this to be useful for another function besides do_common_semihosting. Signed-off-by: Richard Henderson --- semihosting/arm-compat-semi.c | 52 +++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 3a740482f9..49f976cbc5 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -181,6 +181,32 @@ 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)) { \ + common_semi_cb(cs, -1, EFAULT); \ + return; \ + } \ + } else { \ + if (get_user_u32(arg ## n, args + (n) * 4)) { \ + common_semi_cb(cs, -1, EFAULT); \ + return; \ + } \ + } \ +} 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 @@ -506,32 +532,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)) { \ - common_semi_cb(cs, -1, EFAULT); \ - return; \ - } \ - } else { \ - if (get_user_u32(arg ## n, args + (n) * 4)) { \ - common_semi_cb(cs, -1, EFAULT); \ - return; \ - } \ - } \ -} 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 Mon May 13 15:04:02 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=1651609259; cv=none; d=zohomail.com; s=zohoarc; b=SpMKQAqyobLcSI0TUHeti0c+YrC5cF7x8VFTDyNS5GlQm955w/pl5xEzUrIIVoWu+4Aa5iPjl+rZ6epbyZQ3/Ftg/icpYtKNd1G/Vj5zYoy1/a0Lulp0EQDcdmj1ZHaSb1DsikesK22U7aMrh08PotEnFNTWPbimF1FTkDB+vfM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609259; 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=PbM+bhS7D2Mao4BFHDU0zIPvu+k4lfhRPdlGiKOdrM8=; b=hkySLX4Z7D+55qsCczQFhJ0bFsULOGJVlwiqfVNJXuVXEonuKEX/p1HRvFaf3ovUxp+p1JfcSxS5PAX5RjyK+1HhDE1wshv2CGdS1OYVF/8jdxN4mDbpoPaZiQy1ZCCaE4cNGGn1JexvgRd7vr9nkYjon1IV39scAMboSKoi2SM= 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 1651609259136755.7502478840883; Tue, 3 May 2022 13:20:59 -0700 (PDT) Received: from localhost ([::1]:55526 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz0z-0000rk-IS for importer@patchew.org; Tue, 03 May 2022 16:20:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39246) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWH-0001u4-UJ for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:14 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:41884) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWC-0003am-6i for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:10 -0400 Received: by mail-pj1-x102f.google.com with SMTP id z5-20020a17090a468500b001d2bc2743c4so2909974pjf.0 for ; Tue, 03 May 2022 12:49:07 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:06 -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=PbM+bhS7D2Mao4BFHDU0zIPvu+k4lfhRPdlGiKOdrM8=; b=Qf47cunupHAEWp/7LUiYMwfF4R6cksvKk4aWPu3+CohQi8zC2gYXxXemi9qO/TZVVo DHojSYT4VJ+zJUKlwask2dxnH9aFtiYRspMX52sSruFRDMNqPCRDrf1f0XSXBP/dQ62+ 24g8wYv10f8tcSp/kO45RFydlGSDVLn/H/WJIM1ehysX0YKq2pk0tSXcjer9UNyqsyoM fvBnbdJn1sc/U/Xy4Yn3kDGqtiWFCaRE2F6SBqWkD89ubOxNxT5IbWdZMOH8WKgW9Rwf ziVh/lmIZNm1s6QP2SLFI06IbiU7N3Jvv1mXx0claXUyaJI+OEKZseZ7H7PzkaGJiOgD FBjQ== 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=PbM+bhS7D2Mao4BFHDU0zIPvu+k4lfhRPdlGiKOdrM8=; b=NLqw59mUwyW+T4VjZTEUeqNTq/BWUV1Jkwa9+U36vOJuvliOJsdLYHTE7rTGbo2KNg GdExWDa7UJRnZbO6xF6H82WXDGjSze6lfMlJRAM10Wo+Rm10ijgvZVBgsqlAVdGlz8st A3+qycNHn/nBApFO7eZCA5XdWzastiiV4QFCkh0s8HK0IncGVDf6gNrmV4GP8CElj3zD WPSzzuY9mz4dDHAgxdChBQTS12+K06rczAz2thOwK2aY0zV32AaYUxseRS95mkD3CVAK n/93c462kdG8Js1LjhJ2ne+fABxLhigm0x2xi3NWypcGEJJ8nR1UEXYabEGbRp0CMwr/ MP+w== X-Gm-Message-State: AOAM531OO4YZHZDfCnzCfLo8mI+VsPqk3++RWD7WMPyHLqPTL4oeEUob gVS2ld2lec2jaN5YvNisMpu7D/FkvEXyjA== X-Google-Smtp-Source: ABdhPJzQjr5OHs76KlEpm4BuC2CIxACZumXdZKfCTliPeuJHMXhhD2TIi+lUd8kOoOkgpMXX/1zxnw== X-Received: by 2002:a17:90a:c504:b0:1bf:6d9f:65a6 with SMTP id k4-20020a17090ac50400b001bf6d9f65a6mr6392146pjt.204.1651607346756; Tue, 03 May 2022 12:49:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 21/74] semihosting: Split out semihost_sys_open Date: Tue, 3 May 2022 12:47:50 -0700 Message-Id: <20220503194843.1379101-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.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: 1651609261016100001 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 --- include/semihosting/syscalls.h | 25 +++++ semihosting/arm-compat-semi.c | 50 +-------- semihosting/guestfd.c | 5 + semihosting/syscalls.c | 186 +++++++++++++++++++++++++++++++++ semihosting/meson.build | 1 + 5 files changed, 222 insertions(+), 45 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 49f976cbc5..4a2f0c9202 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -35,9 +35,10 @@ #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/guestfd.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 | GDB_O_BINARY }; =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 /** @@ -285,20 +271,6 @@ common_semi_flen_cb(CPUState *cs, target_ulong ret, ta= rget_ulong err) common_semi_set_ret(cs, size); } =20 -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) { - 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 @@ -602,22 +574,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..a44d5cbae2 --- /dev/null +++ b/semihosting/syscalls.c @@ -0,0 +1,186 @@ +/* + * 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 -GDB_EFAULT; + } + if (slen >=3D INT32_MAX) { + return -GDB_ENAMETOOLONG; + } + return slen + 1; + } + if (tlen > INT32_MAX) { + return -GDB_ENAMETOOLONG; + } + if (get_user_u8(c, str + tlen - 1)) { + return -GDB_EFAULT; + } + if (c !=3D 0) { + return -GDB_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 : -GDB_EFAULT; + } + *pstr =3D str; + return ret; +} + +static int errno_for_gdb(void) +{ +#define E(N) case E##N: return GDB_E##N + + switch (errno) { + 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); + } + return GDB_EUNKNOWN; + +#undef E +} + +/* + * 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_for_gdb()); + } 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 Mon May 13 15:04:02 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=1651609121; cv=none; d=zohomail.com; s=zohoarc; b=S+UDL9WCmcPtdVJ3bC/N/k4qKwDgmrH7bEwlN/EsUcRyV2Nv7iucPCxCbkUncjYZb18+PuYKP3zm56A5HUkgf/tCVxsjhoy6ry+iL/1GIRyOJTcc1tXUAId2LzVgLvx9HFYRftYduoV87pB3ayqzKabPEToG246O90uJYLj2NRY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609121; 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=1rMTJEowh+1/F2+H1eC/4OFTUMesMIGu/YPb8vPE9Cc=; b=PnGSm3VO5WxpRzRqI3cxNdETxBGlKs+Rd9Js30DXrKJSTUeCB3vqeu8Fx+YQ83etqtdFHNDr8TGylTQo+J63Nok3QfIzlGihLWBeW4vEi74DcPbLMW8aXNQZN7gOCxMmkRX3hY0FvGGtokzzkJRRatfF7ldzkyHhDbArZHsOVXo= 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 1651609121952484.48770754390466; Tue, 3 May 2022 13:18:41 -0700 (PDT) Received: from localhost ([::1]:51340 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyym-0006MK-Bz for importer@patchew.org; Tue, 03 May 2022 16:18:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39262) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWI-0001w2-Vu for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:15 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:40927) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWD-0003ay-3f for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:10 -0400 Received: by mail-pl1-x62c.google.com with SMTP id i1so9737491plg.7 for ; Tue, 03 May 2022 12:49:08 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=1rMTJEowh+1/F2+H1eC/4OFTUMesMIGu/YPb8vPE9Cc=; b=JQMPilqdU5XA1CU+12ojhec7Jo6T9RO11bYratSyk5/pWdTZpV56CGOODmdgLQI+ri Ns5eZ81FxKmKwOedMFOIEHyvZAALPqJ+zjTEccMgTB7vYECx30OryHy5nXzzq9x/RPV7 f73Uwx/Uy7oDKhRsR4JHvNvbeVheYxlUvpaI6LAkuQhd7diI1f1NBeXg4gkgrsLDgo1Z qwSreSmgyBB3ep8oUC9HGmDKhxw7FcF+JKdsUX9FiCTe2sLPYHtwAgADasVjMvnRJSwY FOuWLzCY91uKHGBvcrjl3MFBFDRbpGg0sHQgg7jLMZ++DUHqGTyaK+L6aburPslmKDSy x/Dw== 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=1rMTJEowh+1/F2+H1eC/4OFTUMesMIGu/YPb8vPE9Cc=; b=jWfPXHwQXWWT2UO99v0u2WzSGTPb2CsmmNLc+buRAgixI+hObjpiPWKd6+o4icgn4k aLk89UEJDPx5Z7pWTLDMkDG3AC+2lxbuX7OVRhXpHTOnvXxnC/MdXP52r0HkrihIOSua wrrH6vtNAZitbwfAekkrehLbtuhImGzE06rHSdlmkvbQ8jmOwAceiDNsP2wtuwO7t+4E X3D3r9LcELKyAU2jxiVYHqa7y3rAMFyZn67ysUkKao6Rpl4VfTG1ZY5IuQBzQRGf1hpz rV+W0muocJ4wBm76lCfxnHc0rb4W4otrOUxG7s5T4A5dS1X92oir4q5UB6vpR/hvb343 fl5A== X-Gm-Message-State: AOAM531ZhqzPYVc91ArjRHN4/I/Rj8cQG/zBOhXzi8v6Uj0HMcDQ9m1r 25Psm2NpzG40LPtqsrvPzQKEmrccbM8Usw== X-Google-Smtp-Source: ABdhPJyHQDY6ZUmtFIjq+yxQmIagSlfZApCa6S7uV2Brjo9H0P73MFlbukozvflPKx78L+vQ0sOn+Q== X-Received: by 2002:a17:90b:1c04:b0:1dc:4dfd:5a43 with SMTP id oc4-20020a17090b1c0400b001dc4dfd5a43mr6614696pjb.160.1651607347745; Tue, 03 May 2022 12:49:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 22/74] semihosting: Split out semihost_sys_close Date: Tue, 3 May 2022 12:47:51 -0700 Message-Id: <20220503194843.1379101-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.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: 1651609124096100001 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 --- 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 4a2f0c9202..8ebe3aad55 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -277,7 +277,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, @@ -286,23 +285,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) { @@ -363,11 +345,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) { @@ -415,12 +392,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) { @@ -469,7 +440,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; @@ -479,7 +449,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, @@ -487,7 +456,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, @@ -495,7 +463,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, @@ -586,13 +553,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 a44d5cbae2..9c4b635317 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -124,6 +124,12 @@ static void gdb_open(CPUState *cs, gdb_syscall_complet= e_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. */ @@ -170,6 +176,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_for_gdb()); + } else { + complete(cs, 0, 0); + } +} + /* * Syscall entry points. */ @@ -184,3 +207,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, GDB_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 Mon May 13 15:04:02 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=1651608543; cv=none; d=zohomail.com; s=zohoarc; b=IyuDEd6xTI7/f02l7wIDzkzaTKwcURjZqEgjw8AEZ8Nuj90q9pDFyZw9fEAR/4KmIwhgDYmJ8ZQYTLkFUlWO4kKrsKtRd9soV92wR9ntkwmoUx0ilOqg0252Tz5FVNtP4hdASN7bQ7CvGfcwAOBYa+/x47ICGklK+8H4ErU5/3s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608543; 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=s656QJXJi/K8oez9ZtWy2poWtVIn5Z6Qh6dXSclsx7s=; b=SlhSsUOlBWIdNN7P2nODAGb3KNBuHylPV0hpuckMw4tE5F3WE6KIc8X+3ahTMBMdpNbMJfGIdZjX3az/0jJx4j8cyIV5x94HrsN+/fekRfV9UOCgAsUX/WmuYuT2HmU8u8L8wL+x87b/gO3oyvF1IkQBckIG+C6usW8AbC0ZWX0= 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 165160854377454.400353668541584; Tue, 3 May 2022 13:09:03 -0700 (PDT) Received: from localhost ([::1]:58762 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlypS-0007JD-NU for importer@patchew.org; Tue, 03 May 2022 16:09:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39280) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWL-000227-Hu for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:19 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:43598) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWE-0003b8-0E for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:12 -0400 Received: by mail-pl1-x632.google.com with SMTP id i17so6701337pla.10 for ; Tue, 03 May 2022 12:49:09 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:08 -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=s656QJXJi/K8oez9ZtWy2poWtVIn5Z6Qh6dXSclsx7s=; b=Iwf4erPtbCK3zOzEkLa4e+ZXrsNj9iI2H+aI1T5jrfwPig8XP6C5/ovRKGNcGwJXtZ IRBYO4Cd6m1HTdhFnwJ7Q3uNWcUMp8/vZdhTc/bY8qSXEhyrhHrqfWvRFs3sJJ8NES1o ETFnFUGRY+kXJB8ecx4tgi4+Cm1v5lXR22jGNWnl1K3f89bTM56Af7mtz4KZPv39M9As nZ18K5kenGeR6p1QZuh6bi5vD9189EpBdjp8femQFE1NoGHoktD7SXP0j81l1m8xsiQH 9Tcv4FXYw25CSdgnYeYC4eyqdWBXlxbq4+hSe6qi3KsC7JXEGEAeGXNsQK+1n+epsway u58Q== 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=s656QJXJi/K8oez9ZtWy2poWtVIn5Z6Qh6dXSclsx7s=; b=CWe170uy8OhMhOWsM/GY/jCX3DcTWgoSrH0qIaUGnpXtAMNB41wpiCUoKuoi4HdZLE psLCgMVWwMJgSgMLkTVec1LIeDXivNpZbT+UP34Ou+Jz2F2fFp2zciOUwqlZkPQk2OtM KJz/Xg54LOr3D/CNTjMJJhWzrVUzjXNl9jMgc/Gg5TSaPD5e6Mol8CoYfLmjkAXCtaA5 3lNh3tBlBd2b21ZiIguuvV92dokh8+8KyWFR7HeoDXiO3pL7Em+50ZQocKYoRaLFwf2L eiRj94Vk4zGlWt6H/neJHeCXLb00GbzKVzVLxOnQ/hjbQocJ+qplpHwwBav1vgnIMSW+ Hlxg== X-Gm-Message-State: AOAM531orTQSfYRPhb4goppEfcgXyvblXTI58K2+AjMBIi+AcheipVNT uKMf10+E33jD+nt1ZCT/0ZkS/qbunRcGKw== X-Google-Smtp-Source: ABdhPJxGN6BuDASdsNIkccQmO4Ptn6eUNmDtId4rNgxmJE5LSCzCf51PJH1pDB6Os+E+ah+P3e6ang== X-Received: by 2002:a17:903:240e:b0:158:eab9:2662 with SMTP id e14-20020a170903240e00b00158eab92662mr18083377plo.87.1651607348669; Tue, 03 May 2022 12:49:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 23/74] semihosting: Split out semihost_sys_read Date: Tue, 3 May 2022 12:47:52 -0700 Message-Id: <20220503194843.1379101-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.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: 1651608544659100001 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 --- include/semihosting/syscalls.h | 8 ++++ semihosting/arm-compat-semi.c | 84 ++++++++------------------------- semihosting/syscalls.c | 85 ++++++++++++++++++++++++++++++++++ 3 files changed, 112 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 8ebe3aad55..7b6df09f35 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -233,7 +233,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: @@ -246,6 +245,24 @@ 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) { + 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 @@ -279,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); @@ -303,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); @@ -352,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); @@ -399,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); @@ -441,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; @@ -450,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, @@ -583,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 9c4b635317..7c18f77898 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -130,6 +130,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. */ @@ -193,6 +200,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, GDB_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_for_gdb()); + 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, GDB_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. */ @@ -231,3 +286,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, GDB_EBADF); + } +} --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651609450; cv=none; d=zohomail.com; s=zohoarc; b=h3EV8mgtR+NDkqjlHoj95x9LDUQTp2su6OYsO0WSegbD/mELn3oLacfQCw8iVD6qfCvUi+m5htYAu+090WfcujW8rteATEM7bievVIbOYLUtHES0YlVESKwsxArYqkV/rSGxsr5a/d1IbZkNuij5xjYMoA/cjf6FxvDjjxjUrKw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609450; 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=31j8l5Xb7Ai6yPrq7Qeaf7BC+gVujFWoD6h4E291eb8=; b=VIgkZUzAHNmDslHXDaOdcSCaSVWzsVZuZYh1tjCvSyYCvlpPGpt3VBxYV5dw4NOB5aRaKkP3ZHb/r8/4XBkf6y3cAl/oUO2V+FDcR181wnga70hYa/qMrWzz+n1KVd5FAEjM54I2hac7PnISrs37qBvCVFUxPrdvANKuDTcsfVw= 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 165160945058732.453813239830765; Tue, 3 May 2022 13:24:10 -0700 (PDT) Received: from localhost ([::1]:34986 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz45-0006wp-GJ for importer@patchew.org; Tue, 03 May 2022 16:24:09 -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 1nlyWL-000222-IL for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:19 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:42894) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWF-0003bE-Oc for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:15 -0400 Received: by mail-pj1-x1030.google.com with SMTP id l11-20020a17090a49cb00b001d923a9ca99so2886551pjm.1 for ; Tue, 03 May 2022 12:49:10 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=31j8l5Xb7Ai6yPrq7Qeaf7BC+gVujFWoD6h4E291eb8=; b=D49gZJTV+uTUFX73oBJ1w4hUxykbDeUbjNE1Q+ueNvsa+EidksniAIn+Lfetky0Hb3 rgjvOwRscU4bCNUcDSWDt8RI+46GH8lYCIcEAj9gVc19JdwxZ1HKwOlNewhEEUpDOg7a W2TWMFjM2EFXgw3jCPlsC9YkFxBV5p5yWfirSLefF55FWnrgMMCYTAk3bTd25bPaSDRa uPtA8dOeiPYCLbbbNXIKEhxwNHirEbYBv8IOcWOCUzNBmYjX0klKwQSv96ybIJY9/3pk KEBKp2svEzAHbUQOP9DTZGsMgS3f3Qchjqea1N+4Pwrze+x/z6vbKizB9san5SF5M1dc 6RiA== 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=31j8l5Xb7Ai6yPrq7Qeaf7BC+gVujFWoD6h4E291eb8=; b=lN4Yzkbr8CnyetlDvRbB5CAsJoDLd/+Z+u+SIHFuMv8KVQYtyldNpUjWZ+Q2F0t/bM +ukSTnFsA2vhgnNDmBpex6lHX3fZ7p98WgTD2zN4lUDnaPqqR8Lgvg6EydPh2zAa9q+W A6dOA/TIaIgp5kJIBlsdPucAkVwLMZpL/b7OBvRn48tFp9G+TRkH7YTu4mJKg1ZBOtVX X+j82+n+LfOJcL6SYqS3HZAn1sP6eqg+lIUkyUrSYFg29qpuUrGYkWaFKWKO9oF8C9LU hF2ERGVmiUV+ExFZNkeqbwJcQa0JWxJUQQi+xrMA7ohIfmOYHQzv3tUGEeQo8N9dh254 jHyQ== X-Gm-Message-State: AOAM531qqwPIfk0uNL/ush2lprWIOgiMHvb+CXImpE5nnfo+kmyX/tYo fgg3PdxbiYmJM5IVj7zGu4jbpUyvjlZ2TQ== X-Google-Smtp-Source: ABdhPJwtY2kxDrlmIVEAumiA2te3FuTHR5/SQFw0i4gxixDxTc8Z0gLrciow8LcL8wHybP1UUVdlvA== X-Received: by 2002:a17:90b:368e:b0:1d8:fcd2:c6ca with SMTP id mj14-20020a17090b368e00b001d8fcd2c6camr6502861pjb.44.1651607349518; Tue, 03 May 2022 12:49:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 24/74] semihosting: Split out semihost_sys_write Date: Tue, 3 May 2022 12:47:53 -0700 Message-Id: <20220503194843.1379101-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609452125100001 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 --- 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 7b6df09f35..12b2c2b0f7 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -217,8 +217,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) { @@ -232,9 +230,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 7c18f77898..db4561b798 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -137,6 +137,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. */ @@ -223,6 +230,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, GDB_EFAULT); + return; + } + ret =3D write(gf->hostfd, ptr, len); + complete(cs, ret, ret =3D=3D -1 ? errno_for_gdb() : 0); + unlock_user(ptr, buf, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -316,3 +339,34 @@ void semihost_sys_read(CPUState *cs, gdb_syscall_compl= ete_cb complete, complete(cs, -1, GDB_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, GDB_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, GDB_EBADF); + } +} --=20 2.34.1 From nobody Mon May 13 15:04:02 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 1651609350060446.30384060129745; Tue, 3 May 2022 13:22:30 -0700 (PDT) Received: from localhost ([::1]:59464 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz2T-00043C-0G for importer@patchew.org; Tue, 03 May 2022 16:22:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39282) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWL-00022D-Hq for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:19 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]:33769) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWH-0003bP-Jb for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:15 -0400 Received: by mail-pf1-x42a.google.com with SMTP id p12so15616324pfn.0 for ; Tue, 03 May 2022 12:49:11 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=vqBv2QVKsobJpocmgNSatxx08hnrv6y9/ePykNgKyQg=; b=YWJbCzWZlYhjajRmYRSdmX5daSLcNOj8DJ5lI5inURV8z2D4/2BfbiWwNR5zD5/m/U Hv0FO4JtgZkTVdaiwt9ySv5sCoZXSdkw2N8dQOPOUbIANoqMQb3gaapXBtAtP6u1O5X0 Y3n9KhfRBgbkFxLXNAIoOXu1xG9fHAcD35GOyGXr0mHjchBBpkpEqaame3nI5zeVS5MG lEYYPe8utXWQ4Vyepz/1jhCFwb0IPeBJmse+rtHSmVYEnqd67XNSbx6P8YlGqHvuTfyH ciBpLbSfNKTMG4nvk1yTrXnyxG1+/pObfB0dZ0EPUlGK5/AZrSUkz/rSeGIro4MgZ9o/ lR/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:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vqBv2QVKsobJpocmgNSatxx08hnrv6y9/ePykNgKyQg=; b=htTGoqY8pqtlqbPUe+H1bOucSlAbMFzc2xAISm/5yqozVJgspRCzkuFJ0qTeYIMnfy N27fTuPAm/U2Q91N/dGDj32wSNtiu3Xxn+XFqhFxtvsRyRUrNWxo4hHifYZmKd5jeeaV NMwcb08v57avBAUJsim0zhz3sLtyKQq7PGdJU3P79wwaVEIpSULzWaF0+H1q4nli24Oq 6phk6c0vVAln5e+if7ZPzYLqzmdMCCoSlxClrShP2z4NdnVg5UVzRJemXJCPk1ZTE3p1 SPNI93CYoxJkAlajGy8nuwDqu3lRvob1kfReqGppoFi4hw0FlecBUZYm2QgrV1EX8Hi4 cX6g== X-Gm-Message-State: AOAM533NO3RObNUGArjzm+2zmm/06JtOTBZVN2EWdVZGxEwosKLAj1CT MtPSPFCg/DmebXiQDaExU9zWri1kPsNGlA== X-Google-Smtp-Source: ABdhPJx1s+bcf8K5zZPMm+LeypH/0FWWIWNF5xsI7Bxeh0mp9YU3cEjSFC8SFwm+1rzzrcWOThoUtQ== X-Received: by 2002:a63:90ca:0:b0:3aa:fff3:6f76 with SMTP id a193-20020a6390ca000000b003aafff36f76mr14966943pge.206.1651607350643; Tue, 03 May 2022 12:49:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 25/74] semihosting: Bound length for semihost_sys_{read, write} Date: Tue, 3 May 2022 12:47:54 -0700 Message-Id: <20220503194843.1379101-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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: 1651609351474100001 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 --- semihosting/syscalls.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index db4561b798..a5623ebf0f 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -313,6 +313,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); @@ -343,6 +351,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 Mon May 13 15:04:02 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=1651609543; cv=none; d=zohomail.com; s=zohoarc; b=Pxj5drhhlD7z/xu9oVYZKWjn0kuUsFn9WFs26J3d4HnWOzaYGsOXWUP7xM8QAy0ocfZOmTaCnNcPLoEQ8uSZwAeYdCOF7oHtR/1jioevaQJ1qv4A8DPHshIzmPhpigaQkGCVd218G1vgpMbYVnAV1LXQ0TEKxMKAX+/3diS6be4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609543; 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=uAqjsJ8QwShqmS+t+GKK061rZ5AHWSo6sjK9NNVPw50=; b=YuLqHQ5k45kwmPF7/Bg0367zuJWqMvghhYyO9A11UAPL5cV0H81FE9xqlxcADuq/sZdYDQPf680AVHcyY6fIyiw4KQT5cwZKgJ0uEBCvr4AhleM0EPUYI+0U7eSjQd4qYjxlWrkWr/5ddcGq/xDWRIPMoRy8DWXKazKZJm9yBBI= 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 1651609543389207.21146292177286; Tue, 3 May 2022 13:25:43 -0700 (PDT) Received: from localhost ([::1]:38678 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz5a-0002Gi-2E for importer@patchew.org; Tue, 03 May 2022 16:25:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWS-0002Ga-0f for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:34407) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWL-0003bX-Av for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:20 -0400 Received: by mail-pg1-x530.google.com with SMTP id j70so3886772pge.1 for ; Tue, 03 May 2022 12:49:12 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:11 -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=uAqjsJ8QwShqmS+t+GKK061rZ5AHWSo6sjK9NNVPw50=; b=juZGN7mFn3vqsCdraJGpVUUdnc/yY5EMBzJVWcv7QvlxK32oAdcXTSDFgrdzYaGlaO WE2m3Kw6dCkfwhdox99EQIcNd7wZfMyD3yUp+7aVckBkmPqceu/hWUlhF220dZMMcN6X ChvzDKGYFuR/Xm5BeHFQGZ18l8AEbSDRKyQWu8XsWz5TVSZdofPBPAjCQEMZR7U7xQLH jzGkvzXe6BbKA9KO8bVD7T6MLySgXc+/8g0E4EZ0zvzYVfew4jcj0/WwRkJx3IulETcK L3QIrxWa/T3Q2RJm/y4VD/rLAcRFgNCM5sAHWRBXseMlEMjLklGjxpXebSjEzY8dOAKj NM5w== 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=uAqjsJ8QwShqmS+t+GKK061rZ5AHWSo6sjK9NNVPw50=; b=4tFZApVgjgher30AdBfE6SUwIAbC3uTffeltN8qMuLrJx/YAZLuJ2FzTaFGpLgeIfg O+pXjbtXBDgL+z89pcRVBZzosh+ENQd6SfyJaI4eJAk/SaYUCPGcNLbmfPpM5xvjTeg5 E4ZSvqwi7mxA/7XtcA0rMNwJaLY7sNBMbJ/eU5AH2sI4vltCJKrb+2BvAufKVMO7OfEa Z9XUNEYqANfvdg7AqBjZ8Zu4C1uGR2sNE8A9ZeXc0rlzrrcw3xlRs5931EHeN/7NsVbO cnlRRAA08SJN4er8RpkEmcWweA/oTCMOdFr2Hpqy+w36P9Kj391NqOUnEBAeRivK9dXH owNA== X-Gm-Message-State: AOAM530mGsXHSyX3i3XaxfyXflBKy1DYiaaMkL17FFa1q+yqtsaWmNcr FEPAbnKGWoOysgvvogBQPHxJ+e53rlTJDg== X-Google-Smtp-Source: ABdhPJxqZ516478CggpqZJVIMNeSksDvudly9hjonuKAQk2RujmOTrarRNNkX0X532yI3mEFymzi3Q== X-Received: by 2002:a63:f94d:0:b0:3a9:eea2:9027 with SMTP id q13-20020a63f94d000000b003a9eea29027mr14583348pgk.484.1651607351731; Tue, 03 May 2022 12:49:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 26/74] semihosting: Split out semihost_sys_lseek Date: Tue, 3 May 2022 12:47:55 -0700 Message-Id: <20220503194843.1379101-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609544535100001 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 --- 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 0a6e0d6eeb..056db1a0d0 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -42,6 +42,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 12b2c2b0f7..6f97977edf 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -226,16 +226,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); } @@ -258,6 +248,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 a5623ebf0f..db8891535b 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -144,6 +144,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. */ @@ -246,6 +253,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_for_gdb(); + } + } else { + ret =3D -1; + err =3D GDB_EINVAL; + } + complete(cs, ret, err); +} + /* * Static file semihosting syscall implementations. */ @@ -271,6 +301,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. */ @@ -386,3 +443,27 @@ void semihost_sys_write(CPUState *cs, gdb_syscall_comp= lete_cb complete, complete(cs, -1, GDB_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, GDB_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 Mon May 13 15:04:02 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=1651608741; cv=none; d=zohomail.com; s=zohoarc; b=Vjm2p6riMF3RJI5r2HDtm7Qu5h1MUVhqxc2qd3/mV6JhGqs2QBYr3kmnGs5vUC2++KZnyTC4IDI1lAEmXzMNU040+j8K9jPCT4FH/4CNv2XhPsh20+uBtv2dyGCq49IxFX/a/Dosp/0y7BQx6LLAfSrtzvmZdrn4a/cNbB2D2Xg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608741; 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=aRj/gsSJXACdFyaGcT2laC3B2huL8t1HBP8Z66LM2pw=; b=itn1gcpBbpcy3N2GBmPdH/HhDYqICxivAtJ/mKcWws8ZgkOCxXI4EA54bopo4Bp3gedRXtR7Qur+cCeK5g+iUZBDFcqGy+Wnd9xhTL6RYA41iuRgXQu2DwZpSKW6J0ZBAfwIZDKYyA8Lsd42IfZzdvEMJIU/qtn9y1sQFeWYsVA= 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 1651608741462495.9163093099819; Tue, 3 May 2022 13:12:21 -0700 (PDT) Received: from localhost ([::1]:38302 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyse-0005Vl-FN for importer@patchew.org; Tue, 03 May 2022 16:12:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39330) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWN-00023v-H8 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:19 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:44578) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWK-0003bc-Ut for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:18 -0400 Received: by mail-pg1-x533.google.com with SMTP id v10so14780190pgl.11 for ; Tue, 03 May 2022 12:49:13 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=aRj/gsSJXACdFyaGcT2laC3B2huL8t1HBP8Z66LM2pw=; b=wfVe2b6BVPS3lrgWnWwTD5DBclT+fgGrVfvQKWMGJmQCvYQCvamoWa5OBgyqKOo2Jg xXbOsHPdMtkuUSOTKDwyV+h3f/2RByjYY7SfBBmA6Ve0vSN9l6FeE7e/lMZzA6pLWRvJ uAwKgl2GB5NE86kulpDaFwRjBIYsnAmJhTS/wkg1R7OxOWEY3fz90M9mGNBMcGDMQ1Ir y5EubGp1PeHARMk5tzOzgWX7s47SOeGmMHsCtlXDALq8hT+JaveYBSEWBzEOS8WzqK7+ UxycZdavT8CQIsOlk60+/LfdoGv+yIFPbiJzNw7NnMp3R8v3FBpCvwdXU7187vRDPgSy HsBg== 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=aRj/gsSJXACdFyaGcT2laC3B2huL8t1HBP8Z66LM2pw=; b=cYUZEzkNxWFp/sl5Pq65T7bDMjW54nwPBMQgI1Mk5Np/pfoPF3jQ9Mk2cIk0U5Aebx T49F6/0dNXkOrHHYXlH2ssndtTWNByNwN7SF2b8Qgzugc8yEIa9Lb98LGJl+5MXdkSLq 7W+OA6lqYkejEwKO0LF2k5JFIRGs/6jJ4qogP8uFim0dF5TMTd1+0tbgMgVJ35VVn3lU LBFmEj2Lw4FE23hfB2P0qFhxYHSpF8lxgpPbSvu55WgT32RVhtG4HCCdyQCOT/GL9B5/ u+uR8eF2k1kN8ohfdgaY3JP1zBoQ/hN+TESup5SBIC1mBTy16LbrSn3vd1auFLU4Mwl6 IfcQ== X-Gm-Message-State: AOAM531pGI03YGqx9xJTfvgoz4mSn2KfGGfJLFDKowkZoym7gdcQs2rx lpy/nK+dt72RINgWVLt40+s11P5HKeI6cQ== X-Google-Smtp-Source: ABdhPJyq10YHqDhRfiOgCDpO/SXGlKckHwsVJdatDLD8cqNeH4DUzlRpMFIDzXr91kwmRQnziTXv0A== X-Received: by 2002:a65:6e8b:0:b0:3ab:a3fb:e95a with SMTP id bm11-20020a656e8b000000b003aba3fbe95amr14988109pgb.433.1651607352813; Tue, 03 May 2022 12:49:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 27/74] semihosting: Split out semihost_sys_isatty Date: Tue, 3 May 2022 12:47:56 -0700 Message-Id: <20220503194843.1379101-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608742604100001 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. Signed-off-by: Richard Henderson --- include/exec/gdbstub.h | 1 + include/semihosting/syscalls.h | 3 +++ semihosting/arm-compat-semi.c | 27 +------------------------ semihosting/syscalls.c | 36 ++++++++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 26 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 056db1a0d0..fd4bc4e937 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -41,6 +41,7 @@ #define GDB_EROFS 30 #define GDB_ENAMETOOLONG 91 #define GDB_EUNKNOWN 9999 +#define GDB_ENOTTY GDB_EUNKNOWN =20 /* For gdb file i/o remote protocol lseek whence. */ #define GDB_SEEK_SET 0 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 6f97977edf..8fcef02386 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -291,14 +291,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 +304,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 +327,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 +468,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_cb, arg0); break; =20 case TARGET_SYS_SEEK: diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c index db8891535b..702541b270 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -151,6 +151,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. */ @@ -276,6 +282,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_for_gdb()); +} + /* * Static file semihosting syscall implementations. */ @@ -467,3 +480,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, GDB_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, GDB_ENOTTY); + break; + default: + g_assert_not_reached(); + } +} --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651609841; cv=none; d=zohomail.com; s=zohoarc; b=FvCZcxbXrIRbomzxdcwbeKzOzrCC1zmF/awV33Cp8aLtpCHbp4EGvRQ0bNIxeSW8DUcNAvj6z0snAePweJ8mQktWUUp+02/AX3PkIyCQsJUaLBLUa0cBk3CXnyhUEyaUIC7gxxcaQcDO3Vj5IJ+yk54YCSHVLQJnQxuiiA1QCjA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609841; 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=KiiUe/Rg+SRimDwSRl33F/1OAQaMEIf9kHTB68MrbY4=; b=VrXZL2yara7YNwtcrU/zjNwkNycAJYxEhS2ldizaqULHve+nzxpmCeiITjU6zjo2Mmqe+9vFJQvfp/eb/Uf+iWpXg7dyszOCkcoGv02IadZufvFfHRmN7HPpks21l+4R0TMXgCwIGk/CuU+deT8yRn1ZAImyCOdhfcGOISPHSVU= 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 1651609841557764.647214117485; Tue, 3 May 2022 13:30:41 -0700 (PDT) Received: from localhost ([::1]:46322 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzAO-0002QY-Id for importer@patchew.org; Tue, 03 May 2022 16:30:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39402) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWT-0002Gf-02 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]:46900) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWL-0003bp-B9 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:21 -0400 Received: by mail-pl1-x635.google.com with SMTP id c11so5631334plg.13 for ; Tue, 03 May 2022 12:49:14 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=KiiUe/Rg+SRimDwSRl33F/1OAQaMEIf9kHTB68MrbY4=; b=MjQ2wVLQ9s6Co3NFp6uie1QJUG+KJJV/evpWGGRrBDBFqJPp5X6V7wy4VgQca7OQ9w pRScgA9Iway+7Y2O12i3JARa4XTY1OmgghOY2/KSHrSaqadZz1zn7xfbhEOEn710ut9S JbDBOV3+eE8+GIW/H6ZmIukqHFsRTxrIm6a0IgkTS4W0YLPpX/O8Q6+3rSUj7Tgr1zmm YwTZimqY3AYL/D2gmUYaf7jJf1akwPVmm4p8qwGyTeI01+DyNzIDgI5OCnb9Saw3esZS g+BnFTVwy4FRZPmxSGH3idRiYwQMVsm4+Eh/QObYJ1hUdmY7DPShwz6ThSuWGzGzNyJG UUXA== 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=KiiUe/Rg+SRimDwSRl33F/1OAQaMEIf9kHTB68MrbY4=; b=Vnb4CvmkkZJASsN+17kKfKwh93tC4tcb4MJ/CecD0mW+WI8tC99NhcYziYfs8kfyLz 9ahkgIGH1HFtxgHpPi3yt9y+2yQ81O/5hrPzk+5NRw20xuAcjnVrH/I4a95HZ13ELzVf GUFnrzqNHL1aLgbfbOuxJOJg/Sp9mA58mxSjwL6yXhb2mf3htsIYtCevFNlBNovsHUDy g4slIiWRysBL9PiGiohvY4+s9GLxnOXfFBcwZ7kZEbjyakxHSJyZW7DyIFEirVU0uipw dWaHkAayMsUJ1k08hC2gaUrSLUw2FP2SFiZNWyg/TkvWcH1kDn6OYi2dh/QJIjSdUKu8 1cAw== X-Gm-Message-State: AOAM530ZITOJYzGcbOGEPYoaCpet6jDU6HXfmK+t8LrKRr9KTRpKnDib hUZCsj+p+ejCxvB4EuF1PIWL/0rRxnd8Iw== X-Google-Smtp-Source: ABdhPJxjD1pbGOcWCTWyo3Ap3hI9FTQuzVsxpVJEpm0brSWlPS+Lcs2AeWACYW3dc2JWBs2N7HJUOQ== X-Received: by 2002:a17:90a:f3c7:b0:1d9:6832:7be0 with SMTP id ha7-20020a17090af3c700b001d968327be0mr6423474pjb.209.1651607353736; Tue, 03 May 2022 12:49:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 28/74] semihosting: Split out semihost_sys_flen Date: Tue, 3 May 2022 12:47:57 -0700 Message-Id: <20220503194843.1379101-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.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: 1651609841878100001 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 --- include/exec/gdbstub.h | 1 + include/semihosting/syscalls.h | 4 ++ semihosting/arm-compat-semi.c | 83 ++++++++-------------------------- semihosting/syscalls.c | 49 ++++++++++++++++++++ 4 files changed, 73 insertions(+), 64 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index fd4bc4e937..8e9cdcb1c1 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -42,6 +42,7 @@ #define GDB_ENAMETOOLONG 91 #define GDB_EUNKNOWN 9999 #define GDB_ENOTTY GDB_EUNKNOWN +#define GDB_EOVERFLOW GDB_EUNKNOWN =20 /* For gdb file i/o remote protocol lseek whence. */ #define GDB_SEEK_SET 0 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 8fcef02386..ad43bc8b0d 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -273,41 +273,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) { - /* The size is always stored in big-endian order, extract the value. */ - uint64_t size; - cpu_memory_rw_debug(cs, common_semi_flen_buf(cs) + - offsetof(struct gdb_stat, gdb_st_size), - &size, 8, 0); - size =3D be64_to_cpu(size); - common_semi_cb(cs, -1, err); - common_semi_set_ret(cs, size); -} - -/* - * 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); + if (!err) { + /* The size is always stored in big-endian order, extract the valu= e. */ + CPUArchState *env G_GNUC_UNUSED =3D cs->env_ptr; + uint64_t size; + if (get_user_u64(size, common_semi_flen_buf(cs) + + offsetof(struct gdb_stat, gdb_st_size))) { + ret =3D -1, err =3D GDB_EFAULT; + } else { + /* Undo the tswap from get_user_u64, then swap from BE. */ + size =3D be64_to_cpu(tswap64(size)); + ret =3D size; + if (ret !=3D size) { + ret =3D -1, err =3D GDB_EOVERFLOW; + } + } } -} - -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)); + common_semi_cb(cs, ret, err); } =20 #define SHFB_MAGIC_0 0x53 @@ -327,27 +311,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. * @@ -366,7 +329,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; @@ -479,12 +441,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: @@ -806,9 +764,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 702541b270..1425156bf6 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -157,6 +157,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. */ @@ -289,6 +295,18 @@ static void host_isatty(CPUState *cs, gdb_syscall_comp= lete_cb complete, complete(cs, ret, ret ? 0 : errno_for_gdb()); } =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_for_gdb()); + } else { + complete(cs, buf.st_size, 0); + } +} + /* * Static file semihosting syscall implementations. */ @@ -341,6 +359,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. */ @@ -503,3 +527,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, GDB_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 Mon May 13 15:04:02 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=1651609007; cv=none; d=zohomail.com; s=zohoarc; b=GNTgtLzRI97K/DeKmMptg50qWYX1G9PsIjI4bTPMkqo1k+QV9aI4M6FEzWaaGt+IueWBFkzr0tbMedJSLNCkIOlFMS1mY/KXs+AaOgOzaNhQxDYJ9rW0OSKF/GDky0oPKa393eY8FzdyHQb9MGK8NJet+FHP5atLbEmdf27bAPY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609007; 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=4cvH0ebqo0OJd6RBcXpOB2gOw1DN8L+GgldZsIUiDKo=; b=IlUeK8dmU9F332XoJJZkfvduLP9CRqaFIQ6lbiMsT+N3pljkr/iVdmlWz9HssPbZIKZWDE10a0hoBeCG1Z+qbobrJ2d67vEghai/OPrwrv29tQMCVbpNTgKCK9x/FFTa/4KAc5rC7TqlBo49l223P4TZpy4yBTgpewxh15/VngU= 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 1651609007436586.2135184668635; Tue, 3 May 2022 13:16:47 -0700 (PDT) Received: from localhost ([::1]:46628 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlyww-00032l-EZ for importer@patchew.org; Tue, 03 May 2022 16:16:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39420) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWT-0002Gi-6p for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:39475) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWL-0003by-H8 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:21 -0400 Received: by mail-pg1-x52c.google.com with SMTP id i62so14802499pgd.6 for ; Tue, 03 May 2022 12:49:15 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:14 -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=4cvH0ebqo0OJd6RBcXpOB2gOw1DN8L+GgldZsIUiDKo=; b=Y4eOvP6FIKO9Z6vVBAbwUilWA36rzk2sajzQnm7PMOrfkjR4m8D5oMcj81T+cwslD0 /YGt2fJqqknhVK+Yw6Cvz+1NLrO0JMse0GPgWa94O6le19gFKa1kqOW4pmssbD6CKkhP INnYWQ7w1bllhEiHo+I8le3Skhy7h1LS3Hm+jge5oIYCI0bVpUisj5jJfK5VJTeVdcvU VhSevERLuoxxNmsU8w0y4/xBDMBCGjRqc9oiVGv5p7EuyBhGcC0D2zN2M5PXbym4jDqj Nmun/eUFTt3rY5Z52LUXR6AsRALWksBeBSI3MxfQCPwCSX6ddqmX4POPNl/4t6hcqCJz GacQ== 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=4cvH0ebqo0OJd6RBcXpOB2gOw1DN8L+GgldZsIUiDKo=; b=RfeJnbm3zLhccjTGk6SjsGm1DTmFxppFwLgAWr8RK0S5M6njeqzdGWRmSLoSkwHK6l C+TLjOs6vfOsbWiFJRaoIDLxMwlWTF0YFr/h+JpHjWBMg0B7gUYQh5vkUgNSnLTQ2NKv +7jZm0Ytm3CtrFMaFRUxjFlJZijZ0afS6pnwCRUf+IUnfYCvM6KALgfmNicy1nBoBG/t +oHqtBJATmrwFvIO0Ev/fW1BbYt7uy0lXqwQ5HUV/LHuWduboBjCu0zTlTb7HuxoT4ZV XXSfi2DjO7/pcvPNfNWg6TlWOWfiH26njSj/7DBWBZNGHiQbkiPjpM8uk+hP/lPX9sgZ lhAg== X-Gm-Message-State: AOAM532wToWCdrVEAmZHdCm0U8IHKSjbAdRfiDWnifv1aDdj4fRF0Hje eWbSB7S6DrYBxAqkKIDHmgcYKgr7cr1PtA== X-Google-Smtp-Source: ABdhPJwShTglbjNmZn/5DTFK8YZsXiQD8XVW6kXzfYg9zhCnrkBQ2mXHBfuoUrEBD6H8QghW4pFAsg== X-Received: by 2002:a63:cd41:0:b0:3c5:1242:3a0d with SMTP id a1-20020a63cd41000000b003c512423a0dmr928181pgj.266.1651607354731; Tue, 03 May 2022 12:49:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 29/74] semihosting: Split out semihost_sys_remove Date: Tue, 3 May 2022 12:47:58 -0700 Message-Id: <20220503194843.1379101-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609009248100001 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 --- 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 ad43bc8b0d..9c98af19ca 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -473,18 +473,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 1425156bf6..3464896281 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -163,6 +163,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. */ @@ -307,6 +319,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_for_gdb() : 0); + unlock_user(p, fname, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -552,3 +582,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 Mon May 13 15:04:02 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=1651609211; cv=none; d=zohomail.com; s=zohoarc; b=P4MDtc2ZxDTaRJDVAaKSlLODo81z4vK4g+szOX2yZJog3E077suxsr+v6fRt2FC5arOiKKY+wa/udB6QPBvjmkMxcBWV9xin10UnZkGccmfKBkMDledD7tjlRAj8HfZPP/EiJ7+b7G4+4FpOPHno+4suxEJNJFZ61bac3DsF1lc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609211; 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=GwwZTrlMnRc3NXYIV+jBGueka7cjStXbOSEZpF7o1wU=; b=Qf8Pbc+vZTRRUEbmP8tPMe9S1tP9sEowFLzNkjxExhY9/l628alaX7gweVWKsm3T4D1wlcV/HLOCNe/tKAJ2Y51lZ88ugAfgtK+yqHD4+GYTFKwhNoHXF9VtdOczqYPSV61YriDEbZVe6xwypG9zjEopF+ML9quel6XwXY4HiRs= 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 1651609211304963.7705626041043; Tue, 3 May 2022 13:20:11 -0700 (PDT) Received: from localhost ([::1]:54786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz0D-0000KH-OS for importer@patchew.org; Tue, 03 May 2022 16:20:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39394) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWS-0002Gb-0f for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:39542) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWL-0003Wq-Au for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:19 -0400 Received: by mail-pj1-x102a.google.com with SMTP id a15-20020a17090ad80f00b001dc2e23ad84so3204444pjv.4 for ; Tue, 03 May 2022 12:49:16 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=GwwZTrlMnRc3NXYIV+jBGueka7cjStXbOSEZpF7o1wU=; b=Dmjuq5/oO6z3ecBQT44kCnnE2X1s6LdYGs1nQhOmfFSTgVRfT5m4NxWnmBJomF6CWt eCDYfLFwqNlmDzgtzjUoKGsINHCltu97LXyFWNDc81j5Qo5FoWKWxveE6+q+iYvtNURx aRz6M+RHvm1f0UczvHri/aHXF458nmhPChiSe+ebT/hVYnGgT0aBhBoMi+Vqr9Hxr1CE 2fvhRzgBDw3nXF+P5u5+SqEMS8gx+dNRZeMwEHUcXHrShEoi2zK7fnpq/2QOYs69eJ7a 35/SCoj9qpo/JMX5EEtZPOcDtKc5Zy/6ErHnXqjQdVtEEtqsnzE7eGdiq623Onsryquj zjDQ== 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=GwwZTrlMnRc3NXYIV+jBGueka7cjStXbOSEZpF7o1wU=; b=eb2XKFx23WJ3O0GUy7VnbWTg+xDxMSpEtx2CBOLR09x9gNRZZECbnrSkZtw3F+qXo5 FaMnewWn+OW7giX4+SSm/jE2OHx5CTMMXSK/7EokbxYGV2XfG8keJsLOasEg4pAFk8Df 8bsLoYU7AxvH3u40MAhlzQbC7hMN5XAZFEdpPHPDP1rwFS4NJhfrsHCqTiV4cPxRnXlz +hcamrhYj6dKq3MAOUBDA6WYcfK1CysJDaxThtFtdUdZwHZu/dWBOku6owtwDUDUNWjn 2QVJcmRM6hajHhGVx8/6lZ8gVRztyG2AEi9FcHkhFy7EOnTZDZ8SaR3p7idipKqQo8Tl os0w== X-Gm-Message-State: AOAM533sdrQoxndKo4NakAgh1SbDuYl1yv5eIIQkyhZ8YyTN7MNNuCFK tdFoa6J8tpbuAbzDC3vr9Lz0WRiaIxhYLw== X-Google-Smtp-Source: ABdhPJwl19KftUJM4vgwnZYIxxC0IWLY9P98IXHVgXsytHINcj/3d5o7rSpZMl+725O069L8lRjxvw== X-Received: by 2002:a17:902:7795:b0:157:c50:53a6 with SMTP id o21-20020a170902779500b001570c5053a6mr18022936pll.40.1651607355638; Tue, 03 May 2022 12:49:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 30/74] semihosting: Split out semihost_sys_rename Date: Tue, 3 May 2022 12:47:59 -0700 Message-Id: <20220503194843.1379101-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1651609212523100001 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 --- 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 9c98af19ca..f554f4761f 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -481,26 +481,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 3464896281..96d823e8b3 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -175,6 +175,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. */ @@ -337,6 +357,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_for_gdb() : 0); + unlock_user(ostr, oname, 0); + unlock_user(nstr, nname, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -592,3 +638,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 Mon May 13 15:04:02 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=1651608561; cv=none; d=zohomail.com; s=zohoarc; b=FhSufGNHbzCy5lLafQmeoH9jx8tgaK+DF4EItUuhR8sI6IiZa4kvcDKSUG2lklLVmIbOJorD6TmGPq+aW62rVzPieBTRgR+5Pj0TofAVX+/2ikfYKxBj2pcIovuur0/PgAyqdPG8Qfdap08oNB5hEtJtR3WkqYApZ7RZDKGdRzM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608561; 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=/Tnt2IWUsnzN1DncvQNw1ounPVnk2pgfg+nnvDvrCdE=; b=HYApRM+gzxUEwcuZu0S3GbDpYzrembiY0IZDCROFw7+B9loIKIDCTZB9qbehf8cixvWD9hKwitGaLEITpFlMMOCgzDaVxTpEAsBnfQ0hZqrO+GVPkI8zd9zXtiHnQN6pb13FfyL10aTt2hVEB4angGrWxHZZfwLaldc1q6A0RmQ= 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 1651608561114988.7210022494183; Tue, 3 May 2022 13:09:21 -0700 (PDT) Received: from localhost ([::1]:59336 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlypj-0007sx-Og for importer@patchew.org; Tue, 03 May 2022 16:09:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39418) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWT-0002Gh-7C for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:43782) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWN-0003c6-6O for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:21 -0400 Received: by mail-pg1-x52f.google.com with SMTP id q76so11750651pgq.10 for ; Tue, 03 May 2022 12:49:17 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=/Tnt2IWUsnzN1DncvQNw1ounPVnk2pgfg+nnvDvrCdE=; b=LUyAqobHP30Lh8OtIA+55QMwrRw5jqnYhqmQOvEGqYMj1i4ID6zpUKSKuc1N6tXY66 dmmVomoGcDXL9Npj6XHnHQW5topaox+SA9JamHHnvn9FMKDIWnnTeAnW0J8ctgQt7FBV 1ly+/q4fbnmmxaZW0bG5QaNZwvhWQrQ0Sg1/g1jgNfnciWqZr6yVTO2lMDzMfnOJgS/H wuyYFi4vOQyuxZGmKwt26tKwvJyoZGtUiKGYGhKw6cGnGY5ki9JFoXkGgJck/oQ/JLMl Fo4j8EslpnIzXgLhqvaIis7qncCrOXn3kT1SagsrVwBYwc7X9GgbNt3sNbbgwoKP0tCS p4gg== 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=/Tnt2IWUsnzN1DncvQNw1ounPVnk2pgfg+nnvDvrCdE=; b=oT+o+wQXT7ZfP+QIeSJrRRFTldLt5pVVECGaGlSw3EN/35LedLD7C7Yl40mJfOcpoH HzWgOBCY+LPoR+eWE1XSRAKeE66JW7hPzRyYRf7IBbNf8ebSMQ6QtEB394hcmh8K/Yjh hprzDgqgah2C+85TaEJZg98Fy7d1gXxIdQ24laAufPF8F88lkgAaJn/vHhYVTYvp2QWM FnI1H5mPO7kGwOX5MvexO29VEX/TdWFKHZsB73KuM1WmbFpRn8qNBcJMwuvRqIguFTyo PuXjs7LQlPM3PidH1T2JfPoS2YBfCRUZISGNfcsZyGCvDRDPRaDYCPl0rGm0CGlTu+rU NZGw== X-Gm-Message-State: AOAM533Q2umBvJ3l/G2NaII3SqYv3RjNzhDw5NXeWq3Z934eA8G98FLu CpxMfBtuDlKW1MPk9t8SPYAZBCtfaet+ww== X-Google-Smtp-Source: ABdhPJy90ZlHT+oSOPOlWdKxwnNoy6yPcP7aPhu5M0yDYcf5tdRlk1HnYAp/y88ppyX+zqtJUMzMbA== X-Received: by 2002:a63:85c8:0:b0:3ab:24cf:e625 with SMTP id u191-20020a6385c8000000b003ab24cfe625mr15309386pgd.212.1651607356343; Tue, 03 May 2022 12:49:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 31/74] semihosting: Split out semihost_sys_system Date: Tue, 3 May 2022 12:48:00 -0700 Message-Id: <20220503194843.1379101-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608562733100001 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 --- 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 f554f4761f..a7520d6f41 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -496,17 +496,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 96d823e8b3..b6c395af22 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -195,6 +195,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. */ @@ -383,6 +395,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_for_gdb() : 0); + unlock_user(p, cmd, 0); +} + /* * Static file semihosting syscall implementations. */ @@ -649,3 +679,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 Mon May 13 15:04:02 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=1651610035; cv=none; d=zohomail.com; s=zohoarc; b=mpBbZVLsjjdJJbN8sWDTaKVVOF8pKMhYYePwT1V5CHSaC/5DvFNJvueDb2zvAVk2aQ4ey1C63IJC/3/XNPHV1vbSptVnTWHFT/4kdh356QZ+AFmWNMvY3vfBzovQnNaLauS78sIO75/gmyiCOHOADSI44647SgX/iPMQ8DTnjxs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610035; 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=7WEErp9U3fuLYooIL1EDmPgWGgYpjbgO1xt64/VLw3c=; b=ISQtJjWeIGATC0KVRQTLuOqfiTvj+pgB/uspeSOJTutVrOqLik0TReThhLSsdbuqQunxSddy2XVWhjqrXjSfdeNGzYXHp6vk7uMbNTO1pcw2EyLISEGgJ4GcRf4Yy5Tjj8ytbqG6wtZoIrg4e01ZS12/xQi4+Ai1wxLh3gqFtlk= 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 1651610035524284.6566084774437; Tue, 3 May 2022 13:33:55 -0700 (PDT) Received: from localhost ([::1]:53960 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzDV-0000cT-RG for importer@patchew.org; Tue, 03 May 2022 16:33:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39422) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWT-0002Gj-7n for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:42900) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWN-0003cN-6r for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:21 -0400 Received: by mail-pj1-x1036.google.com with SMTP id l11-20020a17090a49cb00b001d923a9ca99so2886784pjm.1 for ; Tue, 03 May 2022 12:49:18 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:16 -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=7WEErp9U3fuLYooIL1EDmPgWGgYpjbgO1xt64/VLw3c=; b=WpHk3OKdGQadFBQi9LTKD1EOge5zzf+hP5X5uue2tytY9RDaCJWffi+NxFkHRIYdlp yqneyb9lVVXhRGn7MA8sWobo5kH+v6vPAyLubXGecnmTIimfR/tOJGirZZa1PGDrvh2a uoSUpekIWW1CIsez+pJlw1ZfizbIG/NcNsTIZfdAGDXV5JTrvuDACY0r+JQg2TZDha25 zUs/Bz2BxooR8wQC0zop2swRYn2CrDB8RtlGxqOovo3g7AzaDfMC/u8XFZYMW13wgVlP y3XAse3zhmie6/v51df7vm4ZSdmjYDkSijgaCutZOVDNAMDzllHF9k8r9+5CylitfDwz /PyA== 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=7WEErp9U3fuLYooIL1EDmPgWGgYpjbgO1xt64/VLw3c=; b=fSfxk+3x12C6kOCOwwnMNBFL/ilM19CYZDn+80Ld5NNAgPJlNIsLAtzfUAR+LCUXOw NCXlmV0z95wQNrCPXJxaQHK8yOFhSAQIupob7beTg3YZxXgzcVL5L8SqHl9+nVD7uSRq lz2pzgKoUZAhQ7Knm/1kMWGW3pvK/cNsX5tAU8CYG+DvGzAA4/aSI8BI8dvPtU6wGpMo RK+cq481v4grZjOs8y5BKbR78TwzaOyNLO5pdVDY4GSK0ySoO/yEILS1Ov8xxiM5XQbf /oaG3d5I6S35WR2kOLqvVAbleRSWghDVGdCTxjsKUZUQ3ngpIszgXYfF49DRzjpumU+Y 27Jw== X-Gm-Message-State: AOAM531OFF2nmfjruS+2wE0/sycIw9SaI71oKUkt2in6g4qIALuqge8g m0nO4UPyjWRZ8qN9knypBVDqV8lpZXAmwg== X-Google-Smtp-Source: ABdhPJyTuR7WBIf3cPyaEkSKOlS6Q4ITGoJfLuYKatxD1yjcwzzcJEaV74BtHR/wm8DffZlfccKDSg== X-Received: by 2002:a17:902:ab04:b0:156:1517:411a with SMTP id ik4-20020a170902ab0400b001561517411amr18089563plb.128.1651607357204; Tue, 03 May 2022 12:49:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 32/74] semihosting: Create semihost_sys_{stat,fstat} Date: Tue, 3 May 2022 12:48:01 -0700 Message-Id: <20220503194843.1379101-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610037999100001 Content-Type: text/plain; charset="utf-8" These syscalls will be used by m68k and nios2 semihosting. Signed-off-by: Richard Henderson --- 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 b6c395af22..7bc2640512 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -93,6 +93,52 @@ static int errno_for_gdb(void) #undef E } =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 -GDB_EOVERFLOW; + } + + p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); + if (!p) { + return -GDB_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. */ @@ -163,6 +209,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) { @@ -351,6 +410,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_for_gdb()); + 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_for_gdb(); + } 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) { @@ -659,6 +763,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, GDB_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 Mon May 13 15:04:02 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=1651609714; cv=none; d=zohomail.com; s=zohoarc; b=U0hfYZEuByhjvm2u1eXrIdbcFIq8tVsi0Ic6Kjb+xxtkrEf/Bg0VNSkC2+5FqGIaabIWbPq6nu/OnfGHbpxsQnpQHQI5T+0ZWNpngS5upPKfwS331XyiUUnv24bK/piHCEoXCC0tZc1wJqB7PNI8AyjKSDNxKGrvj2lCyiv8i0A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609714; 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=Bust6mppvMbdx6gzfuXbL5YS3wUCsmb4mW+3d0C8Dpw=; b=itgEh+lbjjFVnak3Goiy0G2Fhv5ybkkqbPgYzjIDgbmgUAjAzatfNXSFXReFICGwLrIA7Wr7d1Il/9OuAinAAEsABZCGubjxapsundHPe0d0SLFSlfCQmxdl3OXr1msUusXyIAG7sM+L+hnsYc07GuQm5C2gGRBzdJ1/HnOLTiM= 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 1651609714347858.4841549465758; Tue, 3 May 2022 13:28:34 -0700 (PDT) Received: from localhost ([::1]:42510 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz8L-0006vL-2W for importer@patchew.org; Tue, 03 May 2022 16:28:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39424) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWT-0002Gk-Bd for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:43785) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWN-0003cS-DH for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:23 -0400 Received: by mail-pg1-x532.google.com with SMTP id q76so11750698pgq.10 for ; Tue, 03 May 2022 12:49:18 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Bust6mppvMbdx6gzfuXbL5YS3wUCsmb4mW+3d0C8Dpw=; b=fALOPF3Q+6TIwbPSmDw4ZFH8+9IY+UTCec4JKD7MfyPrp/v32MqcHpDwF5Nj8/Ehfr jbKqksT+Zf+3BsUqk07NtiUMLJqaSNGKeezm4zE/m/3G7717CDWqDp2jxbqHWfmUx2qX UWvEc+aUCbY3jPNg4iXTFsBGGoATLo6Bvi0YqvLeeSynFD5tdiC6hnm/2kIYinvfQJiW 7w0fkd7MSVyJu4d/ByhcWjdZd7tCjprcUMO2kxufaikJHpEVkOROhqpthbi4GV0uxkiW 8zUd/yjkknFe2XNwGow1PR1EKkXANpToq3Jhot4YZ6iickOONLRrpMtyH8DWENNG/aeM HrQg== 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=Bust6mppvMbdx6gzfuXbL5YS3wUCsmb4mW+3d0C8Dpw=; b=lsSmmgjQx6qGIc8z6q5WTApvup3VSAJCbtP79WewGr40pHDYPj8ZY1cUeyAw2/bXMX k7n2oZ59vOKBBA6Xxwen+QRhrEROvR6i3aJDTrGlQ0WFNjomCBF78KYk479GudX+7kDM wCpieb+DaFOkuhgE+L44nxDtBO0Efw5Kj4SXjq52vIaT6J0UM9icGcwy5lcadxkPCEjB cPT0OP2e6e0DxUHeAy6IDZUgw8VHAMdxCXc3bUCMMvNCYDnuAcNMKq/IjcVAaSssrN3/ 0ph4hZJSR85B1WEq3FUJUeWw6369FEuaL239+FjYP6MB3/rwCHv6JbRDjkFn579GRe0e Ei5g== X-Gm-Message-State: AOAM531UwpYqPsSTFZe+/upBj/p/oFV3WHJUS+m4yRACbUC0MG6WYObQ JBvVvHKim/b2EpyDit1zZ3DxjtGyEdBYIA== X-Google-Smtp-Source: ABdhPJx7gqkOTIhQWOAzKNWCjQGwOl59k/JbOkTK60eNUryuBgOZQ/pK7gya38y81FHMzdl0BI7pRw== X-Received: by 2002:a63:1113:0:b0:3ab:a3fc:1d8 with SMTP id g19-20020a631113000000b003aba3fc01d8mr15121040pgl.450.1651607358046; Tue, 03 May 2022 12:49:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 33/74] semihosting: Create semihost_sys_gettimeofday Date: Tue, 3 May 2022 12:48:02 -0700 Message-Id: <20220503194843.1379101-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609714879100001 Content-Type: text/plain; charset="utf-8" This syscall will be used by m68k and nios2 semihosting. Signed-off-by: Richard Henderson --- 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 7bc2640512..269f750d98 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -266,6 +266,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. */ @@ -517,6 +523,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, GDB_EINVAL); + return; + } + + p =3D lock_user(VERIFY_WRITE, tv_addr, sizeof(struct gdb_timeval), 0); + if (!p) { + complete(cs, -1, GDB_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. */ @@ -826,3 +858,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 Mon May 13 15:04:02 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=1651609952; cv=none; d=zohomail.com; s=zohoarc; b=daaqMnIcKwXfhBdix60b5VPyaQ3Bzr4qvY/j+w1o8SnCxSDATkpT+LVTzot0E/uExtmhdsxml5ctttpyOCRkFAnnhpmG8ZYThi3FO/SVSyNtPdZKHFXmIVboabLOzZp7m6Cv3Jftm32MAp3aBN3ve7nXCYYL3Q8zjCicLxXAdMI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609952; 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=FaPp6XMU7/QLI/fAkjMpx5RbKj4Bgtv2vep9zbLkpHY=; b=CQcgiB5onrB3iz9fAKjsWNFRHpJvriIC/74F0C5JEDirt0g1/F+1dV8Cet9tmlnP97aq2kO5kLj64b7m0CJewFKghpptTriCY+h0sX0HugVzfaEH3O/sIoPRNFE1PF4YFqcgmiYX32Xd/RmjvBVftrBFCrOwwMx93o18EQnBgRk= 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 1651609952418308.44692960027896; Tue, 3 May 2022 13:32:32 -0700 (PDT) Received: from localhost ([::1]:50136 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzCB-0005ok-Bm for importer@patchew.org; Tue, 03 May 2022 16:32:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39492) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWW-0002Hu-M1 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:29 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:42888) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWR-0003ce-0q for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:26 -0400 Received: by mail-pj1-x1029.google.com with SMTP id l11-20020a17090a49cb00b001d923a9ca99so2886841pjm.1 for ; Tue, 03 May 2022 12:49:20 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:18 -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=FaPp6XMU7/QLI/fAkjMpx5RbKj4Bgtv2vep9zbLkpHY=; b=ax+W/n2d7bqc2OJ/9rHUUHWAnnHPgCuat4gaYC3uFZz4gyIbIefpFChRPjc+cn/iq4 +NOf5OYCzPoLy13KRrUWpKQAXtme8HLuHoaDp/P6STHUltJBKwhr2RSX6zmud0VTcphk np5cQSfidafO0Zi/r7qY8XzQJXeXbdpY2u0v9fbA5idupuNonaNpyCl2stmOhysa8cT6 TdOvjBbX5IlbH8heZR2OrHv1szC/uCZvKDlhoma8Ej9HO75EDgbJziklmyTHcYlAi2YC Pga5zDcFGIxincDa/D7fIPewW9UXdPlJKrCFAJtIV647qR61Qgr8Mdy9FMcd/pwerbdx +SDA== 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=FaPp6XMU7/QLI/fAkjMpx5RbKj4Bgtv2vep9zbLkpHY=; b=7GSaNFIOqylN8Xv41tncnyongrg8KQ1+KijjS0YuVTT1k4mARsF8hIUy0h83g05kaQ P3EBhj2dFF2/K8Pwhe72nKO18nWMYZrmxRXrOnTH186lZWXprdsSEQ0kfdI8qKNONXvg QlRrHQCKrlhbJp6YwL1wsgAX1OSuyLjvLsOgBCU3HTxv/60rOQ5Rx/5Yoo6tM5wDP+pO wA0/pj2K0B9/s8CCtLoxn2kHJNcCvM+yM9JOUdYTFc7y8vFY6lMoegc63+r44S7j8J0W 3n77wlS85Hc5yjLmTx2TErtP8K8XgYsBuQABPockB1nVHebuYpN2yDIZ92wAjQpXfsYB dl3Q== X-Gm-Message-State: AOAM530mHs0T5QtzudKCpVbTamRVd8gmu9fTJOpLP9VQxSvSPMsRZF61 LmSvwhGW+kZKbb93EBpE07nHVkvrvAkGHA== X-Google-Smtp-Source: ABdhPJwu3SPRx9/aHsiSyp+si8ksIOhbRdBOHYdO6AszGdv1Vh3fr4Ux5sm5JgU5eSzy6nMOXHn53g== X-Received: by 2002:a17:902:c2cc:b0:15b:a4e6:f58c with SMTP id c12-20020a170902c2cc00b0015ba4e6f58cmr17825157pla.149.1651607359169; Tue, 03 May 2022 12:49:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 34/74] gdbstub: Widen gdb_syscall_complete_cb return value Date: Tue, 3 May 2022 12:48:03 -0700 Message-Id: <20220503194843.1379101-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.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: 1651609952601100003 Content-Type: text/plain; charset="utf-8" Always pass a uint64_t. This resolves a FIXME in the m68k and nios2 semihosting that we've lost data. Signed-off-by: Richard Henderson --- include/exec/gdbstub.h | 3 +-- gdbstub.c | 7 ++++--- semihosting/arm-compat-semi.c | 9 ++++----- semihosting/console.c | 7 +++---- semihosting/syscalls.c | 2 +- target/m68k/m68k-semi.c | 10 +++------- target/nios2/nios2-semi.c | 8 +++----- 7 files changed, 19 insertions(+), 27 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 8e9cdcb1c1..63764a9766 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -77,8 +77,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 a3ff8702ce..5286253f8a 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 a7520d6f41..3ca8b6455c 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -217,7 +217,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 @@ -234,7 +234,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) /* * 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; @@ -273,7 +272,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 269f750d98..4c934654cd 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -145,7 +145,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 da0186f3ef..94deebf09e 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -93,7 +93,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) || @@ -108,7 +108,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) || @@ -122,16 +122,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 Mon May 13 15:04:02 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=1651608759; cv=none; d=zohomail.com; s=zohoarc; b=bFdraQoxij2+iWVvEzrzNWMRoMzOxkcr/jj8HdxPjj/WqqwElDVZ1cVdQrvHdfda5TrPGMDZeL7gC7H0vnD7ZzizpqT9cBybR6aq8zxmuXvsx3q2VUxHQVGl0SocTwQ6MeQslWQ/WBIG4ciRiyZti+W0Ok/1j0PWVR99K60FKp4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651608759; 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=gn6ID6c3IECFj/6WcjRq56VJbpoXX339qsn6XIx+Mr1YkHr4U7BjpjeWL9gcLLQjzRO/4MztGzo0/AGwqG2OldInNlmkQk4S+OVzjwSU3ZMR/jEqxb4orHgbMZ34mb5k0t3P4uSwNvgqNj2hiCx5G4JHYRn037n5EU/oWU8NJgs= 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 1651608759178751.2545232563695; Tue, 3 May 2022 13:12:39 -0700 (PDT) Received: from localhost ([::1]:38766 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlysw-0005qa-0K for importer@patchew.org; Tue, 03 May 2022 16:12:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWW-0002Hp-Lc for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:29 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:53994) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWS-0003cn-Op for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:27 -0400 Received: by mail-pj1-x1031.google.com with SMTP id o69so14879539pjo.3 for ; Tue, 03 May 2022 12:49:20 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:19 -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=XqoIEfXhd7BNceb0kMrO9zkTaldhqCjVxLq04bcUc930Z6ZsliYjlWM5p5uheI2UXG o0VmD0Y285TgVLMnHdSfL6w7pMlulkyPyvfOmmSpm6Qpwa0sDO3UfKg9bVq0caIPM7BB wvHXpYcFG6VR1YIRpX31G5FhuZD/NyLUB5AFEGUhSBGaShydujFcF01EhL4CYOHMr8nv zYtSG852v6QjDjAFEMUyxvEk46J2Q0T/+5OdOerEodalHHY6COrmYSADLtwxacfnrdjS IBwOc57uVHDxLnorIoAptMuSK3VofXVpHDHAPygVTkdInPkzYTwjJGEUMCe4zJSmaB5b aJUg== 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=qr8n0ORqjQIiO+BTWY+KDAx6kCll2hPhTA6ysBTbQWaMYKcB/tBPzD/VN1bfnzfmF1 q5N4iFZ+WdCdcNbwzLwsCGyxgIKzYBzQM6Yv1pNrf8JK8uFaNCQLvZGjSs4PzMwIYgzk yvHOp8ygGm2CMnBSTmVe8jh5ezv4br3N2hluKyjMlFrMLOlirbznYIcOo9CfS8uGkmz6 S33aNvBLFrc7BH8jUZEzt2asfnkZJX3tJr2d1qM8n3llcgwfcYCM+kNAdtcGbwKOUOse 0ieHM0scL9RvpDyQHrLDfmbF7mI/65IM5VBWAjr5TyfHTsUitGXy/GMk+lzDh/gbhJqB /wGQ== X-Gm-Message-State: AOAM533aZ7gqxWKeSmExHXLRifbvCwNA1LfjRqXeCectJTd77WTFjI/U yUhs+oNGa4Omgl7KkENYYLplwuyIElvhVw== X-Google-Smtp-Source: ABdhPJzIePYQ6F1YY3jiZDQRfbMLXvW144Y1/kNE4A9ZJFtIT/jr7BJ8VTpfSO/aKvnkomOgsREt5A== X-Received: by 2002:a17:902:bc46:b0:15c:f32f:39bf with SMTP id t6-20020a170902bc4600b0015cf32f39bfmr19278504plz.32.1651607360084; Tue, 03 May 2022 12:49:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 35/74] semihosting: Fix docs comment for qemu_semihosting_console_inc Date: Tue, 3 May 2022 12:48:04 -0700 Message-Id: <20220503194843.1379101-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651608760850100001 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 --- 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 Mon May 13 15:04:02 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=1651609925; cv=none; d=zohomail.com; s=zohoarc; b=YaYXYiuZq3ak8O1A13Io36Xia864wVEjQgJ9xde6wVbUVIG/cXHD0oMk4PYo6GGRtUnF3oD7to67Uu0tWoA4JvyAr5YSqbXGcINKbVUyznPRXliexT3itIAJEp+2bzgs6l/oPoNyy5FrIPlGCXXHeN8MmysIHR44bIxdwTSTJzs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609925; 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=OGBm2n7ExoD8rG+nhfGrAKA5WPrKK898UQl1Rl1Fe4M=; b=gQ8EttZvGT96rRFIZx1arW1tT6o4WQr7RXalpVHs0fUv6mAJBULgzoC/pYFTw7IbJFg4fVFi/IhiCeVr7Q93NEYbLD/IMSfVepuNuzz8qMKcHiY0iMsPD1FeqLOtMgcmKoj7fHVou5GyD0pzD9QZ2KFLYjafF9RKFu/VgFFoqqo= 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 1651609925287241.63144340329154; Tue, 3 May 2022 13:32:05 -0700 (PDT) Received: from localhost ([::1]:49560 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzBi-0005No-8a for importer@patchew.org; Tue, 03 May 2022 16:32:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39494) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWW-0002Hv-Lx for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:29 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:36365) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWR-0003cv-Pr for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:26 -0400 Received: by mail-pf1-x430.google.com with SMTP id z16so15569197pfh.3 for ; Tue, 03 May 2022 12:49:22 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=OGBm2n7ExoD8rG+nhfGrAKA5WPrKK898UQl1Rl1Fe4M=; b=Tktp30/3EPU1bBRlphcmNpsHS2rlR5+3jISDjJPTQfkl+fur6/LyBqjh9OHnjVxjD0 AIA8c90DIiyHHdBHmalwAWKxyLkshZwk0TMj+DrzYeBm+wd7MAN9UamD+WqKhJqHLA5e sZHZhMPipcd5DywtiI1yl/GY7t/KUxHBa/AENlqLm1e/miqR3d8UdrL75q6NV7xYYV5D WVTm/mxIc9Wt5dufXerSoX3677m/pJGY410Lb7FRBVh4irUwgW6jbSuNZhx7UT7K5T/w 8f8Af6d03euJdnBFq3x4eRaOkdTER8qXuEt6GGAXFfL8gBcT/Pkz2vB0sv68o5sJx2Fd J2Fw== 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=OGBm2n7ExoD8rG+nhfGrAKA5WPrKK898UQl1Rl1Fe4M=; b=2ZxmGDv/YF+4fCNjogh1D0ozcUV3/CoCA9UV9fSRxzsQKawlAH22nzaB8tnCdvOEkP lb/Z2Tu35A0tR8TX3VVRhZNtgXlUKlTNGJKiMPil/35yGKMfgucNLohhPKxh3M1kuyQe ejQj23ufTQ9o7Rilffr0olhWuhXOmZTmpQ2Eyudyhln6wC9D9WiiMx7tbRgYGuiglmj5 v5XJ07CKDdBCeJk7+lIQDvk3URA6d8siAeZKpOOMPz23PvKXEY+C3GoiJgZx7OhLUACk ZnZx6cy7JmRR+60wTUu7IWi5KQbkyHddN1Je6Kks+Pkp/w/SW9/PNSYJjgsTsBnDntMu F29A== X-Gm-Message-State: AOAM5315ICsgPwqk19SLdtKn0c5yHZVGnGqe4dtuyf1YfelL+1hgh7ii 4CyE2vmeOkbtvzstnVlQdtsHTfqyA8IgWw== X-Google-Smtp-Source: ABdhPJxQ2Ie9kPUmamUZZFhPWxaoRLh2IShejA0Yv/t3UQFuEEoJeONAbnBxfDVBqoqDRsjEGBhryg== X-Received: by 2002:a65:6149:0:b0:3a9:7e8f:6429 with SMTP id o9-20020a656149000000b003a97e8f6429mr14962164pgv.613.1651607361274; Tue, 03 May 2022 12:49:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 36/74] semihosting: Pass CPUState to qemu_semihosting_console_inc Date: Tue, 3 May 2022 12:48:05 -0700 Message-Id: <20220503194843.1379101-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609926625100001 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. Signed-off-by: Richard Henderson --- 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..afc961057c 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 + * @: 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 3ca8b6455c..c4cf33fe0e 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -418,7 +418,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 Mon May 13 15:04:02 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=1651609694; cv=none; d=zohomail.com; s=zohoarc; b=Ag3yHwwgIevthEH6XLmeoH7VWOoRMI0b6Rejy/xySLZfoLSrquhlxbkUSJXPJ90/t02+kBM7u8J0IfPuozOVcobRm47D9x9CqobTPU+ClLq3MUfX7oW43fVBs6LfZBfukAY91uulza4iLi9C7MXpyy+4Iye7XW2cEwGV3yquGy8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609694; 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=9xC9HPdGYz0Z+ceTMk4d0rDxEgPYsoRaTR0YGxBhWY0=; b=i1eE8Pap+f/LaadT2/GyhFrH36hNP01J8mrsnl54TVRmF5qU0MqwTXRQZDnZT1WHI+1KAt035IPSTwkfo8m/PLHSbWKF/O/83xGOkSH3L4QVURXMWVmPCLY7jOSWJOWcWlaVOIs3UMD9nok9Uqh1vT6NwbAkEQNbmUB5RYhLBEw= 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 1651609694243805.5774866228837; Tue, 3 May 2022 13:28:14 -0700 (PDT) Received: from localhost ([::1]:41908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz80-0006D8-J8 for importer@patchew.org; Tue, 03 May 2022 16:28:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39498) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWW-0002Hx-MT for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:29 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:53997) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWS-0003d0-VU for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:28 -0400 Received: by mail-pj1-x1034.google.com with SMTP id o69so14879610pjo.3 for ; Tue, 03 May 2022 12:49:23 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=9xC9HPdGYz0Z+ceTMk4d0rDxEgPYsoRaTR0YGxBhWY0=; b=AYKCtFqbfUzgbf6xqzjjAhnWJ9dPDU8ZH8IpLNrlr98eS+KQsnzHYkE8MzTEJxW+TZ 52Xcxuf8eV4Vc9WriR+8A061rWRTzVoWbFBK9zQJ5MwElfrDg66yX2rBQdugMhq+koIE oRjNeH2bfi+0tLZ3QD+xvmRrfkVkvSF1BMIQ0MQd/6UDvbWxhu2vLGQZC1z5zuFJDgbL w71FqmoP3xhvvInqJrGi1UkqSDIV3CRvW3BPciNgbkIqmXf1lsIAlya+e3q6MhzUe3ru q21Mz2EDPB/SPx7o8kjz1TUnMNx7d6drGtSspq07LQw/aFbsay7QgntmFeOpzk7mT7k3 gwFw== 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=9xC9HPdGYz0Z+ceTMk4d0rDxEgPYsoRaTR0YGxBhWY0=; b=ayVKlcSemJh22n0xfUryM1389bbN7Ad3fsw5oQEhc7Wce3MITCl2G5ZhLvQSazhNZX YYGrBKVAAbyig2n7ToF+f1FX5oOpQzAzxqnPTi61QyrJ80JDUViKbG4cBDkjt/38ApfY ThRBUlK5GVuPuk3m5AvqMSU+e2/LOEx40qdkm3zGfZvVgUlUM7xiExXAAezjvOnYMJmu wrBRyRMcA7C6mIvQu0/eiDDjajhVdZTSBR8123U9G9xEkmbPjA6BH0b30YyOKSe5mfBA GzhIRics/UMxRVyDBHmqtGONrsqk+BKXvGgs+wz/dOujCgk6kttxnDXpqkQDouLm4zX5 92pA== X-Gm-Message-State: AOAM5325TSImkHyGh2Rh8f1ipqKsixI6i7apMLPQ9TQs/UE17W97oM0E YLH8PUhMs3wrNPkgUvxJ0GNJAZ4DTQqLvg== X-Google-Smtp-Source: ABdhPJzA6zelEf1pAaLLJMYyRegw9nD7j4CqkJyTOqNaA23g8If8uVHJ4ZhclPv4p7p9V7Sq+Eq4Tg== X-Received: by 2002:a17:90b:3c4e:b0:1dc:9999:44eb with SMTP id pm14-20020a17090b3c4e00b001dc999944ebmr80942pjb.179.1651607362297; Tue, 03 May 2022 12:49:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 37/74] semihosting: Expand qemu_semihosting_console_inc to read Date: Tue, 3 May 2022 12:48:06 -0700 Message-Id: <20220503194843.1379101-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1651609696551100001 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 --- include/semihosting/console.h | 14 ++++++++------ linux-user/semihost.c | 10 ++++++---- semihosting/arm-compat-semi.c | 11 +++++++++-- semihosting/console.c | 16 ++++++++++++---- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index afc961057c..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: - * @: CPUState + * 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 c4cf33fe0e..d60f7ed6a4 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -418,8 +418,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 Mon May 13 15:04:02 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=1651609416; cv=none; d=zohomail.com; s=zohoarc; b=CRCU28ZPsFXWc2xyL1UZmt6hanF7zIhf8eyY2LARfijEbTBESovN6iHuVdFyTT+J7s/55Ry3M4zSeyKRE6bqhN35fssybS8xwbt2ApLWNjInS3VuEGDgyi1xZP1iqjUEijk6v9O+1njUKZZoP0YETOIBp9kjv242eoy0NrC/ZN0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609416; 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=WMI7bqILJjX6/FSY73MwMD4JpfCZEnEL2iLuRqOe/O0=; b=ke3AgMZ/msG/0H8uUGVPiWCsmzrZJ04Lzf7ijDtepi7Sbq1fBgQE0Ee/WPQZzu3LUIWq3GfYYch6bOAPS6Q+/yzVFtFR2Xg7rnJO70cusS/L+qnUs4gUuJ7kgSVgscJHJ/Dc0W7GO9b6qvmoImuCJeycn1WkOWIUD5FVaxfEAGc= 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 1651609416930112.64340775491041; Tue, 3 May 2022 13:23:36 -0700 (PDT) Received: from localhost ([::1]:34320 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz3X-0006Ra-R6 for importer@patchew.org; Tue, 03 May 2022 16:23:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39496) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWW-0002Hw-MT for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:29 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:45898) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWS-0003d6-VL for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:27 -0400 Received: by mail-pf1-x433.google.com with SMTP id h1so15551034pfv.12 for ; Tue, 03 May 2022 12:49:24 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=WMI7bqILJjX6/FSY73MwMD4JpfCZEnEL2iLuRqOe/O0=; b=cRIJieso6ZCk/SZfaRT0o8vM9qNf8jMBzxUCuz33hkH6vWSIMT/CfgxUmmLYHJku/b AWLEJ98ebT5zbAMO/G944cTP0SUpWR0ii5K7rRi+egr45Qt8OX3lVWlVvkODIalzdyw6 GREjfIHSswZzMjGdbrfF00pmTSrYwXfuk3d9FTb4+MDwxhin01L3mYfZSAsooKzIyUHA K8cP1ZKCCOBIVw30kRV9fESE44sXBgT8kw21IUYKpepqYRgfiQBO4W2SVhcTRkar605i 8XMq4mmFIG8IqKpRPe3rKgnAM6wMHQpWcEmSLLUN7WHSOfMHpvNOmzXtsfVEfXnfDb3z HGaw== 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=WMI7bqILJjX6/FSY73MwMD4JpfCZEnEL2iLuRqOe/O0=; b=aeuuc9J2z6/CRNAfzvZIoyEl/paznojBQu4wEvAOnPwv2NVifdiSABCSYMFm5iujd3 LEOrZwic0rt6gDfpbfDDqFmp6ZZ/V86fLM3KJN1hCM6htMfMO0A5YPg297i6sV4eHXR9 b5Y5Wq2YiomX5xoIoxK1UNXcgVaNorq1OjLleOCTqu4lXaZeLv/iULfiGmd/Iit6GUV7 CYALqkA1qnIIQHAnYw6UgkH2r8b4dJCTNV2E1NYp7UQng7YmfkEwnDEyvTwAlUOOVBED J9233WtSrPcJGAWlQwxe24PNi+8yo5PFJKK9e3L77J4kghkPbfhCDBibaYNbRSQuSOHx dj+A== X-Gm-Message-State: AOAM533aI051HCGtSMiMxqelNuWcwuCPcG9j2MlaEbP2a7cvVN9QR6r2 0ic/BgBacs2P08FJrwGS+YOTW5mXSrW2MQ== X-Google-Smtp-Source: ABdhPJx2GjPtL4rVDf3S1VaoHUCWY0p9Uz25swGN9yXxmyNDpebOzicT7ux5DLkp0w8elb0Oq3ErdQ== X-Received: by 2002:a63:6682:0:b0:3c2:2f7c:cc76 with SMTP id a124-20020a636682000000b003c22f7ccc76mr8544328pgc.253.1651607363262; Tue, 03 May 2022 12:49:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 38/74] semihosting: Cleanup chardev init Date: Tue, 3 May 2022 12:48:07 -0700 Message-Id: <20220503194843.1379101-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609417833100001 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 --- 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 c2919579fd..009b660588 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2019,8 +2019,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 bool have_custom_ram_size(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 Mon May 13 15:04:02 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=1651610183; cv=none; d=zohomail.com; s=zohoarc; b=g933IEAHco2A0wvViLkqOfYHWzHanU8MKkj7Bq+aon0Ehwxg25uQfJp8aE+OBLTELd6EwT/C1zif7rPHrnNZHBB/PE1lxa+esxPdPt2o4i2eVTOXFJoWFJPFrRU6ufTqMp2mvJpMsuxjZ+lPwJ/h2Diw4SbgPGJo8tQtJFsHICg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610183; 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=lcS3gqOfdxLDAXhKwiw5xBkYlgh8GMrnzZDIEEt7LxnZnQ9mjlbvxb+XhpaPIn/WktNLqoorRYEacW9NLm3U8TwHq2SfSfs2fAr/+c+9BoyekOxKI+iI71H25O7AwKzJhIDHowi0E/JNuZmzILcAVKFJXa8lOKJ5aLHZBvF15Ho= 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 165161018380867.21216269986746; Tue, 3 May 2022 13:36:23 -0700 (PDT) Received: from localhost ([::1]:57866 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzFs-0003li-D1 for importer@patchew.org; Tue, 03 May 2022 16:36:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39516) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyWY-0002NN-1v for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:30 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:52883) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyWU-0003dI-RY for qemu-devel@nongnu.org; Tue, 03 May 2022 15:49:29 -0400 Received: by mail-pj1-x1034.google.com with SMTP id e24so16250405pjt.2 for ; Tue, 03 May 2022 12:49:25 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id p11-20020a17090ad30b00b001cd4989fed3sm1712383pju.31.2022.05.03.12.49.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:49: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=U2oK2ipOEqoaAfOulrRTtOQB2zK3TVTPXCClS/WGFgs=; b=am4G/MPvBfaGx4cDAOFyEwqqXcKc6dzYNglM1D6b9dwH/PFw0amtqe/c9TTT3GVXYm agB86Bf4TNjVY5iBwZOLeCIuPL+lnVlYvHx/9P0SCpwAJmxnyj9cb2CsJf0CDeUrjMop 5IMAY3mvnERzDv3zsoGuW0EDgRqatjBFRuSe4U50vY3kJ+GROMBNDEJuRB46VEKSl3+2 kM81i4N9qcN10osIl9evCD4k4Gx62UAjw2gP5JMKRz2mdKLLFDukawwrzwwrCsNNnn7a p4RDY1NdF+ElJ+AlMGw/CXwIzkNly9/dtPb3ZveqGCxng/hChGKs7EcsyG8IIplJd9rO r89A== 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=3RZJisB/RNwCrys3dIWGVKaEptUkrImBvoAuiYBEP9XWR+7KHrmKgd1Gvt18QbDB/e c4zr4GPweR5qd0jsrt0yXcBQm7eLRUXAwAsSlnwh0CtnPoqLeslA7cQPx/2SRzxg/G6N q/U1dTGjF1HChM3pTU7YMkyiDtrgyZD3XNJKxPDBjQhw5w0dYka9OKUPiiyZwWZrovhj 0riS+njP2h4jCCfhVzYHWDdATn3A6EespH5ODxHe+whhz/PUvIRoEU+j/sG+pFTYZvu1 D1Pjwe/RbHha0Z8jWbHmkZkDQ8r+iZTIQGYBV+uj0pGGeJRYfrEC6kgH5epkv06PeV5G mh7w== X-Gm-Message-State: AOAM530mxbjE2pkTCtHKk27ZjiSnJJF0g085mt4V0wxZLFO63c1lqWbJ 1+zmNqAq9pKu5HeRKXIVxW0tkT8ZCxf/mA== X-Google-Smtp-Source: ABdhPJypQDtTIvsmATA2+EVS8GpZ8aO4i1/3juV7PTRVZSJrdZzvruRDQSlEj/VY4v+7UJk9S8CDag== X-Received: by 2002:a17:90a:8b91:b0:1be:db25:eecd with SMTP id z17-20020a17090a8b9100b001bedb25eecdmr6459833pjn.10.1651607364013; Tue, 03 May 2022 12:49:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 39/74] semihosting: Create qemu_semihosting_console_write Date: Tue, 3 May 2022 12:48:08 -0700 Message-Id: <20220503194843.1379101-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1651610184941100001 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 --- 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 Mon May 13 15:04:02 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=1651609447; cv=none; d=zohomail.com; s=zohoarc; b=fckFlCjHWmw+Waox8sPNyEZedCP5wYZWkXBBr+HZZ+rE+wEY50ZxhblMz9nTu51jPCYWZUKGhQP++t5SDjoeZqo8Yl8WumZ0f0u8lJMP4YrYDNHAGnrHgIDv+aZgKwThJTKDGJsX0UmKsZITK9xVbohhIcmK5AShBb2U/Xafl+w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609447; 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=6P93sk4kWHKA40484oabYrAFLKtkFM6g8eI+ZgtYvkQ=; b=c1vndS1n94QoMCgx8bj+M/hthfd0axzQvcY4GrhnUDACq784QtsEK3E375/dsqgwqN2La8LUUnOtpVhBj2Vp3YaR08wvXsr7P3p83JraRfT+HMKOm7oJcuyMVP9TN3cmKs7IH82bozkg9lfId9Qm+KFHOihG4wibkPxIIfTZCxA= 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 165160944771125.4920630479362; Tue, 3 May 2022 13:24:07 -0700 (PDT) Received: from localhost ([::1]:34830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz42-0006pJ-Kn for importer@patchew.org; Tue, 03 May 2022 16:24:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40096) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZQ-0007Vr-PT for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:28 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:44603) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZO-00063S-Qd for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:28 -0400 Received: by mail-pl1-x62e.google.com with SMTP id j8so15861766pll.11 for ; Tue, 03 May 2022 12:52:26 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=6P93sk4kWHKA40484oabYrAFLKtkFM6g8eI+ZgtYvkQ=; b=FaVJSf4lhQGEG9LjlgjqN+zXUQ/zDHW77ozJWTg/zFz3q5Q8htvfTPt0xlcF9oZIm6 SC1yIzbEQWSR85Mc2XusTXWb+eBCc1kGQ9FfEErwPpx7CxItrRuSeVCXkZPizXeju/sG W5T2DWIJZfoebroU1UC1JsMKXZdV6JbfAcs1bCHd4ZIbFrkD5AenXorRoR4mxNidZ2Tr bvuYxtD6h1rzzpUjY49LMdmG4SQuVFDQE34Q/HqjjXIiRMwtZE7nrrdsY9NKVtihoChT 6H2DFAazHicxtrEbc26UsXluUxS4/1jULlKqqQiDrE6heb+OXC2mk7LUl/QkvwseyGkq d5HA== 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=6P93sk4kWHKA40484oabYrAFLKtkFM6g8eI+ZgtYvkQ=; b=lfDOiTtEImZgo5DrK6rsnU9yop51z5CaONPHPl0fn0FcSevFn8o+BP2CibHoWebrk9 46O1pxevO8wBvPS064RyWBahwe+r3+8y5cL3IFCK0d6HPd9pB3Zvrs46TRe23JmSbovy Ykbq7KDBSJY84l5PBH54jRu5zRTlo+BRwCXmcbRXGsXfmV5rwQejnzRH5B3tcIDtNgoG vwhSAvZlnSmxqlUlcyCesNvluSoLihXuhyXwO3pRhpMvIMYzuc433rF03v/mmm7hJbcw hivz8eWzzwqLxVvLSyJFKFSLaf1IiKN6Bq0E2mG+fuScZqKl21jnpfJi7ZXStvR+0G9D dJFw== X-Gm-Message-State: AOAM530xZCrAcrpURSMf4KM0DDqiYkolSaxl27nMpGRcKJ64sgiXdHDu bCgUaVkF0HTuDfx1+PMQ4ohu+vapAVP59Q== X-Google-Smtp-Source: ABdhPJyiH8ew6Wp9bkib7IptU18/QK963L2QRwUf0LppwMhZRyfPT9DUDQ88BtbJBwY3UozdY+jDEg== X-Received: by 2002:a17:902:bf07:b0:158:24d9:3946 with SMTP id bi7-20020a170902bf0700b0015824d93946mr18231803plb.28.1651607545472; Tue, 03 May 2022 12:52:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 40/74] semihosting: Add GuestFDConsole Date: Tue, 3 May 2022 12:48:09 -0700 Message-Id: <20220503194843.1379101-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609448055100001 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 --- 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 5aa2722cb2..5c3e7cd538 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 4c934654cd..aa4ee47649 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 @@ -607,6 +608,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. */ @@ -638,6 +689,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: @@ -667,6 +719,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(); } @@ -702,6 +757,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, GDB_EBADF); @@ -742,6 +800,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(); } @@ -765,6 +826,9 @@ void semihost_sys_isatty(CPUState *cs, gdb_syscall_comp= lete_cb complete, int fd) case GuestFDStatic: complete(cs, 0, GDB_ENOTTY); break; + case GuestFDConsole: + complete(cs, 1, 0); + break; default: g_assert_not_reached(); } @@ -790,6 +854,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(); } @@ -811,6 +876,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 Mon May 13 15:04:02 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=1651610262; cv=none; d=zohomail.com; s=zohoarc; b=fjk92nQ+pvQbWFJwH7R96g5D4TVNhKWW2+3QgI/iAr5ugQ5306dIOPYpwdIj/MCOeiWOQt8v5YkhG2ncp8viu2f96B74QDZtEdIZcTxOls2PT2fSFDfe/IRLDG/9PAn/rm0UkTS3ZQvZ16tP8yLyx9+N0PhO2ataTbOpNTW0UTY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610262; 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=Zc7fcb162n8E46W3M3k2gzkfPtgh3mAbYwEb/eTCO3o=; b=F8PTqff84HzG4y6RsN/YR59K56kdPSqGkYMvukFpxAvOlhXT8G5Arc+nMExIZ+04/a8x2k3t0pr0nPAQKlQOSMwmugOVOO6KCBXQPP8mIpB5GFKI/kUchlx40pVeibc45CBECCXG35q09NaCEvzrx/U32kIcZ3+8OK8gkIq+Fc4= 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 165161026237399.59052575119074; Tue, 3 May 2022 13:37:42 -0700 (PDT) Received: from localhost ([::1]:60760 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzHB-0006Ie-4K for importer@patchew.org; Tue, 03 May 2022 16:37:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40126) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZS-0007f1-3w for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:30 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]:41528) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZQ-00065g-5D for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:29 -0400 Received: by mail-pl1-x636.google.com with SMTP id s14so15886650plk.8 for ; Tue, 03 May 2022 12:52:27 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=Zc7fcb162n8E46W3M3k2gzkfPtgh3mAbYwEb/eTCO3o=; b=CVZ/4Ngh5/UvAosmCEZ8VjZW3s3gY+rl8DTU4ISd5YUFSlZSEuINedQPPc+udwCXRw kVg1tSl6CZ89+qWF+9776Ila84vJdaT5s9CJTKw0jfouWu9TJfMM8dVA6TbwzYGTdKcv JDGGqiuYhETSHLF9cmkckgUe9xsolR54Ye3VkhwmO9SZA71IDHxXZXHPT0ayq9+S24E1 dMv1ehkefq/jhqiyIJZWguzEUXK8EQ1TxEKDRt7Vva6Ni3rUlYfP9ONzIz2qOKKygNsc y9duzQ7al5FFcVJwM+B4LgVhrbyJzdmzyw/hLA6lbBwZsXWB6ORr3OnbKh4vbamiB+PR 3kSw== 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=Zc7fcb162n8E46W3M3k2gzkfPtgh3mAbYwEb/eTCO3o=; b=OOfnrhOARM6xjTU2jsGHpDSC16fMrcBJBa6lnNtHckV6JVwKD1Cdxfrtwi4y+6tD5N VMvoYpX9szgZpTzWZ3Iqb5eGVOdyPE1/j5Osa7i7F2B7OYRxSrio3/qHg3YoBfQEj4n6 SyIabL8If7kCk/NHdZRrsQe81i1B2Uq2tS2SzduZIM0SdpnvvkOvx65zUJsz525RsmSH P09apoGE0bptav0xAPXe/IdF/rm2S/MrXBQ1CyOpzLHOsHJnILu6RE8bHZq8+ftqGjg6 bM/4/0j8JnAXreS0I4tO1lD7/WzsBBHxXUt1u+HNMTylg07U0dJnF7rF0KzCT28x3hxM PSFw== X-Gm-Message-State: AOAM530TtsDRaFtCXoV+K6Xp01+qobKACODryrhJTqPGGaSuZ8Z/HXqs FSh4dchOPY8S8BJThrKDgMC9qCRVYdSEvQ== X-Google-Smtp-Source: ABdhPJzOWO0e2fDBj3FrHADB3ivx2drJrExqCC+RQfTC/A3/hKAKt1Q2Y9NXGlXQdBvnrP1/9W/eNg== X-Received: by 2002:a17:902:868b:b0:156:7afb:2ce2 with SMTP id g11-20020a170902868b00b001567afb2ce2mr18070955plo.27.1651607546478; Tue, 03 May 2022 12:52:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 41/74] semihosting: Create qemu_semihosting_guestfd_init Date: Tue, 3 May 2022 12:48:10 -0700 Message-Id: <20220503194843.1379101-42-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.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: 1651610263500100001 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 --- 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 5c3e7cd538..73d8235222 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; + int alloc_guestfd(void); void dealloc_guestfd(int guestfd); GuestFD *get_guestfd(int 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 7ca48664e4..7faf390df9 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 Mon May 13 15:04:02 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=1651609705; cv=none; d=zohomail.com; s=zohoarc; b=QzjcObMuh3a7CNjCKuPcB2YeSbGiO13d9J7NmNW3dwcCiZe5s82hpEP+IOraeKUfqzuyfVmFcjexlr2Y+1wzr9M2VyDl+zu42ksMD/5Bp15IVeMJkK9tdAbBQoNo97nN+4ILlcau2FAd0VQ0zl3QNu00oBGFoKttVkYnaTfl7T0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609705; 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=imisZyWOU+HOiAHcCce7P36gJQd/+JzsQTknZrdoLJI=; b=DIs+Inx/rsgQCHuimWwSHbF1jkfRkznGMwjQTVkYEmP/7eY0FIfqXQkVP/aVBIz9tZysqIYV8BXzAiVRmuUgCr8osLScjyzMgSF+gsQdprYasR6U2MueCrRNeDDaAlp1ajihAHzjXFP9D/p/L9LQu/h8xJeYiHN4bWq2xZkm1Ds= 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 1651609705374350.660811399433; Tue, 3 May 2022 13:28:25 -0700 (PDT) Received: from localhost ([::1]:42284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlz8C-0006e5-5Z for importer@patchew.org; Tue, 03 May 2022 16:28:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40132) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZS-0007i5-F5 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:31 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:41745) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZQ-00067g-RR for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:30 -0400 Received: by mail-pg1-x536.google.com with SMTP id t13so14802932pgn.8 for ; Tue, 03 May 2022 12:52:28 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=imisZyWOU+HOiAHcCce7P36gJQd/+JzsQTknZrdoLJI=; b=eAi0YPW01H5a0onB+LHOge9T2anERQQxVGLvF+6xcK9X3Vno8tfitnCe63mixRDxiB bq6mvX9THRspYp2MDfwAnlKiAQ75hD86P274d7+EzBLsBsKkGsBOe3SnJLuZ1q2uTuXq n/v5a1SuyKayplF0ozD+IQRc8q63SYaigcUf8djkplkD8n8248XBSSl+mudUbIGKNHbs 7AG08Ie/4XKdCpULyPVJU2+HfpvTV4R2mPlJx+7unjtrGRpkleS+RloU/NBFreCrS3o5 OUlGmS53NOjlmc8BjSJ2wvClYOUoXqjV5Jzm6ktQU15kigCI7IqonWrPEdqqI0cimXf+ DCOA== 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=imisZyWOU+HOiAHcCce7P36gJQd/+JzsQTknZrdoLJI=; b=BdZD3hLRdizjS51j4iv7IvizYvdBujuQ0Yoaspu+/FOzg0uWXD9lvOUtftO16/hjEV wKcjZj0vtkk7EFCpUnJXpp9oWeo6jjTMxR4D3Pcc87N+7ux3nIQ0d3dNi8zkdG2DwtxQ 1bR8+4BWTpAGyv9CIqI7iS1qFqXWhzOlZpI0Oxln/iLbYG5rKJWQhqMXmJDNFIwW8vLj S70WzAA/elH0C5QzFJEA3qAF4khJFolAADgtvF0qAjJKIGnr2UGlC5kEbdW8/2tyo0Kl PzHj5swNeeXzxVOGZBjTpX3JuPqaXxQt3a90pzeC4l8Ze5cuvDsZkiIDakoTsVQGq5VR 14vA== X-Gm-Message-State: AOAM532rZN52L6aaM6H62SNAiDzrkAhbyCe8HFrE2J/FtJ0YSHjK9r6W OXJ+0CEp+nzVhAwLgLlMRIZpSaYsXiOr3g== X-Google-Smtp-Source: ABdhPJyEMGnDpgAXCwbAgtV0GtcVOcAFCnYtl2FgU1r1shVTngHdy6DrZ9eKBG+wYetARbQw2hvxCg== X-Received: by 2002:a63:2b05:0:b0:3c2:3ed1:5fa9 with SMTP id r5-20020a632b05000000b003c23ed15fa9mr7681135pgr.220.1651607547367; Tue, 03 May 2022 12:52:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 42/74] semihosting: Use console_in_gf for SYS_READC Date: Tue, 3 May 2022 12:48:11 -0700 Message-Id: <20220503194843.1379101-43-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651609706934100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- 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 d60f7ed6a4..34d635006d 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -293,6 +293,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 @@ -418,15 +434,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 Mon May 13 15:04:02 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=1651610278; cv=none; d=zohomail.com; s=zohoarc; b=POcCHrnQv+/Lkd2dHKtghL0TQyHgVKSS00PDnaPO6TEcA6DvIN8zMuelvPJcDi4mfmLyfuQYQONb6SxrpanNd8kvPyp9RR0emX9hieDeOShY8ToxYu3wFh8eAIAFOxnqVIflrOQQ4aiAMptydJUa3uWcPeRvgx9kISBhEOMSymw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610278; 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=OuPQ5G9+kppu3GspUe2XHyinl3n08DHsjMhXklSdxDY=; b=TUjaC0dEuM/NG7RQOeVMQcQI4Yo9DJqvFY2RMgL835m5/RVzqknQc3GpEVr4CtkvYjtnmVkZRK3AepbiJaUbGuRjeQ22KqVmTQ2UiCjt9L/6jRo5GzdjTPwJGIrgcs8zHmnKuKaCP3G+IZ/qGSh5rKXQHa82LW3FPvq4JdNCnWI= 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 1651610278936561.2779108901572; Tue, 3 May 2022 13:37:58 -0700 (PDT) Received: from localhost ([::1]:33694 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzHR-0007Ck-Pz for importer@patchew.org; Tue, 03 May 2022 16:37:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40150) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZT-0007jb-CH for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:32 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:55202) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZR-0006DT-Mh for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:31 -0400 Received: by mail-pj1-x102d.google.com with SMTP id fv2so16244353pjb.4 for ; Tue, 03 May 2022 12:52:29 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=OuPQ5G9+kppu3GspUe2XHyinl3n08DHsjMhXklSdxDY=; b=CafpJ52OJRi616BOkfEVqfnuOE/xZg6qkgWPVJSRereVqMVVZC1khsJITQ4/SB3xMK o3kqWUCgnIKTKLjwkaFiCp4t/MKECW6zlM/kc5T3A7/SW1cdaXa1eiHvGeMJ2Y1iNMX1 fZD4fRSGlZ0Lqdc58WXMSFgEK0d0vpmUIgKP1mzsgsZdzB5M8YA8R+RT7IrQ2BMCEM/b I5w8g62LKrQQskFB/XmbiQx/vC9TxznBCGV3F4s1vydqzNu3vT8iQWaGaUBqIrNgZw14 mpTTOmctOSqkutB/SZReLbXjfx4VmJacZKZHJuab+tM3ijppNn1tnvVhrJWBtlm3uK6s +mbQ== 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=OuPQ5G9+kppu3GspUe2XHyinl3n08DHsjMhXklSdxDY=; b=c1K3oLybqxUAo6ar2rwvlPbG4Nw2LtO8rGY+N0TBltDvPfQ1YNLEPw+ou5axIIA6hw VAGBXSBcwKpcChPKI/eqdbxv+/JnMen6jUP/HrP6xkE6yq6+oGBNIN5vyJXE0x/5nFJj 5uLm2JM6E+nYe6IUsGlDWiYNB3eSvBMgXRBGNeoQG8QPqKtNdHUPo5aHPQx4actLNzJf qbLUhxDfbQExJEvLB47N1C+jyNvHz7gTTXq+FtJt7XfQNFtsxoqvjq7g6VNzDggI3JTK eJyTlrFUIKqUz0eL5j/PLdQ2uTShxNnVpCcgIh32/jO9ShIuHNzQFxms/EYmDVgIpyGt IoaQ== X-Gm-Message-State: AOAM530XydXv0ds30FGlZ6YnB4Ju6tPZwpbzBBsXxT5pdAEgpE/GFt0v 7HZqltT7lhgueEAt8oMckqBlCrSHx+S1pw== X-Google-Smtp-Source: ABdhPJySOJTm2zFQ0wFhfeZ6huphzMsjRy1zgeTrksZgldn66NgqDjYRjAhe7b2/egWg0ZRY/zeGhw== X-Received: by 2002:a17:902:da90:b0:15e:bcf0:cf25 with SMTP id j16-20020a170902da9000b0015ebcf0cf25mr2914727plx.40.1651607548358; Tue, 03 May 2022 12:52:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 43/74] semihosting: Use console_out_gf for SYS_WRITEC Date: Tue, 3 May 2022 12:48:12 -0700 Message-Id: <20220503194843.1379101-44-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610279442100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- 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 34d635006d..430cb4167b 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -230,6 +230,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. @@ -332,8 +341,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) { @@ -410,8 +418,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 Mon May 13 15:04:02 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=1651610496; cv=none; d=zohomail.com; s=zohoarc; b=DQdr/3QUnyV0rsQP4cGpaD3d8X8rIao8nNhqC2gAD+DiioFtaEope7ol4K9G4CiDIk0bh0hPHcFXEApVd6uQppDYUxZ8GbgBqHZFsJz44/jKnANSvPUDq3axLIbsX6zU1tdwz2fwLIYrEvZB1lCYvAgrb729luZuWlh5wvMqHks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610496; 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=WvYX+3ISDijDNKbDHCYBRP6bkBUUBIExhthHLPl77PoXO56KEbZZ0Ld8+QtodTEmHuoXR9KJk0y5mVRSYzA4oXfwgI0HJqKb5WlAHpMt94a62XlYDk0BvoVTQzK5bbykinQEGU+o2Q69Ab4AoDqiM+YRN5mB6+D0/frQe+7cv0Q= 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 1651610496960701.696152237399; Tue, 3 May 2022 13:41:36 -0700 (PDT) Received: from localhost ([::1]:41552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzKx-0005tI-V9 for importer@patchew.org; Tue, 03 May 2022 16:41:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZU-0007kf-5A for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:32 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:33363) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZS-0006Gc-I9 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:31 -0400 Received: by mail-pj1-x1034.google.com with SMTP id cu23-20020a17090afa9700b001d98d8e53b7so2552004pjb.0 for ; Tue, 03 May 2022 12:52:30 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=3j65Vrb+cTtoRUM0a2SN2E+0qaLnPvILTBqh1dXrOWQ=; b=jrHav2i+5I/qLGY9K9HW1GUG1B0v0tqQaw1sxwF8+hAXzl/nlrWcIhOBNH+MhU01jj ybi0bBD4d39hxFNlMrwfj7I2Jce4BDonJqnCvr+kLxPQXhSNoc7N6gTJmXXp9lvPKXqY 8A4X4Bzb8H6YFbH7gW8Xs82lEStXTeMOf4iTHs8nzmKZMsVmSDBudvNQu1nkr629NEMc iTL3WlJhoet6C+naIpnRPyzaJFoiJrJUqUCBxi1xFnrHsx1juSjFEZJHgOqwMonELOB7 rnp9rASI/j35SJed8jEf1Z0jov2938eOKB1WZ1S+b6hBEd7OIYXVQlxN4EkfF3gGXJJr Z1gQ== 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=nGlkYv7wLrVjoyQsLv2QQR2iri1ZrQWh9nW/+8p8NynNNAfACJw7JajPCpVlpNd+y0 l53vA7qx8lmeZ0eIE1jkbw8D+0tl607nitr8oOYzSXOOCXigFwztlUvu6DkFNnhlwfQr dNhPxmMzwoAKE9JG7hkLirY7ckbfuCPSRlsGJsC6X1mYEeW8V9QcCS8IUviGf6UktPaC +Yz2VxZOazbiYN/E1YuTixViMjW6rECVtBuKhS8elouKDY4c/usDcjVs1z2DXvOQUbG9 LAzA5ktVKMm2sK2NHvGRFhhKedKTeAf6za73WfWZzo65QUklqG48p67SFCdkrkF3UvLd OhjA== X-Gm-Message-State: AOAM530mt9Ty35BtCUFCAVGRA/NQKyM40UY8LFVQ1oX8O6UktTRENnab WeJh81EZNdZtsKr/BtX1YPtptWRzYlRh9A== X-Google-Smtp-Source: ABdhPJwMQmKXENmyF2BXZrzb5tZ0y9cP4jXyQF6JrkFrL5xpX4Fkr7Hy1pmU/eIPWGAzaRFPYwG3uw== X-Received: by 2002:a17:902:8304:b0:155:d594:5c04 with SMTP id bd4-20020a170902830400b00155d5945c04mr17582533plb.105.1651607549270; Tue, 03 May 2022 12:52:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 44/74] semihosting: Remove qemu_semihosting_console_outc Date: Tue, 3 May 2022 12:48:13 -0700 Message-Id: <20220503194843.1379101-45-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1651610498741100001 Content-Type: text/plain; charset="utf-8" This function has been replaced by *_write. Signed-off-by: Richard Henderson --- 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 Mon May 13 15:04:02 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=1651610760; cv=none; d=zohomail.com; s=zohoarc; b=ZAmhAUXZ1pspl81h00N2CJsyJHdtGOwOzvCdWoiCv/owBV/rlURpLVDogqhJvdNUY0kbSbAMKkuPEep/KxqrNh4pJoQMooiPBLlsrxbKAzBFIFaNrPXGIWc6d+XQYealrYcsaV6E0VOePmWLo2tok7SKVsUsMz63XNM1ZP0Acbs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610760; 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=WUEAwRDb5qP1q/+HL6ZwAjNwTCoe4kc7v8P7IB3q304=; b=VKMZVlo5QNBz4XxHrMlUM2yD8fdKdnnzO4a3N2pvJKCdOwfaNKz+yojO6ZUT5i9dKbz/I0j0/Bh/qC6AEXaqJqC5hgakbGwsiy3FSezt0rmOINyIq8lmbu0Mb79UhqseUGX4TXqZgoXWCberByyefjtLSeyyOn3qvWN5ZJpnh+A= 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 1651610760886704.0532366252094; Tue, 3 May 2022 13:46:00 -0700 (PDT) Received: from localhost ([::1]:49600 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzPD-000537-Lw for importer@patchew.org; Tue, 03 May 2022 16:45:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40180) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZV-0007mt-Ac for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:33 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:55205) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZT-0006Gw-O4 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:33 -0400 Received: by mail-pj1-x1030.google.com with SMTP id fv2so16244417pjb.4 for ; Tue, 03 May 2022 12:52:31 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=WUEAwRDb5qP1q/+HL6ZwAjNwTCoe4kc7v8P7IB3q304=; b=m8wAy9WckIp3wIFAFtgEOxPx2juQE7YbPgyd8WcRtnFEemxKCNbo9DVw7nBvcmMtrx 9m4KGAh2gAFenR0HagczRcCuVPoxMa9uDu2WJ/RjxR0ATzTHz74LC2nfxdgV5TXVrzaI vNMj7tSp88uJwwJsAzYl/93VHXKRWElntX5YVUHo5N8K3628u0RQ1pqgARMaGit8yZSu kUH2xecQc5vgLLcHhIx1qQCdwFAqDRmVkCMC/MBlFEisZXEJcGtb4FA9y4VwsVWnJpUD 8PV8OW5PJz78WdL6GoMijO20/QU3O4wk3uqSYKZLmXO94tfLidmPDlCdZfPypRSPyIH1 qMYA== 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=WUEAwRDb5qP1q/+HL6ZwAjNwTCoe4kc7v8P7IB3q304=; b=IUBbU0mhYimupL0m0r+G3A+FYyOH4XSGOfX2sAeZpMozIdIHkUuTI/verXh2c9PKIr ZJZIZAFx2Qf1wAAy0zI2MauiyDsnT8w82bJiwFOgIJHEKL9azBflDaONNO2oTkiR5fy3 spN0SRkOBatpZiuaKhdKlUMsvwH9TY1kL+WX6KpcxEKdUyEDSEW404jbxwYjRC/488zV vkSpf4R3DFWcbbv2NKQUfGHJX4SF8SVmRqn3wDw7RrdAF8+OyY+5hjb2Xz2VFxiG++7n cR1SzAWp+08hVEbPaxLMrq8f2AuO1Jm24GAgf4IrNdnxNIqGs5LWyfpbLGDMD8+l/rlQ h81Q== X-Gm-Message-State: AOAM530iFWseTGOIC4oEFqZ6WArQHyD28+P3e985LdNvXOn6SJ3xnXct fMS6b2kXvSJ9IsuGFoi7INpURsjGJ+NFEA== X-Google-Smtp-Source: ABdhPJz88941/fanPcwDeUW0Aicyt5/bUoNl4ktQztnAEbz1fK4+aGzIcPRIcXlLstFcwLC7SVlGKA== X-Received: by 2002:a17:90a:af98:b0:1d4:67d4:d122 with SMTP id w24-20020a17090aaf9800b001d467d4d122mr6495288pjq.166.1651607550370; Tue, 03 May 2022 12:52:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 45/74] semihosting: Use console_out_gf for SYS_WRITE0 Date: Tue, 3 May 2022 12:48:14 -0700 Message-Id: <20220503194843.1379101-46-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610762723100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- 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 430cb4167b..3f8e1b70d1 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_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 Mon May 13 15:04:02 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=1651610694; cv=none; d=zohomail.com; s=zohoarc; b=AzIOcQvJCd5Nky6jEv6DF2mZHSGfvOrT7K9FudVIBRvli9gDV6KNfRBCwGTwn09IVgSD4XzgeNnVQTLsKHTPR3waB0P9nmDCZz/SGyxwbjIJ43bwnJRHz1diX1cms09oXT2Udf/io3JVGHoXK0I7EBvAphubx0BzWB2oKsXcxFM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610694; 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=conzQJ02v10FUI5gh+s44nUoETDrEvcx5MLwMY/AVKC6mjBiAupmr4Rh5xHs7WGaNniaAei6yfgkFVr5+Xb9lu5PtipcNWQZf+mVICHUJBDKrTuj4CCj9QUw/ANbTXC6vBoVHkQy4P8iz6ATtBTTztS4aWdTdqnxsRTXpEQfhfk= 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 1651610694937363.84565534959836; Tue, 3 May 2022 13:44:54 -0700 (PDT) Received: from localhost ([::1]:48478 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzO9-0003yS-72 for importer@patchew.org; Tue, 03 May 2022 16:44:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40192) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZW-0007qU-6B for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:34 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:35343) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZU-0006H5-Il for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:33 -0400 Received: by mail-pg1-x52b.google.com with SMTP id a191so2224580pge.2 for ; Tue, 03 May 2022 12:52:32 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=G8jUXILSyQ3ZGWS4huZP/MGa3C/uuyreOxdJ2Jh/tu0=; b=vfWQt7phsrg4z/+cQTmB5XoHiL5pR35cSpU+J98bjl3RE4q2+KtUDcXKn92CMHIh/I X+dgh7H/9Jq5LSlw+l51+phSUwvx1dEKr135ZJuYCdfhz+zDWtZRJlxX108n6g97RIgh G6mo8taPkUVgfo/50Kum+G1y3hsrkdjCRhY/WyBpYQwL0H6na4/3LjHFibaBSCWbFdFM j7g65DTrbN3tYvU3vOzVGpJsoawefCkG8dtJnB/ThOIYrakzBh6i8vtqNExSa6bZboyH ms9gOzcI5DOrbIdSGo1EAJtogbXJIsGQv4ZNSdocr9L742X5zA8ncxjNIEJbmdYF/gE8 5mkw== 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=cuyrUH5UUNmXpQpoLxFiAwy7xw6ct5xIcmkS68LZtk6Stwj353sFyZ7LM7661QWvDq p6hLhGniClvmEMJgM7AaR7tGRLddXjPLcD6ZHGfHM99MUrgSqWTTaFgJYQfj8qtFQbDf n074dsYF+jx8ajfvhxw0ua2A2u0DS5W3YwIz7MPNmXp8uCGDFi6KaG+vmuxrilHjnRwC S8dhfNCt4IYlb5igANkf7ybLcMXDQ8h2wyIqn+D2E83pnYRNObMurAlmP+42LWopr9V9 F0Vxtxtia/LDDkm2zKoDyH0s2RLqD+xQvqzWgg3S1LMXUR3gljo7ivaRGgexZozihNWp J1Ug== X-Gm-Message-State: AOAM533MYOVwZO6qR2zPDFbVEMCQVltKQ5k+7yx90RV0s1AZUQ5T++Yf gDHICQrxvq8PxyIMgYn0/DJ0I2WPENXnLw== X-Google-Smtp-Source: ABdhPJzfkXkRxfNNWDyhjDL6hSOl2p5doz5626XwIicYDkHayRyhrHOoTlb/m8UjcFgxJFjau19xxQ== X-Received: by 2002:a63:f1e:0:b0:3c1:d54f:fc47 with SMTP id e30-20020a630f1e000000b003c1d54ffc47mr13777583pgl.51.1651607551231; Tue, 03 May 2022 12:52:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 46/74] semihosting: Remove qemu_semihosting_console_outs Date: Tue, 3 May 2022 12:48:15 -0700 Message-Id: <20220503194843.1379101-47-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.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: 1651610695917100002 Content-Type: text/plain; charset="utf-8" This function has been replaced by *_write. Signed-off-by: Richard Henderson --- 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 Mon May 13 15:04:02 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=1651611037; cv=none; d=zohomail.com; s=zohoarc; b=Ugh7COUIUHlF8RmEynJYDZHjdeiFknYDeF38S6R9i5V0r5PSSyopVgj4fcShynbngLgH7I+6FBL6bYX9XuJT0tOZVgLkk4/qXiFRr384g1etV20mTWby1iJoDSiaO1vYIUXgMD2Coc7vkLt4QqVgVvz80MJCWUAzxQzzxlDPW2M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611037; 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=yIETyNF8e+iDYubG7UAr54h79EzcA695Ph0Ym5jO9Uo=; b=YJuVhEPDTbpQsCCdX8AcQbvI9J/VlnqohQAS1UDiV1atCOQkNZ4NJLn+V4AQUCg3LGAozCOwfp78L31hlUtAyntzWcU2A4pFZFrjuk6jjsivE4GEY9lltC5yXb77f3Uj5t02Rd40dp/VgFuA9r6LXNn7aeF8HC424wHIgjnGfUI= 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 16516110377461009.1457111080941; Tue, 3 May 2022 13:50:37 -0700 (PDT) Received: from localhost ([::1]:57440 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzTg-00034p-P5 for importer@patchew.org; Tue, 03 May 2022 16:50:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40210) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZX-0007vh-7z for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:35 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:45861) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZV-0006JU-Gb for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:34 -0400 Received: by mail-pg1-x532.google.com with SMTP id 7so10919889pga.12 for ; Tue, 03 May 2022 12:52:33 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=yIETyNF8e+iDYubG7UAr54h79EzcA695Ph0Ym5jO9Uo=; b=njdA2acRTXfq0e3zkWlru9Um0Vlxkk66C2P9Ew0iF6WhWmOhyew0yKSSwgqokkinsN f87EUw4aEmADhyvCVjysRwx/BEh32Q5d0zKsHhGW2A96JtoqfYFvVGDJ+ZV/x/O2B3Uu PI2LXIDv/fZB9FoEhgCAEHgxA3XAhWUoqbvR7Db2mRj1Zhg1YHSZMeO+f3xAhxep2+0E rX2MmWFg9+XGh2H07SNWxNkFH+0eogzr7t/0SbmRiWovvEsHekCfCO/nu7Kwj5cLjndp wJNYzqxCYlbfoS6c5GOZAeimI43RoW+/T9UjY0k8dTh7mHy416C9AR//pjo4sd5n7T99 nTxA== 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=yIETyNF8e+iDYubG7UAr54h79EzcA695Ph0Ym5jO9Uo=; b=X99kyDHJyZN0ZbPUKcQHpgPyvp2vs9qEmOIvgB0hM0ryOEuCkLxtf0wUV6lRKB3GTp 7dhjL/wO/216e+s9994OkMAcQLE7xUSe0ncLasXmy10vC/uGi+fOu5wohRt9yyIjPK7D +J2Qq8aFoghAluiUAaU0oRjzxMSVQfFW1YcP+txxHVyiaUcg09L01bYrISTB8vH150dK 2FVVdhRAG4lpNmsMppPBS8F72hCA3IiIuj3ZctJJawc0a1j1vuI+DM3biFzHlDn8o3b9 DOmuOdrfOCqiklrUwuYu1HZOOvCgZuDYP65PKYQJRYLNwBCdyOZaYt0/6Yg+IIFK1uWv YBdQ== X-Gm-Message-State: AOAM532IcsHf0il89cArG2ao49KQ6tPwu60NrBOw15HT8aroF2P6PEJY 9t4ZTPw6NqiyI7rMfAjrlelnKPZFHZPQIw== X-Google-Smtp-Source: ABdhPJxNOeA5nOT2XLZrMGLXOM8QQfgWZPOi8EUSfypGz4Pxbiyu53YIQjKpgIKUbP1p4PrRO6OLVQ== X-Received: by 2002:a62:6c6:0:b0:505:6713:d584 with SMTP id 189-20020a6206c6000000b005056713d584mr17655927pfg.24.1651607552198; Tue, 03 May 2022 12:52:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 47/74] semihosting: Create semihost_sys_poll_one Date: Tue, 3 May 2022 12:48:16 -0700 Message-Id: <20220503194843.1379101-48-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651611038422100001 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 --- 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 aa4ee47649..1b87c37437 100644 --- a/semihosting/syscalls.c +++ b/semihosting/syscalls.c @@ -550,6 +550,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. */ @@ -658,6 +673,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. */ @@ -936,3 +979,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 From nobody Mon May 13 15:04:02 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=1651610461; cv=none; d=zohomail.com; s=zohoarc; b=lm7qUA89MAbKrfOOmuRPA7rPvASEdherwcKDMEpdTKX++8kFAA2iJ5YqcPZLh3rSM7NPHUw2XXYXYvKEishrVvRBBY4tjhanUBb1GknsdYHDbYVQXmCyJyDlPJHxFuc49mQNlbo9fFLDYm7EXOgYHnczbLncEGkuP2lmfnnMsnc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610461; 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=wppbnjnSPA38ZbueUEu4qjUCfA8mLgkrGrV5gfq7DgQ=; b=eUASDa7tvQYo3kQ1E/Kwync3aPLV7vqsf5ITsFoevC4Nuh8m2atLQ2YyrslPtKRAPz1nUq3Q4c8AElMPmggjaTaIYduD0c8GeKDcssisKgarVuvVgneQI0B+5KJocaz5rwEOjFPSwOCMCOV7mjJuYdjef6eJXnSU/lnLm+KdWew= 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 1651610461964805.7548011695828; Tue, 3 May 2022 13:41:01 -0700 (PDT) Received: from localhost ([::1]:40512 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzKN-0004xn-EH for importer@patchew.org; Tue, 03 May 2022 16:40:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40226) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZY-00082r-A8 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:36 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:51894) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZW-0006Ji-Du for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:36 -0400 Received: by mail-pj1-x102e.google.com with SMTP id p6so16255722pjm.1 for ; Tue, 03 May 2022 12:52:34 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=wppbnjnSPA38ZbueUEu4qjUCfA8mLgkrGrV5gfq7DgQ=; b=F1Sb3G8Fjs8G3ejJ3CdntYiRLb6RIai5QloswbaxCxNVeEo/iCYnHVclSOjU2eBm/n cTHzD7k0rxrHggiBmmgCyFr4Uo0T1npYb2VFBG4dxOCXIaM66AItDycYT6lGw0WB8i8K v0H7m8OaUw9rrWu9ZXVFPsGSSYpFTAAvnj0rs5cukwfMJtZEL4uJvZDSeA08dtIKqFRD IUqHgW7gigODgarEY8LADShS0BYf00pFLQWrdbahPUJra2abshjA4Spuu6EyWUAu/iOF ty+wyKwnZrqdHYZzMjlaRE+mHzUcqmCIT2iJHmflQyfC+myCRkT7JMx1LavUtZ0I2NJ6 wb4w== 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=wppbnjnSPA38ZbueUEu4qjUCfA8mLgkrGrV5gfq7DgQ=; b=xXTd+nDjp3BHG64JOrvraqTBxTX/4wDcsZ9WvG+XQYZwTknIwS0mtzOGbqJpJ17IoK Sh7cTqD3ScMxPXYrJ2cFNTPSErIoAxdosO2yMy/5LVzI7+QRptazFIV7jzwsI14rVpbn EjAqzwbz3WYhIATvWzCGwTZZHUABtpy5pF3tXDnRSnU2uJxPwhbMvf+vsy7Dk7nVHce1 chx2fVAGmUtWJQrl3PNd48IwkF7LYSPAj7j6Vivq4huTwR5b13n9ZYTFW5wgNnCoGn/O hDG4JZM40XbozekWpDCnHPuuU5vLsSs+KWYNTTVrUZD3WHeed9U3a/3LsKEOejIOpUoc 4JHQ== X-Gm-Message-State: AOAM530VNs3xjOmV+Ud+6PvljidykOrd3OuytQvVmI8F2i5DFipzSrME IwHmlIf27kaJcd3OiI4vOeV77lxYYWvpSQ== X-Google-Smtp-Source: ABdhPJwUUq20opwTC8fbvnL30nLUDX0pWyS+fnta+ROAjoiUDJBwPc7Oe/XukqlQ4/zdtblqtEQb4g== X-Received: by 2002:a17:90b:33ca:b0:1d4:d5ab:40b0 with SMTP id lk10-20020a17090b33ca00b001d4d5ab40b0mr6571089pjb.96.1651607553199; Tue, 03 May 2022 12:52:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 48/74] target/m68k: Eliminate m68k_semi_is_fseek Date: Tue, 3 May 2022 12:48:17 -0700 Message-Id: <20220503194843.1379101-49-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610462557100001 Content-Type: text/plain; charset="utf-8" Reorg m68k_semi_return_* to gdb_syscall_complete_cb. Use the 32-bit version normally, and the 64-bit version for HOSTED_LSEEK. Signed-off-by: Richard Henderson --- target/m68k/m68k-semi.c | 55 +++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index 94deebf09e..5b4c51957e 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -93,8 +93,11 @@ static void translate_stat(CPUM68KState *env, target_ulo= ng addr, struct stat *s) unlock_user(p, addr, sizeof(struct gdb_stat)); } =20 -static void m68k_semi_return_u32(CPUM68KState *env, uint32_t ret, int err) +static void m68k_semi_u32_cb(CPUState *cs, uint64_t ret, int err) { + M68kCPU *cpu =3D M68K_CPU(cs); + CPUM68KState *env =3D &cpu->env; + target_ulong args =3D env->dregs[1]; if (put_user_u32(ret, args) || put_user_u32(err, args + 4)) { @@ -108,8 +111,11 @@ static void m68k_semi_return_u32(CPUM68KState *env, ui= nt32_t ret, int err) } } =20 -static void m68k_semi_return_u64(CPUM68KState *env, uint64_t ret, int err) +static void m68k_semi_u64_cb(CPUState *cs, uint64_t ret, int err) { + M68kCPU *cpu =3D M68K_CPU(cs); + CPUM68KState *env =3D &cpu->env; + target_ulong args =3D env->dregs[1]; if (put_user_u32(ret >> 32, args) || put_user_u32(ret, args + 4) || @@ -120,21 +126,6 @@ static void m68k_semi_return_u64(CPUM68KState *env, ui= nt64_t ret, int err) } } =20 -static int m68k_semi_is_fseek; - -static void m68k_semi_cb(CPUState *cs, uint64_t ret, int err) -{ - M68kCPU *cpu =3D M68K_CPU(cs); - CPUM68KState *env =3D &cpu->env; - - if (m68k_semi_is_fseek) { - m68k_semi_return_u64(env, ret, err); - m68k_semi_is_fseek =3D 0; - } else { - m68k_semi_return_u32(env, ret, err); - } -} - /* * Read the input value from the argument block; fail the semihosting * call if the memory read fails. @@ -149,6 +140,7 @@ static void m68k_semi_cb(CPUState *cs, uint64_t ret, in= t err) =20 void do_m68k_semihosting(CPUM68KState *env, int nr) { + CPUState *cs =3D env_cpu(env); uint32_t args; target_ulong arg0, arg1, arg2, arg3; void *p; @@ -167,7 +159,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(2); GET_ARG(3); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "open,%s,%x,%x", arg0, (int)arg1, + gdb_do_syscall(m68k_semi_u32_cb, "open,%s,%x,%x", arg0, (int)a= rg1, arg2, arg3); return; } else { @@ -188,7 +180,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) int fd =3D arg0; if (fd > 2) { if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "close,%x", arg0); + gdb_do_syscall(m68k_semi_u32_cb, "close,%x", arg0); return; } else { result =3D close(fd); @@ -204,7 +196,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(2); len =3D arg2; if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "read,%x,%x,%x", + gdb_do_syscall(m68k_semi_u32_cb, "read,%x,%x,%x", arg0, arg1, len); return; } else { @@ -224,7 +216,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(2); len =3D arg2; if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "write,%x,%x,%x", + gdb_do_syscall(m68k_semi_u32_cb, "write,%x,%x,%x", arg0, arg1, len); return; } else { @@ -247,12 +239,11 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(3); off =3D (uint32_t)arg2 | ((uint64_t)arg1 << 32); if (use_gdb_syscalls()) { - m68k_semi_is_fseek =3D 1; - gdb_do_syscall(m68k_semi_cb, "fseek,%x,%lx,%x", + gdb_do_syscall(m68k_semi_u64_cb, "fseek,%x,%lx,%x", arg0, off, arg3); } else { off =3D lseek(arg0, off, arg3); - m68k_semi_return_u64(env, off, errno); + m68k_semi_u64_cb(cs, off, errno); } return; } @@ -262,7 +253,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(2); GET_ARG(3); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "rename,%s,%s", + gdb_do_syscall(m68k_semi_u32_cb, "rename,%s,%s", arg0, (int)arg1, arg2, (int)arg3); return; } else { @@ -282,7 +273,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "unlink,%s", + gdb_do_syscall(m68k_semi_u32_cb, "unlink,%s", arg0, (int)arg1); return; } else { @@ -301,7 +292,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(1); GET_ARG(2); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "stat,%s,%x", + gdb_do_syscall(m68k_semi_u32_cb, "stat,%s,%x", arg0, (int)arg1, arg2); return; } else { @@ -323,7 +314,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "fstat,%x,%x", + gdb_do_syscall(m68k_semi_u32_cb, "fstat,%x,%x", arg0, arg1); return; } else { @@ -338,7 +329,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "gettimeofday,%x,%x", + gdb_do_syscall(m68k_semi_u32_cb, "gettimeofday,%x,%x", arg0, arg1); return; } else { @@ -359,7 +350,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) case HOSTED_ISATTY: GET_ARG(0); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "isatty,%x", arg0); + gdb_do_syscall(m68k_semi_u32_cb, "isatty,%x", arg0); return; } else { result =3D isatty(arg0); @@ -369,7 +360,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_cb, "system,%s", + gdb_do_syscall(m68k_semi_u32_cb, "system,%s", arg0, (int)arg1); return; } else { @@ -427,5 +418,5 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) result =3D 0; } failed: - m68k_semi_return_u32(env, result, errno); + m68k_semi_u32_cb(cs, result, errno); } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651609949; cv=none; d=zohomail.com; s=zohoarc; b=dND+cLWpFO0JonTZlgZrnzC1zYCorHkLsIcLRtYp1J0IH7h9hReOeKbT2w2wWDuzfDuqK1zqf6YQTQdHUnNz+C+26ND0/coGVWJpxdu+DFVPVxwQ+Ikhs/i/vE+gWyQjZSsf7mQtA1tY/TwFyG8TJVewbE65TasQ78bKlJMUfaM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651609949; 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=V7t75AdkHW0PfbXkAsxv9MftHWj0Q+Sv53bh3Cjx9bU=; b=PDU70MmHMTIyNDHqWDZErR5G8AzhY5j5K+vgImGKSd70bWTVctjEll7PtiOjMvX3yaKWEE5jnaKtqvbEcElXoLeWiYO3LdL3ALrkItaijfME5tt7g0n4bcDPP2SRNkwyWJrsm3Ybbg+U7t/x6KhXDB64moA3xv8aX9hyX3b4uC8= 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 1651609949222305.56359700587416; Tue, 3 May 2022 13:32:29 -0700 (PDT) Received: from localhost ([::1]:49852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzC8-0005bN-5K for importer@patchew.org; Tue, 03 May 2022 16:32:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40242) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZZ-00088A-7J for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:37 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]:39629) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZX-0006Ju-G9 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:36 -0400 Received: by mail-pf1-x42d.google.com with SMTP id v11so6100304pff.6 for ; Tue, 03 May 2022 12:52:35 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=V7t75AdkHW0PfbXkAsxv9MftHWj0Q+Sv53bh3Cjx9bU=; b=kP2ub37soMbISTYZmNSoTeOIKjTqgsc6T6QH6Mi4kduOyp06oeMxlIbnoDCuW9is7M kMQWX+n1m5bBv5Nr8esseJZWFb40+CMcBhfs4mrRw88sjH5sDtDB2wzPbvyFeuv4IRlI QvMjg7kahaVd6oT0OCMRNg6pOxpapb2LvzZ6IaBkPV7k3H1ePG1+2KZnf0Oz4A7q+m6R 47UhyQXwRkg728RmMqfYpOuLDYPIooQV40cCVFW1aM3bIMpB4a2USNHkrxMaT0hxUvuD hzs2RBjTl02XxjsymnJkUMD57JkN/BLdmtFrizPg0Xq08e5pG7HwN141Pj9HhLmDVJe5 fccw== 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=V7t75AdkHW0PfbXkAsxv9MftHWj0Q+Sv53bh3Cjx9bU=; b=kyCgjhd6tWraIGcZUxDO/HgSBW9JGrjOrAcxFzmZglUg3/Ir+enzeIC4yYYUJTeHhi E2BWNy75/oFEKDJRefzumPZoD1MStOp2Z5t8br8QAVdTF7EbFjoGcSKHKOI2SmCvzLHf EyGMzw+HkgffCiw3Mozqvg67G8/n5XA5HFs5xpRPlw1owqOx2vmh4275Dgxy5DtSaaws +ooRIPXZeKr+3vdACZq/KtHoxqHr/v7ukpBU9OlMSr9OFYtlc/v3Ql46k6mO3u5PQLhC +rxruWi7LUG20KwIQFS49eAdxANa/KuALLtrhnz60B44ecM+SH7abE4HC5cTq/BCiJG1 tvnQ== X-Gm-Message-State: AOAM531unzUZ7RFA+dq/TlXS6GUFG6zE0ceu54yj0ZMAvG7fWGqXIFqT TuY4cchAJbxbTLNRG/JTrkhlQzdurowoaQ== X-Google-Smtp-Source: ABdhPJyqnmNw+xhPTXGqv3uC5+zPxRGQC80LYt4mH/w7JBb9UmD7e3OqKzQZD+Aur7YxEIm33+iJoA== X-Received: by 2002:a05:6a00:24cc:b0:50d:58bf:5104 with SMTP id d12-20020a056a0024cc00b0050d58bf5104mr17686124pfv.36.1651607554017; Tue, 03 May 2022 12:52:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 49/74] target/m68k: Make semihosting system only Date: Tue, 3 May 2022 12:48:18 -0700 Message-Id: <20220503194843.1379101-50-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1651609950597100001 Content-Type: text/plain; charset="utf-8" While we had a call to do_m68k_semihosting in linux-user, it wasn't actually reachable. We don't include DISAS_INSN(halt) as an instruction unless system mode. Signed-off-by: Richard Henderson --- linux-user/m68k/cpu_loop.c | 5 ----- target/m68k/m68k-semi.c | 37 +------------------------------------ target/m68k/meson.build | 6 ++++-- 3 files changed, 5 insertions(+), 43 deletions(-) diff --git a/linux-user/m68k/cpu_loop.c b/linux-user/m68k/cpu_loop.c index d1bf8548b7..fa6aa112cb 100644 --- a/linux-user/m68k/cpu_loop.c +++ b/linux-user/m68k/cpu_loop.c @@ -36,11 +36,6 @@ void cpu_loop(CPUM68KState *env) process_queued_cpu_work(cs); =20 switch(trapnr) { - case EXCP_HALT_INSN: - /* Semihosing syscall. */ - env->pc +=3D 4; - do_m68k_semihosting(env, env->dregs[0]); - break; case EXCP_ILLEGAL: case EXCP_LINEA: case EXCP_LINEF: diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index 5b4c51957e..4b5621a101 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -21,13 +21,9 @@ =20 #include "cpu.h" #include "exec/gdbstub.h" -#if defined(CONFIG_USER_ONLY) -#include "qemu.h" -#define SEMIHOSTING_HEAP_SIZE (128 * 1024 * 1024) -#else +#include "semihosting/guestfd.h" #include "semihosting/softmmu-uaccess.h" #include "hw/boards.h" -#endif #include "qemu/log.h" =20 #define HOSTED_EXIT 0 @@ -375,43 +371,12 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) } break; case HOSTED_INIT_SIM: -#if defined(CONFIG_USER_ONLY) - { - CPUState *cs =3D env_cpu(env); - TaskState *ts =3D cs->opaque; - /* Allocate the heap using sbrk. */ - if (!ts->heap_limit) { - abi_ulong ret; - uint32_t size; - uint32_t base; - - base =3D do_brk(0); - size =3D SEMIHOSTING_HEAP_SIZE; - /* Try a big heap, and reduce the size if that fails. */ - for (;;) { - ret =3D do_brk(base + size); - if (ret >=3D (base + size)) { - break; - } - size >>=3D 1; - } - ts->heap_limit =3D base + size; - } - /* - * This call may happen before we have writable memory, so return - * values directly in registers. - */ - env->dregs[1] =3D ts->heap_limit; - env->aregs[7] =3D ts->stack_base; - } -#else /* * FIXME: This is wrong for boards where RAM does not start at * address zero. */ env->dregs[1] =3D current_machine->ram_size; env->aregs[7] =3D current_machine->ram_size; -#endif return; default: cpu_abort(env_cpu(env), "Unsupported semihosting syscall %d\n", nr= ); diff --git a/target/m68k/meson.build b/target/m68k/meson.build index 05cd9fbd1e..27d2d7ba87 100644 --- a/target/m68k/meson.build +++ b/target/m68k/meson.build @@ -4,14 +4,16 @@ m68k_ss.add(files( 'fpu_helper.c', 'gdbstub.c', 'helper.c', - 'm68k-semi.c', 'op_helper.c', 'softfloat.c', 'translate.c', )) =20 m68k_softmmu_ss =3D ss.source_set() -m68k_softmmu_ss.add(files('monitor.c')) +m68k_softmmu_ss.add(files( + 'm68k-semi.c', + 'monitor.c' +)) =20 target_arch +=3D {'m68k': m68k_ss} target_softmmu_arch +=3D {'m68k': m68k_softmmu_ss} --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651610982; cv=none; d=zohomail.com; s=zohoarc; b=DtoS7YNsy04AZdp8l1YMQXkAT08av5cHcZL0vNbsc7w2n4nOmhrfFaTTBOfGSNSJ8BUF+mnN1TdmETZX10+wjlPlSle0eRKnVwINOMBz/tlTBoVrI2ryKJlU48oNdMAklQ7p1KBJhfDOf4s9pQIaOKpewXhz2GtV5ApdJszAODc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610982; 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=xbtQNW8iXZae/AjVjCxvg2NljuQAygSZg+TBTFVvaBA=; b=Uo+M5DiMsVKWKKdg3aXYq/IzrRWMjK2DTUaaRGjt0G79uo45Vo4aWjBTK1ExpxdRf/0YRCJ2C2Z+oTXM13WUwI6KM9PWwGkv012ZPYu3wp7RXgx4JvfvxwcruSwRLUMiuB9GoRYCg5k0O/Ng93yhiWwFFYByNfAyGT/qe4q1LfM= 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 1651610982560195.50833456065277; Tue, 3 May 2022 13:49:42 -0700 (PDT) Received: from localhost ([::1]:56380 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzSn-0002Dv-8g for importer@patchew.org; Tue, 03 May 2022 16:49:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40316) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZe-0008EE-6O for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:42 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]:36596) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZY-0006K7-SS for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:38 -0400 Received: by mail-pl1-x635.google.com with SMTP id j14so416741plx.3 for ; Tue, 03 May 2022 12:52:36 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=xbtQNW8iXZae/AjVjCxvg2NljuQAygSZg+TBTFVvaBA=; b=YXmWJFCaV34UUzF6BZ/J8pVp6DdqBDjAF0ciw4c4v3KSfomdSxtCfIQ9EmfJ5eM/rA XGnvVz3nPT3Js6FTKjJCI0ZBNZWTdRBHwx1XxhZW76bFEMZvHpWJRhdFgyZtBpI8t2o8 xOl09bNvZHdjwA6So70o506N12oNqYBw5jJzUWQGD+fpP13qOcg3SPiJ5hW2IwRyFESs 4IOTil2QhWBBtACw4FOBPlvq0ynZktI9ml/ftEc/GCj8mT5jLXMrI+05Kg9KA696ewYY x7GFBOHX7Bn/wlPNv++dugfkeaVqYcl1fKAHdw2KzcHz7N7rCLjSbJngmsBUllmOWMm0 hGJQ== 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=xbtQNW8iXZae/AjVjCxvg2NljuQAygSZg+TBTFVvaBA=; b=m9BfsxuyivnWhJ319CQJSYlyMhKBNE+0U7UMfWTdh7xkWT8gdBegcF1I0+/aKELi86 wOvAreDBQr5ZARaHUf37BJF/1TmXQtioxNHE21tFQ6RPgWsbAixTMiuoburPHLL9IuQn O1Z/dFXq3yHzi2wcRzkEadwUp5Lz9IqsB5nJLTLKufk+zMOSPtQg1D2GLQYcmEHFebzv feNaKzI4LoNdsdF69t9wHgoalSGub/YFk4IzUV4me9YAfPWMz/Efsu9kedbpWVkz4mcX gdj6gFOc6IYnTnTZmVEOrdPVN9uh/GpoEPlJLF7s/HYRw6wqQjO0kDuXZ5+nXrIO6pyE Djpw== X-Gm-Message-State: AOAM533xV650GSTbxjL96V4nSdDRJ72L75u8r9nLA7V63N+jaUVpo07W cyV5lm8mCN/b81C27pDqzd3n6JYafyyeXQ== X-Google-Smtp-Source: ABdhPJyV375RVjws47CpGAAJq7EeZpOV5fFxFXfLU2S1z76TDzH2ootkEam+5t3OOwxjSikE26ZlRQ== X-Received: by 2002:a17:90b:33ca:b0:1d7:d322:9aa2 with SMTP id lk10-20020a17090b33ca00b001d7d3229aa2mr6371019pjb.21.1651607555389; Tue, 03 May 2022 12:52:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 50/74] target/m68k: Use semihosting/syscalls.h Date: Tue, 3 May 2022 12:48:19 -0700 Message-Id: <20220503194843.1379101-51-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.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: 1651610984164100003 Content-Type: text/plain; charset="utf-8" This separates guest file descriptors from host file descriptors, and utilizes shared infrastructure for integration with gdbstub. Signed-off-by: Richard Henderson --- target/m68k/m68k-semi.c | 270 ++++++---------------------------------- 1 file changed, 39 insertions(+), 231 deletions(-) diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index 4b5621a101..d6b3b3226e 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -21,7 +21,7 @@ =20 #include "cpu.h" #include "exec/gdbstub.h" -#include "semihosting/guestfd.h" +#include "semihosting/syscalls.h" #include "semihosting/softmmu-uaccess.h" #include "hw/boards.h" #include "qemu/log.h" @@ -41,54 +41,6 @@ #define HOSTED_ISATTY 12 #define HOSTED_SYSTEM 13 =20 -static int translate_openflags(int flags) -{ - int hf; - - if (flags & GDB_O_WRONLY) - hf =3D O_WRONLY; - else if (flags & GDB_O_RDWR) - hf =3D O_RDWR; - else - hf =3D O_RDONLY; - - if (flags & GDB_O_APPEND) hf |=3D O_APPEND; - if (flags & GDB_O_CREAT) hf |=3D O_CREAT; - if (flags & GDB_O_TRUNC) hf |=3D O_TRUNC; - if (flags & GDB_O_EXCL) hf |=3D O_EXCL; - - return hf; -} - -static void translate_stat(CPUM68KState *env, target_ulong addr, struct st= at *s) -{ - struct gdb_stat *p; - - if (!(p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0))) - /* 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); - 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)); -} - static void m68k_semi_u32_cb(CPUState *cs, uint64_t ret, int err) { M68kCPU *cpu =3D M68K_CPU(cs); @@ -128,8 +80,6 @@ static void m68k_semi_u64_cb(CPUState *cs, uint64_t ret,= int err) */ #define GET_ARG(n) do { \ if (get_user_ual(arg ## n, args + (n) * 4)) { \ - result =3D -1; \ - errno =3D EFAULT; \ goto failed; \ } \ } while (0) @@ -139,237 +89,93 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) CPUState *cs =3D env_cpu(env); uint32_t args; target_ulong arg0, arg1, arg2, arg3; - void *p; - void *q; - uint32_t len; - uint32_t result; =20 args =3D env->dregs[1]; switch (nr) { case HOSTED_EXIT: gdb_exit(env->dregs[0]); exit(env->dregs[0]); + case HOSTED_OPEN: GET_ARG(0); GET_ARG(1); GET_ARG(2); GET_ARG(3); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "open,%s,%x,%x", arg0, (int)a= rg1, - arg2, arg3); - return; - } else { - p =3D lock_user_string(arg0); - if (!p) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D open(p, translate_openflags(arg2), arg3); - unlock_user(p, arg0, 0); - } - } + semihost_sys_open(cs, m68k_semi_u32_cb, arg0, arg1, arg2, arg3); break; + case HOSTED_CLOSE: - { - /* Ignore attempts to close stdin/out/err. */ - GET_ARG(0); - int fd =3D arg0; - if (fd > 2) { - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "close,%x", arg0); - return; - } else { - result =3D close(fd); - } - } else { - result =3D 0; - } - break; - } + GET_ARG(0); + semihost_sys_close(cs, m68k_semi_u32_cb, arg0); + break; + case HOSTED_READ: GET_ARG(0); GET_ARG(1); GET_ARG(2); - len =3D arg2; - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "read,%x,%x,%x", - arg0, arg1, len); - return; - } else { - p =3D lock_user(VERIFY_WRITE, arg1, len, 0); - if (!p) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D read(arg0, p, len); - unlock_user(p, arg1, len); - } - } + semihost_sys_read(cs, m68k_semi_u32_cb, arg0, arg1, arg2); break; + case HOSTED_WRITE: GET_ARG(0); GET_ARG(1); GET_ARG(2); - len =3D arg2; - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "write,%x,%x,%x", - arg0, arg1, len); - return; - } else { - p =3D lock_user(VERIFY_READ, arg1, len, 1); - if (!p) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D write(arg0, p, len); - unlock_user(p, arg0, 0); - } - } + semihost_sys_write(cs, m68k_semi_u32_cb, arg0, arg1, arg2); break; + case HOSTED_LSEEK: - { - uint64_t off; - GET_ARG(0); - GET_ARG(1); - GET_ARG(2); - GET_ARG(3); - off =3D (uint32_t)arg2 | ((uint64_t)arg1 << 32); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u64_cb, "fseek,%x,%lx,%x", - arg0, off, arg3); - } else { - off =3D lseek(arg0, off, arg3); - m68k_semi_u64_cb(cs, off, errno); - } - return; - } + GET_ARG(0); + GET_ARG(1); + GET_ARG(2); + GET_ARG(3); + semihost_sys_lseek(cs, m68k_semi_u64_cb, arg0, + deposit64(arg2, arg1, 32, 32), arg3); + break; + case HOSTED_RENAME: GET_ARG(0); GET_ARG(1); GET_ARG(2); GET_ARG(3); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "rename,%s,%s", - arg0, (int)arg1, arg2, (int)arg3); - return; - } else { - p =3D lock_user_string(arg0); - q =3D lock_user_string(arg2); - if (!p || !q) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D rename(p, q); - } - unlock_user(p, arg0, 0); - unlock_user(q, arg2, 0); - } + semihost_sys_rename(cs, m68k_semi_u32_cb, arg0, arg1, arg2, arg3); break; + case HOSTED_UNLINK: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "unlink,%s", - arg0, (int)arg1); - return; - } else { - p =3D lock_user_string(arg0); - if (!p) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D unlink(p); - unlock_user(p, arg0, 0); - } - } + semihost_sys_remove(cs, m68k_semi_u32_cb, arg0, arg1); break; + case HOSTED_STAT: GET_ARG(0); GET_ARG(1); GET_ARG(2); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "stat,%s,%x", - arg0, (int)arg1, arg2); - return; - } else { - struct stat s; - p =3D lock_user_string(arg0); - if (!p) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D stat(p, &s); - unlock_user(p, arg0, 0); - } - if (result =3D=3D 0) { - translate_stat(env, arg2, &s); - } - } + semihost_sys_stat(cs, m68k_semi_u32_cb, arg0, arg1, arg2); break; + case HOSTED_FSTAT: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "fstat,%x,%x", - arg0, arg1); - return; - } else { - struct stat s; - result =3D fstat(arg0, &s); - if (result =3D=3D 0) { - translate_stat(env, arg1, &s); - } - } + semihost_sys_fstat(cs, m68k_semi_u32_cb, arg0, arg1); break; + case HOSTED_GETTIMEOFDAY: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "gettimeofday,%x,%x", - arg0, arg1); - return; - } else { - struct gdb_timeval *p; - int64_t rt =3D g_get_real_time(); - p =3D lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval)= , 0); - if (!p) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D 0; - 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, arg0, sizeof(struct gdb_timeval)); - } - } + semihost_sys_gettimeofday(cs, m68k_semi_u32_cb, arg0, arg1); break; + case HOSTED_ISATTY: GET_ARG(0); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "isatty,%x", arg0); - return; - } else { - result =3D isatty(arg0); - } + semihost_sys_isatty(cs, m68k_semi_u32_cb, arg0); break; + case HOSTED_SYSTEM: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(m68k_semi_u32_cb, "system,%s", - arg0, (int)arg1); - return; - } else { - p =3D lock_user_string(arg0); - if (!p) { - /* FIXME - check error code? */ - result =3D -1; - } else { - result =3D system(p); - unlock_user(p, arg0, 0); - } - } + semihost_sys_system(cs, m68k_semi_u32_cb, arg0, arg1); break; + case HOSTED_INIT_SIM: /* * FIXME: This is wrong for boards where RAM does not start at @@ -378,10 +184,12 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) env->dregs[1] =3D current_machine->ram_size; env->aregs[7] =3D current_machine->ram_size; return; + default: cpu_abort(env_cpu(env), "Unsupported semihosting syscall %d\n", nr= ); - result =3D 0; + + failed: + m68k_semi_u32_cb(cs, -1, EFAULT); + break; } -failed: - m68k_semi_u32_cb(cs, result, errno); } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611194; cv=none; d=zohomail.com; s=zohoarc; b=j7sOZfVMZkX6RmQmpgU4Ben2DcdweKyi81xxbWO4iESPZ3yLn5+zu2KX3O1x+i2Rb7gN5uf5Ok1X4cmnGSR2kV1G6GC/TNpmWIirRtmLv5Q7tVkDh8ZZTYvLSOBFBwfDEwMmikqC1JPPO4rNryVgO+QdecYtOetr0rMsirGYaNs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611194; 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=G5TUXq2IL4pMyRpoJ6zLWtNUYnfueO0F38AbAA6OUSY=; b=mksRIx6pWAZcGwzuP0MgqckNCGlhWcRuobTpGHuCu9WCUCiFw/spfStMwp6Wn9BMAEu35rJpQwkDkaIMCGOrOwzUo133YQRRlyHWXPty+95c1iqgr/BeVFkNV6beRrkdikqUPIwW+Kb1J/hjvzqAjRPquTRKLv+hbIMgc9sQ84A= 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 1651611194152180.1019993865831; Tue, 3 May 2022 13:53:14 -0700 (PDT) Received: from localhost ([::1]:36004 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzWC-0008FQ-Me for importer@patchew.org; Tue, 03 May 2022 16:53:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40320) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZe-0008ER-7P for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:42 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]:40953) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZZ-0006KI-Kv for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:39 -0400 Received: by mail-pl1-x635.google.com with SMTP id i1so9744723plg.7 for ; Tue, 03 May 2022 12:52:37 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=G5TUXq2IL4pMyRpoJ6zLWtNUYnfueO0F38AbAA6OUSY=; b=NHm0POJ/k5W8exETv800htWvSW0v6gYAFe6sxaU8Ln4BFA5++e6otKo6btl09NvduM wQEEYidd7YvmM7kK8Sjq4qNR1tHVRM9ZcMLvPq0dE+VkpylS7OvL0mGmtUs3XSTlOsbU 615WCwQscqQFqpha2yoWCQGJNhpdQZPkPQDUd6z2V/oR+xan11SHiD/LvnLNDK/MVMqj q+UGaDS4ehrNfJZGktmJGvzGDs4c0cudL4hi7K0GKT5MpmxlFQ1e75OVf/0u0pavXi8c hh6A3OJML6oX2VTtEF001YI/W8Qt5ovCTZH1F3YPWshex+0FGG2ZBWPMxfMHhEfLxABt XozA== 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=G5TUXq2IL4pMyRpoJ6zLWtNUYnfueO0F38AbAA6OUSY=; b=KCMCH3hsU3N60/LD9do7VRVxz8H9+pT4uxydj22B2qM8cD9WKSzsCyhe09ASYlsY8X qVk036Csz7FlMlsbzMKThqH112rzExk6pXY9zFRJ4AP6qNKWVz8wNJxmKfPq0IRZ486M BiiUy90AMqG9ORa82UDHJDuiAO0yzX6w547jwkRCeeKq+ouq9aqJWyOKKDNylKPGtqTk vPucYKYhnLVlCkt1rFkLU2FlgFLdUCXs9Dtx+yK4nOtAF7GZ/78DM7NZNaXlg/loW2BE MX8ye47FYNeO0gJ4NmKetSzJ8fBkAaoE3jfDuR8NYngr7wjn7jtg7fo8yGVZyVKn75rS esnA== X-Gm-Message-State: AOAM532eCq+i1gI++PN2IZ1gDEpbGSLfiC1LXypX3wmk2zCeu/1AuR6r 3kv0csH6JWzhJN+nwvodBkgVwffUDPFq/g== X-Google-Smtp-Source: ABdhPJyKZttH9/H1Y0FI7Zcad2rY6gl4h3w3y0SHiRDaI3o/jkZrTTjDUPd6JBr9JqAMj0jYUYgzrg== X-Received: by 2002:a17:90b:30c4:b0:1d8:3395:a158 with SMTP id hi4-20020a17090b30c400b001d83395a158mr6368039pjb.184.1651607556312; Tue, 03 May 2022 12:52:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 51/74] target/nios2: Eliminate nios2_semi_is_lseek Date: Tue, 3 May 2022 12:48:20 -0700 Message-Id: <20220503194843.1379101-52-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.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: 1651611194777100002 Content-Type: text/plain; charset="utf-8" Reorg nios2_semi_return_* to gdb_syscall_complete_cb. Use the 32-bit version normally, and the 64-bit version for HOSTED_LSEEK. Signed-off-by: Richard Henderson --- target/nios2/nios2-semi.c | 59 +++++++++++++++------------------------ 1 file changed, 23 insertions(+), 36 deletions(-) diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index 4d02789d26..bdf8849689 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -108,9 +108,12 @@ static bool translate_stat(CPUNios2State *env, target_= ulong addr, return true; } =20 -static void nios2_semi_return_u32(CPUNios2State *env, uint32_t ret, int er= r) +static void nios2_semi_u32_cb(CPUState *cs, uint64_t ret, int err) { + Nios2CPU *cpu =3D NIOS2_CPU(cs); + CPUNios2State *env =3D &cpu->env; target_ulong args =3D env->regs[R_ARG1]; + if (put_user_u32(ret, args) || put_user_u32(err, args + 4)) { /* @@ -123,9 +126,12 @@ static void nios2_semi_return_u32(CPUNios2State *env, = uint32_t ret, int err) } } =20 -static void nios2_semi_return_u64(CPUNios2State *env, uint64_t ret, int er= r) +static void nios2_semi_u64_cb(CPUState *cs, uint64_t ret, int err) { + Nios2CPU *cpu =3D NIOS2_CPU(cs); + CPUNios2State *env =3D &cpu->env; target_ulong args =3D env->regs[R_ARG1]; + if (put_user_u32(ret >> 32, args) || put_user_u32(ret, args + 4) || put_user_u32(err, args + 8)) { @@ -135,25 +141,6 @@ static void nios2_semi_return_u64(CPUNios2State *env, = uint64_t ret, int err) } } =20 -static int nios2_semi_is_lseek; - -static void nios2_semi_cb(CPUState *cs, uint64_t ret, int err) -{ - Nios2CPU *cpu =3D NIOS2_CPU(cs); - CPUNios2State *env =3D &cpu->env; - - if (nios2_semi_is_lseek) { - /* - * FIXME: We've already lost the high bits of the lseek - * return value. - */ - nios2_semi_return_u64(env, ret, err); - nios2_semi_is_lseek =3D 0; - } else { - nios2_semi_return_u32(env, ret, err); - } -} - /* * Read the input value from the argument block; fail the semihosting * call if the memory read fails. @@ -168,6 +155,7 @@ static void nios2_semi_cb(CPUState *cs, uint64_t ret, i= nt err) =20 void do_nios2_semihosting(CPUNios2State *env) { + CPUState *cs =3D env_cpu(env); int nr; uint32_t args; target_ulong arg0, arg1, arg2, arg3; @@ -188,7 +176,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(2); GET_ARG(3); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "open,%s,%x,%x", arg0, (int)arg1, + gdb_do_syscall(nios2_semi_u32_cb, "open,%s,%x,%x", arg0, (int)= arg1, arg2, arg3); return; } else { @@ -209,7 +197,7 @@ void do_nios2_semihosting(CPUNios2State *env) int fd =3D arg0; if (fd > 2) { if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "close,%x", arg0); + gdb_do_syscall(nios2_semi_u32_cb, "close,%x", arg0); return; } else { result =3D close(fd); @@ -225,7 +213,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(2); len =3D arg2; if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "read,%x,%x,%x", + gdb_do_syscall(nios2_semi_u32_cb, "read,%x,%x,%x", arg0, arg1, len); return; } else { @@ -245,7 +233,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(2); len =3D arg2; if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "write,%x,%x,%x", + gdb_do_syscall(nios2_semi_u32_cb, "write,%x,%x,%x", arg0, arg1, len); return; } else { @@ -268,12 +256,11 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(3); off =3D (uint32_t)arg2 | ((uint64_t)arg1 << 32); if (use_gdb_syscalls()) { - nios2_semi_is_lseek =3D 1; - gdb_do_syscall(nios2_semi_cb, "lseek,%x,%lx,%x", + gdb_do_syscall(nios2_semi_u64_cb, "lseek,%x,%lx,%x", arg0, off, arg3); } else { off =3D lseek(arg0, off, arg3); - nios2_semi_return_u64(env, off, errno); + nios2_semi_u64_cb(cs, off, errno); } return; } @@ -283,7 +270,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(2); GET_ARG(3); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "rename,%s,%s", + gdb_do_syscall(nios2_semi_u32_cb, "rename,%s,%s", arg0, (int)arg1, arg2, (int)arg3); return; } else { @@ -303,7 +290,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "unlink,%s", + gdb_do_syscall(nios2_semi_u32_cb, "unlink,%s", arg0, (int)arg1); return; } else { @@ -322,7 +309,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(1); GET_ARG(2); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "stat,%s,%x", + gdb_do_syscall(nios2_semi_u32_cb, "stat,%s,%x", arg0, (int)arg1, arg2); return; } else { @@ -345,7 +332,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "fstat,%x,%x", + gdb_do_syscall(nios2_semi_u32_cb, "fstat,%x,%x", arg0, arg1); return; } else { @@ -361,7 +348,7 @@ void do_nios2_semihosting(CPUNios2State *env) /* Only the tv parameter is used. tz is assumed NULL. */ GET_ARG(0); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "gettimeofday,%x,%x", + gdb_do_syscall(nios2_semi_u32_cb, "gettimeofday,%x,%x", arg0, 0); return; } else { @@ -382,7 +369,7 @@ void do_nios2_semihosting(CPUNios2State *env) case HOSTED_ISATTY: GET_ARG(0); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "isatty,%x", arg0); + gdb_do_syscall(nios2_semi_u32_cb, "isatty,%x", arg0); return; } else { result =3D isatty(arg0); @@ -392,7 +379,7 @@ void do_nios2_semihosting(CPUNios2State *env) GET_ARG(0); GET_ARG(1); if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_cb, "system,%s", + gdb_do_syscall(nios2_semi_u32_cb, "system,%s", arg0, (int)arg1); return; } else { @@ -412,5 +399,5 @@ void do_nios2_semihosting(CPUNios2State *env) result =3D 0; } failed: - nios2_semi_return_u32(env, result, errno); + nios2_semi_u32_cb(cs, result, errno); } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651610167; cv=none; d=zohomail.com; s=zohoarc; b=kUySpeFSpUds2TJJv72A/+e13g4eQ2L/Hov31E+tiPGSRePsYtUlaWcZZ8fh4HX59fWGjTfikuhQDAjNm2QG0cdVUlA+9d6HadQ96FyzSCws0iKp9T0eGqUwcRJe82iAR0T4R212UjvjDvU+Pe6wtO4dMDWv4SfKoK0eQudqOCc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610167; 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=u2pM0xy41z8bwTr6w8WctOV/RUlItotfYG7rgV7aiRQ=; b=LmshDgQIpkaSFH/KxXoSZW2gHQqUi7Cq89tKlb674IjPqDniQCSilFEu1niDOnEFirAJ7r05ZngKERAvkApSqGzgdYVwv+aHv4QArfFirOeHrLl/rsbvErs6JWSJJa3PeUSfD5pXzrwDidEun2aI+ZSQZEPa7snz8xdCvtdQuBU= 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 1651610167661464.0158018629114; Tue, 3 May 2022 13:36:07 -0700 (PDT) Received: from localhost ([::1]:57584 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzFe-0003Xl-J3 for importer@patchew.org; Tue, 03 May 2022 16:36:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40318) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZe-0008EP-70 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:42 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:51896) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZa-0006Ki-HO for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:39 -0400 Received: by mail-pj1-x1030.google.com with SMTP id p6so16255853pjm.1 for ; Tue, 03 May 2022 12:52:38 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=u2pM0xy41z8bwTr6w8WctOV/RUlItotfYG7rgV7aiRQ=; b=iW/I7U/jJBGN+A7kqCu0eR45y1rKsOL0eTfM0o2LgEPK8tfwtmVii8PXatWVbG/Iea ZVDhqb5MS9MlpLEgRZYBh1PUO2LajHqf7rUXYPH06s69rv2US2V/yxjL3XB6nxKhGiWw KKHWJScza/FIRmI23FXS2Z6QJO+RcDt/ujqEhShYfa+wa3WNPbAfASE5EJmreH7WcXYd KC+EoEeuA0ybjGNRl36gKozOTtqhOTRd27Ys4eY/NReqr2+mLdxedoWnEbNX/soisx14 GT0F0YUviZV6++2gfM9f3LKHJmoc8rAjw+mdjgEjH90optyj/lFm5H39gOe2ykXO+NNy zBow== 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=u2pM0xy41z8bwTr6w8WctOV/RUlItotfYG7rgV7aiRQ=; b=DyZZa13bzhPV2/twqtT5a06k9S3D9hb6o6LVMp2nFdzJncyAg5ixriwiFRe9uyun0f NNmdKkidhqp+DnyUjPZEe4UGGq78zipDBIi8X7sxRNrlaD+Wf6hkP70v2YfzD1JE2R3l zBliB7HURkfn9WMhxQvgL4oTQM6eAsL6xJ4hEuDqC3v0a8fdIODRybXjJ/X3HQx96YTH RaZpxXY1LDE9hBCavWckkc4OghVr8/tKzuz9oDZy7PDcORzZ7ym1yxiz1Yq7gGDPQWva jlVK7kUcqn2nNvFQjusEDFD9Hftljq1MgP/7ixZZX4bXFHU5n8QA0jBHUVYFD9qYbQmt sldw== X-Gm-Message-State: AOAM530dZ7C1oxy7JKKs/LitGH8T/jHIELQccDi2YEfPmbjktUQEMy38 R8bM23iOGwxWREF4x7L3aKnGYcfXt5XRBw== X-Google-Smtp-Source: ABdhPJyPc7/hbk/P7rHSccDAAAnDvr0jNBIP2qtrZIOy1Cj5Qk6uE17cQZnGA+egd4LFBDPsMT9cfg== X-Received: by 2002:a17:902:d2ce:b0:15e:c024:6635 with SMTP id n14-20020a170902d2ce00b0015ec0246635mr1920634plc.28.1651607557188; Tue, 03 May 2022 12:52:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 52/74] target/nios2: Move nios2-semi.c to nios2_softmmu_ss Date: Tue, 3 May 2022 12:48:21 -0700 Message-Id: <20220503194843.1379101-53-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610168834100001 Content-Type: text/plain; charset="utf-8" Semihosting is not enabled for nios2-linux-user. Signed-off-by: Richard Henderson --- target/nios2/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/nios2/meson.build b/target/nios2/meson.build index 2bd60ba306..c6e2243cc3 100644 --- a/target/nios2/meson.build +++ b/target/nios2/meson.build @@ -1,7 +1,6 @@ nios2_ss =3D ss.source_set() nios2_ss.add(files( 'cpu.c', - 'nios2-semi.c', 'op_helper.c', 'translate.c', )) @@ -10,7 +9,8 @@ nios2_softmmu_ss =3D ss.source_set() nios2_softmmu_ss.add(files( 'helper.c', 'monitor.c', - 'mmu.c' + 'mmu.c', + 'nios2-semi.c', )) =20 target_arch +=3D {'nios2': nios2_ss} --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651610347; cv=none; d=zohomail.com; s=zohoarc; b=fByVkpdw5HtdewpCla2xBMJ9yPNLeFGKM1taR6pn73tbANHMvaPLnQjrKbhO+ziEXoMTWCXXRVdejTILLGjvYHjiXfNNL7QODCEAr9n+HG0aRV9XgTYJR+KBnw5lQMua3UhxGrCdSo2DbdTnLHvlzdflSzQuuzsltQcX7q3Uics= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610347; 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=s6WKnfYdYMcw1Zz1TWclm7cmlzkoYCvdkNaKkdbdgBg=; b=SBw68RIBCqSNP8K1JGx7jSdZsIpJle8H3/jbQF4KL9Pfw7gwRyEHW8/Ma9TpJCqgMQoH2eZEsy/xf+j8CluO/7AwrcmiFisqzLAIfEKMf+5j6KnmgMHxOcvTEcVsZ6MZnhNNlCOxLGy9GApWtuAWziuSlsW1AuGpUQysuyx1pXA= 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 165161034719916.097274082762056; Tue, 3 May 2022 13:39:07 -0700 (PDT) Received: from localhost ([::1]:37298 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzIX-0002G3-AH for importer@patchew.org; Tue, 03 May 2022 16:39:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40374) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZg-0008Qu-2T for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:44 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:37751) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZd-0006Ky-UE for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:43 -0400 Received: by mail-pj1-x1031.google.com with SMTP id t11-20020a17090ad50b00b001d95bf21996so3235104pju.2 for ; Tue, 03 May 2022 12:52:39 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=s6WKnfYdYMcw1Zz1TWclm7cmlzkoYCvdkNaKkdbdgBg=; b=IXzdISf+yY2V5SbUoQVcX3gF3KS0oyiT2dDlrjkvzb+zgpU/vepipgc+7ACUiJc8Vg GTudgo8Nb/Z7+C1oP3zNQm8J/N8aaQ0Cz8uYq5oKbC/wMDwUiH4kaMhVtZIsqHmCv0oo yCadmF34mzzzNGgW/DSa9pVvot9molxGBf/viSFf0ezYRdLxA3pEqHEG6moDAe7ejcxY oKP0FtmfTf4lFP7rrRy1r4kqv1GuBbKpGEzcv0a9iF7IGwaSzn9O/AC0bLPUPwfnWkXc Avjw3uD5NGlXR8x6JgxILFF+ncHu/GauaxChiWIbSUCSQNccej4pi6Y5q7x+GXDahTf3 NlBQ== 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=s6WKnfYdYMcw1Zz1TWclm7cmlzkoYCvdkNaKkdbdgBg=; b=H1KVwewzNFGaZxZIhmeB0CXnAELubdUyw64bEToWbyFIxZxxRezmFx03DnQDlPcwtr sUInTaLrZ3/y++8FcEs+NYMegIngrER2OYMPFEiPGqfBp7nwh9xGybAkGNHiefHCe1Mz huE2+9/ZvuCB9WEjbJTR9VRJMC32gl77CpogOf6FCwlPAEsP4jj/J9jgMXcp3Q9wYP5a 6acmkdyZyCZvJ8Lax+wPCuduFWqz7Jdug17lZZ0vNKM1vzwkvvGZu7RI0ODLrcoTx+Qy rXNc7XYSo49a4wW8w6Mm2l6CVgLnVT7VVjtYxkFhuZq6Dp8I22vvHL8uRVtUSfCuaAtq GLLQ== X-Gm-Message-State: AOAM533plgxZ4oLN4YeHXKrfDOaKZoJSnAth+PmxWh+j9Pgjafbu/gzF YJ72O30kNHvPemRBzL5xWxK4yWuEZyRrVQ== X-Google-Smtp-Source: ABdhPJwvxwSQpm1cLFrZHmfB4ytfEW5u9yK2xGTuEo7uC3SHCt1eDjvTCljd9q+kNYgDcaV6yO+4fw== X-Received: by 2002:a17:90a:5215:b0:1ca:79cf:f3dd with SMTP id v21-20020a17090a521500b001ca79cff3ddmr6677536pjh.6.1651607558208; Tue, 03 May 2022 12:52:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 53/74] target/nios2: Use semihosting/syscalls.h Date: Tue, 3 May 2022 12:48:22 -0700 Message-Id: <20220503194843.1379101-54-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610348110100001 Content-Type: text/plain; charset="utf-8" This separates guest file descriptors from host file descriptors, and utilizes shared infrastructure for integration with gdbstub. Signed-off-by: Richard Henderson --- target/nios2/nios2-semi.c | 287 ++++++-------------------------------- 1 file changed, 41 insertions(+), 246 deletions(-) diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index bdf8849689..1b5afc9333 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -25,6 +25,7 @@ =20 #include "cpu.h" #include "exec/gdbstub.h" +#include "semihosting/syscalls.h" #if defined(CONFIG_USER_ONLY) #include "qemu.h" #else @@ -47,67 +48,6 @@ #define HOSTED_ISATTY 12 #define HOSTED_SYSTEM 13 =20 -static int translate_openflags(int flags) -{ - int hf; - - if (flags & GDB_O_WRONLY) { - hf =3D O_WRONLY; - } else if (flags & GDB_O_RDWR) { - hf =3D O_RDWR; - } else { - hf =3D O_RDONLY; - } - - if (flags & GDB_O_APPEND) { - hf |=3D O_APPEND; - } - if (flags & GDB_O_CREAT) { - hf |=3D O_CREAT; - } - if (flags & GDB_O_TRUNC) { - hf |=3D O_TRUNC; - } - if (flags & GDB_O_EXCL) { - hf |=3D O_EXCL; - } - - return hf; -} - -static bool translate_stat(CPUNios2State *env, target_ulong addr, - struct stat *s) -{ - struct gdb_stat *p; - - p =3D lock_user(VERIFY_WRITE, addr, sizeof(struct gdb_stat), 0); - - if (!p) { - return false; - } - 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 true; -} - static void nios2_semi_u32_cb(CPUState *cs, uint64_t ret, int err) { Nios2CPU *cpu =3D NIOS2_CPU(cs); @@ -147,8 +87,6 @@ static void nios2_semi_u64_cb(CPUState *cs, uint64_t ret= , int err) */ #define GET_ARG(n) do { \ if (get_user_ual(arg ## n, args + (n) * 4)) { \ - result =3D -1; \ - errno =3D EFAULT; \ goto failed; \ } \ } while (0) @@ -159,10 +97,6 @@ void do_nios2_semihosting(CPUNios2State *env) int nr; uint32_t args; target_ulong arg0, arg1, arg2, arg3; - void *p; - void *q; - uint32_t len; - uint32_t result; =20 nr =3D env->regs[R_ARG0]; args =3D env->regs[R_ARG1]; @@ -170,234 +104,95 @@ void do_nios2_semihosting(CPUNios2State *env) case HOSTED_EXIT: gdb_exit(env->regs[R_ARG0]); exit(env->regs[R_ARG0]); + case HOSTED_OPEN: GET_ARG(0); GET_ARG(1); GET_ARG(2); GET_ARG(3); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "open,%s,%x,%x", arg0, (int)= arg1, - arg2, arg3); - return; - } else { - p =3D lock_user_string(arg0); - if (!p) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D open(p, translate_openflags(arg2), arg3); - unlock_user(p, arg0, 0); - } - } + semihost_sys_open(cs, nios2_semi_u32_cb, arg0, arg1, arg2, arg3); break; + case HOSTED_CLOSE: - { - /* Ignore attempts to close stdin/out/err. */ - GET_ARG(0); - int fd =3D arg0; - if (fd > 2) { - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "close,%x", arg0); - return; - } else { - result =3D close(fd); - } - } else { - result =3D 0; - } - break; - } + GET_ARG(0); + semihost_sys_close(cs, nios2_semi_u32_cb, arg0); + break; + case HOSTED_READ: GET_ARG(0); GET_ARG(1); GET_ARG(2); - len =3D arg2; - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "read,%x,%x,%x", - arg0, arg1, len); - return; - } else { - p =3D lock_user(VERIFY_WRITE, arg1, len, 0); - if (!p) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D read(arg0, p, len); - unlock_user(p, arg1, len); - } - } + semihost_sys_read(cs, nios2_semi_u32_cb, arg0, arg1, arg2); break; + case HOSTED_WRITE: GET_ARG(0); GET_ARG(1); GET_ARG(2); - len =3D arg2; - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "write,%x,%x,%x", - arg0, arg1, len); - return; - } else { - p =3D lock_user(VERIFY_READ, arg1, len, 1); - if (!p) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D write(arg0, p, len); - unlock_user(p, arg0, 0); - } - } + semihost_sys_write(cs, nios2_semi_u32_cb, arg0, arg1, arg2); break; + case HOSTED_LSEEK: - { - uint64_t off; - GET_ARG(0); - GET_ARG(1); - GET_ARG(2); - GET_ARG(3); - off =3D (uint32_t)arg2 | ((uint64_t)arg1 << 32); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u64_cb, "lseek,%x,%lx,%x", - arg0, off, arg3); - } else { - off =3D lseek(arg0, off, arg3); - nios2_semi_u64_cb(cs, off, errno); - } - return; - } + GET_ARG(0); + GET_ARG(1); + GET_ARG(2); + GET_ARG(3); + semihost_sys_lseek(cs, nios2_semi_u64_cb, arg0, + deposit64(arg2, arg1, 32, 32), arg3); + break; + case HOSTED_RENAME: GET_ARG(0); GET_ARG(1); GET_ARG(2); GET_ARG(3); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "rename,%s,%s", - arg0, (int)arg1, arg2, (int)arg3); - return; - } else { - p =3D lock_user_string(arg0); - q =3D lock_user_string(arg2); - if (!p || !q) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D rename(p, q); - } - unlock_user(p, arg0, 0); - unlock_user(q, arg2, 0); - } + semihost_sys_rename(cs, nios2_semi_u32_cb, arg0, arg1, arg2, arg3); break; + case HOSTED_UNLINK: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "unlink,%s", - arg0, (int)arg1); - return; - } else { - p =3D lock_user_string(arg0); - if (!p) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D unlink(p); - unlock_user(p, arg0, 0); - } - } + semihost_sys_remove(cs, nios2_semi_u32_cb, arg0, arg1); break; + case HOSTED_STAT: GET_ARG(0); GET_ARG(1); GET_ARG(2); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "stat,%s,%x", - arg0, (int)arg1, arg2); - return; - } else { - struct stat s; - p =3D lock_user_string(arg0); - if (!p) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D stat(p, &s); - unlock_user(p, arg0, 0); - } - if (result =3D=3D 0 && !translate_stat(env, arg2, &s)) { - result =3D -1; - errno =3D EFAULT; - } - } + semihost_sys_stat(cs, nios2_semi_u32_cb, arg0, arg1, arg2); break; + case HOSTED_FSTAT: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "fstat,%x,%x", - arg0, arg1); - return; - } else { - struct stat s; - result =3D fstat(arg0, &s); - if (result =3D=3D 0 && !translate_stat(env, arg1, &s)) { - result =3D -1; - errno =3D EFAULT; - } - } + semihost_sys_fstat(cs, nios2_semi_u32_cb, arg0, arg1); break; + case HOSTED_GETTIMEOFDAY: - /* Only the tv parameter is used. tz is assumed NULL. */ GET_ARG(0); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "gettimeofday,%x,%x", - arg0, 0); - return; - } else { - struct gdb_timeval *p; - int64_t rt =3D g_get_real_time(); - p =3D lock_user(VERIFY_WRITE, arg0, sizeof(struct gdb_timeval)= , 0); - if (!p) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D 0; - 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, arg0, sizeof(struct gdb_timeval)); - } - } + GET_ARG(1); + semihost_sys_gettimeofday(cs, nios2_semi_u32_cb, arg0, arg1); break; + case HOSTED_ISATTY: GET_ARG(0); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "isatty,%x", arg0); - return; - } else { - result =3D isatty(arg0); - } + semihost_sys_isatty(cs, nios2_semi_u32_cb, arg0); break; + case HOSTED_SYSTEM: GET_ARG(0); GET_ARG(1); - if (use_gdb_syscalls()) { - gdb_do_syscall(nios2_semi_u32_cb, "system,%s", - arg0, (int)arg1); - return; - } else { - p =3D lock_user_string(arg0); - if (!p) { - result =3D -1; - errno =3D EFAULT; - } else { - result =3D system(p); - unlock_user(p, arg0, 0); - } - } + semihost_sys_system(cs, nios2_semi_u32_cb, arg0, arg1); break; + default: qemu_log_mask(LOG_GUEST_ERROR, "nios2-semihosting: unsupported " "semihosting syscall %d\n", nr); - result =3D 0; + nios2_semi_u32_cb(cs, -1, ENOSYS); + break; + + failed: + nios2_semi_u32_cb(cs, -1, EFAULT); + break; } -failed: - nios2_semi_u32_cb(cs, result, errno); } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611469; cv=none; d=zohomail.com; s=zohoarc; b=UlgdkbHQPVftDf7QjXcHecresxupBLC5KazwPYjIiQ0OQj9JlgksGdPngS8deW/Meo0t2hqqdBlVhILM7Ju0d4K4txJTpbz3qNDjQtXRjuK5AxTF13MFNq5pakwh8PtRvXs09YpuL15IQd2AIjiV4an7ib3qcsymBi+q3Dey5Yg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611469; 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=w4FYTiyxhI0mE5fcTHb/1MDqV87uaAoIyMIlxrvf02Y=; b=gtS3NCN7QVfCg+JyOGim2J51gCbN++jghS3esO8lv3EkvWen6NeJJOM2Ac3cMqhaVJ3UtOY5mGU0a+M1FpRcysXDFXJOv+CphBLNThVAZzGJuVv5e78e5LuWjOwObhxFVN0GRS5+T8WdMVeUQy18jX/HEo+fd7vOvY3kBf0qY2I= 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 1651611469401408.17037075382905; Tue, 3 May 2022 13:57:49 -0700 (PDT) Received: from localhost ([::1]:45142 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzae-0008RS-61 for importer@patchew.org; Tue, 03 May 2022 16:57:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40412) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZh-0008WJ-6s for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:45 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]:39820) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZd-0006L6-UP for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:44 -0400 Received: by mail-pl1-x635.google.com with SMTP id x18so4706959plg.6 for ; Tue, 03 May 2022 12:52:39 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=w4FYTiyxhI0mE5fcTHb/1MDqV87uaAoIyMIlxrvf02Y=; b=ixXlpYSRTQse5LUTrLOP6bRztHCxQ5YGYEhEkN3fV63bpnNd+v507BKD4i/xLJ2um9 tm+dTB5g/WJFZ1s8k8VpisJ1K3ZddUaKWbgcuJE1ME0ZTy0DYOwdCGAjx2a6aY/FQ4zx cyeiOmPgGujZD4Tr+TgruOQ4AJBxLAu73l0D+8RC1HwDxhTw5kxfqMTLT/BkwZA1WKes K812AOHFmSyEuYXe6P3axOnvmJaNJhfrBpPJUngzc8VaxsWzus8vu2Gh1EHvlyr7dW/V 7bzEu8KG+lRRf+JYuyu7RzG5fC9EAjyGwfwBCfVqbaCLB94IvtmHlrQZcH+shMx/f2SH Yyug== 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=w4FYTiyxhI0mE5fcTHb/1MDqV87uaAoIyMIlxrvf02Y=; b=rpON7/IHbLob6u+X8c1l20BzaGjU1wjEZjC8WJDr6FaUItIEE9woo2CYxI0jDSmbaQ dtbURWifVXDCkMFXYkIH5ISxrOzpi55RDAxUA1nFDku1eygQtpJQaCb1dWZTk88pn7Da KeB3BzhV9EoKXTwsuEnkYzOT2qfIlZUTfYPPZ4GnWUZneIXd8eJ4Is6zTnwhTRZCYsYX nhHsO+66IjgQVKKAR/csMPm/vYEfnfo5CRv57QoVK26yUXzbaFvpNaqr2jpxuGklUWsc Q26FIbraaofO5Jk3oMXw0zHpbODgRrOTnytwYYDfhp4wKGJvv/vuIwG1mgAte1S4qrft f6PA== X-Gm-Message-State: AOAM5309Wg93vv5yDIf85YxbEbwHwGP/86NAyM2zTZaEZINmGDEca0BU BtCaGdO2ZiiZm/GRGlXtfbpAIXAO0V+oMQ== X-Google-Smtp-Source: ABdhPJycN1ppvo1M/Oyv0GRSPMKCxiHr1gt5czsZ/ATAosWqQdT61i2RK16zqYgGRvXagTdOIzOYtg== X-Received: by 2002:a17:902:e78e:b0:15d:29ba:77fe with SMTP id cp14-20020a170902e78e00b0015d29ba77femr18261529plb.119.1651607559106; Tue, 03 May 2022 12:52:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 54/74] target/mips: Use an exception for semihosting Date: Tue, 3 May 2022 12:48:23 -0700 Message-Id: <20220503194843.1379101-55-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.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: 1651611470564100001 Content-Type: text/plain; charset="utf-8" Within do_interrupt, we hold the iothread lock, which is required for Chardev access for the console, and for the round trip for use_gdb_syscalls(). Signed-off-by: Richard Henderson --- target/mips/cpu.h | 3 ++- target/mips/tcg/tcg-internal.h | 2 ++ target/mips/tcg/sysemu_helper.h.inc | 2 -- target/mips/tcg/exception.c | 1 + target/mips/tcg/sysemu/mips-semi.c | 4 ++-- target/mips/tcg/sysemu/tlb_helper.c | 4 ++++ target/mips/tcg/translate.c | 12 ++---------- target/mips/tcg/micromips_translate.c.inc | 6 +++--- target/mips/tcg/mips16e_translate.c.inc | 2 +- target/mips/tcg/nanomips_translate.c.inc | 4 ++-- 10 files changed, 19 insertions(+), 21 deletions(-) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 5335ac10a3..f56a5a95c4 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -1251,8 +1251,9 @@ enum { EXCP_MSAFPE, EXCP_TLBXI, EXCP_TLBRI, + EXCP_SEMIHOST, =20 - EXCP_LAST =3D EXCP_TLBRI, + EXCP_LAST =3D EXCP_SEMIHOST, }; =20 /* diff --git a/target/mips/tcg/tcg-internal.h b/target/mips/tcg/tcg-internal.h index 993720b00c..1d27fa2ff9 100644 --- a/target/mips/tcg/tcg-internal.h +++ b/target/mips/tcg/tcg-internal.h @@ -62,6 +62,8 @@ bool mips_cpu_tlb_fill(CPUState *cs, vaddr address, int s= ize, MMUAccessType access_type, int mmu_idx, bool probe, uintptr_t retaddr); =20 +void mips_semihosting(CPUMIPSState *env); + #endif /* !CONFIG_USER_ONLY */ =20 #endif diff --git a/target/mips/tcg/sysemu_helper.h.inc b/target/mips/tcg/sysemu_h= elper.h.inc index 4353a966f9..af585b5d9c 100644 --- a/target/mips/tcg/sysemu_helper.h.inc +++ b/target/mips/tcg/sysemu_helper.h.inc @@ -9,8 +9,6 @@ * SPDX-License-Identifier: LGPL-2.1-or-later */ =20 -DEF_HELPER_1(do_semihosting, void, env) - /* CP0 helpers */ DEF_HELPER_1(mfc0_mvpcontrol, tl, env) DEF_HELPER_1(mfc0_mvpconf0, tl, env) diff --git a/target/mips/tcg/exception.c b/target/mips/tcg/exception.c index 0b21e0872b..2bd77a61de 100644 --- a/target/mips/tcg/exception.c +++ b/target/mips/tcg/exception.c @@ -125,6 +125,7 @@ static const char * const excp_names[EXCP_LAST + 1] =3D= { [EXCP_TLBRI] =3D "TLB read-inhibit", [EXCP_MSADIS] =3D "MSA disabled", [EXCP_MSAFPE] =3D "MSA floating point", + [EXCP_SEMIHOST] =3D "Semihosting", }; =20 const char *mips_exception_name(int32_t exception) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 6d6296e709..ac12c802a3 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -20,10 +20,10 @@ #include "qemu/osdep.h" #include "cpu.h" #include "qemu/log.h" -#include "exec/helper-proto.h" #include "semihosting/softmmu-uaccess.h" #include "semihosting/semihost.h" #include "semihosting/console.h" +#include "internal.h" =20 typedef enum UHIOp { UHI_exit =3D 1, @@ -238,7 +238,7 @@ static int copy_argn_to_target(CPUMIPSState *env, int a= rg_num, unlock_user(p, gpr, 0); \ } while (0) =20 -void helper_do_semihosting(CPUMIPSState *env) +void mips_semihosting(CPUMIPSState *env) { target_ulong *gpr =3D env->active_tc.gpr; const UHIOp op =3D gpr[25]; diff --git a/target/mips/tcg/sysemu/tlb_helper.c b/target/mips/tcg/sysemu/t= lb_helper.c index 73254d1929..57ffad2902 100644 --- a/target/mips/tcg/sysemu/tlb_helper.c +++ b/target/mips/tcg/sysemu/tlb_helper.c @@ -1053,6 +1053,10 @@ void mips_cpu_do_interrupt(CPUState *cs) } offset =3D 0x180; switch (cs->exception_index) { + case EXCP_SEMIHOST: + cs->exception_index =3D EXCP_NONE; + mips_semihosting(env); + return; case EXCP_DSS: env->CP0_Debug |=3D 1 << CP0DB_DSS; /* diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index 6de5b66650..e554b3adcc 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -12094,14 +12094,6 @@ static inline bool is_uhi(int sdbbp_code) #endif } =20 -#ifdef CONFIG_USER_ONLY -/* The above should dead-code away any calls to this..*/ -static inline void gen_helper_do_semihosting(void *env) -{ - g_assert_not_reached(); -} -#endif - void gen_ldxs(DisasContext *ctx, int base, int index, int rd) { TCGv t0 =3D tcg_temp_new(); @@ -13910,7 +13902,7 @@ static void decode_opc_special_r6(CPUMIPSState *env= , DisasContext *ctx) break; case R6_OPC_SDBBP: if (is_uhi(extract32(ctx->opcode, 6, 20))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { if (ctx->hflags & MIPS_HFLAG_SBRI) { gen_reserved_instruction(ctx); @@ -14322,7 +14314,7 @@ static void decode_opc_special2_legacy(CPUMIPSState= *env, DisasContext *ctx) break; case OPC_SDBBP: if (is_uhi(extract32(ctx->opcode, 6, 20))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { /* * XXX: not clear which exception should be raised diff --git a/target/mips/tcg/micromips_translate.c.inc b/target/mips/tcg/mi= cromips_translate.c.inc index fc6ede75b8..274caf2c3c 100644 --- a/target/mips/tcg/micromips_translate.c.inc +++ b/target/mips/tcg/micromips_translate.c.inc @@ -826,7 +826,7 @@ static void gen_pool16c_insn(DisasContext *ctx) break; case SDBBP16: if (is_uhi(extract32(ctx->opcode, 0, 4))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { /* * XXX: not clear which exception should be raised @@ -942,7 +942,7 @@ static void gen_pool16c_r6_insn(DisasContext *ctx) case R6_SDBBP16: /* SDBBP16 */ if (is_uhi(extract32(ctx->opcode, 6, 4))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { if (ctx->hflags & MIPS_HFLAG_SBRI) { generate_exception(ctx, EXCP_RI); @@ -1311,7 +1311,7 @@ static void gen_pool32axf(CPUMIPSState *env, DisasCon= text *ctx, int rt, int rs) break; case SDBBP: if (is_uhi(extract32(ctx->opcode, 16, 10))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { check_insn(ctx, ISA_MIPS_R1); if (ctx->hflags & MIPS_HFLAG_SBRI) { diff --git a/target/mips/tcg/mips16e_translate.c.inc b/target/mips/tcg/mips= 16e_translate.c.inc index f57e0a5f2a..0a3ba252e4 100644 --- a/target/mips/tcg/mips16e_translate.c.inc +++ b/target/mips/tcg/mips16e_translate.c.inc @@ -952,7 +952,7 @@ static int decode_ase_mips16e(CPUMIPSState *env, DisasC= ontext *ctx) break; case RR_SDBBP: if (is_uhi(extract32(ctx->opcode, 5, 6))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { /* * XXX: not clear which exception should be raised diff --git a/target/mips/tcg/nanomips_translate.c.inc b/target/mips/tcg/nan= omips_translate.c.inc index 916cece4d2..5b0e4683a7 100644 --- a/target/mips/tcg/nanomips_translate.c.inc +++ b/target/mips/tcg/nanomips_translate.c.inc @@ -3691,7 +3691,7 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *en= v, DisasContext *ctx) break; case NM_SDBBP: if (is_uhi(extract32(ctx->opcode, 0, 19))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { if (ctx->hflags & MIPS_HFLAG_SBRI) { gen_reserved_instruction(ctx); @@ -4609,7 +4609,7 @@ static int decode_isa_nanomips(CPUMIPSState *env, Dis= asContext *ctx) break; case NM_SDBBP16: if (is_uhi(extract32(ctx->opcode, 0, 3))) { - gen_helper_do_semihosting(cpu_env); + generate_exception_end(ctx, EXCP_SEMIHOST); } else { if (ctx->hflags & MIPS_HFLAG_SBRI) { gen_reserved_instruction(ctx); --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651610694; cv=none; d=zohomail.com; s=zohoarc; b=WNsxjv+xVZsdkRA9CpoZKrezrEaUnb0WSb+H4Jank1LmFHkXFKhBB0YykqOsdlMgmajpmkJb7umon2lhR/L03W/KFon4Y1eqanABNElbdE36MLlcsSE+BihkOKL2tVzbD0fKF9/ZScC4ZKWRNbcU/syNMjho3H+H3gfwb0nisDo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610694; 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=oYsK2DCkJDRZ/LkA4A11UkQEUx69l+6MA6r9SJofgvk=; b=Um+9w+LAFHPC00HgiWivLrjhZyJvNvS+KK8AbGDUjFrcV7NNu6Rdo4b/t+B+J9DoWs3HcmiOSMpeHCZ6figDA6P91Cl5jT91mf6BOZZktzx9/7xebTF+RDuABdVXv3M4QTFQ/h1649r3zFGGFdnCHEhvNUmB+emyUtLVwU8nxDg= 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 1651610694507334.96382660452844; Tue, 3 May 2022 13:44:54 -0700 (PDT) Received: from localhost ([::1]:48508 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzO9-0003zU-Ar for importer@patchew.org; Tue, 03 May 2022 16:44:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40362) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZf-0008Nc-H8 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:43 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:42903) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZd-0006LA-UW for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:43 -0400 Received: by mail-pj1-x102a.google.com with SMTP id l11-20020a17090a49cb00b001d923a9ca99so2893488pjm.1 for ; Tue, 03 May 2022 12:52:41 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=oYsK2DCkJDRZ/LkA4A11UkQEUx69l+6MA6r9SJofgvk=; b=ECwc7EXty1GffriXrCRjGcaqGc0PJxHteRqPo1NXL8thlQWB+pNNIovhjxxq8muafV W1KLZ1OTvQsJJyRLOPL7vKNuYwTc17R9o5KJLzXxYXP5abAsd+SpcSMIqBoEkq2aniFC oU9/JP8c0J9k4nPIejuz4grtip3t2VqlGF/mSJLrj9LpbxpKXUWx9HrReKnAAvxRaVUj orm64Vj0Zdz+9Ht/8ZrayBklkmhvIoTgFLGZTaTrYlwQhlSlldyL/46I3JtmGREbSUGr DQ6qKY8DdrY+nJs0NTn0Mn6qWReFaVXeHN023qqOtdfgBgniPPHKIXgnCwJvnBGZkJy8 miIQ== 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=oYsK2DCkJDRZ/LkA4A11UkQEUx69l+6MA6r9SJofgvk=; b=ruShd73Nw9C8yxxYRmGw4x1TjyOmvjwqMOc3NO4Bt2smZaDFLDskBLLSYWJGiH3oGu vvtHUh+nMPhFylia4gGH+cmv4BJXbtziZG7e0bKsfyfF9z5DeMrRfhFgPrkGyyJDanC8 YuZx55ZZMCSWbzRQXKbtezzb81qE8LS/LaMnWmzddiaEQfWQjx+NxNosgrNyIrxvviKA 8gQC7mlMJ7WhVHhPNlaVmxJuwhW9Ju4DSNHxV6i+oaKVZepGbm+KHRokwnCZ61pkZYc4 9dfoQorho94Sfy2fI3k2CJHtpGiS+McDzfmauxHfmMp2hSMJ9wW5a6bfHMjl4mlnMF0m uy9A== X-Gm-Message-State: AOAM531wuVjVFpH0rT1jpu+qKFkTP92cIgeOkZbplFG8/AoiVLzWxBSy umod/61ABdp/II0DddeXW5BmXQeRdWRfMQ== X-Google-Smtp-Source: ABdhPJwCcdrmfhrunRvbgGkufzRZxgB2BXdzTcsWe/VX/+BXC820diq/uNEjwlfyZi9JP7X/fOu+dA== X-Received: by 2002:a17:902:a707:b0:15b:6ea2:8ea2 with SMTP id w7-20020a170902a70700b0015b6ea28ea2mr17924477plq.134.1651607560347; Tue, 03 May 2022 12:52:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 55/74] target/mips: Add UHI errno values Date: Tue, 3 May 2022 12:48:24 -0700 Message-Id: <20220503194843.1379101-56-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1651610695795100001 Content-Type: text/plain; charset="utf-8" From the Unified Hosting Interface, MD01069 Reference Manual, version 1.1.6, 06 July 2015. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index ac12c802a3..2a039baf4c 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -74,6 +74,46 @@ enum UHIOpenFlags { UHIOpen_EXCL =3D 0x800 }; =20 +enum UHIErrno { + UHI_EACCESS =3D 13, + UHI_EAGAIN =3D 11, + UHI_EBADF =3D 9, + UHI_EBADMSG =3D 77, + UHI_EBUSY =3D 16, + UHI_ECONNRESET =3D 104, + UHI_EEXIST =3D 17, + UHI_EFBIG =3D 27, + UHI_EINTR =3D 4, + UHI_EINVAL =3D 22, + UHI_EIO =3D 5, + UHI_EISDIR =3D 21, + UHI_ELOOP =3D 92, + UHI_EMFILE =3D 24, + UHI_EMLINK =3D 31, + UHI_ENAMETOOLONG =3D 91, + UHI_ENETDOWN =3D 115, + UHI_ENETUNREACH =3D 114, + UHI_ENFILE =3D 23, + UHI_ENOBUFS =3D 105, + UHI_ENOENT =3D 2, + UHI_ENOMEM =3D 12, + UHI_ENOSPC =3D 28, + UHI_ENOSR =3D 63, + UHI_ENOTCONN =3D 128, + UHI_ENOTDIR =3D 20, + UHI_ENXIO =3D 6, + UHI_EOVERFLOW =3D 139, + UHI_EPERM =3D 1, + UHI_EPIPE =3D 32, + UHI_ERANGE =3D 34, + UHI_EROFS =3D 30, + UHI_ESPIPE =3D 29, + UHI_ETIMEDOUT =3D 116, + UHI_ETXTBSY =3D 26, + UHI_EWOULDBLOCK =3D 11, + UHI_EXDEV =3D 18, +}; + static int errno_mips(int host_errno) { /* Errno values taken from asm-mips/errno.h */ --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611211; cv=none; d=zohomail.com; s=zohoarc; b=XUjaNDrJh0cd33GwdYu6HiVdcKJyDIgf8IRLSbLuhVSLJsEryAbMGwLSqynvUPrq/q0+7FOO+EwxR823kOZtlYd8qtvJcaMhKUxSJWcgt2AIHAlhsVzCUnQx9DtastNRYbF08f/FWFyceYsFeabiw9Vat/70HVULNQEdkwQC4FU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611211; 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=HeLbzu4J7HUJ/gIyU/6OdVT7zEVHegu20jhi9pPruCA=; b=hcVw2jIYvHjMQLYU124PmV4surW9COJioGJ6BIS4uDUGrGEMggn+9DJzMnneSkGfVb/HAzAEz5jvnYte2R+XCfvubG56Qicz5e3rZTE4391zcKZkuYKZOfyvIbmUIZ8qM0Bjx3hJ8R2OvhwYePZAep3f2c6bzY/6aDBtRpS9dP0= 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 1651611211139896.0277507701788; Tue, 3 May 2022 13:53:31 -0700 (PDT) Received: from localhost ([::1]:37114 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzWU-0000dl-4u for importer@patchew.org; Tue, 03 May 2022 16:53:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40408) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZh-0008VV-2q for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:45 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:35731) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZe-0006LH-B6 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:44 -0400 Received: by mail-pl1-x630.google.com with SMTP id d15so15896872plh.2 for ; Tue, 03 May 2022 12:52:41 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=HeLbzu4J7HUJ/gIyU/6OdVT7zEVHegu20jhi9pPruCA=; b=djZ67NzGjP8c9+Z4Lv/14NmOl2flIAmtZ3jLkHkqPcoYWBEPUqtOc5wS8cD5TlSbMW ZO937dvXUQ2WKb4u0WduhdW6xXzkKSx5PM8nwXEDPTsByJxeSvdoMJiCxPkxwUKXmZe9 oSh9SR2GDgDHhPfc/9sED/PdW4lSdvdDQE4k+mK8mryvSBVklqnW9nER3ZTFnqIcclL3 9VSYjWmSSgOTcjmYjCvXm6dnYNYZISGOTVJHj5QtUXviPVsSIDIS2dKZJx8kUC61SyoO BSN34AvUrBz42JgA88ekUQ+0d3DLtDmlOxIKG4h4DJU3ZTOXs8XYqEHYEyZRbu7s2r/D F3eQ== 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=HeLbzu4J7HUJ/gIyU/6OdVT7zEVHegu20jhi9pPruCA=; b=4X6Yub5jjkW//2X2c1hiOXCJkHyBCkbEbqCp+8hGQecW15QIHTxoO0VEHrFoiT/4iy 16OyCssaqofQKhmhfyoNF+NVz3ZZI3mnxSNuDb3l6V14nXgpoNogV7Av1lbexepEYKN3 9e0aiWfJAV2fMkqbt7PjX5ilbFSMbFkWKTrE7SUny1jkz5hkoCXxLUsmIVK81nVjHomW AO9xEq0IFXI8sFjBgV+XXdo0I6HIunhH7unnWuFGwVrQ/YfZ0mPUEzBJkIpR9kdz59cn /9nplKTaDSbcuB3KkHPJfdj4K/J3RzqJ9CbHY+HD5DQoRstr1MplwGCUbFxw7mfVMpUx dlgA== X-Gm-Message-State: AOAM530benyV/aY7UCEzZKUzsIcIr5DwusK6wU2Gow+qRgSWpRnZkv/Y 3wNaxUUujw3yxvmIMW8FebNF7aDXbsf0oA== X-Google-Smtp-Source: ABdhPJxXljkV6iEpSrSSP8SX4GWQzxF0NeVpu/idqkPVfaJobGihS3o0sc6VkjeGsnGuKlRyGvs2Sg== X-Received: by 2002:a17:902:8605:b0:15d:10dc:1c6f with SMTP id f5-20020a170902860500b0015d10dc1c6fmr18366045plo.4.1651607561110; Tue, 03 May 2022 12:52:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 56/74] target/mips: Create report_fault for semihosting Date: Tue, 3 May 2022 12:48:25 -0700 Message-Id: <20220503194843.1379101-57-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651611212806100001 Content-Type: text/plain; charset="utf-8" The UHI specification does not have an EFAULT value, and further specifies that "undefined UHI operations should not return control to the target". So, log the error and abort. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 33 ++++++++++++++---------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 2a039baf4c..33221444e1 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -114,6 +114,13 @@ enum UHIErrno { UHI_EXDEV =3D 18, }; =20 +static void report_fault(CPUMIPSState *env) +{ + int op =3D env->active_tc.gpr[25]; + error_report("Fault during UHI operation %d", op); + abort(); +} + static int errno_mips(int host_errno) { /* Errno values taken from asm-mips/errno.h */ @@ -136,8 +143,7 @@ static int copy_stat_to_target(CPUMIPSState *env, const= struct stat *src, hwaddr len =3D sizeof(struct UHIStat); UHIStat *dst =3D lock_user(VERIFY_WRITE, vaddr, len, 0); if (!dst) { - errno =3D EFAULT; - return -1; + report_fault(env); } =20 dst->uhi_st_dev =3D tswap16(src->st_dev); @@ -188,8 +194,7 @@ static int write_to_file(CPUMIPSState *env, target_ulon= g fd, target_ulong vaddr, int num_of_bytes; void *dst =3D lock_user(VERIFY_READ, vaddr, len, 1); if (!dst) { - errno =3D EFAULT; - return -1; + report_fault(env); } =20 if (offset) { @@ -213,8 +218,7 @@ static int read_from_file(CPUMIPSState *env, target_ulo= ng fd, int num_of_bytes; void *dst =3D lock_user(VERIFY_WRITE, vaddr, len, 0); if (!dst) { - errno =3D EFAULT; - return -1; + report_fault(env); } =20 if (offset) { @@ -237,7 +241,7 @@ static int copy_argn_to_target(CPUMIPSState *env, int a= rg_num, int strsize =3D strlen(semihosting_get_arg(arg_num)) + 1; char *dst =3D lock_user(VERIFY_WRITE, vaddr, strsize, 0); if (!dst) { - return -1; + report_fault(env); } =20 strcpy(dst, semihosting_get_arg(arg_num)); @@ -250,9 +254,7 @@ static int copy_argn_to_target(CPUMIPSState *env, int a= rg_num, do { \ p =3D lock_user_string(addr); \ if (!p) { \ - gpr[2] =3D -1; \ - gpr[3] =3D EFAULT; \ - return; \ + report_fault(env); \ } \ } while (0) =20 @@ -260,16 +262,11 @@ static int copy_argn_to_target(CPUMIPSState *env, int= arg_num, do { \ p =3D lock_user_string(addr); \ if (!p) { \ - gpr[2] =3D -1; \ - gpr[3] =3D EFAULT; \ - return; \ + report_fault(env); \ } \ p2 =3D lock_user_string(addr2); \ if (!p2) { \ - unlock_user(p, addr, 0); \ - gpr[2] =3D -1; \ - gpr[3] =3D EFAULT; \ - return; \ + report_fault(env); \ } \ } while (0) =20 @@ -400,7 +397,7 @@ void mips_semihosting(CPUMIPSState *env) break; #endif default: - fprintf(stderr, "Unknown UHI operation %d\n", op); + error_report("Unknown UHI operation %d", op); abort(); } return; --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651610982; cv=none; d=zohomail.com; s=zohoarc; b=R9+zJNLioE58pExQ2rkLs1mSvMRVwWM4Bo1aZSOOPTEjilz0YHB9kG5rbJIlsk4EXbyTyl2vvUTGUFiDbIPgt1HPNPtwtCN7nSqqXdQjCxGs0xYyvkg7j+OJ+hYQbknx0tYtqWLqxtE0l2i0og+826rsqzYZThZU7c+J1l7Q0R0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610982; 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=GB8QwFJfH3hlfZTD3yMvfbRrCq2bQTobhy4HeZnGERI=; b=J9utuNEKiMqPbgjHt2YSVlTRKvux8z87r70iHC/be5lOttxU0cOvmGDNW6XN74+NSMJt44T4Bx62bUlW/yqgTlkbIoVdYdJiWH5oEOGLMjPUIgctXD5vKBCsTP/VsL5geaIEB6GFPmyoBj3fDXmn2f3avVOUo0XYnc+MrCeRuBI= 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 1651610982279247.7506420356492; Tue, 3 May 2022 13:49:42 -0700 (PDT) Received: from localhost ([::1]:56348 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzSm-0002Cd-LE for importer@patchew.org; Tue, 03 May 2022 16:49:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40404) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZg-0008U3-S2 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:44 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:38538) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZf-0006Lg-CQ for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:44 -0400 Received: by mail-pl1-x62f.google.com with SMTP id n18so15889581plg.5 for ; Tue, 03 May 2022 12:52:42 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=GB8QwFJfH3hlfZTD3yMvfbRrCq2bQTobhy4HeZnGERI=; b=GtB5nMVsrNEpXCWZbCWF8g/W3EwF/Mua1oY9+ap3mkiUKWdwvq4ombMwk+6j2YfWxc LxyJ2hvCXet9+doyYlNi+O4KohOIpAOYg+hj8TN0qA5QCOrLTK0k8EN729Wxvl7VXh3J uA+Q50VankCW1YKTUzXrIb/BS97Iq2wBCSckHFUxo6Bri0dTWW53q8m8HbnfAVyeKzUt 9ameLXqrl13WaeKwCn87sh6+Tmq8NFKoeP7qZ7oizOhOeV3xmcp/4XtJIcxtYtrwc7Be a+rL2d7WmlxdPJCm90wj7vCeNwtEgf8RVAlipnCY8X9XzYALAqIPw+zpazktfICZwk/Y WlKQ== 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=GB8QwFJfH3hlfZTD3yMvfbRrCq2bQTobhy4HeZnGERI=; b=IY+MJZIJ23lf+pyrQIenENyvVVFioiObx+rKAzbX+vHybeXROc7nRxiqpPNnlkMYu/ 1lYYp0A1dBUysi+J0Q9bAsX9zy4LtjWIzIbyaOUj1rdl+/IH4tOc9+IrEgpsMpfJV99e usUywUaeDTOW3OLHt16QEZ1iYbbqlepLWqxfADNO1gOn9TrpTeZUbmNFwDjInAHwhgik UCd8WKGpCYd7Vm0bLsVVWPR7DFo/zezPCWDYTU4Ir6eG0aL4O+NcaaGJx7kq8f50iBTX Q4tlTAb+kVeKaUtJa5hjyDP+s5yUZYIiVZNfcI97M88qUeV6WsepxF9QG4KmTNDXqcej H5uQ== X-Gm-Message-State: AOAM533iZDIKZ+1/CcVuPIwscFpXmJxfEolPpD3GJE2gtVbg0fCqcH4M PUv2DBkqzOkYm5cSUltMO/8mXlFhUe/g4Q== X-Google-Smtp-Source: ABdhPJxD9+15+DjqAjJWoSG1IDKZ7HPmnHzFVdkcKyBIEBkmkahugMEYiEG8Kf7ARA30cumdp5uABg== X-Received: by 2002:a17:902:f652:b0:156:701b:9a2a with SMTP id m18-20020a170902f65200b00156701b9a2amr18143826plg.14.1651607562018; Tue, 03 May 2022 12:52:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 57/74] target/mips: Drop link syscall from semihosting Date: Tue, 3 May 2022 12:48:26 -0700 Message-Id: <20220503194843.1379101-58-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610983985100001 Content-Type: text/plain; charset="utf-8" We don't implement it with _WIN32 hosts, and the syscall is missing from the gdb remote file i/o interface. Since we can't implement it universally, drop it. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 33221444e1..254c7fad9a 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -387,15 +387,6 @@ void mips_semihosting(CPUMIPSState *env) gpr[2] =3D write_to_file(env, gpr[4], gpr[5], gpr[6], gpr[7]); gpr[3] =3D errno_mips(errno); break; -#ifndef _WIN32 - case UHI_link: - GET_TARGET_STRINGS_2(p, gpr[4], p2, gpr[5]); - gpr[2] =3D link(p, p2); - gpr[3] =3D errno_mips(errno); - FREE_TARGET_STRING(p2, gpr[5]); - FREE_TARGET_STRING(p, gpr[4]); - break; -#endif default: error_report("Unknown UHI operation %d", op); abort(); --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611452; cv=none; d=zohomail.com; s=zohoarc; b=FZlGBbEEMR1nsYMupnJoSRo9VpnxJlEOR1VzvXQaf+sHIsAvMjP4ZoOyYjq21LmBSc3Zj3oaAnKAafcc2fu03fZrplrU3O84QI9mrZR3dLwBy0WCC+NKLquSpIcIbbqDJ1cXhlZqST4hYEYQTVCzz2uNVSoUKKJX7nrg/XsY1Ps= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611452; 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=vchvWnQo4YVofH3IH1WWni/usGrLZ5KUM5YMsZGZNkI=; b=mJX//mRL1Qv8pA2D/QrspDHVj/dh8Y4LOLJYUTEV7CT64RboPyneDZ4oVCeNo9hUoebjSoUZfUcUiz2oRSEG0x8DBOkbWTaABgi2BtWJH/f/YjqqCg1mIjFawci6Pg8EpafJ4OQk3atuJ6PF22smSiPU5MyfIcN7YJp1VlEmUzc= 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 1651611452037596.8520156743174; Tue, 3 May 2022 13:57:32 -0700 (PDT) Received: from localhost ([::1]:43922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzaM-0007Wr-Tm for importer@patchew.org; Tue, 03 May 2022 16:57:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40424) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZi-00008p-1m for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:46 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:36739) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZg-0006Lz-9L for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:45 -0400 Received: by mail-pj1-x102d.google.com with SMTP id gj17-20020a17090b109100b001d8b390f77bso3236773pjb.1 for ; Tue, 03 May 2022 12:52:43 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=vchvWnQo4YVofH3IH1WWni/usGrLZ5KUM5YMsZGZNkI=; b=S19xWTONITFI2jr+My+2I/32WrEJeYsStXMuRPt9I8KOqL9hqX8GHNUUQJEA8mrQsN jpNP1tPSEzf2w/Qo9DhaJA1+YnOrZeBaIkDyPCfppwwPA8bzVNtPF9xowqF4sihMQdA8 gdnpCKLZecJAv36P/Al/1aIQmFzuSxcX/m8x+tTdFoxnQqNCrHtXa9i7VbHou3Mxxi06 CTyj97zXuC3aKK1wQPQ9T6Z0uU3Y+1yTaQVWLJettVT7M2LqLENXaCRzmI5Cvk8Ba3cG wFl2RKgMqTcEIm7cQ5sHzS3xueUBRef7Tr8ch3M66yS263y6r//3MPf6ICSdah4N+5a6 2d6w== 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=vchvWnQo4YVofH3IH1WWni/usGrLZ5KUM5YMsZGZNkI=; b=BZeIqw6r3fyzbwaV+W8kLG7TNbFLNpyCcW+0gVTvGlccEKmt0aDH9+/4kKfpODeMMY hin/X9rdQccji6zJMOoMNvRqS0pDYX/8HwRCyKoPMs71XigZ40Znt5FfDCOBdzcJy5xe hZS1h4WS0tmIqruLo1f+oKNZjxxyZGV3gfwCvJAKC/we6AIkQoE3UNtMK+YVrn3Fl7EG ZacqXUNQK4/QRDmdlAFZWKTzW9ILvicoDShyETnM3J7su/SJhb9s1NFT4wWcNnk3OXQL 48pYSz5mCZqMJRAW7NTihPeVNEZXSt17W7b8fV2iFlp9uVGsd+ki8yqU+fAEtAUSeLXE Kz0A== X-Gm-Message-State: AOAM533QaBExhbKtOcm20Wr1sqBBrJ6748uDPbaZ4I6dwP3suj++bz/4 CVQpLlDvWX1C+LvxUUYYnI6VSvoLScdIQA== X-Google-Smtp-Source: ABdhPJw9mC62dckBhAiUmhJrhuDZM+gfZOMBSgI6dzX1rNqWbgNy4+bnrjhgfR6QDM29uEUX7Cv2rQ== X-Received: by 2002:a17:90b:1bc4:b0:1dc:2133:2e01 with SMTP id oa4-20020a17090b1bc400b001dc21332e01mr6564571pjb.221.1651607563037; Tue, 03 May 2022 12:52:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 58/74] target/mips: Drop pread and pwrite syscalls from semihosting Date: Tue, 3 May 2022 12:48:27 -0700 Message-Id: <20220503194843.1379101-59-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651611453076100001 Content-Type: text/plain; charset="utf-8" We don't implement it with _WIN32 hosts, and the syscalls are missing from the gdb remote file i/o interface. Since we can't implement them universally, drop them. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 39 ++++++------------------------ 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 254c7fad9a..93c9d3d0b3 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -188,8 +188,8 @@ static int get_open_flags(target_ulong target_flags) return open_flags; } =20 -static int write_to_file(CPUMIPSState *env, target_ulong fd, target_ulong = vaddr, - target_ulong len, target_ulong offset) +static int write_to_file(CPUMIPSState *env, target_ulong fd, + target_ulong vaddr, target_ulong len) { int num_of_bytes; void *dst =3D lock_user(VERIFY_READ, vaddr, len, 1); @@ -197,23 +197,14 @@ static int write_to_file(CPUMIPSState *env, target_ul= ong fd, target_ulong vaddr, report_fault(env); } =20 - if (offset) { -#ifdef _WIN32 - num_of_bytes =3D 0; -#else - num_of_bytes =3D pwrite(fd, dst, len, offset); -#endif - } else { - num_of_bytes =3D write(fd, dst, len); - } + num_of_bytes =3D write(fd, dst, len); =20 unlock_user(dst, vaddr, 0); return num_of_bytes; } =20 static int read_from_file(CPUMIPSState *env, target_ulong fd, - target_ulong vaddr, target_ulong len, - target_ulong offset) + target_ulong vaddr, target_ulong len) { int num_of_bytes; void *dst =3D lock_user(VERIFY_WRITE, vaddr, len, 0); @@ -221,15 +212,7 @@ static int read_from_file(CPUMIPSState *env, target_ul= ong fd, report_fault(env); } =20 - if (offset) { -#ifdef _WIN32 - num_of_bytes =3D 0; -#else - num_of_bytes =3D pread(fd, dst, len, offset); -#endif - } else { - num_of_bytes =3D read(fd, dst, len); - } + num_of_bytes =3D read(fd, dst, len); =20 unlock_user(dst, vaddr, len); return num_of_bytes; @@ -309,11 +292,11 @@ void mips_semihosting(CPUMIPSState *env) gpr[3] =3D errno_mips(errno); break; case UHI_read: - gpr[2] =3D read_from_file(env, gpr[4], gpr[5], gpr[6], 0); + gpr[2] =3D read_from_file(env, gpr[4], gpr[5], gpr[6]); gpr[3] =3D errno_mips(errno); break; case UHI_write: - gpr[2] =3D write_to_file(env, gpr[4], gpr[5], gpr[6], 0); + gpr[2] =3D write_to_file(env, gpr[4], gpr[5], gpr[6]); gpr[3] =3D errno_mips(errno); break; case UHI_lseek: @@ -379,14 +362,6 @@ void mips_semihosting(CPUMIPSState *env) FREE_TARGET_STRING(p, gpr[4]); abort(); break; - case UHI_pread: - gpr[2] =3D read_from_file(env, gpr[4], gpr[5], gpr[6], gpr[7]); - gpr[3] =3D errno_mips(errno); - break; - case UHI_pwrite: - gpr[2] =3D write_to_file(env, gpr[4], gpr[5], gpr[6], gpr[7]); - gpr[3] =3D errno_mips(errno); - break; default: error_report("Unknown UHI operation %d", op); abort(); --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611847; cv=none; d=zohomail.com; s=zohoarc; b=kTQ0qKT1r8j4xZMANRp5z/9eLG9FD/G0aS5ZTgaR3krXiPAqGg8PHyQ5rcUsCiiaVLFrfD8TVTAk7anYOWM0Bsv4bwH7LMqb2uM3/RI1CKkyQLNTeUo+YBekQzZlh09v4BGKPznFOPLD7Z/ycKEhFD0ZKrCVfbIUqKT9oLaToKw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611847; 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=zPWlxsAWmGm+DKvIMC5SOGM9iT+0ZIRbfdAuRzsXiCE=; b=FrO0ShhmJzzmoLTAIbzbbUuFpu9N/0HS5hWzDbBvWJNAFc/MfP6eMoVCdSTGPlRumoFdOjHBBN7mfxW6RQw8nnDZXrtwJ9JOhWohEVPRIwFlLE1iHxlEEbi7blCHEsD3jEmye9KJMY4eRc6vy5CezCY987bhijVclRmu3CmwzN0= 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 1651611847954347.84591026851444; Tue, 3 May 2022 14:04:07 -0700 (PDT) Received: from localhost ([::1]:53194 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzgk-0000nq-SY for importer@patchew.org; Tue, 03 May 2022 17:04:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZj-0000Is-F9 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:47 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:38541) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZh-0006MB-Em for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:47 -0400 Received: by mail-pl1-x632.google.com with SMTP id n18so15889658plg.5 for ; Tue, 03 May 2022 12:52:44 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=zPWlxsAWmGm+DKvIMC5SOGM9iT+0ZIRbfdAuRzsXiCE=; b=bI7luPe8EdRfPFih7iBg8fyJF47g4LoZArBjLansv7IX3Zk/xS8djk5QvEdYIDk5Uj SCdLMc/x2jUNQ86tCGZzP9O/E8ABUJSPHr2luz32ZNlWZEZg0GokDRck06QnQxTgyiI2 BsFPLfIbbw56jOnGEEedyUK27ziRP0QyMEgq7ns7I6IqgqoK2+J1cgRIfz2v+iJkNPde 5ud+KRanlVlHPdHcLAUJcmXAY7C3iAAO7hR3d+l1UF4AQsMg89nCNq+enJaZMKxz3iJq pkrKRmkEOt9qQkimaRBxHxOWsgZiJbyiVenRmmrNIKGj8NhiD6oDSIgGuffv4LMdY2Hw l7Fg== 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=zPWlxsAWmGm+DKvIMC5SOGM9iT+0ZIRbfdAuRzsXiCE=; b=p9q7q10LldnSfv41SdCmwR6R2YGwYhStgwET3s1WZ2xjpN5TQNCqDhO9GIWD4rMDhg IQ804aExrRJGdWkY7sd1TLhYc7/f6Wd3mA2WKrqy7dIzfX1PAkz55HW9MRIXKz2r/gyL Uz1oQyOqWTTfumRhO4p+5RO+bR/ASo2PrktIxtHXqy9VnOgoD+MBizVJU6CYg4I1YhQc 60124NPAzIgGldM09S0xDHDLl5o0x8oCMhwkQv0lKPj43rjxl/65y0WKwnQkMrmKNUDu WyCO6JqR6qX/I1YAFDyJBEX1QT49Phco5NR9UpBoTX/xL86OQyWFPKkdlgJsZU0EHm/u DrUg== X-Gm-Message-State: AOAM530/oyAfq80cak8cCyMKxBbye0vhszXFnuLpaK9CZ9nVzsqc/BUj jSr+S5yNJpb7/Rk2g6SrAsmP1BrNxD8NNA== X-Google-Smtp-Source: ABdhPJwovfsZGKg1Dli23OdlRy//wnZysZYxOmW2lOxXY1tyh+sM1j28xDDDFYgg29vXmknvWsX6vA== X-Received: by 2002:a17:90b:4b0e:b0:1dc:658c:ae89 with SMTP id lx14-20020a17090b4b0e00b001dc658cae89mr6441016pjb.82.1651607564044; Tue, 03 May 2022 12:52:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 59/74] target/mips: Use semihosting/syscalls.h Date: Tue, 3 May 2022 12:48:28 -0700 Message-Id: <20220503194843.1379101-60-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.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: 1651611849628100001 Content-Type: text/plain; charset="utf-8" This separates guest file descriptors from host file descriptors, and utilizes shared infrastructure for integration with gdbstub. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 219 +++++++++++++---------------- 1 file changed, 95 insertions(+), 124 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 93c9d3d0b3..2704177a95 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -20,9 +20,11 @@ #include "qemu/osdep.h" #include "cpu.h" #include "qemu/log.h" +#include "exec/gdbstub.h" #include "semihosting/softmmu-uaccess.h" #include "semihosting/semihost.h" #include "semihosting/console.h" +#include "semihosting/syscalls.h" #include "internal.h" =20 typedef enum UHIOp { @@ -121,101 +123,79 @@ static void report_fault(CPUMIPSState *env) abort(); } =20 -static int errno_mips(int host_errno) +static void uhi_cb(CPUState *cs, uint64_t ret, int err) { - /* Errno values taken from asm-mips/errno.h */ - switch (host_errno) { - case 0: return 0; - case ENAMETOOLONG: return 78; -#ifdef EOVERFLOW - case EOVERFLOW: return 79; -#endif -#ifdef ELOOP - case ELOOP: return 90; -#endif - default: return EINVAL; - } -} + CPUMIPSState *env =3D cs->env_ptr; =20 -static int copy_stat_to_target(CPUMIPSState *env, const struct stat *src, - target_ulong vaddr) -{ - hwaddr len =3D sizeof(struct UHIStat); - UHIStat *dst =3D lock_user(VERIFY_WRITE, vaddr, len, 0); - if (!dst) { +#define E(N) case E##N: err =3D UHI_E##N; break + + switch (err) { + E(PERM); + E(NOENT); + E(INTR); + E(BADF); + E(BUSY); + E(EXIST); + E(NOTDIR); + E(ISDIR); + E(INVAL); + E(NFILE); + E(MFILE); + E(FBIG); + E(NOSPC); + E(SPIPE); + E(ROFS); + E(NAMETOOLONG); + case 0: + break; + default: + err =3D UHI_EINVAL; + break; + case GDB_EFAULT: report_fault(env); } =20 - dst->uhi_st_dev =3D tswap16(src->st_dev); - dst->uhi_st_ino =3D tswap16(src->st_ino); - dst->uhi_st_mode =3D tswap32(src->st_mode); - dst->uhi_st_nlink =3D tswap16(src->st_nlink); - dst->uhi_st_uid =3D tswap16(src->st_uid); - dst->uhi_st_gid =3D tswap16(src->st_gid); - dst->uhi_st_rdev =3D tswap16(src->st_rdev); - dst->uhi_st_size =3D tswap64(src->st_size); - dst->uhi_st_atime =3D tswap64(src->st_atime); - dst->uhi_st_mtime =3D tswap64(src->st_mtime); - dst->uhi_st_ctime =3D tswap64(src->st_ctime); -#ifdef _WIN32 - dst->uhi_st_blksize =3D 0; - dst->uhi_st_blocks =3D 0; -#else - dst->uhi_st_blksize =3D tswap64(src->st_blksize); - dst->uhi_st_blocks =3D tswap64(src->st_blocks); -#endif - unlock_user(dst, vaddr, len); - return 0; +#undef E + + env->active_tc.gpr[2] =3D ret; + env->active_tc.gpr[3] =3D err; } =20 -static int get_open_flags(target_ulong target_flags) +static void uhi_fstat_cb(CPUState *cs, uint64_t ret, int err) { - int open_flags =3D 0; + QEMU_BUILD_BUG_ON(sizeof(UHIStat) < sizeof(struct gdb_stat)); =20 - if (target_flags & UHIOpen_RDWR) { - open_flags |=3D O_RDWR; - } else if (target_flags & UHIOpen_WRONLY) { - open_flags |=3D O_WRONLY; - } else { - open_flags |=3D O_RDONLY; + if (!err) { + CPUMIPSState *env =3D cs->env_ptr; + target_ulong addr =3D env->active_tc.gpr[5]; + UHIStat *dst =3D lock_user(VERIFY_WRITE, addr, sizeof(UHIStat), 1); + struct gdb_stat s; + + if (!dst) { + report_fault(env); + } + + memcpy(&s, dst, sizeof(struct gdb_stat)); + memset(dst, 0, sizeof(UHIStat)); + + dst->uhi_st_dev =3D tswap16(be32_to_cpu(s.gdb_st_dev)); + dst->uhi_st_ino =3D tswap16(be32_to_cpu(s.gdb_st_ino)); + dst->uhi_st_mode =3D tswap32(be32_to_cpu(s.gdb_st_mode)); + dst->uhi_st_nlink =3D tswap16(be32_to_cpu(s.gdb_st_nlink)); + dst->uhi_st_uid =3D tswap16(be32_to_cpu(s.gdb_st_uid)); + dst->uhi_st_gid =3D tswap16(be32_to_cpu(s.gdb_st_gid)); + dst->uhi_st_rdev =3D tswap16(be32_to_cpu(s.gdb_st_rdev)); + dst->uhi_st_size =3D tswap64(be64_to_cpu(s.gdb_st_size)); + dst->uhi_st_atime =3D tswap64(be32_to_cpu(s.gdb_st_atime)); + dst->uhi_st_mtime =3D tswap64(be32_to_cpu(s.gdb_st_mtime)); + dst->uhi_st_ctime =3D tswap64(be32_to_cpu(s.gdb_st_ctime)); + dst->uhi_st_blksize =3D tswap64(be64_to_cpu(s.gdb_st_blksize)); + dst->uhi_st_blocks =3D tswap64(be64_to_cpu(s.gdb_st_blocks)); + + unlock_user(dst, addr, sizeof(UHIStat)); } =20 - open_flags |=3D (target_flags & UHIOpen_APPEND) ? O_APPEND : 0; - open_flags |=3D (target_flags & UHIOpen_CREAT) ? O_CREAT : 0; - open_flags |=3D (target_flags & UHIOpen_TRUNC) ? O_TRUNC : 0; - open_flags |=3D (target_flags & UHIOpen_EXCL) ? O_EXCL : 0; - - return open_flags; -} - -static int write_to_file(CPUMIPSState *env, target_ulong fd, - target_ulong vaddr, target_ulong len) -{ - int num_of_bytes; - void *dst =3D lock_user(VERIFY_READ, vaddr, len, 1); - if (!dst) { - report_fault(env); - } - - num_of_bytes =3D write(fd, dst, len); - - unlock_user(dst, vaddr, 0); - return num_of_bytes; -} - -static int read_from_file(CPUMIPSState *env, target_ulong fd, - target_ulong vaddr, target_ulong len) -{ - int num_of_bytes; - void *dst =3D lock_user(VERIFY_WRITE, vaddr, len, 0); - if (!dst) { - report_fault(env); - } - - num_of_bytes =3D read(fd, dst, len); - - unlock_user(dst, vaddr, len); - return num_of_bytes; + uhi_cb(cs, ret, err); } =20 static int copy_argn_to_target(CPUMIPSState *env, int arg_num, @@ -260,68 +240,59 @@ static int copy_argn_to_target(CPUMIPSState *env, int= arg_num, =20 void mips_semihosting(CPUMIPSState *env) { + CPUState *cs =3D env_cpu(env); target_ulong *gpr =3D env->active_tc.gpr; const UHIOp op =3D gpr[25]; char *p, *p2; =20 switch (op) { case UHI_exit: - qemu_log("UHI(%d): exit(%d)\n", op, (int)gpr[4]); + gdb_exit(gpr[4]); exit(gpr[4]); + case UHI_open: - GET_TARGET_STRING(p, gpr[4]); - if (!strcmp("/dev/stdin", p)) { - gpr[2] =3D 0; - } else if (!strcmp("/dev/stdout", p)) { - gpr[2] =3D 1; - } else if (!strcmp("/dev/stderr", p)) { - gpr[2] =3D 2; - } else { - gpr[2] =3D open(p, get_open_flags(gpr[5]), gpr[6]); - gpr[3] =3D errno_mips(errno); + { + int ret =3D -1; + + GET_TARGET_STRING(p, gpr[4]); + if (!strcmp("/dev/stdin", p)) { + ret =3D 0; + } else if (!strcmp("/dev/stdout", p)) { + ret =3D 1; + } else if (!strcmp("/dev/stderr", p)) { + ret =3D 2; + } + FREE_TARGET_STRING(p, gpr[4]); + + /* FIXME: reusing a guest fd doesn't seem correct. */ + if (ret >=3D 0) { + gpr[2] =3D ret; + break; + } + + semihost_sys_open(cs, uhi_cb, gpr[4], 0, gpr[5], gpr[6]); } - FREE_TARGET_STRING(p, gpr[4]); break; + case UHI_close: - if (gpr[4] < 3) { - /* ignore closing stdin/stdout/stderr */ - gpr[2] =3D 0; - return; - } - gpr[2] =3D close(gpr[4]); - gpr[3] =3D errno_mips(errno); + semihost_sys_close(cs, uhi_cb, gpr[4]); break; case UHI_read: - gpr[2] =3D read_from_file(env, gpr[4], gpr[5], gpr[6]); - gpr[3] =3D errno_mips(errno); + semihost_sys_read(cs, uhi_cb, gpr[4], gpr[5], gpr[6]); break; case UHI_write: - gpr[2] =3D write_to_file(env, gpr[4], gpr[5], gpr[6]); - gpr[3] =3D errno_mips(errno); + semihost_sys_write(cs, uhi_cb, gpr[4], gpr[5], gpr[6]); break; case UHI_lseek: - gpr[2] =3D lseek(gpr[4], gpr[5], gpr[6]); - gpr[3] =3D errno_mips(errno); + semihost_sys_lseek(cs, uhi_cb, gpr[4], gpr[5], gpr[6]); break; case UHI_unlink: - GET_TARGET_STRING(p, gpr[4]); - gpr[2] =3D remove(p); - gpr[3] =3D errno_mips(errno); - FREE_TARGET_STRING(p, gpr[4]); + semihost_sys_remove(cs, uhi_cb, gpr[4], 0); break; case UHI_fstat: - { - struct stat sbuf; - memset(&sbuf, 0, sizeof(sbuf)); - gpr[2] =3D fstat(gpr[4], &sbuf); - gpr[3] =3D errno_mips(errno); - if (gpr[2]) { - return; - } - gpr[2] =3D copy_stat_to_target(env, &sbuf, gpr[5]); - gpr[3] =3D errno_mips(errno); - } + semihost_sys_fstat(cs, uhi_fstat_cb, gpr[4], gpr[5]); break; + case UHI_argc: gpr[2] =3D semihosting_get_argc(); break; --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611191; cv=none; d=zohomail.com; s=zohoarc; b=ma+sYRwy3wV+ZN2dQABi6dVSwZYEO8DTmHUi4cUKvUKRdiaIiC+Qpq+XS1JT+Ezd5zbZ0HsZJtVSg2N1ILKOLdYj9LQNFpeBCbsNsHRbjC9wNpgLdjyXjXsc6QUNg1ZiLW8i0U5rXxJgOem8EkmForDaecu7dHR3tW/DgEVLkqk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611191; 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=wshqblo3GajKvQ1u/4/sDSAzNuqAbf17z7w/qZv2wdo=; b=SFGHm50iAjENiPsiMSed8dGpL5Eq2nOMaBDtIkKwFtZ2RKBnsd6FTSPIkXL+O8bCCzECiYv5JAhvMMdZ2aHCDpOnBSQe5j9vIPznLYhdyKFuENYDkK4Zd/kkeDN0wGkabi5S0Pj77MIEJbXUY0Ns04YXoyBgFFhznigeFevFEw4= 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 1651611191811991.7504700139448; Tue, 3 May 2022 13:53:11 -0700 (PDT) Received: from localhost ([::1]:35866 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzWA-00089Z-N4 for importer@patchew.org; Tue, 03 May 2022 16:53:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40452) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZk-0000NZ-8K for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:48 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:39814) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZi-0006MY-Hk for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:47 -0400 Received: by mail-pl1-x62e.google.com with SMTP id x18so4707153plg.6 for ; Tue, 03 May 2022 12:52:46 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52: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=wshqblo3GajKvQ1u/4/sDSAzNuqAbf17z7w/qZv2wdo=; b=FeZKgubc1srbehQEOrBWHTwxekJuen5Oxtvob3HnAB4508UBCxM7LKPAKOJJlTaXu8 eny8JdilcN9r70kBPxA/Al3B1w0kWX+IeKk0D20em90Da/ZkSXjkF4g4CJu8of7A04FE Iht1TBTDz13tQZleOxqivqM+fiQu5vvZ/V4rynXtfn/+ise9/cH++4bG99NIdoWHkNpc crKGv9eY+pbFzsQUwM26trkpidXasvfi381WKL3Oy3aXgCnWVzcOupmUHx8rkZ5J8T71 dc268uUAxPD0UMDoyu0fz2C+rsuL20yP1YdbmJ58LdUnx59uAP2cIFd43U7jlzPo5t8L 9tgg== 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=wshqblo3GajKvQ1u/4/sDSAzNuqAbf17z7w/qZv2wdo=; b=aaUO3rKBxCR4n1LHVWqJxJTW6f9LiS4hDEO0Yq6Fw544G68r9kD8/bjIzTNmsokDW0 aStqt2CyNae1HjhrK1pkVjy5qmy2sDZDZOmfHwXJIqfGYMYPNuIGX+sqazvhbZo+SZBa epsyz7BHzpx6UCWecL1BBsJUlcUiq2gmzdn5YGn6U1dtpno8kbwirWFTNHa5VCS7dNX8 1L6QMLtGMp3w1C0ZaSlQKn99K7hNBPPfFiHBtn8NrjbTAzSRx0Fj+rsO6vjkjN1hSI7E aAnDSX4INAeBdQl97h2NxJDwB7QoAjz2oWSkha8ncx6LquR3DgytHF6ThTeY1hEKZsHI dXZg== X-Gm-Message-State: AOAM530L8xu01zK/Z5ufROhOqNBcs/FkxPbZ6koKfj1A8BOX9Q+ezD/C MljtzrJOw8OV8v89yjg5+hq4kJ+Lx0OCbQ== X-Google-Smtp-Source: ABdhPJx8yCuyIiiENk+LEp1igIqVo1ir4ccI2gJpNHY5vBcTTaDlWepQvJGK8RfqdWUvQMntH2fNjg== X-Received: by 2002:a17:90a:e7ca:b0:1dc:4aeb:be5d with SMTP id kb10-20020a17090ae7ca00b001dc4aebbe5dmr6393921pjb.185.1651607565294; Tue, 03 May 2022 12:52:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 60/74] target/mips: Avoid qemu_semihosting_log_out for UHI_plog Date: Tue, 3 May 2022 12:48:29 -0700 Message-Id: <20220503194843.1379101-61-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651611194753100001 Content-Type: text/plain; charset="utf-8" Use semihost_sys_write and/or qemu_semihosting_console_write for implementing plog. When using gdbstub, copy the temp string below the stack so that gdb has a guest address from which to perform the log. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 52 +++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 2704177a95..d8c9be5e9f 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -310,20 +310,50 @@ void mips_semihosting(CPUMIPSState *env) } gpr[2] =3D copy_argn_to_target(env, gpr[4], gpr[5]); break; + case UHI_plog: - GET_TARGET_STRING(p, gpr[4]); - p2 =3D strstr(p, "%d"); - if (p2) { - int char_num =3D p2 - p; - GString *s =3D g_string_new_len(p, char_num); - g_string_append_printf(s, "%d%s", (int)gpr[5], p2 + 2); - gpr[2] =3D qemu_semihosting_log_out(s->str, s->len); - g_string_free(s, true); - } else { - gpr[2] =3D qemu_semihosting_log_out(p, strlen(p)); + { + target_ulong addr =3D gpr[4]; + ssize_t len =3D target_strlen(addr); + GString *str; + char *pct_d; + + if (len < 0) { + report_fault(env); + } + p =3D lock_user(VERIFY_READ, addr, len, 1); + if (!p) { + report_fault(env); + } + + pct_d =3D strstr(p, "%d"); + if (!pct_d) { + FREE_TARGET_STRING(p, addr); + semihost_sys_write(cs, uhi_cb, 2, addr, len); + break; + } + + str =3D g_string_new_len(p, pct_d - p); + g_string_append_printf(str, "%d%s", (int)gpr[5], pct_d + 2); + FREE_TARGET_STRING(p, addr); + + /* + * When we're using gdb, we need a guest address, so + * drop the string onto the stack below the stack pointer. + */ + if (use_gdb_syscalls()) { + addr =3D gpr[29] - str->len; + p =3D lock_user(VERIFY_WRITE, addr, str->len, 0); + memcpy(p, str->str, str->len); + unlock_user(p, addr, str->len); + semihost_sys_write(cs, uhi_cb, 2, addr, str->len); + } else { + gpr[2] =3D qemu_semihosting_console_write(str->str, str->l= en); + } + g_string_free(str, true); } - FREE_TARGET_STRING(p, gpr[4]); break; + case UHI_assert: GET_TARGET_STRINGS_2(p, gpr[4], p2, gpr[5]); printf("assertion '"); --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651612121; cv=none; d=zohomail.com; s=zohoarc; b=jK7gSQGU3KZ3PGLT6npT51d6N/kPxJJWsKj84Ld47oLLI2SJuExTUySAcFJdD481EZLs7EMkYp9wXfgOKG8dQOd1dqQ+36RH7ATamdZ+YsadpLqCdU4pLjnun48BPV6Gl3qFlXEHVqMVxXLaQ5GWZ1CtVpdAcfrp+NEV0fh7YpA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651612121; 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=0KmR0I9MQL8sMij82tj+TGbywtXC8SOF01Vq62VNOXc=; b=Tl+x1ewC0BUn9tijRq2fbPQYGnNfHRwg0ZXlTmD6k0OqT0nphUuYaSwtVCOrlQNHS2qAsCIWeg/s1rYVu42jo2clijCb7ms9Te5ZtR3wZbexCR4rFfBa87sPS1w+FIxPh6HOiswiSk/EawMZoSYA83H/bYl2M7BEJYnS/f8+EUc= 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 1651612121783474.90336952025393; Tue, 3 May 2022 14:08:41 -0700 (PDT) Received: from localhost ([::1]:32946 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzlA-00083I-Qd for importer@patchew.org; Tue, 03 May 2022 17:08:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40482) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZm-0000Xo-6M for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:50 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:41905) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZk-0006Mt-Ic for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:49 -0400 Received: by mail-pj1-x1034.google.com with SMTP id z5-20020a17090a468500b001d2bc2743c4so2917140pjf.0 for ; Tue, 03 May 2022 12:52:48 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=0KmR0I9MQL8sMij82tj+TGbywtXC8SOF01Vq62VNOXc=; b=bj978LCYcEKh12QBdn3r1wS7KagW1xp0uHsYD9BxBUJLXw83ImhdoDrGcndFTpFRaD VLIRHpU5DB9ImBOWN8yjes7VW/fYNDxR/toHvgiPNA79G3U0o9dyilUZTixnY2Ln8KZN p/Z9e/drfrwh8YGIbIuQMk4M7NYZVhfgBcCL0pCgcEpaQW5Zwpbt/MMfCdBfTCw6IJuS sQS02IjtvUeOGyYO5aBvZd8ygljdQWuERD7KPsvzaAgq9zduBheW7W16Edg0IBpAjB49 BIEjEegpmzWwiIA1k+/8E75NI3XMRp7wkw0seJY6KU3Dmh71lMO2QoEx1m3c8hALWL6J 9D7w== 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=0KmR0I9MQL8sMij82tj+TGbywtXC8SOF01Vq62VNOXc=; b=lBgWhiKwu0OlpmkV0qVSvR5TRYC3+RvnWxgGONAExV90eyir1lgCeb/b0GiytIjy3I 8/byjARGg7Z1BueBCFUcjNNdeSLOORkUTfcXbImQxe/6y+ms2NftMBh4nQB0QFoQKFCq Qg/uTNt9jcHuchXpH4ZzDsaelzLKQGb+AxUT+1REC5xEJFHkmreBo5bWj0i/PMq2Q8XR yRD2FzisukcW2PYqhheJsga4t3QLfeWLOYcSjvCeREZbloCEBeGt5AinKGoXiptjLI8H UM526Qy/6sp6KBVBTOfKUcDDsOBGg9LlURhzg5mo3dkxhzKQvWyfkqanIaE0KGxEeQnV 5uMQ== X-Gm-Message-State: AOAM531m+pft/DquVNw8y0jcG9LD3PFgHILLR55WsOLlcxeH7oyHrkUD xYwqISd/5USB6nMc//z7s1HYyVSzdRYq/Q== X-Google-Smtp-Source: ABdhPJy/Wzp6AEXSxxu8FVJPnEY1iZYZ7NhZns8luyHWofqv73FGrwE0H8eYYEwayNDX5OAGA0GbXA== X-Received: by 2002:a17:90b:704:b0:1d7:367a:f16b with SMTP id s4-20020a17090b070400b001d7367af16bmr6541124pjz.197.1651607567332; Tue, 03 May 2022 12:52:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 61/74] target/mips: Use error_report for UHI_assert Date: Tue, 3 May 2022 12:48:30 -0700 Message-Id: <20220503194843.1379101-62-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1651612122279100001 Content-Type: text/plain; charset="utf-8" Always log the assert locally. Do not report_fault, but instead include the fact of the fault in the assertion. Don't bother freeing allocated strings before the abort(). Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 39 ++++++++++++++---------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index d8c9be5e9f..df1747aafe 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -221,18 +221,6 @@ static int copy_argn_to_target(CPUMIPSState *env, int = arg_num, } \ } while (0) =20 -#define GET_TARGET_STRINGS_2(p, addr, p2, addr2) \ - do { \ - p =3D lock_user_string(addr); \ - if (!p) { \ - report_fault(env); \ - } \ - p2 =3D lock_user_string(addr2); \ - if (!p2) { \ - report_fault(env); \ - } \ - } while (0) - #define FREE_TARGET_STRING(p, gpr) \ do { \ unlock_user(p, gpr, 0); \ @@ -243,7 +231,7 @@ void mips_semihosting(CPUMIPSState *env) CPUState *cs =3D env_cpu(env); target_ulong *gpr =3D env->active_tc.gpr; const UHIOp op =3D gpr[25]; - char *p, *p2; + char *p; =20 switch (op) { case UHI_exit: @@ -355,14 +343,23 @@ void mips_semihosting(CPUMIPSState *env) break; =20 case UHI_assert: - GET_TARGET_STRINGS_2(p, gpr[4], p2, gpr[5]); - printf("assertion '"); - printf("\"%s\"", p); - printf("': file \"%s\", line %d\n", p2, (int)gpr[6]); - FREE_TARGET_STRING(p2, gpr[5]); - FREE_TARGET_STRING(p, gpr[4]); - abort(); - break; + { + const char *msg, *file; + + msg =3D lock_user_string(gpr[4]); + if (!msg) { + msg =3D ""; + } + file =3D lock_user_string(gpr[5]); + if (!file) { + file =3D ""; + } + + error_report("UHI assertion \"%s\": file \"%s\", line %d", + msg, file, (int)gpr[6]); + abort(); + } + default: error_report("Unknown UHI operation %d", op); abort(); --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651610625; cv=none; d=zohomail.com; s=zohoarc; b=BqRkOA2suQ1qVRTqBNt3nYmRLLfdwI1Y1yTfYpU5NPiNM5VMLcMUSuD8etxSjJHdJLoVzzWzLYjEtg/d65S2D/L2N8pR2ijqUscSRU+2sVwttgIbDCUgWG2hJa1UR2+5GkurmVUErsxjR7L0Ae6c/5elaEbf4Rm86WeXZSX7mFk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610625; 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=7hrYGm6CB5wl83BARKhSg3dxjfTTX0HLuXW9+o58cZc=; b=SGBsJTViPKfR36ofTq6UF8tIUtB9akc64kOXPhErQAei+svQCmY+66l82JGmFhX2iNTfeIOiClzHRnDSOs3Vq5WGRNooeU3DPNZILt+e1cpOue6fPPi+bxSZs6I3uja1ocFxh04Lbr55BKXqvAPEHYS6EXexBp7A1GmYhAQzMGE= 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 1651610625502108.54004198622931; Tue, 3 May 2022 13:43:45 -0700 (PDT) Received: from localhost ([::1]:45442 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzN1-0001E4-UM for importer@patchew.org; Tue, 03 May 2022 16:43:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZm-0000ZJ-Li for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:50 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:36739) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZk-0006Lz-VJ for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:50 -0400 Received: by mail-pj1-x102d.google.com with SMTP id gj17-20020a17090b109100b001d8b390f77bso3236773pjb.1 for ; Tue, 03 May 2022 12:52:48 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=7hrYGm6CB5wl83BARKhSg3dxjfTTX0HLuXW9+o58cZc=; b=an/9bH1s1Sd2UKZccy/vCK9LjN63Y5lWUvFKNK9c7eakLmlMK/zcLoAan6KiX4/UoW /WEFmYOFMG9kUFf0njFTv54ghU4az9F6SZYr99TAbWzusTzu/ARsuwEL2Kb2jAqF94uN 22mqJ5hBzW/QIMydjGVnPU6H6Y0SvzL9L9ekrqVOtFfHmTMQq48Tejed7754G4Wcz3yo tnTA+3rndlWP9rkea5M5uORYiQnCWj/1REeQnqyHVZphOC+TbJ4D6x/Vts1/l49s+5Ay FgDHPv2SVnUMLxKkrO/s1zpYyKTj3MdIR9QRnmztyYrsoqpzlJBPOLAzk2PimqKuAli3 //Cg== 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=7hrYGm6CB5wl83BARKhSg3dxjfTTX0HLuXW9+o58cZc=; b=iN+rnx6UHbRMLf6U4NoBQhqFGWT4qEAKySUNVIhYsnARsoUT+19HEeNteNfm27GTVn xsDKrGVsfjNA+AQCJ2Mbw9FXzgTqPz5dFw9TAzjjEe4bBkBct1aoDz2D2cYvKnvceCZv o3Jbv3m97dXAYfDX+frP87BidRcTtNnXtUGsmzHsvXY3Mf3Rpo6dgXqTsfpB1ieapGet 1Tf9qcvlRKyvqMfFxqOZqduKP9aopuk4DjdoAZl5eOyd0lLll+oQhbFZ+fiwauXXtTcn T94JYoE0ApzCeFzXooQvwpTgMAe2X6tX8t/fvaPIQGtD7okEW55zE8NSadkazRAMVPIm 00oQ== X-Gm-Message-State: AOAM533B1yDc19Vy4ttrLcJjQWlMxUAQWprtoASyhi71ZxgumUCnHwBE d+SIUb7XOwVfUW84YvvklxUusCpcuaNMiQ== X-Google-Smtp-Source: ABdhPJxouzSepM8WB/5Tvd8B07D/3kUqwmf8X3qjYv8MBi94OHNsDp0SQgfmyWJxq2hI3jEKbXJMGA== X-Received: by 2002:a17:90b:33c8:b0:1d9:9023:1103 with SMTP id lk8-20020a17090b33c800b001d990231103mr6394643pjb.26.1651607568148; Tue, 03 May 2022 12:52:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 62/74] semihosting: Remove qemu_semihosting_log_out Date: Tue, 3 May 2022 12:48:31 -0700 Message-Id: <20220503194843.1379101-63-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651610627482100001 Content-Type: text/plain; charset="utf-8" The function is no longer used. Signed-off-by: Richard Henderson --- include/semihosting/console.h | 13 ------------- semihosting/console.c | 9 --------- 2 files changed, 22 deletions(-) diff --git a/include/semihosting/console.h b/include/semihosting/console.h index 61b0cb3a94..bd78e5f03f 100644 --- a/include/semihosting/console.h +++ b/include/semihosting/console.h @@ -40,19 +40,6 @@ int qemu_semihosting_console_read(CPUState *cs, void *bu= f, int len); */ int qemu_semihosting_console_write(void *buf, int len); =20 -/** - * qemu_semihosting_log_out: - * @s: pointer to string - * @len: length of string - * - * Send a string to the debug output. Unlike console_out these strings - * can't be sent to a remote gdb instance as they don't exist in guest - * memory. - * - * Returns: number of bytes written - */ -int qemu_semihosting_log_out(const char *s, int len); - /* * qemu_semihosting_console_block_until_ready: * @cs: CPUState diff --git a/semihosting/console.c b/semihosting/console.c index cda7cf1905..5b1ec0a1c3 100644 --- a/semihosting/console.c +++ b/semihosting/console.c @@ -38,15 +38,6 @@ typedef struct SemihostingConsole { =20 static SemihostingConsole console; =20 -int qemu_semihosting_log_out(const char *s, int len) -{ - if (console.chr) { - return qemu_chr_write_all(console.chr, (uint8_t *) s, len); - } else { - return write(STDERR_FILENO, s, len); - } -} - #define FIFO_SIZE 1024 =20 static int console_can_read(void *opaque) --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611805; cv=none; d=zohomail.com; s=zohoarc; b=LPxtjEos0+ZEZ8LKHr+eb/z3Jb8+nGKCNx1YOX6i1t340afRfV1+sPqOvLT1V/bIrF7lyJ+yCT9H0/0vLCpu4K0ebGO5zjAB56hyqIeptTzzm2zWhyrosh/pT+cTyy9ay/qk/IHll0lr6Ycpp+VdaN2YsKZ3uZD1rR0q6/CaOjM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611805; 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=8TFArIwYtOuJWeu7AXv9g90fK/0fq597uhKnECoQyCg=; b=dUrADy0/vhSv1rYacKTYCUglf1tnZNciOEuJJ5RkThgJq1eAzinWj/xNlcPbElp9jGYiIcSm9+uvTDlHhEHmQlB77AgwJ3dEl+jVTKccuNi3LxakYndxaCbtvZSCCix1VBdtBS6dnmDTn27XCgSh8bQBeOnFayYDRhkR7CmwVgc= 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 1651611805920761.1934452818825; Tue, 3 May 2022 14:03:25 -0700 (PDT) Received: from localhost ([::1]:51950 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzg4-0007t4-QO for importer@patchew.org; Tue, 03 May 2022 17:03:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40518) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZo-0000fh-1B for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:56 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:34420) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZm-0006N4-CI for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:51 -0400 Received: by mail-pg1-x529.google.com with SMTP id j70so3893402pge.1 for ; Tue, 03 May 2022 12:52:49 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:48 -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=8TFArIwYtOuJWeu7AXv9g90fK/0fq597uhKnECoQyCg=; b=GbXm4OHgEzCA0aL5AzcAAvITrm+AKr27N1WCAdTZQ0w5qwy5M29jgYGyseh8BIaOlu lX/VLcA2xLsSzEVe4vlZ0/UNB2nbfngPPe5IDXoyybUk6Z2D5Q/ZoklFshXeAzmuykH7 bN0Stfg2ConXMcfNPVrSdbC7+97nnbbSJNw7Yge67RDfC29mRJyxxh73YoXUwqvQaITf Ds8A/3Sucu2V7Vbar0oMQEdIsy4ZL39fhBto2GMJ+y+WXwRZQNr4bJ32P/d7znVbIzU5 E7Iw5XKBvf1J2AK6OOT5i67OmQwIIvVlgTRtqzyqkwrzFBxlgqkH7T0/qnhwqsz/yVnw 1MAQ== 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=8TFArIwYtOuJWeu7AXv9g90fK/0fq597uhKnECoQyCg=; b=li3+cU7/wSA6/zbGV9He7mJoqE8k4zibDk2hdYV5Dy7CRUVao5gGlk7XPMOY6AoRRs OqyzByKtqKZrCIr8Zzvvpgvf5Nd1xBv4xp+4enW5qdIx9l4go/X1Y7zeBoOrzEdWBL/H 5sG6kyjuX8MQ6X232dhXeihqDorhTU7AK0927dCn4DTWkQvcdQgfEYgwxqCWhVnFJF8X HAatwc8+ru9pL0JWNPOevtU57LJACr6l3OUIDo56y4WmvOI+iHHkm7SM212PoYVCpAg/ OUTrEVSDwAn6ljSFhT4wH/yjtpDR8AqmD4ei4wDzLz0YM0MzgY1JGLFWb3hamaH8OeF0 iJOQ== X-Gm-Message-State: AOAM531VcgnTDnUS/YydtXkxtf3AqswtvNtEseEkwqVDQmvCZ/EJVH7p Hq5i5DPmTweLfUJuwEGiThwOSh4Ga5yaDQ== X-Google-Smtp-Source: ABdhPJwm9cdSfHOGEucYB1E1OYApU6qJ5ACP/gQFqYDJKMrX0lN1QyeeUIgOgUwxSjfHdxJdY//PUw== X-Received: by 2002:a63:444f:0:b0:39d:3aa5:c9f0 with SMTP id t15-20020a63444f000000b0039d3aa5c9f0mr15185449pgk.363.1651607568938; Tue, 03 May 2022 12:52:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 63/74] target/mips: Simplify UHI_argnlen and UHI_argn Date: Tue, 3 May 2022 12:48:32 -0700 Message-Id: <20220503194843.1379101-64-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.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: 1651611807379100001 Content-Type: text/plain; charset="utf-8" With semihosting_get_arg, we already have a check vs argc, so there's no point replicating it -- just check the result vs NULL. Merge copy_argn_to_target into its caller. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 44 ++++++++++++++---------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index df1747aafe..0f5b509ce2 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -198,21 +198,6 @@ static void uhi_fstat_cb(CPUState *cs, uint64_t ret, i= nt err) uhi_cb(cs, ret, err); } =20 -static int copy_argn_to_target(CPUMIPSState *env, int arg_num, - target_ulong vaddr) -{ - int strsize =3D strlen(semihosting_get_arg(arg_num)) + 1; - char *dst =3D lock_user(VERIFY_WRITE, vaddr, strsize, 0); - if (!dst) { - report_fault(env); - } - - strcpy(dst, semihosting_get_arg(arg_num)); - - unlock_user(dst, vaddr, strsize); - return 0; -} - #define GET_TARGET_STRING(p, addr) \ do { \ p =3D lock_user_string(addr); \ @@ -285,18 +270,31 @@ void mips_semihosting(CPUMIPSState *env) gpr[2] =3D semihosting_get_argc(); break; case UHI_argnlen: - if (gpr[4] >=3D semihosting_get_argc()) { - gpr[2] =3D -1; - return; + { + const char *s =3D semihosting_get_arg(gpr[4]); + gpr[2] =3D s ? strlen(s) : -1; } - gpr[2] =3D strlen(semihosting_get_arg(gpr[4])); break; case UHI_argn: - if (gpr[4] >=3D semihosting_get_argc()) { - gpr[2] =3D -1; - return; + { + const char *s =3D semihosting_get_arg(gpr[4]); + target_ulong addr; + size_t len; + + if (!s) { + gpr[2] =3D -1; + break; + } + len =3D strlen(s) + 1; + addr =3D gpr[5]; + p =3D lock_user(VERIFY_WRITE, addr, len, 0); + if (!p) { + report_fault(env); + } + memcpy(p, s, len); + unlock_user(p, addr, len); + gpr[2] =3D 0; } - gpr[2] =3D copy_argn_to_target(env, gpr[4], gpr[5]); break; =20 case UHI_plog: --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651612083; cv=none; d=zohomail.com; s=zohoarc; b=dOIvKOwhfbbwXOpH0cMp7OqoJ8Cix8S2jlU1gHKUGlkL8BNF21PzbZx/4o26I1BLFmw/qOrJJh1EcD3b0aan5rBhBWuF+7eRSecHXSj19QRZt+y4mo0zpT1qNu+z1HhjKVXLwa8YxAAiWJM9asBRx0LAZBIhZtMR3Z9smjhMPPM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651612083; 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=b0mtvFcJe6Lm8uLKbhgRHasfTLJl7kkdx3x7RgBno1I=; b=jvfaQjQnZCsRI5QI+xpcb9nPUXj9rC8ZK7Pt3ZncAKRzJVa/2XXnJMaEpeehqMBN8rQvBonSduGXzAZymasewzpqgUpRlD73OaHIiX/k2IacewLZACgZYCHcQ/cUYn22I2d0WNMtdDKAwIPTA1bXi8TZscDNpZ5Pk4dr11pqkso= 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 1651612083143352.5812863363227; Tue, 3 May 2022 14:08:03 -0700 (PDT) Received: from localhost ([::1]:59928 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzkX-00079l-QL for importer@patchew.org; Tue, 03 May 2022 17:08:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40536) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZp-0000fk-OP for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:57 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:44737) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZn-0006NI-BW for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:52 -0400 Received: by mail-pj1-x102f.google.com with SMTP id m14-20020a17090a34ce00b001d5fe250e23so2882329pjf.3 for ; Tue, 03 May 2022 12:52:50 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=b0mtvFcJe6Lm8uLKbhgRHasfTLJl7kkdx3x7RgBno1I=; b=Cm0xXwG9vnUzbCs4MuvOXR3q1/b9UnFyWNoYB7zar7GExUZR6h1+nCpu5mUd0la25f +yOSyfZSGe6FVdSaTkQCfavtUIJaQ3akU4XKRqchvk7Hnastoc25CaPbtZr0ENbPBWQU gjuaXniAjav9tl4UE+3/S3p1B/RqpXOqI20x9D78I958zA7bjnTwDfJ6HHesj9B/xhMm c4WHbDBNrcs0q8WzrtEl6PjKlLzj0XQC2ZZzK0SdvUbAtemWlV2MjstfkzMtE3GKO4Gc a2gwI26Bq2YnvV9Fez0M9pZvTzX8Fm1wQJ6FcTHktbWOrUMoZmQhmcThMn8DPvUXwsKt pZLA== 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=b0mtvFcJe6Lm8uLKbhgRHasfTLJl7kkdx3x7RgBno1I=; b=L6WUHqLRBkPghgKnFBkOJIRC23Bw7i6jQFzGTXxUtlqYMV0URhcYnmdl2/tk50yqR3 mSE8N/v0uTW4gdYJZRxPz//R0VhcMQ0gIV19Rim0dQJCOUEpZgJRgSNG5wYChQhdX21u id77M306JR0/HWJx+1qsktoGZsE2ksHWoN6X4azHDfnA1zOFuNBrs9IhCOEgU+3KGaEe eSPYhWaMDGlaJFzzAAyOla+dl/dCRmlV5WtMU3jNFmxaUig8rIrxP/nekZ66eD0SzyAl vf/iYP57FA6OroIyueVOFb1t1FfjGSjjuHN3DQuV7RnnTfbqaCkexRFM9U5JgZpYL294 axQw== X-Gm-Message-State: AOAM533muhAazbWYQx8a2Gf+3IXmpBu8PhodUHTKPQIOo40tbOrpzv1g VD++oQh7ZLDjc1P+potxNKDta5eYTDhz5A== X-Google-Smtp-Source: ABdhPJz4+2DOaARm/UC+MitA1FaiXeEIVrC2xHdTnEx6G0nCIi79mFY/mt2UeOuY0jFdZFh2Xtj2AQ== X-Received: by 2002:a17:90b:388c:b0:1dc:542b:a596 with SMTP id mu12-20020a17090b388c00b001dc542ba596mr6500031pjb.76.1651607570053; Tue, 03 May 2022 12:52:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 64/74] target/mips: Remove GET_TARGET_STRING and FREE_TARGET_STRING Date: Tue, 3 May 2022 12:48:33 -0700 Message-Id: <20220503194843.1379101-65-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.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: 1651612085259100001 Content-Type: text/plain; charset="utf-8" Inline these macros into the only two callers. Signed-off-by: Richard Henderson --- target/mips/tcg/sysemu/mips-semi.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 0f5b509ce2..a3d5267399 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -198,19 +198,6 @@ static void uhi_fstat_cb(CPUState *cs, uint64_t ret, i= nt err) uhi_cb(cs, ret, err); } =20 -#define GET_TARGET_STRING(p, addr) \ - do { \ - p =3D lock_user_string(addr); \ - if (!p) { \ - report_fault(env); \ - } \ - } while (0) - -#define FREE_TARGET_STRING(p, gpr) \ - do { \ - unlock_user(p, gpr, 0); \ - } while (0) - void mips_semihosting(CPUMIPSState *env) { CPUState *cs =3D env_cpu(env); @@ -225,9 +212,13 @@ void mips_semihosting(CPUMIPSState *env) =20 case UHI_open: { + target_ulong fname =3D gpr[4]; int ret =3D -1; =20 - GET_TARGET_STRING(p, gpr[4]); + p =3D lock_user_string(fname); + if (!p) { + report_fault(env); + } if (!strcmp("/dev/stdin", p)) { ret =3D 0; } else if (!strcmp("/dev/stdout", p)) { @@ -235,7 +226,7 @@ void mips_semihosting(CPUMIPSState *env) } else if (!strcmp("/dev/stderr", p)) { ret =3D 2; } - FREE_TARGET_STRING(p, gpr[4]); + unlock_user(p, fname, 0); =20 /* FIXME: reusing a guest fd doesn't seem correct. */ if (ret >=3D 0) { @@ -243,7 +234,7 @@ void mips_semihosting(CPUMIPSState *env) break; } =20 - semihost_sys_open(cs, uhi_cb, gpr[4], 0, gpr[5], gpr[6]); + semihost_sys_open(cs, uhi_cb, fname, 0, gpr[5], gpr[6]); } break; =20 @@ -314,14 +305,14 @@ void mips_semihosting(CPUMIPSState *env) =20 pct_d =3D strstr(p, "%d"); if (!pct_d) { - FREE_TARGET_STRING(p, addr); + unlock_user(p, addr, 0); semihost_sys_write(cs, uhi_cb, 2, addr, len); break; } =20 str =3D g_string_new_len(p, pct_d - p); g_string_append_printf(str, "%d%s", (int)gpr[5], pct_d + 2); - FREE_TARGET_STRING(p, addr); + unlock_user(p, addr, 0); =20 /* * When we're using gdb, we need a guest address, so --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651612350; cv=none; d=zohomail.com; s=zohoarc; b=gwfK08wfWyj5ig0hoGbxnP6m4Vbn1zVpYgiXZO//vv0TxPFRNgFWh7tnORoURX56ejOXjU4ppkRhesIMNDt+b2CtwnbFNLnzg22EioLUcgR8D2X5Hxs7joNM8I5qNgr3sjQ82WgFdEhAzpEUgXotxwVhQc+IRR1JL9oOXZcaWCs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651612350; 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=bE76Luy7w0uXkAbzJgphYoFrwUdTwectG5vq9pZqEvA=; b=YlDTmAiyADj+qxO0BHjh1/Xibeb4nmLysbElMgA0BGkN0yU41Y7iETvR8V1zdid12xmo4Dxflotqnz6m98PEzXPoj2DNfDCY0Sc4uBYqzgUz+PCzpj2vk0P+t69KyGAbSzIxsWHH2NREM+czdSSuJqv0kAROH16jwPJIEyTNElo= 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 1651612350902805.5826921287025; Tue, 3 May 2022 14:12:30 -0700 (PDT) Received: from localhost ([::1]:40186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzor-0004Zn-KV for importer@patchew.org; Tue, 03 May 2022 17:12:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZr-0000fq-Im for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:57 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]:40693) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZo-0006NQ-Fw for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:54 -0400 Received: by mail-pf1-x42a.google.com with SMTP id i24so15568611pfa.7 for ; Tue, 03 May 2022 12:52:52 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:50 -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=bE76Luy7w0uXkAbzJgphYoFrwUdTwectG5vq9pZqEvA=; b=amtZ5k28fisP8nbDDwqUlt/+Op4kpc4KUKos2mdIdTbM8aHvUzcGyxT8BtfAJ0xIUp 93igYJUJqVn2N2F0b7BvzaxzZ+4ZNpiSAyHfrBqcK7vaLQD5bmff3m4XxyNmbQjd2jpL xelW7ZqOMLYunOvbilMwasWOhT913d9G8dDqa1giniLCiUGVwJku9p4xPo8NmMza7Xe2 OI0xuvG+PgKoBokqlACfRWJPpeXbt/BPtp5EpXrA+DQsC4RA5DgGvegoeYNYCd57YgPO KYyBjdKWk5nAueg+WNEaqCczd8mm60mv14aTOYJeA3LfKUu987ysEZ9L2fhSDRTUO9Ej Z+TA== 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=bE76Luy7w0uXkAbzJgphYoFrwUdTwectG5vq9pZqEvA=; b=fjIstt/MA3D6xpRU/FNcQOGcDnqTxjCOFLuM99jq5I9q0/HuGKcbhFcBCQXIDfX13v GfLngLTCxQdmj4wqqZ4hJF+P75LAEufXrXs8+vTVVHFm7OP3FJy0FySiTDZE62DN/S0G GkDIM0EhuVo8CZDBoS5FhJWyk8K3F+nKLCd1Brc9sIE0xMjWU8GwsrJMVFIGHtN3lIJ/ nTVad3goWWHszEGMM/pQzaMm0ZM4t81WZ1VqSbV+BJQI9YLf+oPvEg4KvZDmNM1Z/oXK xOlf9BtScHCVohgfVTw6t5eBVd4VpEvYVPIIAT1Dku2oRQ2BmKpEs7kY4PQveuQ3xDIG PhxQ== X-Gm-Message-State: AOAM531rZpPCyd7XmS/xnkoNUmdBWsjU0rbYU0ZGzkhd0bfqWvAnKJiv TB8X4NIHyCFV0zev22ijb9FFV2n+7+2EFQ== X-Google-Smtp-Source: ABdhPJwzKnrH6yIe+9Z8gjvMaTlaj1nPCLKpzN4ep76rlqiG6M42mpGsY1nG1T4obYfByZ3JymJM4g== X-Received: by 2002:a05:6a00:26c3:b0:50d:d619:e4c6 with SMTP id p3-20020a056a0026c300b0050dd619e4c6mr14962734pfw.13.1651607571159; Tue, 03 May 2022 12:52:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 65/74] target/xtensa: Use an exception for semihosting Date: Tue, 3 May 2022 12:48:34 -0700 Message-Id: <20220503194843.1379101-66-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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: 1651612351591100003 Content-Type: text/plain; charset="utf-8" Within do_interrupt, we hold the iothread lock, which is required for Chardev access for the console, and for the round trip for use_gdb_syscalls(). Signed-off-by: Richard Henderson --- target/xtensa/cpu.h | 2 ++ target/xtensa/helper.h | 3 --- target/xtensa/exc_helper.c | 4 ++++ target/xtensa/translate.c | 3 ++- target/xtensa/xtensa-semi.c | 3 +-- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h index d4b8268146..411a128f60 100644 --- a/target/xtensa/cpu.h +++ b/target/xtensa/cpu.h @@ -259,6 +259,7 @@ enum { EXC_USER, EXC_DOUBLE, EXC_DEBUG, + EXC_SEMIHOST, EXC_MAX }; =20 @@ -574,6 +575,7 @@ void xtensa_cpu_do_transaction_failed(CPUState *cs, hwa= ddr physaddr, vaddr addr, unsigned size, MMUAccessType access_= type, int mmu_idx, MemTxAttrs attrs, MemTxResult response, uintptr_t reta= ddr); +void xtensa_semihosting(CPUXtensaState *env); #endif void xtensa_cpu_dump_state(CPUState *cpu, FILE *f, int flags); hwaddr xtensa_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); diff --git a/target/xtensa/helper.h b/target/xtensa/helper.h index ae938ceedb..531679cd86 100644 --- a/target/xtensa/helper.h +++ b/target/xtensa/helper.h @@ -11,9 +11,6 @@ DEF_HELPER_2(retw, void, env, i32) DEF_HELPER_3(window_check, noreturn, env, i32, i32) DEF_HELPER_1(restore_owb, void, env) DEF_HELPER_2(movsp, void, env, i32) -#ifndef CONFIG_USER_ONLY -DEF_HELPER_1(simcall, void, env) -#endif =20 #ifndef CONFIG_USER_ONLY DEF_HELPER_3(waiti, void, env, i32, i32) diff --git a/target/xtensa/exc_helper.c b/target/xtensa/exc_helper.c index d4823a65cd..d54a518875 100644 --- a/target/xtensa/exc_helper.c +++ b/target/xtensa/exc_helper.c @@ -219,6 +219,10 @@ void xtensa_cpu_do_interrupt(CPUState *cs) } =20 switch (cs->exception_index) { + case EXC_SEMIHOST: + xtensa_semihosting(env); + return; + case EXC_WINDOW_OVERFLOW4: case EXC_WINDOW_UNDERFLOW4: case EXC_WINDOW_OVERFLOW8: diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index 1485df2f22..6ddb2e112e 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -2416,7 +2416,8 @@ static void translate_simcall(DisasContext *dc, const= OpcodeArg arg[], { #ifndef CONFIG_USER_ONLY if (semihosting_enabled()) { - gen_helper_simcall(cpu_env); + tcg_gen_movi_i32(cpu_pc, dc->base.pc_next); + gen_exception(dc, EXC_SEMIHOST); } #endif } diff --git a/target/xtensa/xtensa-semi.c b/target/xtensa/xtensa-semi.c index fa21b7e11f..5375f106fc 100644 --- a/target/xtensa/xtensa-semi.c +++ b/target/xtensa/xtensa-semi.c @@ -28,7 +28,6 @@ #include "qemu/osdep.h" #include "cpu.h" #include "chardev/char-fe.h" -#include "exec/helper-proto.h" #include "semihosting/semihost.h" #include "qapi/error.h" #include "qemu/log.h" @@ -188,7 +187,7 @@ void xtensa_sim_open_console(Chardev *chr) sim_console =3D &console; } =20 -void HELPER(simcall)(CPUXtensaState *env) +void xtensa_semihosting(CPUXtensaState *env) { CPUState *cs =3D env_cpu(env); uint32_t *regs =3D env->regs; --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651612320; cv=none; d=zohomail.com; s=zohoarc; b=n79b+EZc0jF+rZwEm7BVWU04oKDWLjgTluKoOp6FVSyIERbKXq0FTbT40c9eS+dQ/yqEFJ1XaCO3ly2lmw6vO2UBNP/keCRfLEH9y+jJcAhNBjBdZiZvRxhZ93r0EaTTYzzBrJz4k9KeNrF7+1TfD0M2jdtcMD1ZtZQyvr+ErnI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651612320; 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=1fJFL9WFFMMBNST5fjywcK07uYxhwGnnD8ji5QpthKs=; b=OrJrr6ZpUkOlXy27BFf8F5lkNdhJ4bYwQOvRoGwZwV4+oxxsTR1BQr3eYyLlBdHLg7K+SIguS+H2ZtiemnQUIXULQW3Y+RLFt/3n50ev2luchMoHsiBz+FW5FA9TIPBFvxGcVQiuDObEB7tRUsY+fRHTeiwg6mWnnGwS5E7RpOc= 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 1651612320029329.2722304729707; Tue, 3 May 2022 14:12:00 -0700 (PDT) Received: from localhost ([::1]:39186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzoM-0003tX-Su for importer@patchew.org; Tue, 03 May 2022 17:11:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZt-0000hS-F5 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:57 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:35737) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZp-0006NZ-Jw for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:57 -0400 Received: by mail-pj1-x1032.google.com with SMTP id w5-20020a17090aaf8500b001d74c754128so3254490pjq.0 for ; Tue, 03 May 2022 12:52:53 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:51 -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=1fJFL9WFFMMBNST5fjywcK07uYxhwGnnD8ji5QpthKs=; b=ehea1zdkqhLy37mZxw+2/QibyH93LzrgSG+NgPc0PKPBtu7lBgML8XJQir0RiQgo7/ /qEfngYz9065oKlAyHEOWXaZL9x2v4gG2/p16GCAf3EEEceIfBCwxchn5A2dNuvdaHCW UsEgp5rJDPr0zezw+5LO6J9/rLvPScSu2PprhVIjIJIEQYdxU/CRsUP+dZHqE5T90X8P Frs9A20xAYQXs/1o2pTiMA3eG+f06hh8gUq3cxQw9VPD0inD+TK80I/muribjLWJlg6n Rg6VM+hf4LxwlfXcWEFEl4ljVt8j5wwVfu8ACJcho8OhdhVxfH2xD7MXdvWcnQww5pw/ RKnQ== 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=1fJFL9WFFMMBNST5fjywcK07uYxhwGnnD8ji5QpthKs=; b=vUMtqT2nm6j6dEYxX/K601iJ7mHFu+cvduOO5ZVOnasBc+zb003XX2jYYWojhmXJDQ mvSg4kEB7jRG4cSvJOPrsg6gz53KrjYzDln00ktQcFUtVtrRMrlmSx0EdwFAnDF/VZRS Cu8NQODQWWttXDbqPM0AdWNX8oYL2+ha6oEOsXnk+B9rv5L6ONf1pXvWBvj9ErSf3ady Lg4ZtelsfEKe+3+mPLAmf7bgf6CH7YWhL9s4hwwMUPz9RdlA8IOMRo1To7zV7NI/rBgz 8bpFFVqffRRL0Oh3AMRWx1pJ8rnaw+Oa9lTb1aDai92KDiFNdtABnwtARCyzOmL4Uvzs oK1g== X-Gm-Message-State: AOAM532VcrJPX5emkXUs+MRlFu/ZHhhHsKXzL0x1zMhv5rPIuOWgim04 mB5+w8N9vickcDg/KqB7QJTj6VwwCkVtGg== X-Google-Smtp-Source: ABdhPJzcpGkbW39DHJjuw1egXIptmK+6/SRDToZhvkU2Jo7sT70kaNkojYx7ATqZmOZEsXoxlby6AQ== X-Received: by 2002:a17:902:f2ca:b0:15d:180d:704 with SMTP id h10-20020a170902f2ca00b0015d180d0704mr17868219plc.102.1651607572145; Tue, 03 May 2022 12:52:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 66/74] target/xtensa: Use semihosting/syscalls.h Date: Tue, 3 May 2022 12:48:35 -0700 Message-Id: <20220503194843.1379101-67-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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: 1651612321720100001 Content-Type: text/plain; charset="utf-8" This separates guest file descriptors from host file descriptors, and utilizes shared infrastructure for integration with gdbstub. Remove the xtensa custom console handing and rely on the generic -semihosting-config handling of chardevs. Signed-off-by: Richard Henderson --- target/xtensa/cpu.h | 1 - hw/xtensa/sim.c | 3 - target/xtensa/xtensa-semi.c | 303 +++++++++--------------------------- 3 files changed, 77 insertions(+), 230 deletions(-) diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h index 411a128f60..b1311a0530 100644 --- a/target/xtensa/cpu.h +++ b/target/xtensa/cpu.h @@ -610,7 +610,6 @@ void xtensa_translate_init(void); void **xtensa_get_regfile_by_name(const char *name, int entries, int bits); void xtensa_breakpoint_handler(CPUState *cs); void xtensa_register_core(XtensaConfigList *node); -void xtensa_sim_open_console(Chardev *chr); void check_interrupts(CPUXtensaState *s); void xtensa_irq_init(CPUXtensaState *env); qemu_irq *xtensa_get_extints(CPUXtensaState *env); diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c index 946c71cb5b..5cca6a170e 100644 --- a/hw/xtensa/sim.c +++ b/hw/xtensa/sim.c @@ -87,9 +87,6 @@ XtensaCPU *xtensa_sim_common_init(MachineState *machine) xtensa_create_memory_regions(&sysram, "xtensa.sysram", get_system_memory()); } - if (serial_hd(0)) { - xtensa_sim_open_console(serial_hd(0)); - } return cpu; } =20 diff --git a/target/xtensa/xtensa-semi.c b/target/xtensa/xtensa-semi.c index 5375f106fc..42baae419b 100644 --- a/target/xtensa/xtensa-semi.c +++ b/target/xtensa/xtensa-semi.c @@ -27,8 +27,10 @@ =20 #include "qemu/osdep.h" #include "cpu.h" -#include "chardev/char-fe.h" +#include "exec/gdbstub.h" #include "semihosting/semihost.h" +#include "semihosting/syscalls.h" +#include "semihosting/softmmu-uaccess.h" #include "qapi/error.h" #include "qemu/log.h" =20 @@ -92,99 +94,49 @@ enum { TARGET_ELOOP =3D 92, }; =20 -static uint32_t errno_h2g(int host_errno) +static void xtensa_cb(CPUState *cs, uint64_t ret, int err) { - switch (host_errno) { - case 0: return 0; - case EPERM: return TARGET_EPERM; - case ENOENT: return TARGET_ENOENT; - case ESRCH: return TARGET_ESRCH; - case EINTR: return TARGET_EINTR; - case EIO: return TARGET_EIO; - case ENXIO: return TARGET_ENXIO; - case E2BIG: return TARGET_E2BIG; - case ENOEXEC: return TARGET_ENOEXEC; - case EBADF: return TARGET_EBADF; - case ECHILD: return TARGET_ECHILD; - case EAGAIN: return TARGET_EAGAIN; - case ENOMEM: return TARGET_ENOMEM; - case EACCES: return TARGET_EACCES; - case EFAULT: return TARGET_EFAULT; -#ifdef ENOTBLK - case ENOTBLK: return TARGET_ENOTBLK; -#endif - case EBUSY: return TARGET_EBUSY; - case EEXIST: return TARGET_EEXIST; - case EXDEV: return TARGET_EXDEV; - case ENODEV: return TARGET_ENODEV; - case ENOTDIR: return TARGET_ENOTDIR; - case EISDIR: return TARGET_EISDIR; - case EINVAL: return TARGET_EINVAL; - case ENFILE: return TARGET_ENFILE; - case EMFILE: return TARGET_EMFILE; - case ENOTTY: return TARGET_ENOTTY; -#ifdef ETXTBSY - case ETXTBSY: return TARGET_ETXTBSY; -#endif - case EFBIG: return TARGET_EFBIG; - case ENOSPC: return TARGET_ENOSPC; - case ESPIPE: return TARGET_ESPIPE; - case EROFS: return TARGET_EROFS; - case EMLINK: return TARGET_EMLINK; - case EPIPE: return TARGET_EPIPE; - case EDOM: return TARGET_EDOM; - case ERANGE: return TARGET_ERANGE; - case ENOSYS: return TARGET_ENOSYS; -#ifdef ELOOP - case ELOOP: return TARGET_ELOOP; -#endif - }; + CPUXtensaState *env =3D cs->env_ptr; =20 - return TARGET_EINVAL; -} +#define E(N) case E##N: err =3D TARGET_E##N; break =20 -typedef struct XtensaSimConsole { - CharBackend be; - struct { - char buffer[16]; - size_t offset; - } input; -} XtensaSimConsole; - -static XtensaSimConsole *sim_console; - -static IOCanReadHandler sim_console_can_read; -static int sim_console_can_read(void *opaque) -{ - XtensaSimConsole *p =3D opaque; - - return sizeof(p->input.buffer) - p->input.offset; -} - -static IOReadHandler sim_console_read; -static void sim_console_read(void *opaque, const uint8_t *buf, int size) -{ - XtensaSimConsole *p =3D opaque; - size_t copy =3D sizeof(p->input.buffer) - p->input.offset; - - if (size < copy) { - copy =3D size; + switch (err) { + 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); + case GDB_ENAMETOOLONG: + err =3D TARGET_EINVAL; + break; } - memcpy(p->input.buffer + p->input.offset, buf, copy); - p->input.offset +=3D copy; + + env->regs[3] =3D err; + env->regs[2] =3D ret; + +#undef E } =20 -void xtensa_sim_open_console(Chardev *chr) +static void xtensa_select_cb(CPUState *cs, uint64_t ret, int err) { - static XtensaSimConsole console; - - qemu_chr_fe_init(&console.be, chr, &error_abort); - qemu_chr_fe_set_handlers(&console.be, - sim_console_can_read, - sim_console_read, - NULL, NULL, &console, - NULL, true); - sim_console =3D &console; + if (ret & G_IO_NVAL) { + xtensa_cb(cs, -1, GDB_EBADF); + } else { + xtensa_cb(cs, ret !=3D 0, 0); + } } =20 void xtensa_semihosting(CPUXtensaState *env) @@ -194,165 +146,64 @@ void xtensa_semihosting(CPUXtensaState *env) =20 switch (regs[2]) { case TARGET_SYS_exit: + gdb_exit(regs[3]); exit(regs[3]); break; =20 case TARGET_SYS_read: + semihost_sys_read(cs, xtensa_cb, regs[3], regs[4], regs[5]); + break; case TARGET_SYS_write: - { - bool is_write =3D regs[2] =3D=3D TARGET_SYS_write; - uint32_t fd =3D regs[3]; - uint32_t vaddr =3D regs[4]; - uint32_t len =3D regs[5]; - uint32_t len_done =3D 0; - - while (len > 0) { - hwaddr paddr =3D cpu_get_phys_page_debug(cs, vaddr); - uint32_t page_left =3D - TARGET_PAGE_SIZE - (vaddr & (TARGET_PAGE_SIZE - 1)); - uint32_t io_sz =3D page_left < len ? page_left : len; - hwaddr sz =3D io_sz; - void *buf =3D cpu_physical_memory_map(paddr, &sz, !is_writ= e); - uint32_t io_done; - bool error =3D false; - - if (buf) { - vaddr +=3D io_sz; - len -=3D io_sz; - if (fd < 3 && sim_console) { - if (is_write && (fd =3D=3D 1 || fd =3D=3D 2)) { - io_done =3D qemu_chr_fe_write_all(&sim_console= ->be, - buf, io_sz); - regs[3] =3D errno_h2g(errno); - } else if (!is_write && fd =3D=3D 0) { - if (sim_console->input.offset) { - io_done =3D sim_console->input.offset; - if (io_sz < io_done) { - io_done =3D io_sz; - } - memcpy(buf, sim_console->input.buffer, io_= done); - memmove(sim_console->input.buffer, - sim_console->input.buffer + io_don= e, - sim_console->input.offset - io_don= e); - sim_console->input.offset -=3D io_done; - qemu_chr_fe_accept_input(&sim_console->be); - } else { - io_done =3D -1; - regs[3] =3D TARGET_EAGAIN; - } - } else { - qemu_log_mask(LOG_GUEST_ERROR, - "%s fd %d is not supported with = chardev console\n", - is_write ? - "writing to" : "reading from", f= d); - io_done =3D -1; - regs[3] =3D TARGET_EBADF; - } - } else { - io_done =3D is_write ? - write(fd, buf, io_sz) : - read(fd, buf, io_sz); - regs[3] =3D errno_h2g(errno); - } - if (io_done =3D=3D -1) { - error =3D true; - io_done =3D 0; - } - cpu_physical_memory_unmap(buf, sz, !is_write, io_done); - } else { - error =3D true; - regs[3] =3D TARGET_EINVAL; - break; - } - if (error) { - if (!len_done) { - len_done =3D -1; - } - break; - } - len_done +=3D io_done; - if (io_done < io_sz) { - break; - } - } - regs[2] =3D len_done; - } + semihost_sys_write(cs, xtensa_cb, regs[3], regs[4], regs[5]); break; - case TARGET_SYS_open: - { - char name[1024]; - int rc; - int i; - - for (i =3D 0; i < ARRAY_SIZE(name); ++i) { - rc =3D cpu_memory_rw_debug(cs, regs[3] + i, - (uint8_t *)name + i, 1, 0); - if (rc !=3D 0 || name[i] =3D=3D 0) { - break; - } - } - - if (rc =3D=3D 0 && i < ARRAY_SIZE(name)) { - regs[2] =3D open(name, regs[4], regs[5]); - regs[3] =3D errno_h2g(errno); - } else { - regs[2] =3D -1; - regs[3] =3D TARGET_EINVAL; - } - } + semihost_sys_open(cs, xtensa_cb, regs[3], 0, regs[4], regs[5]); break; - case TARGET_SYS_close: - if (regs[3] < 3) { - regs[2] =3D regs[3] =3D 0; - } else { - regs[2] =3D close(regs[3]); - regs[3] =3D errno_h2g(errno); - } + semihost_sys_close(cs, xtensa_cb, regs[3]); break; - case TARGET_SYS_lseek: - regs[2] =3D lseek(regs[3], (off_t)(int32_t)regs[4], regs[5]); - regs[3] =3D errno_h2g(errno); + semihost_sys_lseek(cs, xtensa_cb, regs[3], regs[4], regs[5]); break; =20 case TARGET_SYS_select_one: { - uint32_t fd =3D regs[3]; - uint32_t rq =3D regs[4]; - uint32_t target_tv =3D regs[5]; - uint32_t target_tvv[2]; + int timeout, events; =20 - struct timeval tv =3D {0}; + if (regs[5]) { + uint32_t tv_sec, tv_usec; + uint64_t msec; =20 - if (target_tv) { - cpu_memory_rw_debug(cs, target_tv, - (uint8_t *)target_tvv, sizeof(target_tvv), 0); - tv.tv_sec =3D (int32_t)tswap32(target_tvv[0]); - tv.tv_usec =3D (int32_t)tswap32(target_tvv[1]); - } - if (fd < 3 && sim_console) { - if ((fd =3D=3D 1 || fd =3D=3D 2) && rq =3D=3D SELECT_ONE_W= RITE) { - regs[2] =3D 1; - } else if (fd =3D=3D 0 && rq =3D=3D SELECT_ONE_READ) { - regs[2] =3D sim_console->input.offset > 0; - } else { - regs[2] =3D 0; + if (get_user_u32(tv_sec, regs[5]) || + get_user_u32(tv_usec, regs[5])) { + xtensa_cb(cs, -1, GDB_EFAULT); + return; } - regs[3] =3D 0; - } else { - fd_set fdset; =20 - FD_ZERO(&fdset); - FD_SET(fd, &fdset); - regs[2] =3D select(fd + 1, - rq =3D=3D SELECT_ONE_READ ? &fdset : NU= LL, - rq =3D=3D SELECT_ONE_WRITE ? &fdset : NU= LL, - rq =3D=3D SELECT_ONE_EXCEPT ? &fdset : NU= LL, - target_tv ? &tv : NULL); - regs[3] =3D errno_h2g(errno); + /* Poll timeout is in milliseconds; overflow to infinity. = */ + msec =3D tv_sec * 1000ull + DIV_ROUND_UP(tv_usec, 1000ull); + timeout =3D msec <=3D INT32_MAX ? msec : -1; + } else { + timeout =3D -1; } + + switch (regs[4]) { + case SELECT_ONE_READ: + events =3D G_IO_IN; + break; + case SELECT_ONE_WRITE: + events =3D G_IO_OUT; + break; + case SELECT_ONE_EXCEPT: + events =3D G_IO_PRI; + break; + default: + xtensa_cb(cs, -1, GDB_EINVAL); + return; + } + + semihost_sys_poll_one(cs, xtensa_select_cb, + regs[3], events, timeout); } break; =20 --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651612608; cv=none; d=zohomail.com; s=zohoarc; b=Pync9MEb8ywQTPV/1Ha9a+YrrZnDC8MLieCuy3qKYYAh2MIRbspV/CSt9rRFv+W94mkU/LviW/9dyR+gOHwOstQ4z+guu/upIicrc2WXtTXr0JrwfWHy6LqypzsiSTJvmS6jxfQRSdRfP9s7vk89H8KVvBafd/v/Z02BVC6Ija8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651612608; 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=PoRUGz2szMDJicl6LiDwHi+o01/ArFupEpZx2x6+ISI=; b=gJsIDOEUVbGX3/6TEXzWsCNLSu44ZAVIKKJZ1EhPuKKuyqLELemcBrlMI+r6pFDPuangrV4Lz5Tsneg3K2ejsLs+rX+fRHfcI8EHkL713MW8FXP2zvlDaXDkULc9fV1zm3xcX3BSeDYI6Dmd+4mVadqAeCxxy16o+Hm0iuIKtYQ= 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 16516126081241022.0684323460911; Tue, 3 May 2022 14:16:48 -0700 (PDT) Received: from localhost ([::1]:47286 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzt0-0001AZ-Cl for importer@patchew.org; Tue, 03 May 2022 17:16:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZt-0000hU-FU for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:57 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:37849) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZr-0006Nr-Ab for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:56 -0400 Received: by mail-pg1-x52d.google.com with SMTP id 15so14810581pgf.4 for ; Tue, 03 May 2022 12:52:54 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:52 -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=PoRUGz2szMDJicl6LiDwHi+o01/ArFupEpZx2x6+ISI=; b=UWXG/xvTRELgCqD7Gj4fW+QmJxBn2ZB/mOEaOoejrI1RBqJp67tXD/jrzjpW1MTtdW KjWko7slI/iP/Wg633Aez2qxKzeRUVUpEbzG5IEl08F0TnqAmlJV5GgFe5hMyaSN8t5S J5CkstPWLUeSLJL79fky1Y+JguYSk5/R2AsEHIFlZ4Rl/1uFw42ft/Yjism0c72GEq7m jwi7p3o4hRQRiepmKZdnbo+GBWIkECfNI4vr8Y/iB4DsvBgkGHPghM2HHK3uBycFMDk6 moHeibuFGpXdzmQsDiAmtAabxu/f4HcZ8u0pevB6RpQcBcP7XkCmm3kPfEdQLzOl/oEX soyw== 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=PoRUGz2szMDJicl6LiDwHi+o01/ArFupEpZx2x6+ISI=; b=4EdLsIe4GkLPCsWEfSsYl3Ein1IbzaH3R71GLb7yh42M2Jq4nlLH/iJC8LDMJ6sLY/ MVqf0vTum9b+R6ACW0zED9pI9HBjQJZ2TLb12u5+0+ji19rH5ycsJOLO1irisInpJHUd AfptcW4MXJ2ZD0uo2b3FbjC0E9sTJHgzmYx4vwKM4/rMreEVqC0106gvyDFthcnjG686 6Ts5AY3IuYiusVcvQG1Ecw/78Fux+YRQ4AxxWwDriODsbEh+GKYjoOtF+vka+eccDQ7D OIoqteVURhSq0ROxDBbPXAECYt6nCZ5bUa1gmVzXcWy/GP5uToVrUu4SW80myBxvd0N5 UmKg== X-Gm-Message-State: AOAM533LcRxR96qplncoM65qAUgUPwnWZR/fNHNI/0U++JUs8Q1ESWEE hVmE0pK5B5+qfL27J/DE4znp1k94ZU6MpA== X-Google-Smtp-Source: ABdhPJxtBnI6SPcYQH6TjrJbVPkOhuaqWpl/WjLOH3E/euSL+L4/BlMmVbi/IOiWxTEEOBzmwi+egQ== X-Received: by 2002:a63:fa41:0:b0:3c2:1941:5894 with SMTP id g1-20020a63fa41000000b003c219415894mr9272333pgk.296.1651607573045; Tue, 03 May 2022 12:52:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 67/74] tests/docker: Add debian-rx-cross image Date: Tue, 3 May 2022 12:48:36 -0700 Message-Id: <20220503194843.1379101-68-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.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: 1651612608872100001 Content-Type: text/plain; charset="utf-8" Build the entire cross tool chain from source. For this reason, default to caching. Signed-off-by: Richard Henderson --- MAINTAINERS | 1 + tests/docker/Makefile.include | 6 ++ .../debian-rx-cross.d/build-toolchain.sh | 58 +++++++++++++++++++ tests/tcg/configure.sh | 6 ++ 4 files changed, 71 insertions(+) create mode 100755 tests/docker/dockerfiles/debian-rx-cross.d/build-toolch= ain.sh diff --git a/MAINTAINERS b/MAINTAINERS index 294c88ace9..62d2640f35 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -297,6 +297,7 @@ RENESAS RX CPUs R: Yoshinori Sato S: Orphan F: target/rx/ +F: tests/docker/dockerfiles/debian-rx-cross.d/build-toolchain.sh =20 S390 TCG CPUs M: Richard Henderson diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index ca2157db46..1795a49da2 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -142,6 +142,10 @@ docker-image-debian-nios2-cross: $(DOCKER_FILES_DIR)/d= ebian-toolchain.docker \ $(DOCKER_FILES_DIR)/debian-nios2-cross.d/build-toolchain.sh $(call debian-toolchain, $@) =20 +docker-image-debian-rx-cross: $(DOCKER_FILES_DIR)/debian-toolchain.docker \ + $(DOCKER_FILES_DIR)/debian-rx-cross.d/build-toolchain.sh + $(call debian-toolchain, $@) + # Specialist build images, sometimes very limited tools docker-image-debian-tricore-cross: docker-image-debian10 docker-image-debian-all-test-cross: docker-image-debian10 @@ -149,6 +153,7 @@ docker-image-debian-microblaze-cross: docker-image-debi= an10 docker-image-debian-nios2-cross: docker-image-debian10 docker-image-debian-powerpc-test-cross: docker-image-debian11 docker-image-debian-riscv64-test-cross: docker-image-debian11 +docker-image-debian-rx-cross: docker-image-debian10 =20 # These images may be good enough for building tests but not for test buil= ds DOCKER_PARTIAL_IMAGES +=3D debian-alpha-cross @@ -158,6 +163,7 @@ DOCKER_PARTIAL_IMAGES +=3D debian-m68k-cross debian-mip= s64-cross DOCKER_PARTIAL_IMAGES +=3D debian-microblaze-cross DOCKER_PARTIAL_IMAGES +=3D debian-nios2-cross DOCKER_PARTIAL_IMAGES +=3D debian-riscv64-test-cross +DOCKER_PARTIAL_IMAGES +=3D debian-rx-cross DOCKER_PARTIAL_IMAGES +=3D debian-sh4-cross debian-sparc64-cross DOCKER_PARTIAL_IMAGES +=3D debian-tricore-cross DOCKER_PARTIAL_IMAGES +=3D debian-xtensa-cross diff --git a/tests/docker/dockerfiles/debian-rx-cross.d/build-toolchain.sh = b/tests/docker/dockerfiles/debian-rx-cross.d/build-toolchain.sh new file mode 100755 index 0000000000..0d22280dee --- /dev/null +++ b/tests/docker/dockerfiles/debian-rx-cross.d/build-toolchain.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +set -e + +TARGET=3Drx-elf + +J=3D$(expr $(nproc) / 2) +TOOLCHAIN_INSTALL=3D/usr/local +TOOLCHAIN_BIN=3D${TOOLCHAIN_INSTALL}/bin +CROSS_SYSROOT=3D${TOOLCHAIN_INSTALL}/$TARGET/sys-root + +export PATH=3D${TOOLCHAIN_BIN}:$PATH + +# +# Grab all of the source for the toolchain bootstrap. +# + +wget https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz +wget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz + +tar axf binutils-2.37.tar.xz +tar axf gcc-11.2.0.tar.xz + +git clone --depth 1 --branch newlib-4.1.0 \ + https://sourceware.org/git/newlib-cygwin.git newlib-4.1.0 + +# Create a combined gcc/newlib source tree + +mkdir -p src/include +cd src +ln -s ../gcc*/* . || true +ln -s ../newlib*/* . || true +cd include +ln -s ../../gcc*/include/* . || true +ln -s ../../newlib*/include/* . || true +cd ../../ + +# Build binutils + +mkdir -p bld-b +cd bld-b +../binu*/configure --disable-werror \ + --prefix=3D${TOOLCHAIN_INSTALL} --with-sysroot --target=3D${TARGET} +make -j${J} +make install +cd .. + +# Build gcc+newlib + +mkdir -p bld +cd bld +../src/configure --disable-werror --disable-shared \ + --prefix=3D${TOOLCHAIN_INSTALL} --with-sysroot --target=3D${TARGET} \ + --enable-languages=3Dc --disable-libssp --disable-libsanitizer \ + --disable-libatomic --disable-libgomp --disable-libquadmath +make -j${J} +make install +cd .. diff --git a/tests/tcg/configure.sh b/tests/tcg/configure.sh index 691d90abac..34c94f3045 100755 --- a/tests/tcg/configure.sh +++ b/tests/tcg/configure.sh @@ -68,6 +68,7 @@ fi : ${cross_cc_ppc64le=3D"$cross_cc_ppc64"} : ${cross_cc_cflags_ppc64le=3D"-m64 -mlittle-endian"} : ${cross_cc_riscv64=3D"riscv64-linux-gnu-gcc"} +: ${cross_cc_rx=3D"rx-elf-gcc"} : ${cross_cc_s390x=3D"s390x-linux-gnu-gcc"} : ${cross_cc_sh4=3D"sh4-linux-gnu-gcc"} : ${cross_cc_cflags_sparc=3D"-m32 -mv8plus -mcpu=3Dultrasparc"} @@ -192,6 +193,11 @@ for target in $target_list; do container_image=3Ddebian-riscv64-test-cross container_cross_cc=3Driscv64-linux-gnu-gcc ;; + rx-*) + container_hosts=3Dx86_64 + container_image=3Ddebian-rx-cross + container_cross_cc=3Drx-elf-gcc + ;; s390x-*) container_hosts=3Dx86_64 container_image=3Ddebian-s390x-cross --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611128; cv=none; d=zohomail.com; s=zohoarc; b=nnRrc9ktBCZzeyqNH3B+8OfrP3Bku8AYjU9L62EwrIkoh2pwGn+gaXa7k9Ol0Yb3Zk+nSiuwE5glNuyES4ZdEsSzCDOdcdI0K7dz5hpbGiqEQ6EGWtaqFSHs0okJZweGPE0jQJPFhJCXb9BUx7hqhlCiCvEgcqFlDhgFxVrvx68= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611128; 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=ocWIh32CouzGFfi6GAu6bp81akmgvCStQtCfH36MgiM=; b=PISsXFPpuCF/mZNq1fAlQ1e2XWXxiaryuscUD6P7h4cJaqvY75+ZER3g2VIWj2jKCxWUb1zaNFE1FiNKQy9ho9mqWNFGsZjt0TM6ZXFV+JFu7cLGJUqOUCXxZ9mxYQCyY81G90J/xnw5LFms0V8ldQq3WQgkYXtS47vP25UzFlE= 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 1651611128537503.98569559484986; Tue, 3 May 2022 13:52:08 -0700 (PDT) Received: from localhost ([::1]:32884 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzV9-0005p6-0e for importer@patchew.org; Tue, 03 May 2022 16:52:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZw-0000le-SQ for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:01 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:35738) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZr-0006O0-Ap for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:59 -0400 Received: by mail-pj1-x1033.google.com with SMTP id w5-20020a17090aaf8500b001d74c754128so3254562pjq.0 for ; Tue, 03 May 2022 12:52:54 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:53 -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=ocWIh32CouzGFfi6GAu6bp81akmgvCStQtCfH36MgiM=; b=eUJ6tNVTMwM1wm+HV9JryQMqqsYDnb7huOrG1P+TLz+Czcy2+mrfwXx37Jd6irFwEL 7D49/BSHQu3fiRquAyJ2VZjBTXmBpkp6n52MfAjpn1v2rnoGq/cQmPTWxtFSWqDvqjuG PgkUBdQC4IujNo4UcwJicw2ZFPi9wAChGyLkppGbbLNjWVGIZOhvJCR6ugcDTADRb0LC goQKKCEl2+mXawAorMQA9ChQ8rS//tjiyIpWFpZlvU10K3iW9iaqC24alU7ZkXMLic8g LEaFwpChD5Q4/Xy8nrKPmgh5t0F1ceXh4a15ZEwVU6O4hG4dNKoA/W1El/of5IvPiuCX IW7w== 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=ocWIh32CouzGFfi6GAu6bp81akmgvCStQtCfH36MgiM=; b=B6Jl3mwtMXdlaC9Db/4blZsKVJ+BeQmoTnUE/RxU4Avh+nTxFcca/6TjA20wnPCsd8 BqbXExZHcZZSytUMW1DtcpkE1K9yH7Q+NEhe/ojZvzKv5kJAqrwpb2hvVXjJjNFH6YwB KPp6oMSjCTfWb7hirKiIxxcEiUvrRbAQnDUIoHWMO80HXlez9YnYDvDZ8Sxik6N4+EJ+ nUNW3YokeZRV4I8S0pIsbaAgd7ws9KjEDSHVBkiQ+rhYEpod5B1DUmzgpK6+jhD5S00/ HEGvo4M1AVMWsXwISrLLalCMt3MCc7fuBhl4SE9DOB05dqBoj1MnFVjCHwK/s+4rWbkV Cevg== X-Gm-Message-State: AOAM530g36n+58g2VzOC2iG7ksjIattL4YJuN2zhBmoPHXNjYc7ZyZzB NqmDieOq/voqGsk1b18GKKL6plkDUHBcfA== X-Google-Smtp-Source: ABdhPJw4TWg7nNvPUPIA+XfbvFyluyjw7g9Ci4F0JRDg3QVYhggXgPTCZfbR8AiFvKbktxgSILd2Ew== X-Received: by 2002:a17:903:410b:b0:15c:fd57:aa34 with SMTP id r11-20020a170903410b00b0015cfd57aa34mr17922864pld.82.1651607573962; Tue, 03 May 2022 12:52:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 68/74] hw/rx: Handle a kernel file that is ELF Date: Tue, 3 May 2022 12:48:37 -0700 Message-Id: <20220503194843.1379101-69-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651611129084100001 Content-Type: text/plain; charset="utf-8" Attempt to load the kernel with load_elf. If this fails with ELF_LOAD_NOT_ELF, continue to treat the kernel as a raw image. This will be handy for running semihosting programs. Signed-off-by: Richard Henderson --- hw/rx/rx-gdbsim.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/hw/rx/rx-gdbsim.c b/hw/rx/rx-gdbsim.c index be147b4bd9..64b533181d 100644 --- a/hw/rx/rx-gdbsim.c +++ b/hw/rx/rx-gdbsim.c @@ -26,6 +26,7 @@ #include "sysemu/device_tree.h" #include "hw/boards.h" #include "qom/object.h" +#include "elf.h" =20 /* Same address of GDB integrated simulator */ #define SDRAM_BASE EXT_CS_BASE @@ -57,15 +58,32 @@ static void rx_load_image(RXCPU *cpu, const char *filen= ame, uint32_t start, uint32_t size) { static uint32_t extable[32]; - long kernel_size; + ssize_t kernel_size; + uint64_t kernel_entry; int i; =20 + /* Try an ELF image first. */ + + kernel_size =3D load_elf(filename, NULL, NULL, NULL, &kernel_entry, + NULL, NULL, NULL, false, EM_RX, false, false); + if (kernel_size >=3D 0) { + cpu_set_pc(CPU(cpu), kernel_entry); + return; + } + if (kernel_size !=3D ELF_LOAD_NOT_ELF) { + error_report("could not load kernel '%s': %s", + filename, load_elf_strerror(kernel_size)); + exit(1); + } + + /* Not ELF: load a raw image, e.g. zImage. */ + kernel_size =3D load_image_targphys(filename, start, size); if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", filename); + error_report("could not load kernel '%s'", filename); exit(1); } - cpu->env.pc =3D start; + cpu_set_pc(CPU(cpu), start); =20 /* setup exception trap trampoline */ /* linux kernel only works little-endian mode */ --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611532; cv=none; d=zohomail.com; s=zohoarc; b=LaemNH2fPs+A75XmK4SCg1FvdDPsP3kg5Jze99jyKaXqh+HKMGydyK2IRJMceCFVjUMi3auqWimNmNCVhcoKjvlOLHgtUsmePCrBSfv+HCq7OEctJsyl/yMgV618mf6kffUOyI9fB32o43XxrhUIz5Y4qfFHQszqEKg/BBB2YY0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611532; 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=I2B4gVVCQM10Dll/DA/iXXFd89GTR6tRg5OAZRVt3Tw=; b=RS/fbgzmes8amVvjuDBFsjbOJzBWvZjmb+j2AYBVD3Pvm1/zKFGvLpipIf30bAXFkB0W7yjeI3NlfYpCYETFkQ4il0+q+KpKjDCZr4dcQ9j/ZzLknuDi/llSSNifycXAML7D+Kutdxb7BOdwE1TFy+wHKxy12B/XdBdpk4BXmFA= 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 1651611532411496.2880739292523; Tue, 3 May 2022 13:58:52 -0700 (PDT) Received: from localhost ([::1]:46714 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzbf-000186-9m for importer@patchew.org; Tue, 03 May 2022 16:58:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZw-0000lf-SI for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:00 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:34433) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZt-0006O5-5F for qemu-devel@nongnu.org; Tue, 03 May 2022 15:52:59 -0400 Received: by mail-pg1-x536.google.com with SMTP id j70so3893578pge.1 for ; Tue, 03 May 2022 12:52:55 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:54 -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=I2B4gVVCQM10Dll/DA/iXXFd89GTR6tRg5OAZRVt3Tw=; b=QQXS2kZR9D/XqZ3UjTzin5KXDBIH1D80S4oQR5bNkOMNzgdfYE1MzNQFISfn5wZwWW 5QtbrAkGInS2Q9/RlFWdOiTM5yeckR2JSBKAUqszwUJ7R3rHLAsdqgW3lqAQrQ2LrkEH 6dZagMBTZ2Ees/qBm6MgX//AFUE7aRJlPXzixLzbd11AoY2afaehS7cBcVQRCZoDKZfi H127hNY915paun6WCD26GxKXSm64nD61I2fzjI9cqZQgm0FPSwiYoGaaJhEqYMmQZP+p 72egniGySfkcpAFokLWI20G8aSj0lEPhpFzz8GpfCMApvC45tf3v3YsuTWgfqQMRF+UB TVgg== 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=I2B4gVVCQM10Dll/DA/iXXFd89GTR6tRg5OAZRVt3Tw=; b=tf8ZNe0aCBKzOODoYGfzoO1d5+LrIUPUkl2n0s4Hm4LZMx4LUAYkGkOciRmkQUth6y KwMp5ujkBolkvYAB8MvaICF8RSzr7YnFoeyrUee4iz2eSECb7ne6WRrNQyNSX9tTWYQ6 XDO4UvhOTSdnsHFJXcHLbL9pE22MDtkYpkM2ZRA5FQ41QskpR1rqs1aSNa1jILXqDfrz fWcYge9Gm+iHDUZOvbxvhqtqEPstLJFIQZ68VyB7P/r5oaGjaXsyvs12TJBKDCyIM300 a9se+gQbVSx63OPPsiO3w9p+PtYWEn7bj20CIOD89Ct3HmqmfnT13GUEcMOw/aU+UT2b 93Qw== X-Gm-Message-State: AOAM531uMfJIAQHB/WQOau96FHc3hZn7hAPsfY4vMQyx7te2IM7C4iiJ TwJVJj/6V4+IpKTgRSpgw9ptQvW8sLPFOw== X-Google-Smtp-Source: ABdhPJzND6llTjSqMlbgKyqEGYrn48YD4/s9o7/gKBOglrG6LRE2ZTx3LISHzVVi41d5JW5XDPon1A== X-Received: by 2002:a62:d445:0:b0:50d:b868:47bc with SMTP id u5-20020a62d445000000b0050db86847bcmr17617527pfl.73.1651607574792; Tue, 03 May 2022 12:52:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 69/74] target/rx: Fix the base of the fixed vector table Date: Tue, 3 May 2022 12:48:38 -0700 Message-Id: <20220503194843.1379101-70-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651611534354100001 Content-Type: text/plain; charset="utf-8" This begins at 0xffffff80 not 0xffffffc0. This has caused exceptions to wrap around to low memory instead of being at the top. Signed-off-by: Richard Henderson --- target/rx/helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/rx/helper.c b/target/rx/helper.c index f34945e7e2..c6e285657e 100644 --- a/target/rx/helper.c +++ b/target/rx/helper.c @@ -91,7 +91,7 @@ void rx_cpu_do_interrupt(CPUState *cs) cpu_stl_data(env, env->isp, env->pc); =20 if (vec < 0x100) { - env->pc =3D cpu_ldl_data(env, 0xffffffc0 + vec * 4); + env->pc =3D cpu_ldl_data(env, 0xffffff80 + vec * 4); } else { env->pc =3D cpu_ldl_data(env, env->intb + (vec & 0xff) * 4); } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651610873; cv=none; d=zohomail.com; s=zohoarc; b=AqWuxulecu7n7B422Xd0qdeJJQ5RFQ03DprKH7UTBo3wGuc8wnUKocHl1bo/jEYbwfn8V2LHxfjkkQXtGDoxLzpH1Sf9kS2hirPiwQ8n2higzZ4Aa70hbP0/WrspGIH6VWigEU2hKB2Euxu2iHt7PO41J6EmIhEba2mNDlpWu64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651610873; 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=QUpRdJbpx7VQuY/FyAcpatmDIjI0TndHoNfi0QxhsFU=; b=M7HfdIw+qLKqDTC3vqTbC+p2qt+CY2+GcC5dSn5n/55M2qIgTBEoglO3kiXbDKdmetSdyuikOl364bA8patLlZIO84ACql1GtNp+SJ9EFkFG7v3RbC88hFYQq8oRt6KoViiWnG0ewqmQbH0LTIbFHEnBOqFGGfpfo7td6ayd7cQ= 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 1651610873475949.0549048079168; Tue, 3 May 2022 13:47:53 -0700 (PDT) Received: from localhost ([::1]:53362 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzR2-0008H6-97 for importer@patchew.org; Tue, 03 May 2022 16:47:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40652) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZw-0000lg-Sk for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:01 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:33363) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZt-0006Gc-5j for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:00 -0400 Received: by mail-pj1-x1034.google.com with SMTP id cu23-20020a17090afa9700b001d98d8e53b7so2552004pjb.0 for ; Tue, 03 May 2022 12:52:55 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:55 -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=QUpRdJbpx7VQuY/FyAcpatmDIjI0TndHoNfi0QxhsFU=; b=d/t6hJXzAb5M3+WOQp7wV86NfCYE4d6AXt80oxmT0/PtOCtTZaGFvn5EyPZsU7kL6e NMFXNNBShL/4WHgcZo66j8qOeuua1B5uSr8wlRK78Up1XITVYml87OW8sh2Ugg1HW1lx JnRC98H+kKrbJrFhMSs1wsnNZNcwEKksJ/fLcUMAPqjZs05lbmxiJZ0eCvjw1otj6UG4 2jeZbic3vK+8UKKIkLl8teG9T14Me69lpNB+McofFIAoDWAiMbcQlQRURwA1mHZuLzbT 4Np8MwmbGb/TBkoe/Baz7lYTnQaMri9mC5uOiZSs65yRM9gOvZTaKVsoeTF3kay6U3+u 4cWQ== 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=QUpRdJbpx7VQuY/FyAcpatmDIjI0TndHoNfi0QxhsFU=; b=jGP4Z069Xr3qjWYN93oEMOw0Dt+7Pf6n3cd3RgszIXNJezvfEWT8nHoFntt89VzkHx KFnl8HqQYiW9rso9ANfMddCNMFiJUOfAv0IfmMYN2NKR9mYPUFrPa7U8vHlyvl2wnFMc b2N5Xm1neAF+nJHtd0bkM4cotWCmU3Ar7lUUzdcA+g5L0LmjsgVlp79n8mIEQfy2nOOm nLCXI3mmfm2oD9Wh+p4Jhp0s/blGbQqIb1WgNqftNr/J5blv0Y8ldJnG2fuPAGvMFFob fLg8CdefOl3RvIMH08pA2rPqTs8Ne2Q7OwBDPeiZKZL7A1JiuI+xhnUvmSsfcoqn+44e WRvw== X-Gm-Message-State: AOAM531Jlr79kdHr3izZzQz9wDBRrr2zJ6eE6Uie2d1Jd+03Hs3tw57H x90SUubPKj1DPg9ss+DFjMr04N+bsuxmVA== X-Google-Smtp-Source: ABdhPJzoBMptAFdareiMR6gabpEobGoqTQiEdpZCa96QRlNhC3FigvkSrxMnRQLJewexO2xhyma2Fw== X-Received: by 2002:a17:90b:3e8d:b0:1dc:3db4:920a with SMTP id rj13-20020a17090b3e8d00b001dc3db4920amr6470883pjb.161.1651607575518; Tue, 03 May 2022 12:52:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 70/74] target/rx: Name the exceptions Date: Tue, 3 May 2022 12:48:39 -0700 Message-Id: <20220503194843.1379101-71-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1651610875387100001 Content-Type: text/plain; charset="utf-8" Provide EXCP_* names to the fixed and relocatable vector table entries. Signed-off-by: Richard Henderson --- target/rx/cpu.h | 20 ++++++++++++++++++++ target/rx/helper.c | 25 ++++++++++++++++--------- target/rx/op_helper.c | 15 +++++++-------- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/target/rx/cpu.h b/target/rx/cpu.h index 5655dffeff..99e28fb70f 100644 --- a/target/rx/cpu.h +++ b/target/rx/cpu.h @@ -66,6 +66,26 @@ enum { NUM_REGS =3D 16, }; =20 +enum { + /* + * The Fixed Vector Table begins at 0xffffff80 and contains 32 entries, + * most of which are reserved. + */ + EXCP_PRIVILEGED =3D 20, + EXCP_ACCESS =3D 21, + EXCP_UNDEFINED =3D 23, + EXCP_FPU =3D 25, + EXCP_NMI =3D 30, + EXCP_RESET =3D 31, + + /* + * The Relocatable Vector Table begins at env->intb and + * contains 256 entries. + */ + EXCP_INTB_0 =3D 0x100, + EXCP_INTB_255 =3D EXCP_INTB_0 + 255, +}; + typedef struct CPUArchState { /* CPU registers */ uint32_t regs[NUM_REGS]; /* general registers */ diff --git a/target/rx/helper.c b/target/rx/helper.c index c6e285657e..29a4b075fa 100644 --- a/target/rx/helper.c +++ b/target/rx/helper.c @@ -83,36 +83,43 @@ void rx_cpu_do_interrupt(CPUState *cs) } } else { uint32_t vec =3D cs->exception_index; - const char *expname =3D "unknown exception"; + const char *expname; =20 env->isp -=3D 4; cpu_stl_data(env, env->isp, save_psw); env->isp -=3D 4; cpu_stl_data(env, env->isp, env->pc); =20 - if (vec < 0x100) { + if (vec < EXCP_INTB_0) { env->pc =3D cpu_ldl_data(env, 0xffffff80 + vec * 4); } else { - env->pc =3D cpu_ldl_data(env, env->intb + (vec & 0xff) * 4); + env->pc =3D cpu_ldl_data(env, env->intb + (vec - EXCP_INTB_0) = * 4); } switch (vec) { - case 20: + case EXCP_PRIVILEGED: expname =3D "privilege violation"; break; - case 21: + case EXCP_ACCESS: expname =3D "access exception"; break; - case 23: + case EXCP_UNDEFINED: expname =3D "illegal instruction"; break; - case 25: + case EXCP_FPU: expname =3D "fpu exception"; break; - case 30: + case EXCP_NMI: expname =3D "non-maskable interrupt"; break; - case 0x100 ... 0x1ff: + case EXCP_RESET: + expname =3D "reset interrupt"; + break; + case EXCP_INTB_0 ... EXCP_INTB_255: expname =3D "unconditional trap"; + break; + default: + expname =3D "unknown exception"; + break; } qemu_log_mask(CPU_LOG_INT, "exception 0x%02x [%s] raised\n", (vec & 0xff), expname); diff --git a/target/rx/op_helper.c b/target/rx/op_helper.c index 9ca32dcc82..6ab7b070bd 100644 --- a/target/rx/op_helper.c +++ b/target/rx/op_helper.c @@ -114,7 +114,7 @@ static void update_fpsw(CPURXState *env, float32 ret, u= intptr_t retaddr) enable =3D FIELD_EX32(env->fpsw, FPSW, ENABLE); enable |=3D 1 << 5; /* CE always enabled */ if (cause & enable) { - raise_exception(env, 21, retaddr); + raise_exception(env, EXCP_FPU, retaddr); } } } @@ -420,8 +420,7 @@ uint32_t helper_divu(CPURXState *env, uint32_t num, uin= t32_t den) =20 /* exception */ static inline G_NORETURN -void raise_exception(CPURXState *env, int index, - uintptr_t retaddr) +void raise_exception(CPURXState *env, int index, uintptr_t retaddr) { CPUState *cs =3D env_cpu(env); =20 @@ -431,17 +430,17 @@ void raise_exception(CPURXState *env, int index, =20 G_NORETURN void helper_raise_privilege_violation(CPURXState *env) { - raise_exception(env, 20, GETPC()); + raise_exception(env, EXCP_PRIVILEGED, GETPC()); } =20 G_NORETURN void helper_raise_access_fault(CPURXState *env) { - raise_exception(env, 21, GETPC()); + raise_exception(env, EXCP_ACCESS, GETPC()); } =20 G_NORETURN void helper_raise_illegal_instruction(CPURXState *env) { - raise_exception(env, 23, GETPC()); + raise_exception(env, EXCP_UNDEFINED, GETPC()); } =20 G_NORETURN void helper_wait(CPURXState *env) @@ -456,10 +455,10 @@ G_NORETURN void helper_wait(CPURXState *env) =20 G_NORETURN void helper_rxint(CPURXState *env, uint32_t vec) { - raise_exception(env, 0x100 + vec, 0); + raise_exception(env, EXCP_INTB_0 + vec, 0); } =20 G_NORETURN void helper_rxbrk(CPURXState *env) { - raise_exception(env, 0x100, 0); + raise_exception(env, EXCP_INTB_0, 0); } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611881; cv=none; d=zohomail.com; s=zohoarc; b=VfXSeAcCGyv7JSGffucsuyliKTF8VUHsPBM10qrb0VzVe20rwmzhQ6muZSQVlp/1hk+aEqf+eYF+2QICoc2QnybW/WedjBbFR6L9o34VIVyhjYg3EQ0itE4vQ693b8Y/+UMD68LpvuUQyBpOov5Lla80JY9PKAQrF8QXUajsWe0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611881; 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=l75mJLkyS62K5L377zFVSd2gu1rBBy1agq6hzSt3Vpo=; b=nCPaWU6NndEzuroAVRNZTVQBy4SJwxSF9UR7ZwudC49ObDKdXAYU/DOOkymXdaTegtF3zHxZDuR/9VLv7/UvK5QGYgyRPtC61Z6/fdSoqle45rRsm3zjJcJgC+2QNdVDfZFKzn7aY6fLBeclqDDmzbmxCP9Sif9nZDuw7ek4Kso= 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 1651611881006295.5892904409311; Tue, 3 May 2022 14:04:41 -0700 (PDT) Received: from localhost ([::1]:54692 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzhH-0001vd-UX for importer@patchew.org; Tue, 03 May 2022 17:04:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZz-0000nd-2L for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:03 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:46712) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZv-0006OH-31 for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:01 -0400 Received: by mail-pj1-x102f.google.com with SMTP id cq17-20020a17090af99100b001dc0386cd8fso2880353pjb.5 for ; Tue, 03 May 2022 12:52:57 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:56 -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=l75mJLkyS62K5L377zFVSd2gu1rBBy1agq6hzSt3Vpo=; b=AoBEQWbfAB7HJwFtFMDqPiV4GJRQfgl0Ue/SdQi67z3yELsujJI4hl/iiz5+MFqKNr gb3B/oexgaBUMSPChdbyt30TNNwO3upw9UKEr0+IiowBb4W2uwpOiC3+m0enuQMa7sf+ O6sr5brQcNdgkd0Uv5YyRLXvlHAtBILQM/cIaM5nGynLiXbm0ngtJxunmYgEbAqWsW9I Sz/leRGCyKz8I5gVnRxJgxoEOK3m78xnWm0kDQbcFoqHSui5UAMYl4/09cd83aWr0b+e y75WWJf/vucL6by+Nta4loXuD0AQuJcov2sEKkSp+lk/x1VBWGGGh9MEB+CGQi77cQwZ akcQ== 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=l75mJLkyS62K5L377zFVSd2gu1rBBy1agq6hzSt3Vpo=; b=jHvU/57tYycCpkd6yNpgg+HuRd08pZouDnDZrP6ssGdnHsWV5hoxgWdEtZYBdK20Mg Q3AJFF/FRMwLYDWbPKxQ/p0+EEtnglIzLm1G8MNJ5UWLAY/HmoPfS9Zlf1Y7Kxzmoqhx Vjy2h83SYov25rr0tAHbAvlvN9BKqAsOGbumgYreVP7elzTwSBnAeNV+c/orcK3PGszS ixzTBfPQTLCxoQONeS6oeowyTm5NCxIeNCYjMzGacEtxwsurikhiRzs3HD4tp9D+IHVj G74BLY659aiXmJ0wJEZONHElBLQ9yA7JiGbLqaWF+B2/xyDj0Eyo4zgbEUKMV4R1ReCy VYbQ== X-Gm-Message-State: AOAM532Cx8byqLDqH0JfJx5N/eKxipjfMzYBySCF1MfJEIeI5y/ybSbg UO42qx6Z8w5VB3pzWTekjxn2oEyyyde1qQ== X-Google-Smtp-Source: ABdhPJzLlE7thkOJYl6CXtnpMCqca0RNyPmirMO0vN5yx/0w12dGawsA8LfaHs/tGULrbbMduZKKmw== X-Received: by 2002:a17:90a:c595:b0:1d9:532e:52fd with SMTP id l21-20020a17090ac59500b001d9532e52fdmr6542620pjt.79.1651607576483; Tue, 03 May 2022 12:52:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 71/74] target/rx: Consolidate exception helpers Date: Tue, 3 May 2022 12:48:40 -0700 Message-Id: <20220503194843.1379101-72-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.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: 1651611881855100001 Content-Type: text/plain; charset="utf-8" Replace 5 helpers with 1. Store pc before raising privileged and undefined instruction exceptions, which means we don't need to use tcg unwinding. Signed-off-by: Richard Henderson --- target/rx/helper.h | 6 +----- target/rx/op_helper.c | 25 ++++--------------------- target/rx/translate.c | 23 +++++++++++------------ 3 files changed, 16 insertions(+), 38 deletions(-) diff --git a/target/rx/helper.h b/target/rx/helper.h index ebb4739474..e6763b5a90 100644 --- a/target/rx/helper.h +++ b/target/rx/helper.h @@ -1,9 +1,5 @@ -DEF_HELPER_1(raise_illegal_instruction, noreturn, env) -DEF_HELPER_1(raise_access_fault, noreturn, env) -DEF_HELPER_1(raise_privilege_violation, noreturn, env) +DEF_HELPER_2(raise_exception, noreturn, env, i32) DEF_HELPER_1(wait, noreturn, env) -DEF_HELPER_2(rxint, noreturn, env, i32) -DEF_HELPER_1(rxbrk, noreturn, env) DEF_HELPER_FLAGS_3(fadd, TCG_CALL_NO_WG, f32, env, f32, f32) DEF_HELPER_FLAGS_3(fsub, TCG_CALL_NO_WG, f32, env, f32, f32) DEF_HELPER_FLAGS_3(fmul, TCG_CALL_NO_WG, f32, env, f32, f32) diff --git a/target/rx/op_helper.c b/target/rx/op_helper.c index 6ab7b070bd..f2b58bcad5 100644 --- a/target/rx/op_helper.c +++ b/target/rx/op_helper.c @@ -428,19 +428,12 @@ void raise_exception(CPURXState *env, int index, uint= ptr_t retaddr) cpu_loop_exit_restore(cs, retaddr); } =20 -G_NORETURN void helper_raise_privilege_violation(CPURXState *env) +G_NORETURN void helper_raise_exception(CPURXState *env, uint32_t index) { - raise_exception(env, EXCP_PRIVILEGED, GETPC()); -} + CPUState *cs =3D env_cpu(env); =20 -G_NORETURN void helper_raise_access_fault(CPURXState *env) -{ - raise_exception(env, EXCP_ACCESS, GETPC()); -} - -G_NORETURN void helper_raise_illegal_instruction(CPURXState *env) -{ - raise_exception(env, EXCP_UNDEFINED, GETPC()); + cs->exception_index =3D index; + cpu_loop_exit(cs); } =20 G_NORETURN void helper_wait(CPURXState *env) @@ -452,13 +445,3 @@ G_NORETURN void helper_wait(CPURXState *env) env->psw_i =3D 1; raise_exception(env, EXCP_HLT, 0); } - -G_NORETURN void helper_rxint(CPURXState *env, uint32_t vec) -{ - raise_exception(env, EXCP_INTB_0 + vec, 0); -} - -G_NORETURN void helper_rxbrk(CPURXState *env) -{ - raise_exception(env, EXCP_INTB_0, 0); -} diff --git a/target/rx/translate.c b/target/rx/translate.c index 62aee66937..ddf31afb11 100644 --- a/target/rx/translate.c +++ b/target/rx/translate.c @@ -156,6 +156,13 @@ static void gen_goto_tb(DisasContext *dc, int n, targe= t_ulong dest) dc->base.is_jmp =3D DISAS_NORETURN; } =20 +static void gen_raise_exception(DisasContext *ctx, int vec, bool advance_p= c) +{ + tcg_gen_movi_i32(cpu_pc, advance_pc ? ctx->base.pc_next : ctx->pc); + gen_helper_raise_exception(cpu_env, tcg_constant_i32(vec)); + ctx->base.is_jmp =3D DISAS_NORETURN; +} + /* generic load wrapper */ static inline void rx_gen_ld(unsigned int size, TCGv reg, TCGv mem) { @@ -234,7 +241,7 @@ static int is_privileged(DisasContext *ctx, int is_exce= ption) { if (FIELD_EX32(ctx->tb_flags, PSW, PM)) { if (is_exception) { - gen_helper_raise_privilege_violation(cpu_env); + gen_raise_exception(ctx, EXCP_PRIVILEGED, false); } return 0; } else { @@ -2261,23 +2268,15 @@ static bool trans_RTE(DisasContext *ctx, arg_RTE *a) /* brk */ static bool trans_BRK(DisasContext *ctx, arg_BRK *a) { - tcg_gen_movi_i32(cpu_pc, ctx->base.pc_next); - gen_helper_rxbrk(cpu_env); - ctx->base.is_jmp =3D DISAS_NORETURN; + gen_raise_exception(ctx, EXCP_INTB_0, true); return true; } =20 /* int #imm */ static bool trans_INT(DisasContext *ctx, arg_INT *a) { - TCGv vec; - tcg_debug_assert(a->imm < 0x100); - vec =3D tcg_const_i32(a->imm); - tcg_gen_movi_i32(cpu_pc, ctx->base.pc_next); - gen_helper_rxint(cpu_env, vec); - tcg_temp_free(vec); - ctx->base.is_jmp =3D DISAS_NORETURN; + gen_raise_exception(ctx, EXCP_INTB_0 + a->imm, true); return true; } =20 @@ -2318,7 +2317,7 @@ static void rx_tr_translate_insn(DisasContextBase *dc= base, CPUState *cs) ctx->pc =3D ctx->base.pc_next; insn =3D decode_load(ctx); if (!decode(ctx, insn)) { - gen_helper_raise_illegal_instruction(cpu_env); + gen_raise_exception(ctx, EXCP_UNDEFINED, false); } } =20 --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651612622; cv=none; d=zohomail.com; s=zohoarc; b=TP1aWFJijBVzcYu8isokhhQ5O9fTm6SL0oGzZ+t2JSlF1QIRwycJEdRRm2ndmYRinc6sy2Ooa9hj79IueuH0yeSB/cZjkRiPCt1/W6jmunudf2B0bN4sBPka2wlxs/+0dr9VwSg1Qtp2PXOXM1R6XY/RezWugtE7bXuYhy5pzTk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651612622; 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=zSABYP4n5j9DpaRkrATAbL9o0CDfndEvUo9tSY+Ych0=; b=GUd+yJEwD2ZBDxVvcK7U1MIt2m+YDuWSPfFhIPrbuQVvlMpYTf0y2zC065788bQjKFFl8jhtd6nWGPcbRrL3PifM7SQUR6uUJJpTgiZWbI/vPOLcM91yyaRfJw4HQcywUQl93zbW3V/3yAOeie53QQ6gQSR8klK7PaEezBfPgmY= 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 1651612622839262.4284033834382; Tue, 3 May 2022 14:17:02 -0700 (PDT) Received: from localhost ([::1]:48458 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlztF-00021m-OO for importer@patchew.org; Tue, 03 May 2022 17:17:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40688) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZz-0000ne-1v for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:03 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]:44608) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZw-0006Ob-KO for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:02 -0400 Received: by mail-pl1-x631.google.com with SMTP id j8so15862848pll.11 for ; Tue, 03 May 2022 12:52:58 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:57 -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=zSABYP4n5j9DpaRkrATAbL9o0CDfndEvUo9tSY+Ych0=; b=Ef5saaaj5hJEJ5KnBAj9hB8RkLBpZoilw0vNu9Y3kretFp+rixJqjwjb5OgVeoOZOv 95w+s4jSQy/Qf8+nS+0LqYUeujvC+33YGLo8MmvM0coZRVplTGOAnT0NlhALh3smsAl8 stiPFR4BmWm9SiUwjh3J3QVjtah/CCIv6UwZgbDkmNo7vkKL94QdDbSfOIERJAWiG8T4 v7WwQh/sEMviMyLe1/hmvBiknQzVmkzD125DPODM3Jg2MzVPBgIxo+se/8MtelNCt1HZ 76w15DFW7VFbIM0Ds/wmGNlIe2Ft7Hpvn9+Om190W78t8G1aftNJwGkLGDyHs8VpvagX 3YvQ== 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=zSABYP4n5j9DpaRkrATAbL9o0CDfndEvUo9tSY+Ych0=; b=XHMDvofTFzgmf3HcHyfnXUtfSwTV3P6xnrBxekvucOleA2JDg3Zkx2FcUa9XgX5CDx by9bCge3WXFeTpBukcHuWrt9aVDKLujr5XNmUEsT+wyPbZ52tWoy1b9V1TLYsXGCHU4/ 9TUkyrbh2wbPzY9MirgJiI4owNMFLcWtFY/jdE26E/odKuL3FGE8zH7UQSuQFheX0r79 zu9v9z0HkjjCaXo82mzHmnMix1YucpyzNlLLdsc+2yio2YSP7ezJr8Sj7llZFRMcG+7Z E1lD62wkGQCrD+BK8CmJjlpWHcgVtmT536oP5kyHIiSPBDA/rPOrF7yxkEgtq2Q4g0dJ VG5A== X-Gm-Message-State: AOAM533gkQW0GFTVtNN4i9AWad5Gee7k4poPqPi+6EZbkaZe+LSy6WXY SFHVgHBj8qaBvoi70o3nPpWSLWmHO+JgHA== X-Google-Smtp-Source: ABdhPJx4XuUu8nnZmOWcu5Mto3jc5EGOKAH31za81JxszAMtZ/D+L7VQjMeIfAAcFy3IloE6OiiXUg== X-Received: by 2002:a17:90b:1c04:b0:1dc:4dfd:5a43 with SMTP id oc4-20020a17090b1c0400b001dc4dfd5a43mr6628138pjb.160.1651607577572; Tue, 03 May 2022 12:52:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 72/74] target/rx: Cleanup rx_cpu_do_interrupt Date: Tue, 3 May 2022 12:48:41 -0700 Message-Id: <20220503194843.1379101-73-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.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: 1651612624928100001 Content-Type: text/plain; charset="utf-8" Introduce EXCP_IRQ and EXCP_FIRQ to remember the decision that we made in rx_cpu_exec_interrupt. Use a switch to select between exceptions; unify stacked interrupt frame creation; abort if unknown exception. Signed-off-by: Richard Henderson --- target/rx/cpu.h | 4 ++ target/rx/helper.c | 118 ++++++++++++++++++++++----------------------- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/target/rx/cpu.h b/target/rx/cpu.h index 99e28fb70f..5b93c0dcb0 100644 --- a/target/rx/cpu.h +++ b/target/rx/cpu.h @@ -84,6 +84,10 @@ enum { */ EXCP_INTB_0 =3D 0x100, EXCP_INTB_255 =3D EXCP_INTB_0 + 255, + + /* Private to the qemu implementation. */ + EXCP_IRQ, + EXCP_FIRQ, }; =20 typedef struct CPUArchState { diff --git a/target/rx/helper.c b/target/rx/helper.c index 29a4b075fa..d12e551cc2 100644 --- a/target/rx/helper.c +++ b/target/rx/helper.c @@ -42,12 +42,13 @@ void rx_cpu_unpack_psw(CPURXState *env, uint32_t psw, i= nt rte) =20 #ifndef CONFIG_USER_ONLY =20 -#define INT_FLAGS (CPU_INTERRUPT_HARD | CPU_INTERRUPT_FIR) void rx_cpu_do_interrupt(CPUState *cs) { RXCPU *cpu =3D RX_CPU(cs); CPURXState *env =3D &cpu->env; - int do_irq =3D cs->interrupt_request & INT_FLAGS; + uint32_t vec =3D cs->exception_index; + target_ulong vec_table =3D 0xffffff80u; /* fixed vector table */ + const char *expname; uint32_t save_psw; =20 env->in_sleep =3D 0; @@ -60,69 +61,62 @@ void rx_cpu_do_interrupt(CPUState *cs) save_psw =3D rx_cpu_pack_psw(env); env->psw_pm =3D env->psw_i =3D env->psw_u =3D 0; =20 - if (do_irq) { - if (do_irq & CPU_INTERRUPT_FIR) { - env->bpc =3D env->pc; - env->bpsw =3D save_psw; - env->pc =3D env->fintv; - env->psw_ipl =3D 15; - cs->interrupt_request &=3D ~CPU_INTERRUPT_FIR; - qemu_set_irq(env->ack, env->ack_irq); - qemu_log_mask(CPU_LOG_INT, "fast interrupt raised\n"); - } else if (do_irq & CPU_INTERRUPT_HARD) { - env->isp -=3D 4; - cpu_stl_data(env, env->isp, save_psw); - env->isp -=3D 4; - cpu_stl_data(env, env->isp, env->pc); - env->pc =3D cpu_ldl_data(env, env->intb + env->ack_irq * 4); - env->psw_ipl =3D env->ack_ipl; - cs->interrupt_request &=3D ~CPU_INTERRUPT_HARD; - qemu_set_irq(env->ack, env->ack_irq); - qemu_log_mask(CPU_LOG_INT, - "interrupt 0x%02x raised\n", env->ack_irq); - } - } else { - uint32_t vec =3D cs->exception_index; - const char *expname; + switch (vec) { + case EXCP_FIRQ: + env->bpc =3D env->pc; + env->bpsw =3D save_psw; + env->pc =3D env->fintv; + env->psw_ipl =3D 15; + cs->interrupt_request &=3D ~CPU_INTERRUPT_FIR; + qemu_set_irq(env->ack, env->ack_irq); + qemu_log_mask(CPU_LOG_INT, "fast interrupt raised\n"); + break; =20 + case EXCP_IRQ: + env->psw_ipl =3D env->ack_ipl; + cs->interrupt_request &=3D ~CPU_INTERRUPT_HARD; + qemu_set_irq(env->ack, env->ack_irq); + expname =3D "interrupt"; + vec_table =3D env->intb; + vec =3D env->ack_ipl; + goto do_stacked; + + case EXCP_PRIVILEGED: + expname =3D "privilege violation"; + goto do_stacked; + case EXCP_ACCESS: + expname =3D "access exception"; + goto do_stacked; + case EXCP_UNDEFINED: + expname =3D "illegal instruction"; + goto do_stacked; + case EXCP_FPU: + expname =3D "fpu exception"; + goto do_stacked; + case EXCP_NMI: + expname =3D "non-maskable interrupt"; + goto do_stacked; + case EXCP_RESET: + expname =3D "reset interrupt"; + goto do_stacked; + + case EXCP_INTB_0 ... EXCP_INTB_255: + expname =3D "unconditional trap"; + vec_table =3D env->intb; + vec -=3D EXCP_INTB_0; + goto do_stacked; + + do_stacked: env->isp -=3D 4; cpu_stl_data(env, env->isp, save_psw); env->isp -=3D 4; cpu_stl_data(env, env->isp, env->pc); + env->pc =3D cpu_ldl_data(env, vec_table + vec * 4); + qemu_log_mask(CPU_LOG_INT, "%s raised (0x%02x)\n", expname, vec); + break; =20 - if (vec < EXCP_INTB_0) { - env->pc =3D cpu_ldl_data(env, 0xffffff80 + vec * 4); - } else { - env->pc =3D cpu_ldl_data(env, env->intb + (vec - EXCP_INTB_0) = * 4); - } - switch (vec) { - case EXCP_PRIVILEGED: - expname =3D "privilege violation"; - break; - case EXCP_ACCESS: - expname =3D "access exception"; - break; - case EXCP_UNDEFINED: - expname =3D "illegal instruction"; - break; - case EXCP_FPU: - expname =3D "fpu exception"; - break; - case EXCP_NMI: - expname =3D "non-maskable interrupt"; - break; - case EXCP_RESET: - expname =3D "reset interrupt"; - break; - case EXCP_INTB_0 ... EXCP_INTB_255: - expname =3D "unconditional trap"; - break; - default: - expname =3D "unknown exception"; - break; - } - qemu_log_mask(CPU_LOG_INT, "exception 0x%02x [%s] raised\n", - (vec & 0xff), expname); + default: + g_assert_not_reached(); } env->regs[0] =3D env->isp; } @@ -132,19 +126,21 @@ bool rx_cpu_exec_interrupt(CPUState *cs, int interrup= t_request) RXCPU *cpu =3D RX_CPU(cs); CPURXState *env =3D &cpu->env; int accept =3D 0; + /* hardware interrupt (Normal) */ if ((interrupt_request & CPU_INTERRUPT_HARD) && env->psw_i && (env->psw_ipl < env->req_ipl)) { env->ack_irq =3D env->req_irq; env->ack_ipl =3D env->req_ipl; - accept =3D 1; + accept =3D EXCP_IRQ; } /* hardware interrupt (FIR) */ if ((interrupt_request & CPU_INTERRUPT_FIR) && env->psw_i && (env->psw_ipl < 15)) { - accept =3D 1; + accept =3D EXCP_FIRQ; } if (accept) { + cs->exception_index =3D accept; rx_cpu_do_interrupt(cs); return true; } --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611348; cv=none; d=zohomail.com; s=zohoarc; b=FOtKGcQOpJeK+JaEip5EGrkEpzff+MCKRiHvhH0igADqDF2PKHz5fuYQdmnDa6gp0cN10oMn7oQ80tATVKqqSoieHMe0jG+Hkg6GECJYeH/9GaeSTIDGieXTtWA6P4hDYOuCY0bG32yhyIXUrkEeKyoSAP3ueOdc5Q4KUuYLQxE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611348; 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=M6M9lcOtJHcXS0OKn/tF20xzatLhV5u4RJXc0wtgF7E=; b=Gt2GBd6pjaTM8EPa38Qhosr94LJdW2Wd9gUMmnw/U9wknkZb8OL+ZV/zU1ppdnOpENfMrsB3ZCGCmduEzWNS6O9JUKIkuioNy5tgNPgO6vunDCLAhlw+LIPQs6v6UumKC6VCEzlNhIYAuGf37Mo5BjrEazkMD6vB/6ZHCS9VznI= 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 1651611347982917.8850894311066; Tue, 3 May 2022 13:55:47 -0700 (PDT) Received: from localhost ([::1]:40844 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzYf-0003bN-Mb for importer@patchew.org; Tue, 03 May 2022 16:55:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40690) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlyZz-0000np-3s for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:03 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:46714) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZw-0006Og-Kq for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:02 -0400 Received: by mail-pj1-x1031.google.com with SMTP id cq17-20020a17090af99100b001dc0386cd8fso2880402pjb.5 for ; Tue, 03 May 2022 12:52:59 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:52:58 -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=M6M9lcOtJHcXS0OKn/tF20xzatLhV5u4RJXc0wtgF7E=; b=IIsJn8nEcvEVsQqLbbj1DUQtXzbnRWqguqyho+nZiwXNBOZ5dfHa3hR8kiiiBONZC3 4jOsJsqzg3aS3ACXD8H90Lro2pvSo90S9tSUhO+dpJyQo6ubzEMP3qIpL7fvOy5/lhTY 8tSDF9Rpk89ej0lsjyPh8Ki603PpRy2VHfizlqbrqu5cXKj+pif+H54GZkiQfAJlLEb4 tWTspQEpblWTN3B6ELHSFdVpDagW4ga/L4A36Kd660wmgXCPl5IcIL09LaC5AF62Qqdh HUyC/p9sjADWFKF3+mahYgJ6bbPPETUT1urhxL0f9FDWfuHjxPNbiIGaHRDJc5Jow4e9 Kzng== 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=M6M9lcOtJHcXS0OKn/tF20xzatLhV5u4RJXc0wtgF7E=; b=32KwjiEVHRX8e/7+lvZ5AAL/V+ic051TMsdQcNCUCwTXiNiz1+tvOTIuF3LIDqTna8 cnB+qXcYAMbdoEibfY4dbjzb7mpfvU6EQBRd8jF1UyYcj4h3uxPSEWkIxs0xnSVKgM3O ma+60ZPy4uXYsVfvXTgW9BlI0D/TnbvSyOCqGpvQQZxbbHExgx2bDjxLOhWVa8iZDWrD UCol5B6NRSjJnxYb4Kro5FD7GOsswvfKbfT41+5VGCRXOhmj711SCA20W231H0XaGoid +Tv4d5oOJ6ZqEe+gmnobaO1hfD+oR/ycfjiYB5hqJLZIPG1QgfsxYGuoyHNLFmykCL2H jPQQ== X-Gm-Message-State: AOAM5308WhvWa+cRG7W+A5Z8s1TyILVfkYMqKRO5oPWFU9gfwa86DMOe ay/4WdDzZwieteZpSU5XlkFrewWMBfw5/Q== X-Google-Smtp-Source: ABdhPJwDfO7SI8OgrNUzwHkFaFeeyvOx17LO1xJRX43xWmhndNinMgOp418h6k6U0UHfVxFA3fmlZg== X-Received: by 2002:a17:903:3009:b0:15c:f92b:7fba with SMTP id o9-20020a170903300900b0015cf92b7fbamr18075831pla.82.1651607578586; Tue, 03 May 2022 12:52:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 73/74] target/rx: Implement libgloss semihosting Date: Tue, 3 May 2022 12:48:42 -0700 Message-Id: <20220503194843.1379101-74-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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: 1651611349869100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- configs/devices/rx-softmmu/default.mak | 1 + target/rx/cpu.h | 2 + target/rx/helper.c | 5 + target/rx/rx-semi.c | 165 +++++++++++++++++++++++++ target/rx/translate.c | 7 +- qemu-options.hx | 13 +- target/rx/meson.build | 4 +- 7 files changed, 189 insertions(+), 8 deletions(-) create mode 100644 target/rx/rx-semi.c diff --git a/configs/devices/rx-softmmu/default.mak b/configs/devices/rx-so= ftmmu/default.mak index df2b4e4f42..5c1033a2d3 100644 --- a/configs/devices/rx-softmmu/default.mak +++ b/configs/devices/rx-softmmu/default.mak @@ -1,3 +1,4 @@ # Default configuration for rx-softmmu =20 CONFIG_RX_GDBSIM=3Dy +CONFIG_SEMIHOSTING=3Dy diff --git a/target/rx/cpu.h b/target/rx/cpu.h index 5b93c0dcb0..117cfea027 100644 --- a/target/rx/cpu.h +++ b/target/rx/cpu.h @@ -88,6 +88,7 @@ enum { /* Private to the qemu implementation. */ EXCP_IRQ, EXCP_FIRQ, + EXCP_SEMIHOST, }; =20 typedef struct CPUArchState { @@ -147,6 +148,7 @@ const char *rx_crname(uint8_t cr); #ifndef CONFIG_USER_ONLY void rx_cpu_do_interrupt(CPUState *cpu); bool rx_cpu_exec_interrupt(CPUState *cpu, int int_req); +void rx_cpu_do_semihosting(CPURXState *env); #endif /* !CONFIG_USER_ONLY */ void rx_cpu_dump_state(CPUState *cpu, FILE *f, int flags); int rx_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); diff --git a/target/rx/helper.c b/target/rx/helper.c index d12e551cc2..00f72b2090 100644 --- a/target/rx/helper.c +++ b/target/rx/helper.c @@ -53,6 +53,11 @@ void rx_cpu_do_interrupt(CPUState *cs) =20 env->in_sleep =3D 0; =20 + if (vec =3D=3D EXCP_SEMIHOST) { + rx_cpu_do_semihosting(env); + return; + } + if (env->psw_u) { env->usp =3D env->regs[0]; } else { diff --git a/target/rx/rx-semi.c b/target/rx/rx-semi.c new file mode 100644 index 0000000000..f2406ad219 --- /dev/null +++ b/target/rx/rx-semi.c @@ -0,0 +1,165 @@ +/* + * gdbsim semihosting syscall interface. + * The semihosting protocol implemented here is described in + * + * libgloss sources: + * https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;a=3Dblob;f= =3Dlibgloss/syscall.h;hb=3DHEAD + * + * gdb sources: + * https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;a=3Dblob;f= =3Dsim/rx/syscalls.c;hb=3DHEAD + * + * Copyright (c) 2022 Linaro, Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "exec/gdbstub.h" +#include "semihosting/syscalls.h" +#include "qemu/log.h" + +/* + * These are the syscall numbers from libgloss/syscall.h, + * but note that not all of them are implemented. + */ +enum { + TARGET_SYS_exit =3D 1, + TARGET_SYS_open, + TARGET_SYS_close, + TARGET_SYS_read, + TARGET_SYS_write, + TARGET_SYS_lseek, + TARGET_SYS_unlink, + TARGET_SYS_getpid, + TARGET_SYS_kill, + TARGET_SYS_fstat, + TARGET_SYS_sbrk, + TARGET_SYS_argvlen, + TARGET_SYS_argv, + TARGET_SYS_chdir, + TARGET_SYS_stat, + TARGET_SYS_chmod, + TARGET_SYS_utime, + TARGET_SYS_time, + TARGET_SYS_gettimeofday, + TARGET_SYS_times, + TARGET_SYS_link, + TARGET_SYS_argc, + TARGET_SYS_argnlen, + TARGET_SYS_argn, + TARGET_SYS_reconfig, +}; + +static void rx_semi_cb(CPUState *cs, uint64_t ret, int err) +{ + CPURXState *env =3D cs->env_ptr; + + /* There is no concept of errno in this interface. */ + env->regs[1] =3D ret; +} + +static bool rx_semi_arg(CPURXState *env, uint32_t *ret, int argn) +{ + if (argn < 4) { + *ret =3D env->regs[argn + 1]; + } else { + uint32_t stack_addr =3D env->regs[0] + 4 + (argn - 4) * 4; + if (cpu_memory_rw_debug(env_cpu(env), stack_addr, ret, 4, 0)) { + return false; + } + tswap32s(ret); + } + return true; +} + +#define GET_ARG(E, N) \ + ({ uint32_t v_; if (!rx_semi_arg((E), &v_, (N))) goto failed; v_; }) + +void rx_cpu_do_semihosting(CPURXState *env) +{ + CPUState *cs =3D env_cpu(env); + uint32_t nr =3D env->regs[5]; + uint32_t a0, a1, a2; + + switch (nr) { + case TARGET_SYS_exit: + a0 =3D GET_ARG(env, 0); + gdb_exit(a0); + exit(a0); + + case TARGET_SYS_open: + /* + * This function is declared int open(char *path, int flags, ...), + * which means that only the first argument is in registers. + */ + a0 =3D GET_ARG(env, 0); + a1 =3D GET_ARG(env, 4); + a2 =3D GET_ARG(env, 5); + semihost_sys_open(cs, rx_semi_cb, a0, 0, a1, a2); + break; + + case TARGET_SYS_close: + a0 =3D GET_ARG(env, 0); + semihost_sys_close(cs, rx_semi_cb, a0); + break; + + case TARGET_SYS_read: + a0 =3D GET_ARG(env, 0); + a1 =3D GET_ARG(env, 1); + a2 =3D GET_ARG(env, 2); + semihost_sys_read(cs, rx_semi_cb, a0, a1, a2); + break; + + case TARGET_SYS_write: + a0 =3D GET_ARG(env, 0); + a1 =3D GET_ARG(env, 1); + a2 =3D GET_ARG(env, 2); + semihost_sys_write(cs, rx_semi_cb, a0, a1, a2); + break; + + case TARGET_SYS_getpid: + rx_semi_cb(cs, 42, 0); + break; + + case TARGET_SYS_gettimeofday: + a0 =3D GET_ARG(env, 0); + semihost_sys_gettimeofday(cs, rx_semi_cb, a0, 0); + break; + + case TARGET_SYS_kill: + a0 =3D GET_ARG(env, 0); + if (a0 !=3D 42) { + goto failed; + } + /* Without defined signal numbers, pretend they're all SIGABRT. */ + gdb_exit(-1); + abort(); + + default: + qemu_log_mask(LOG_GUEST_ERROR, "rx-semihosting: unsupported " + "semihosting syscall %u\n", nr); + /* fall through */ + + failed: + rx_semi_cb(cs, -1, 0); + break; + } + + /* + * Skip the semihosting insn (int #255). + * Must be done after any cpu_loop_exit() within the syscalls. + */ + env->pc +=3D 3; +} diff --git a/target/rx/translate.c b/target/rx/translate.c index ddf31afb11..4a072661ca 100644 --- a/target/rx/translate.c +++ b/target/rx/translate.c @@ -27,6 +27,7 @@ #include "exec/helper-gen.h" #include "exec/translator.h" #include "exec/log.h" +#include "semihosting/semihost.h" =20 typedef struct DisasContext { DisasContextBase base; @@ -2276,7 +2277,11 @@ static bool trans_BRK(DisasContext *ctx, arg_BRK *a) static bool trans_INT(DisasContext *ctx, arg_INT *a) { tcg_debug_assert(a->imm < 0x100); - gen_raise_exception(ctx, EXCP_INTB_0 + a->imm, true); + if (semihosting_enabled() && a->imm =3D=3D 0xff) { + gen_raise_exception(ctx, EXCP_SEMIHOST, false); + } else { + gen_raise_exception(ctx, EXCP_INTB_0 + a->imm, true); + } return true; } =20 diff --git a/qemu-options.hx b/qemu-options.hx index 5f69b94b8e..4feb969b14 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4530,10 +4530,11 @@ ERST DEF("semihosting", 0, QEMU_OPTION_semihosting, "-semihosting semihosting mode\n", QEMU_ARCH_ARM | QEMU_ARCH_M68K | QEMU_ARCH_XTENSA | - QEMU_ARCH_MIPS | QEMU_ARCH_NIOS2 | QEMU_ARCH_RISCV) + QEMU_ARCH_MIPS | QEMU_ARCH_NIOS2 | QEMU_ARCH_RISCV | QEMU_ARCH_RX) SRST ``-semihosting`` - Enable semihosting mode (ARM, M68K, Xtensa, MIPS, Nios II, RISC-V only= ). + Enable semihosting mode + (Only ARM, M68K, Xtensa, MIPS, Nios II, RISC-V, RX). =20 Note that this allows guest direct access to the host filesystem, so should only be used with a trusted guest OS. @@ -4545,11 +4546,11 @@ DEF("semihosting-config", HAS_ARG, QEMU_OPTION_semi= hosting_config, "-semihosting-config [enable=3Don|off][,target=3Dnative|gdb|auto][,cha= rdev=3Did][,arg=3Dstr[,...]]\n" \ " semihosting configuration\n", QEMU_ARCH_ARM | QEMU_ARCH_M68K | QEMU_ARCH_XTENSA | -QEMU_ARCH_MIPS | QEMU_ARCH_NIOS2 | QEMU_ARCH_RISCV) +QEMU_ARCH_MIPS | QEMU_ARCH_NIOS2 | QEMU_ARCH_RISCV | QEMU_ARCH_RX) SRST ``-semihosting-config [enable=3Don|off][,target=3Dnative|gdb|auto][,charde= v=3Did][,arg=3Dstr[,...]]`` - Enable and configure semihosting (ARM, M68K, Xtensa, MIPS, Nios II, RI= SC-V - only). + Enable and configure semihosting + (Only ARM, M68K, Xtensa, MIPS, Nios II, RISC-V, RX). =20 Note that this allows guest direct access to the host filesystem, so should only be used with a trusted guest OS. @@ -4557,7 +4558,7 @@ SRST On Arm this implements the standard semihosting API, version 2.0. =20 On M68K this implements the "ColdFire GDB" interface used by - libgloss. + libgloss. Nios II and RX also use the libgloss interface. =20 Xtensa semihosting provides basic file IO calls, such as open/read/write/seek/select. Tensilica baremetal libc for ISS and diff --git a/target/rx/meson.build b/target/rx/meson.build index 8de0ad49b9..2eeac0c1b5 100644 --- a/target/rx/meson.build +++ b/target/rx/meson.build @@ -10,7 +10,9 @@ rx_ss.add(files( 'helper.c', 'cpu.c', 'gdbstub.c', - 'disas.c')) + 'disas.c', + 'rx-semi.c', +)) =20 target_arch +=3D {'rx': rx_ss} target_softmmu_arch +=3D {'rx': ss.source_set()} --=20 2.34.1 From nobody Mon May 13 15:04:02 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=1651611673; cv=none; d=zohomail.com; s=zohoarc; b=KjPYF3A49p18pkVf4PR6fab9ogVnQVbJnbPQTxzTLTb75UhN6M0F0+AVEh69VRd8fuQGcRPGnQwZwopDCFJkQ67qZSEBEow/S+KV6S9JrZ3eh64wEF1YCMUegOBwLfuAG1u2ZtP2XAdnUIjpztEKju4DLDBDgZeY7NS6UdlwdUM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651611673; 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=sy4e+GA4siKpkmbYnx/SmxHTQKZjthdwLglaK4m7nGc=; b=iRM1ya43M56/EQFP8vrAolsalEoW1BVg2icJWBBjJxtgriJRK50YVQuRimWP2nuKO2cE5ahpNUanbY55oj3ZVuS+OJfMeCi+If34WmWKZzXA+XvLVwoTVf4MvNrVFAsGoiaVcxBmVkgJP48Ro1P+En+x/dqqJ0OUudgIP4HzTLI= 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 1651611673194882.1996864238205; Tue, 3 May 2022 14:01:13 -0700 (PDT) Received: from localhost ([::1]:48908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nlzdv-000403-HA for importer@patchew.org; Tue, 03 May 2022 17:01:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40700) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nlya0-0000r8-6Y for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:04 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]:46724) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nlyZx-0006P4-Qk for qemu-devel@nongnu.org; Tue, 03 May 2022 15:53:03 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 6so3178141pgb.13 for ; Tue, 03 May 2022 12:53:01 -0700 (PDT) Received: from stoup.. ([71.212.142.129]) by smtp.gmail.com with ESMTPSA id fz16-20020a17090b025000b001dbe11be891sm1692286pjb.44.2022.05.03.12.52.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 May 2022 12:53:00 -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=sy4e+GA4siKpkmbYnx/SmxHTQKZjthdwLglaK4m7nGc=; b=bnm700Ov3cN4Mn7/s9nRHWlAqpin4qDrn39pZMYTJwYiXEiEmDfCCSGmdgyYpMCPVt N6NwNMy8auxJKYW8aIW9tzkiTwQ3CmqJuO3RJSIB0CVwdtfITF+8nGvg2oQO1LXnbajF wGN5mwCCPZkhIB7p3tvSZOk86RB1JTqsG7X/fXjfwJpSpDJlnvqiq6MZmBhIiqTZ9jrz CNbivUplEmuGMdmFe7GAfe9kv9eJyI+WaKIo6sDZtdwiH6Kp0vJQpKLskNwaQ4l35dWH xJzCD5LEyM2VmTEY1iidt7wCeCZ3+eY6bL5nfqi/TLt2gDnTqHllJspTMRx6xzYAJESC wG4w== 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=sy4e+GA4siKpkmbYnx/SmxHTQKZjthdwLglaK4m7nGc=; b=kKFOk8GRj9mV2QNIhImiambfvVY0DOHjNa65XtkucXPE92tC031NQ2X/bxmKHGVrQB M/7rqeZI/6I3PdOOaWR6l1EfKgYmTgBKlGkyIt0OaZeP7TkRo5BknugpK4BBgfncDv+j YhL9bHPDphV/Dz0Fnb3BRkGEDZslirRSVKZxaBbo0u3p/zMvB2jXkydnUMovD9q0meGR THu0KZuvbpYgGYj0/t3W4yt25iIgEQh8pwBu/CdZWyyqewqSLB7uJMVcJCRHNF3GnsWj dkI/iDtf5gUlTvyTZoCeMsW8bd9pkZYzwlgh2LR7QafR3L2689CLLjcn9jISZXd2kLn2 IVCA== X-Gm-Message-State: AOAM532/pFTuJS+Tkv26nB6iiwaoGiyQ6ptFIA+YvZkvJSxKqnu4KLlO 08iCLfaICJMJE3Q6LIZE/uWrY6hGpJRWkQ== X-Google-Smtp-Source: ABdhPJzC4FK76TNxZ9z7JF7r7QKX+0vrBh5KnbmgThSMSqMpbJAbSp0lBP3lIfIgWwaFp4VnmKvUuA== X-Received: by 2002:a63:d50c:0:b0:39d:61df:ad7b with SMTP id c12-20020a63d50c000000b0039d61dfad7bmr15255632pgg.47.1651607580518; Tue, 03 May 2022 12:53:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 74/74] tests/tcg/rx: Enable semihosting multiarch tests Date: Tue, 3 May 2022 12:48:43 -0700 Message-Id: <20220503194843.1379101-75-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220503194843.1379101-1-richard.henderson@linaro.org> References: <20220503194843.1379101-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::52a; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52a.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: 1651611674604100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tests/tcg/rx/outc.c | 15 +++++++++++++++ tests/tcg/rx/Makefile.softmmu-target | 24 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/tcg/rx/outc.c create mode 100644 tests/tcg/rx/Makefile.softmmu-target diff --git a/tests/tcg/rx/outc.c b/tests/tcg/rx/outc.c new file mode 100644 index 0000000000..3f8720d7ca --- /dev/null +++ b/tests/tcg/rx/outc.c @@ -0,0 +1,15 @@ +/* + * minilib.h compatibility code + * + * Copyright Linaro Ltd 2022 + * + * Rely on newlib/libgloss for functionality. + */ + +#include "minilib.h" +#include + +void __sys_outc(char c) +{ + write(1, &c, 1); +} diff --git a/tests/tcg/rx/Makefile.softmmu-target b/tests/tcg/rx/Makefile.s= oftmmu-target new file mode 100644 index 0000000000..aaa1cebb92 --- /dev/null +++ b/tests/tcg/rx/Makefile.softmmu-target @@ -0,0 +1,24 @@ +# +# RX system tests +# + +RX_SYSTEM_SRC =3D $(SRC_PATH)/tests/tcg/rx +VPATH +=3D $(RX_SYSTEM_SRC) + +TESTS +=3D $(MULTIARCH_TESTS) + +CFLAGS +=3D -Og -g $(MINILIB_INC) +LDFLAGS +=3D -msim + +MINILIB_OBJS +=3D outc.o +.PRECIOUS: $(MINILIB_OBJS) + +%.o: %.c + $(call quiet-command, $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@, CC, $@) + +%: %.o $(LINK_SCRIPT) $(MINILIB_OBJS) + $(call quiet-command, $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)= $(MINILIB_OBJS), LD, $@) + +QEMU_OPTS =3D -M gdbsim-r5f562n7 -m 128 -semihosting-config enable=3Don,ta= rget=3Dnative,chardev=3Doutput -kernel + +memory: CFLAGS+=3D-DCHECK_UNALIGNED=3D0 --=20 2.34.1