From nobody Fri Nov 14 18:24:39 2025 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1760734316; cv=none; d=zohomail.com; s=zohoarc; b=UD3erIk0f5A8vJILNoTFo0067UqSIT+HukWAQQiYqJXf8xT34f7jUiIJU2o6AlfYjLcbuSAXhaxaB57GhXRpgitvpia/wIQYiwM70xOeMoavsqeZb7kJNilIiiE2+j/jwjj+eqOeW6FY0DK4+RJVUO1/8se6zBAl7UkDKxdtnWc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760734316; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=smXCNPBW8bPVGiz3a6PVN2NC+kLsJ+YjeN6Dh7eUKsw=; b=AlKRWHZsqQnKFzLR11PlK65SiXS1aFz+ZGVa1VoGpkXOjxRQZPO/N2FXQXFfGVpvGAkCkZkxCw8z7Vuy6l9+UK9Ez85EDauFHeQwTMcpoTBw/3sMdRO4hnSWWfJBgVaUExfUKkXQPOlPzXXqA2zRL3oh/GTVICt9X0V1l7im3oA= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760734316676606.6842868894907; Fri, 17 Oct 2025 13:51:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v9rPh-0004Q6-Ah; Fri, 17 Oct 2025 16:51:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v9rPf-0004Ps-Oh for qemu-devel@nongnu.org; Fri, 17 Oct 2025 16:50:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v9rPc-000315-FK for qemu-devel@nongnu.org; Fri, 17 Oct 2025 16:50:58 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59HJGAZm011354 for ; Fri, 17 Oct 2025 20:50:52 GMT Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 49rtrtjnsd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 17 Oct 2025 20:50:52 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-77f610f7325so2104086b3a.1 for ; Fri, 17 Oct 2025 13:50:52 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7a2300f251fsm495080b3a.39.2025.10.17.13.50.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Oct 2025 13:50:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=smXCNPBW8bPVGiz3a6PVN2NC+kLsJ+YjeN6Dh7eUKsw=; b=C0 AwrLtjVZoZku5UOTIEwCnVNrIV4c3O+M1fISFMeF9w5nRlJRibZcFGrSrWpOprbC QTD4Q8itn7F0E0sZdk3M0E71JTZRhl4JzXgO4EcYSjdbIwPJkaCxfk7RFNx1UwEk 6lvU6FMdyzdPs3iBqIRm7sUzJamm+caOhtBgGvtRpXsSCyysWZRZSPc7Xp1jZNkd GVMTWTKOmh0MjnmnhBzEJ5JqxxXGEOll2kxOyxhpE18G2JORggKeUrAjGvG9g6qx 7JkQIyn1U6R08O63a6Zk6JgC791j29est21+6UlrUZhWvzy8Nj+aF0XJiJSKN0oQ 53bRohOGMYdeaXdb8QZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760734251; x=1761339051; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=smXCNPBW8bPVGiz3a6PVN2NC+kLsJ+YjeN6Dh7eUKsw=; b=PW/tUaK+frQkWaCX6CiO5O0XlfxOPNL+FcajyuBmYlp97Y+HAACES315c1vXKMCsni J32KHTr6UuFvhLN7YPanz2Yl7YauCGgM90gIO+rzLtL8RRCq/cdTciGYe/E4fa8q/32t BOurZzqpWcEYCRv8l034oeMaPvZN7WMxM6QhAdAVJeg/Hbj/oax+9yhm046GjS/sqKid IWZ4mQsnwVfvMHOgn7noM5ZMgvOXYq3qBXy7IKxJRHUE9v1VHKSu2HlaF6Z836Fyo8IJ w3oUL99kEz6SNra4gpqXpQ8bhAisVQtMOyEallTFuNB2nIRwSJDGV14wQ2bfgx7bE7kT 8kjw== X-Gm-Message-State: AOJu0Yz0HQm8Jt/Oqt0M25xkRGNwrbTkPIo/lqB47vK9sEp6m6IGjwaj 5tfViAnEmlnO0wm7gnoI9nX7ixImLouJ62+Dj9224vZDZVVj+71elnhN0DjJyUIY1V893t/42wt iQb7uOjVKxll19Z3d6cPV5K9wHGonSbYbVVAVw0loWjzuja6ClwnsapT8Kv0aDS0nKA== X-Gm-Gg: ASbGncsLzgKjgbH+dcrp1w/MEqyB/nyShOHhGHnRtXg1nevt2YnDKJfrFse1dTtvruT f1MA90tcpLgLrn9vynPngJ95JBBdVdwVv+ywKQnkmsBFc+H0raSiliEhfwdlMlfhMOOOwjy58O7 C8tmkhAOXogFqO4S2KOxpCpKmff4/K1+z8ByMF8/G3uZH5IQPoVSj7BuYBnGUPbFT0t9c+KsbJW 9XTmm4f9pTo8Q6Z5S/0PIXhTunlRSd6+31YLpWbjg7f6HANXf/GbhnrMHz+wnJvIU4bBqk9hzIA HeicCpGJYYrYQRd/1nXDljizjcZyGrDzhGBTckwj0Q+Z2aOWgjuV7dTfTYMt07t1B/KZYjXUEgx t+36rrK0qcUYsCrvY3EC9OOSZi7XkpxOOvQD9gveKWfhBL7Y= X-Received: by 2002:a05:6a00:2301:b0:78c:99a8:b748 with SMTP id d2e1a72fcca58-7a220144d3cmr5766037b3a.0.1760734250994; Fri, 17 Oct 2025 13:50:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFR9Ws+PlkdmkjT4FxjZDDvTeuTcFQS4YWuu6Z/004QB4zqIb3uz9aEekO4/lq11KZKuHZgvQ== X-Received: by 2002:a05:6a00:2301:b0:78c:99a8:b748 with SMTP id d2e1a72fcca58-7a220144d3cmr5766013b3a.0.1760734250508; Fri, 17 Oct 2025 13:50:50 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, richard.henderson@linaro.org, =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= , Taylor Simpson , Laurent Vivier Subject: [PULL 1/8] linux-user/hexagon: Fix sigcontext Date: Fri, 17 Oct 2025 13:50:21 -0700 Message-Id: <20251017205028.1105595-2-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251017205028.1105595-1-brian.cain@oss.qualcomm.com> References: <20251017205028.1105595-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: bF5cKZywOtNrTLpW9N87xCCOxC9Empzj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDEzMDAyMiBTYWx0ZWRfX1xy7X7+EEUT/ cqvf+c6jTNYZKJbSx506g/LgoixSUuVlUdG6zbOfpK5lEoMEKUzsiWa8NpbcWYYZizCpApqTRyz kBAo1B/uqiXIsNzvcUoZ+hfkOX6fz3NfLlpLnUJD1LUQUS/qfVqCzw8vJdKhHzI/cJlYOtx8aMe OEqecTZwHsCiEUH07ZGCyjPFtOPN1WCAB47zSIlcBvv6pfPlwyRcnEqAJ0O74Ng+c9pXeTLPR7T xSHY97ZeNUCYjmFd+CzjyMzg+KV693KoVq88YEQ/cRjMA9p2XTX2knpzpZDu+J53LHzvCXXjZvt jAF0jibteFyoHFijrk8NR8qS24kPYQ2ONmvO2zFIzYu70fKDH6d0WGhZZkJmYOsaAaG2mCx7E/H nGWK8f+J+zSHnEDe1aErecKPVHWi3A== X-Authority-Analysis: v=2.4 cv=SfD6t/Ru c=1 sm=1 tr=0 ts=68f2ac2c cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=x6icFKpwvdMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Z3Pf_jetAAAA:8 a=pGLkceISAAAA:8 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=xdaGQENHFgu-g-JqPgkA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 a=yHs3G5endCJexrGSZ2Xt:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: bF5cKZywOtNrTLpW9N87xCCOxC9Empzj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-10-17_07,2025-10-13_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 adultscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 priorityscore=1501 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510020000 definitions=main-2510130022 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=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1760734317993154100 Content-Type: text/plain; charset="utf-8" In order to correspond with the kernel, we've now (1) moved the preds[] to the right offset and combined the representation as a single ulong "p3_0", (2), added the cs{0,1} registers, (3) added a pad for 48 words, (4) added the user regs structure to an 8-byte aligned target_sigcontext structure. Co-authored-by: Alex R=C3=B8nne Petersen Reviewed-by: Taylor Simpson Reviewed-by: Richard Henderson Signed-off-by: Brian Cain --- linux-user/hexagon/signal.c | 209 ++++++++++++++++++++---------------- 1 file changed, 117 insertions(+), 92 deletions(-) diff --git a/linux-user/hexagon/signal.c b/linux-user/hexagon/signal.c index 492b51f155..2847952216 100644 --- a/linux-user/hexagon/signal.c +++ b/linux-user/hexagon/signal.c @@ -23,7 +23,7 @@ #include "signal-common.h" #include "linux-user/trace.h" =20 -struct target_sigcontext { +struct target_user_regs_struct { target_ulong r0, r1, r2, r3; target_ulong r4, r5, r6, r7; target_ulong r8, r9, r10, r11; @@ -39,14 +39,23 @@ struct target_sigcontext { target_ulong m0; target_ulong m1; target_ulong usr; + target_ulong p3_0; target_ulong gp; target_ulong ugp; target_ulong pc; target_ulong cause; target_ulong badva; - target_ulong pred[NUM_PREGS]; + target_ulong cs0; + target_ulong cs1; + target_ulong pad1; /* pad to 48 words */ }; =20 +QEMU_BUILD_BUG_ON(sizeof(struct target_user_regs_struct) !=3D 48 * 4); + +struct target_sigcontext { + struct target_user_regs_struct sc_regs; +} QEMU_ALIGNED(8); + struct target_ucontext { unsigned long uc_flags; target_ulong uc_link; /* target pointer */ @@ -76,53 +85,63 @@ static abi_ulong get_sigframe(struct target_sigaction *= ka, =20 static void setup_sigcontext(struct target_sigcontext *sc, CPUHexagonState= *env) { - __put_user(env->gpr[HEX_REG_R00], &sc->r0); - __put_user(env->gpr[HEX_REG_R01], &sc->r1); - __put_user(env->gpr[HEX_REG_R02], &sc->r2); - __put_user(env->gpr[HEX_REG_R03], &sc->r3); - __put_user(env->gpr[HEX_REG_R04], &sc->r4); - __put_user(env->gpr[HEX_REG_R05], &sc->r5); - __put_user(env->gpr[HEX_REG_R06], &sc->r6); - __put_user(env->gpr[HEX_REG_R07], &sc->r7); - __put_user(env->gpr[HEX_REG_R08], &sc->r8); - __put_user(env->gpr[HEX_REG_R09], &sc->r9); - __put_user(env->gpr[HEX_REG_R10], &sc->r10); - __put_user(env->gpr[HEX_REG_R11], &sc->r11); - __put_user(env->gpr[HEX_REG_R12], &sc->r12); - __put_user(env->gpr[HEX_REG_R13], &sc->r13); - __put_user(env->gpr[HEX_REG_R14], &sc->r14); - __put_user(env->gpr[HEX_REG_R15], &sc->r15); - __put_user(env->gpr[HEX_REG_R16], &sc->r16); - __put_user(env->gpr[HEX_REG_R17], &sc->r17); - __put_user(env->gpr[HEX_REG_R18], &sc->r18); - __put_user(env->gpr[HEX_REG_R19], &sc->r19); - __put_user(env->gpr[HEX_REG_R20], &sc->r20); - __put_user(env->gpr[HEX_REG_R21], &sc->r21); - __put_user(env->gpr[HEX_REG_R22], &sc->r22); - __put_user(env->gpr[HEX_REG_R23], &sc->r23); - __put_user(env->gpr[HEX_REG_R24], &sc->r24); - __put_user(env->gpr[HEX_REG_R25], &sc->r25); - __put_user(env->gpr[HEX_REG_R26], &sc->r26); - __put_user(env->gpr[HEX_REG_R27], &sc->r27); - __put_user(env->gpr[HEX_REG_R28], &sc->r28); - __put_user(env->gpr[HEX_REG_R29], &sc->r29); - __put_user(env->gpr[HEX_REG_R30], &sc->r30); - __put_user(env->gpr[HEX_REG_R31], &sc->r31); - __put_user(env->gpr[HEX_REG_SA0], &sc->sa0); - __put_user(env->gpr[HEX_REG_LC0], &sc->lc0); - __put_user(env->gpr[HEX_REG_SA1], &sc->sa1); - __put_user(env->gpr[HEX_REG_LC1], &sc->lc1); - __put_user(env->gpr[HEX_REG_M0], &sc->m0); - __put_user(env->gpr[HEX_REG_M1], &sc->m1); - __put_user(env->gpr[HEX_REG_USR], &sc->usr); - __put_user(env->gpr[HEX_REG_GP], &sc->gp); - __put_user(env->gpr[HEX_REG_UGP], &sc->ugp); - __put_user(env->gpr[HEX_REG_PC], &sc->pc); + target_ulong preds =3D 0; =20 - int i; - for (i =3D 0; i < NUM_PREGS; i++) { - __put_user(env->pred[i], &(sc->pred[i])); + __put_user(env->gpr[HEX_REG_R00], &sc->sc_regs.r0); + __put_user(env->gpr[HEX_REG_R01], &sc->sc_regs.r1); + __put_user(env->gpr[HEX_REG_R02], &sc->sc_regs.r2); + __put_user(env->gpr[HEX_REG_R03], &sc->sc_regs.r3); + __put_user(env->gpr[HEX_REG_R04], &sc->sc_regs.r4); + __put_user(env->gpr[HEX_REG_R05], &sc->sc_regs.r5); + __put_user(env->gpr[HEX_REG_R06], &sc->sc_regs.r6); + __put_user(env->gpr[HEX_REG_R07], &sc->sc_regs.r7); + __put_user(env->gpr[HEX_REG_R08], &sc->sc_regs.r8); + __put_user(env->gpr[HEX_REG_R09], &sc->sc_regs.r9); + __put_user(env->gpr[HEX_REG_R10], &sc->sc_regs.r10); + __put_user(env->gpr[HEX_REG_R11], &sc->sc_regs.r11); + __put_user(env->gpr[HEX_REG_R12], &sc->sc_regs.r12); + __put_user(env->gpr[HEX_REG_R13], &sc->sc_regs.r13); + __put_user(env->gpr[HEX_REG_R14], &sc->sc_regs.r14); + __put_user(env->gpr[HEX_REG_R15], &sc->sc_regs.r15); + __put_user(env->gpr[HEX_REG_R16], &sc->sc_regs.r16); + __put_user(env->gpr[HEX_REG_R17], &sc->sc_regs.r17); + __put_user(env->gpr[HEX_REG_R18], &sc->sc_regs.r18); + __put_user(env->gpr[HEX_REG_R19], &sc->sc_regs.r19); + __put_user(env->gpr[HEX_REG_R20], &sc->sc_regs.r20); + __put_user(env->gpr[HEX_REG_R21], &sc->sc_regs.r21); + __put_user(env->gpr[HEX_REG_R22], &sc->sc_regs.r22); + __put_user(env->gpr[HEX_REG_R23], &sc->sc_regs.r23); + __put_user(env->gpr[HEX_REG_R24], &sc->sc_regs.r24); + __put_user(env->gpr[HEX_REG_R25], &sc->sc_regs.r25); + __put_user(env->gpr[HEX_REG_R26], &sc->sc_regs.r26); + __put_user(env->gpr[HEX_REG_R27], &sc->sc_regs.r27); + __put_user(env->gpr[HEX_REG_R28], &sc->sc_regs.r28); + __put_user(env->gpr[HEX_REG_R29], &sc->sc_regs.r29); + __put_user(env->gpr[HEX_REG_R30], &sc->sc_regs.r30); + __put_user(env->gpr[HEX_REG_R31], &sc->sc_regs.r31); + __put_user(env->gpr[HEX_REG_SA0], &sc->sc_regs.sa0); + __put_user(env->gpr[HEX_REG_LC0], &sc->sc_regs.lc0); + __put_user(env->gpr[HEX_REG_SA1], &sc->sc_regs.sa1); + __put_user(env->gpr[HEX_REG_LC1], &sc->sc_regs.lc1); + __put_user(env->gpr[HEX_REG_M0], &sc->sc_regs.m0); + __put_user(env->gpr[HEX_REG_M1], &sc->sc_regs.m1); + __put_user(env->gpr[HEX_REG_USR], &sc->sc_regs.usr); + __put_user(env->gpr[HEX_REG_GP], &sc->sc_regs.gp); + __put_user(env->gpr[HEX_REG_UGP], &sc->sc_regs.ugp); + __put_user(env->gpr[HEX_REG_PC], &sc->sc_regs.pc); + + /* Consolidate predicates into p3_0 */ + for (int i =3D 0; i < NUM_PREGS; i++) { + preds |=3D (env->pred[i] & 0xff) << (i * 8); } + __put_user(preds, &sc->sc_regs.p3_0); + + /* Set cause and badva to 0 - these are set by kernel on exceptions */ + __put_user(0, &sc->sc_regs.cause); + __put_user(0, &sc->sc_regs.badva); + + __put_user(env->gpr[HEX_REG_CS0], &sc->sc_regs.cs0); + __put_user(env->gpr[HEX_REG_CS1], &sc->sc_regs.cs1); } =20 static void setup_ucontext(struct target_ucontext *uc, @@ -192,53 +211,59 @@ badframe: static void restore_sigcontext(CPUHexagonState *env, struct target_sigcontext *sc) { - __get_user(env->gpr[HEX_REG_R00], &sc->r0); - __get_user(env->gpr[HEX_REG_R01], &sc->r1); - __get_user(env->gpr[HEX_REG_R02], &sc->r2); - __get_user(env->gpr[HEX_REG_R03], &sc->r3); - __get_user(env->gpr[HEX_REG_R04], &sc->r4); - __get_user(env->gpr[HEX_REG_R05], &sc->r5); - __get_user(env->gpr[HEX_REG_R06], &sc->r6); - __get_user(env->gpr[HEX_REG_R07], &sc->r7); - __get_user(env->gpr[HEX_REG_R08], &sc->r8); - __get_user(env->gpr[HEX_REG_R09], &sc->r9); - __get_user(env->gpr[HEX_REG_R10], &sc->r10); - __get_user(env->gpr[HEX_REG_R11], &sc->r11); - __get_user(env->gpr[HEX_REG_R12], &sc->r12); - __get_user(env->gpr[HEX_REG_R13], &sc->r13); - __get_user(env->gpr[HEX_REG_R14], &sc->r14); - __get_user(env->gpr[HEX_REG_R15], &sc->r15); - __get_user(env->gpr[HEX_REG_R16], &sc->r16); - __get_user(env->gpr[HEX_REG_R17], &sc->r17); - __get_user(env->gpr[HEX_REG_R18], &sc->r18); - __get_user(env->gpr[HEX_REG_R19], &sc->r19); - __get_user(env->gpr[HEX_REG_R20], &sc->r20); - __get_user(env->gpr[HEX_REG_R21], &sc->r21); - __get_user(env->gpr[HEX_REG_R22], &sc->r22); - __get_user(env->gpr[HEX_REG_R23], &sc->r23); - __get_user(env->gpr[HEX_REG_R24], &sc->r24); - __get_user(env->gpr[HEX_REG_R25], &sc->r25); - __get_user(env->gpr[HEX_REG_R26], &sc->r26); - __get_user(env->gpr[HEX_REG_R27], &sc->r27); - __get_user(env->gpr[HEX_REG_R28], &sc->r28); - __get_user(env->gpr[HEX_REG_R29], &sc->r29); - __get_user(env->gpr[HEX_REG_R30], &sc->r30); - __get_user(env->gpr[HEX_REG_R31], &sc->r31); - __get_user(env->gpr[HEX_REG_SA0], &sc->sa0); - __get_user(env->gpr[HEX_REG_LC0], &sc->lc0); - __get_user(env->gpr[HEX_REG_SA1], &sc->sa1); - __get_user(env->gpr[HEX_REG_LC1], &sc->lc1); - __get_user(env->gpr[HEX_REG_M0], &sc->m0); - __get_user(env->gpr[HEX_REG_M1], &sc->m1); - __get_user(env->gpr[HEX_REG_USR], &sc->usr); - __get_user(env->gpr[HEX_REG_GP], &sc->gp); - __get_user(env->gpr[HEX_REG_UGP], &sc->ugp); - __get_user(env->gpr[HEX_REG_PC], &sc->pc); + target_ulong preds; =20 - int i; - for (i =3D 0; i < NUM_PREGS; i++) { - __get_user(env->pred[i], &(sc->pred[i])); + __get_user(env->gpr[HEX_REG_R00], &sc->sc_regs.r0); + __get_user(env->gpr[HEX_REG_R01], &sc->sc_regs.r1); + __get_user(env->gpr[HEX_REG_R02], &sc->sc_regs.r2); + __get_user(env->gpr[HEX_REG_R03], &sc->sc_regs.r3); + __get_user(env->gpr[HEX_REG_R04], &sc->sc_regs.r4); + __get_user(env->gpr[HEX_REG_R05], &sc->sc_regs.r5); + __get_user(env->gpr[HEX_REG_R06], &sc->sc_regs.r6); + __get_user(env->gpr[HEX_REG_R07], &sc->sc_regs.r7); + __get_user(env->gpr[HEX_REG_R08], &sc->sc_regs.r8); + __get_user(env->gpr[HEX_REG_R09], &sc->sc_regs.r9); + __get_user(env->gpr[HEX_REG_R10], &sc->sc_regs.r10); + __get_user(env->gpr[HEX_REG_R11], &sc->sc_regs.r11); + __get_user(env->gpr[HEX_REG_R12], &sc->sc_regs.r12); + __get_user(env->gpr[HEX_REG_R13], &sc->sc_regs.r13); + __get_user(env->gpr[HEX_REG_R14], &sc->sc_regs.r14); + __get_user(env->gpr[HEX_REG_R15], &sc->sc_regs.r15); + __get_user(env->gpr[HEX_REG_R16], &sc->sc_regs.r16); + __get_user(env->gpr[HEX_REG_R17], &sc->sc_regs.r17); + __get_user(env->gpr[HEX_REG_R18], &sc->sc_regs.r18); + __get_user(env->gpr[HEX_REG_R19], &sc->sc_regs.r19); + __get_user(env->gpr[HEX_REG_R20], &sc->sc_regs.r20); + __get_user(env->gpr[HEX_REG_R21], &sc->sc_regs.r21); + __get_user(env->gpr[HEX_REG_R22], &sc->sc_regs.r22); + __get_user(env->gpr[HEX_REG_R23], &sc->sc_regs.r23); + __get_user(env->gpr[HEX_REG_R24], &sc->sc_regs.r24); + __get_user(env->gpr[HEX_REG_R25], &sc->sc_regs.r25); + __get_user(env->gpr[HEX_REG_R26], &sc->sc_regs.r26); + __get_user(env->gpr[HEX_REG_R27], &sc->sc_regs.r27); + __get_user(env->gpr[HEX_REG_R28], &sc->sc_regs.r28); + __get_user(env->gpr[HEX_REG_R29], &sc->sc_regs.r29); + __get_user(env->gpr[HEX_REG_R30], &sc->sc_regs.r30); + __get_user(env->gpr[HEX_REG_R31], &sc->sc_regs.r31); + __get_user(env->gpr[HEX_REG_SA0], &sc->sc_regs.sa0); + __get_user(env->gpr[HEX_REG_LC0], &sc->sc_regs.lc0); + __get_user(env->gpr[HEX_REG_SA1], &sc->sc_regs.sa1); + __get_user(env->gpr[HEX_REG_LC1], &sc->sc_regs.lc1); + __get_user(env->gpr[HEX_REG_M0], &sc->sc_regs.m0); + __get_user(env->gpr[HEX_REG_M1], &sc->sc_regs.m1); + __get_user(env->gpr[HEX_REG_USR], &sc->sc_regs.usr); + __get_user(env->gpr[HEX_REG_GP], &sc->sc_regs.gp); + __get_user(env->gpr[HEX_REG_UGP], &sc->sc_regs.ugp); + __get_user(env->gpr[HEX_REG_PC], &sc->sc_regs.pc); + + /* Restore predicates from p3_0 */ + __get_user(preds, &sc->sc_regs.p3_0); + for (int i =3D 0; i < NUM_PREGS; i++) { + env->pred[i] =3D (preds >> (i * 8)) & 0xff; } + + __get_user(env->gpr[HEX_REG_CS0], &sc->sc_regs.cs0); + __get_user(env->gpr[HEX_REG_CS1], &sc->sc_regs.cs1); } =20 static void restore_ucontext(CPUHexagonState *env, struct target_ucontext = *uc) --=20 2.34.1