From nobody Wed May 15 19:12:37 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+113057+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113057+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=foxmail.com ARC-Seal: i=1; a=rsa-sha256; t=1704252363; cv=none; d=zohomail.com; s=zohoarc; b=I0Kz/wa3/6zb/poVFRVC02xPmW5JaYxacereUGzVAkxVv/BLdiXn71XzVsS7UJCam+5oP736/4AzmEOgbk5BQfzAfHPldSwPTZuaDPv27E9qVohtEj9VOM5ESqqel0ZYwGrvyS+x5gRzyQwKpH4ZH745h8VjUaag+hxbU2imGZQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704252363; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:Sender:Subject:Subject:To:To:Message-Id; bh=owfXdkALQ29WeyBjKKFsS0HGuJAX0PE9vhTKMQSC2vo=; b=Hp5acc6wgkDFLejd0wZsp3QTCR7v9W0F7F9uVW7ukEn3UppfiQhBlDd/zlVoNQV5ufyfN1rnKktu2AOx3H2xyJnwXjGEURqeWG5xwTyYx3QP3GfSfIEg05BcbR0GIaSfrQ28IFTWkSsvHohXUeiid/IjxMuVTGoPIvAVSTjUWmg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113057+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1704252363387608.8922750376763; Tue, 2 Jan 2024 19:26:03 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=DIdBERAwGLRPuzGjl9m9mkCgCpMquiLWFYqNMAkGYXA=; c=relaxed/simple; d=groups.io; h=Message-ID:From:To:Cc:Subject:Date:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1704252363; v=1; b=mDHGSqhqicRX08ZpDnOP8JrySlY/u/sbY4xli1IpeDy7tyb7jYStECoCKRiCkDIaHPYjlM8a 5uWiXmeXJJv9FRSU6k0tCs1N3rzEXaTNhhYiKnLgYRNJHEuaImk3BAvxNHYTzQAmq2WbBR8hNQj zbAVTF3NvekS5i7jdfuIz6PY= X-Received: by 127.0.0.2 with SMTP id BinTYY1788612xfxwLxkEo4W; Tue, 02 Jan 2024 19:26:03 -0800 X-Received: from out203-205-221-190.mail.qq.com (out203-205-221-190.mail.qq.com [203.205.221.190]) by mx.groups.io with SMTP id smtpd.web11.8296.1704252360631359680 for ; Tue, 02 Jan 2024 19:26:02 -0800 X-Received: from yc-vm.taila82bd.ts.net ([118.116.127.82]) by newxmesmtplogicsvrszc5-1.qq.com (NewEsmtp) with SMTP id 67612CA9; Wed, 03 Jan 2024 11:25:54 +0800 X-QQ-mid: xmsmtpt1704252354tu2mq05fk Message-ID: X-QQ-XMAILINFO: NMGzQWUSIfvTwT0IhcI2cr5ybUzVbeii6+Qb1aRTJ38dvzb6JXGaeM1xZ0GT4e qAPBEmy3jTOmORdnajjnvI1V3buIdJqBYCKPO7Fz4TexvY3CGIFILgqhgMQKvINdQ+cWr9UJLgdA d1gFJC8Cdm1vd2ipZ7cvrN8vGBZZu9z5S6gnLa9z6SuES1/AbHMskQYvaFipDToQXB46aIAfNwjG wVMDNn+UACpWt/4OErQR8N+cm/6bTAOGHWH6c9+cSNmV3hFjbzWrRek2g3Qyej1y8mnIRaSnOz99 h+WaJGRxbCKngiSo3UTMpWa6vS/mTIrI9uOa71oF3cyHyahvrWZzkRenAhVulgepX7eXr0A0qVnd kLuRjLs5z2kZuVwwtmSYSAScUu8uXHa/BP5YJ92DHqlBmsKQI3XCW/DDx1TJ0/XMt6Ws2YSQmWkK GJnp0DwIgs8/dvhG+DONcyJJ9KDsqv2peJrcKr9bBbmIgUDX9Udekvf6yz8K2rNIPcr6SVTk5bMA zscGVMrZ5Q5KQUCF2XS3gOxwz5dVW80a6T1i05Bf1Z6XOatxIvi4kSSCJ5y4iPvCGXlVmCBYRFog eXTZ0ds4HiWiFdpBbue1h5+qixQjqr+IWuIbjkUfGr8vynAI/w33XsBm9Q6vGbSN+w7pK8sH0Uvh M/InCINR6xj7ylCJaQ3jRZcH7obfM3txpuPkbQIKMaTjq7WFEqHER6XmaTJTfU7QcrHHNenqzIV4 UvN/Akso0Ur5udNV6fsCkWO2NJXlrBGGwKTjEzdE6/yIrFEYDQ81EeAi4PGdyMSIYWhOdMAgEzxU x5QivjVYl2LYRciPj8MxRyMqoT/2JjPUlsDpyr2ZPvcVPSPX+3huS4LQQIwo4NL4PIt2HWVjOH94 TdaNLLTgqk6NEEkRxwXnOq78LtaTwPFS7HXbhx13yvhvFUSz+pJ4F1jW4GUrXgDzG9AGVJbINn5N YzDeBoz6t4JF0PEZaAx4IaBMk54yAUTijBdzju+J0vTkejk2Xhr52BZysxkVFY3W2ffX7kE8k= X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= From: "yorange" To: devel@edk2.groups.io Cc: gaoliming@byosoft.com.cn, yorange Subject: [edk2-devel] [PATCH] MdePkg/BaseLib: Fix InternalSwitchStack bug for RISCV64. Date: Wed, 3 Jan 2024 11:25:40 +0800 X-OQ-MSGID: <200892891489754b78715d8e15331564e3916c5b.1704252263.git.yangcheng.work@foxmail.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,yangcheng.work@foxmail.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: wTGp99o7eSIwTBDuv3dwIO9Rx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1704252364759100001 Content-Type: text/plain; charset="utf-8" From: yorange REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D4611 Fixed the InternalSwitchStack error of RISCV64. LongJump is no longer used for stack switch. Refer to Arm and AArch64 and use InternalSwitchStackAsm instead. Signed-off-by: yorange --- MdePkg/Library/BaseLib/BaseLib.inf | 1 + .../BaseLib/RiscV64/InternalSwitchStack.c | 31 ++++++++++++--- .../BaseLib/RiscV64/RiscVSwitchStack.S | 38 +++++++++++++++++++ 3 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 MdePkg/Library/BaseLib/RiscV64/RiscVSwitchStack.S diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/Ba= seLib.inf index 5338938944..10382111ef 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -405,6 +405,7 @@ RiscV64/ReadTimer.S | GCC RiscV64/RiscVMmu.S | GCC RiscV64/SpeculationBarrier.S | GCC + RiscV64/RiscVSwitchStack.S | GCC =20 [Sources.LOONGARCH64] Math64.c diff --git a/MdePkg/Library/BaseLib/RiscV64/InternalSwitchStack.c b/MdePkg/= Library/BaseLib/RiscV64/InternalSwitchStack.c index b78424c163..c9d92920df 100644 --- a/MdePkg/Library/BaseLib/RiscV64/InternalSwitchStack.c +++ b/MdePkg/Library/BaseLib/RiscV64/InternalSwitchStack.c @@ -8,6 +8,30 @@ =20 #include "BaseLibInternals.h" =20 +/** + Transfers control to a function starting with a new stack. + + This internal worker function transfers control to the function + specified by EntryPoint using the new stack specified by NewStack, + and passes in the parameters specified by Context1 and Context2. + Context1 and Context2 are optional and may be NULL. + The function EntryPoint must never return. + + @param EntryPoint The pointer to the function to enter. + @param Context1 The first parameter to pass in. + @param Context2 The second Parameter to pass in + @param NewStack The new Location of the stack + +**/ +VOID +EFIAPI +InternalSwitchStackAsm ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1 OPTIONAL, + IN VOID *Context2 OPTIONAL, + IN VOID *NewStack + ); + /** Transfers control to a function starting with a new stack. =20 @@ -42,12 +66,7 @@ InternalSwitchStack ( IN VA_LIST Marker ) { - BASE_LIBRARY_JUMP_BUFFER JumpBuffer; + InternalSwitchStackAsm(EntryPoint, Context1, Context2, (void *)(UINTN)Ne= wStack - sizeof (VOID *)); =20 - JumpBuffer.RA =3D (UINTN)EntryPoint; - JumpBuffer.SP =3D (UINTN)NewStack - sizeof (VOID *); - JumpBuffer.S0 =3D (UINT64)(UINTN)Context1; - JumpBuffer.S1 =3D (UINT64)(UINTN)Context2; - LongJump (&JumpBuffer, (UINTN)-1); ASSERT (FALSE); } diff --git a/MdePkg/Library/BaseLib/RiscV64/RiscVSwitchStack.S b/MdePkg/Lib= rary/BaseLib/RiscV64/RiscVSwitchStack.S new file mode 100644 index 0000000000..7b316dd5e5 --- /dev/null +++ b/MdePkg/Library/BaseLib/RiscV64/RiscVSwitchStack.S @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------= ------ +// +// Switch Stack for RISC-V +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +//------------------------------------------------------------------------= ------ + +/** +// +// This allows the caller to switch the stack and goes to the new entry p= oint +// +// @param EntryPoint The pointer to the location to enter +// @param Context Parameter to pass in +// @param Context2 Parameter2 to pass in +// @param NewStack New Location of the stack +// +// @return Nothing. Goes to the Entry Point passing in the new paramet= ers +// +VOID +EFIAPI +InternalSwitchStackAsm ( + SWITCH_STACK_ENTRY_POINT EntryPoint, + VOID *Context, + VOID *Context2, + VOID *NewStack + ); +**/ + +.align 3 + .globl InternalSwitchStackAsm +InternalSwitchStackAsm: + mv ra, a0 + mv a0, a1 + mv a1, a2 + mv sp, a3 + + ret --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113057): https://edk2.groups.io/g/devel/message/113057 Mute This Topic: https://groups.io/mt/103494172/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-