From nobody Fri Nov 14 19:43:46 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=1760040039; cv=none; d=zohomail.com; s=zohoarc; b=UZZo7gEziXt1R8KBX0VnJwChD5AYX/ZzvWrhDkdCO8MIWMmlSmeoXD7OxByprejPH7AYc8sRDPIrQImNflviruClHOxsdBbwGePnRVzii4LztfZ9FePjuh81asVQPQlOeQqWJHHuKoHLo8J2B3uD7BUyKgA5A0EofhmgWNeebaA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760040039; 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=PP+4ie1zTiiEi0s6QfSjlJ6hIagLZtd/s50VkpI/dVw=; b=Lwlnp1TIjRyXdzuqU3uzaRmQKmXwcfnX+YlNQIXeXm48a1B1kyBJwYtn7UX9BJATIbDcdjWOP8BFgJTAWs7Zw2OJHBtgG8ryg1w9WhEJ7rQGK2AQgvpW6ZsrAwxgZRFHHlZcS9pCEtcE9GUaDA6OYAV8XOU380fTjhlY3FLwqL4= 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 1760040039412999.3469046905927; Thu, 9 Oct 2025 13:00:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v6wny-0003j8-T3; Thu, 09 Oct 2025 16:00:03 -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 1v6wnw-0003iC-N2 for qemu-devel@nongnu.org; Thu, 09 Oct 2025 16:00:00 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v6wnt-0005BU-HD for qemu-devel@nongnu.org; Thu, 09 Oct 2025 16:00:00 -0400 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 599EuG39030119 for ; Thu, 9 Oct 2025 19:59:54 GMT Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 49nv4kv600-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 09 Oct 2025 19:59:53 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-27356178876so14724065ad.1 for ; Thu, 09 Oct 2025 12:59:53 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29034f32d6fsm36678805ad.96.2025.10.09.12.59.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 12:59:51 -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=PP+4ie1zTiiEi0s6QfSjlJ6hIagLZtd/s50VkpI/dVw=; b=EC vUtQK+Gr99ZA5EFCWtI2e+Il8dhKpFtclDxM7lKR1oobRYc6Psa1US4UHmpl8g0P 4sWqGWEHKJ/+yEAW4OZWXkN5Z/HzNdV7Upmh/ZvQAF73V8RHLYpB6k1jnsuCA+tt 6PpCl6odzVJi82V2WGBeqGxDsYIqGH7E1j75eqod4faytHcAjYmk+j6u0pgNXeMl c7aB18T4kNaK453lqpfLwvhgisGpFzAaSkGuckUmpvM8Z71dYK91tsLVIDy+pGYh J49sATDRwGm9kFmqiNMZCUGK4uvLvtvZN5YlyL7R3nk4QP9AFPPZDqkvsfHmVoWs XIUn/B7P40HM3mA/gCeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760039993; x=1760644793; 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=PP+4ie1zTiiEi0s6QfSjlJ6hIagLZtd/s50VkpI/dVw=; b=R/VFAqXJDinosf7K4LSML7U/JNLQDzg8r8tAAnMqG1Hkv7a89zmFzD8q1CcyxGkCOv ymPmePdljOO2E8siaZ3Gk5HThh1VlbYSe5WQkxJx4MxtX3avAIXTVRKBwDq4pyaAGU5P FsLFm+6i0knhUBW2sXRd+X3GHBZw9sn9Sikk37ZfwmsVV5ONBFBJwCSfV83ANJPvJCnI Z2sJZ196JddiNM1HQB9LbD/mhDzBvAoLGrhcx8bnvaxAwRiNGOnTDqKPoa4fSNiTI7RN dlqZwESEdtXk8whgtVwnhIvfTwwdZwfCNmQIaG07ug4GFMifgPl+lhV2kPE06E4A9k6+ i+vw== X-Gm-Message-State: AOJu0YzZGlNvohzTvMLfbr3dv78evEhsZM1lf/UYtM1fn6+ie2FaVmH3 fPf4pAz1mWmgKPjQtwaieMVC1UYXhPAPUDNOFtB4aaAcfjF4FzXlZj3YdPF8uDaafPpkvz3CjCs zOxLJuBsIuFa8L8C5lVorE/cUtkUdVrRmLZILqCSHiJgQ15HqQx/Y9fAX8r3Lxhd6+Q== X-Gm-Gg: ASbGnctrAK9Acx8p58RQayMHHd5XDcDCT6yQjL49ADwGtIlNXz626/RgcNR4zGD2gc5 k/5pJzdKPyLVS8FORqM51XBz6CnPCdDlF60m/1yKDJs++j3CMMRmD+/n8pm7ttRHcBcFdLyswTG wEvdJrd57mj8PIl2i+x0OEYhTV5lJUf0Jdy/vDGhiom5yQudLKVvnGEiM053wNDlt7b0I+FER76 PXEbgDvdCReppfader/wf6vKGXlj3kpibg38pTHQv8YQarHiDQN9uhRTW9ustg8/ypBU6syPlPN E3HKzol8otN489ub5stHd2UVfstYFD5hbj0aYT8H1x5ziTbVpH4zhgY4RcZ0bTEr7Xqz7bHW3h1 E27bEeEd6IUWZG6I6qw== X-Received: by 2002:a17:903:11cf:b0:252:50ad:4e6f with SMTP id d9443c01a7336-2902741d0bdmr104937485ad.54.1760039992412; Thu, 09 Oct 2025 12:59:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGzZvGq3uoreaxEGv1ef7Qd5915n3bswMzQyrev8EnI8DtIKOBMe/WYOojFmMaelLXbeVWBdQ== X-Received: by 2002:a17:903:11cf:b0:252:50ad:4e6f with SMTP id d9443c01a7336-2902741d0bdmr104937105ad.54.1760039991863; Thu, 09 Oct 2025 12:59:51 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, richard.henderson@linaro.org, philmd@linaro.org, matheus.bernardino@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, marco.liebel@oss.qualcomm.com, ltaylorsimpson@gmail.com, alex.bennee@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com, =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= , Laurent Vivier Subject: [PATCH v2 1/4] linux-user/hexagon: Fix sigcontext Date: Thu, 9 Oct 2025 12:59:40 -0700 Message-Id: <20251009195943.438454-2-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251009195943.438454-1-brian.cain@oss.qualcomm.com> References: <20251009195943.438454-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDA4MDEyMSBTYWx0ZWRfX14b7g6HMt/cO KgIM5w1kohi9run61QcqsxG6ahGyh5s0jxCx/RtcVxuOMMX7y154IKVPKA3uwACuwluWggRGp/t UDjyXSpsszPipjGxEbHRzaoSCWLVwz7Wa/yqIMdHCRuoow2bYVfdegAV5UOu2J3kEuSW59cwzRe P2Kbo56CaYItqh0+lNmZ/qLIqwNgyhdP368CRq0wKr6B7z4Kq5lJgx2LSh6sMuteosAw0z+/suT 9wcqXELW1mHsdWrqCip05Wk66D/JLBkJEFPxPdf0RRdwd0+08GcfDIy/7DHgrtGBujHbBHIsWFb CjxFSTXQfXZlaY8VqsEV9QsJvchfG/EEBRV9/PgjxAfOohRbdXJUy+olFfddMKmJSlpscerN82e I07NaOwRIbPJhajrSOG1l+ag5n8ysw== X-Authority-Analysis: v=2.4 cv=CbcFJbrl c=1 sm=1 tr=0 ts=68e81439 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=x6icFKpwvdMA:10 a=Z3Pf_jetAAAA:8 a=EUspDBNiAAAA:8 a=xdaGQENHFgu-g-JqPgkA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 a=yHs3G5endCJexrGSZ2Xt:22 X-Proofpoint-GUID: L5Db4USm-aF5AZdt2rwiqh928roSvTMA X-Proofpoint-ORIG-GUID: L5Db4USm-aF5AZdt2rwiqh928roSvTMA X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-10-09_07,2025-10-06_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 malwarescore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510020000 definitions=main-2510080121 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.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-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: 1760040045243116600 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 Signed-off-by: Brian Cain Reviewed-by: Taylor Simpson --- 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